Как использовать debconf? Показать результаты с помощью debconf-set-selections.

Вопрос или проблема

Мне хотелось бы узнать, как использовать результаты debconf-show с debconf-set-selections для предварительной настройки deb-пакетов через командную строку или внутри скрипта оболочки.

Например, если я использую

sudo debconf-get-selections | grep java7 > result; cat result

я получаю следующее:

oracle-java7-installer  shared/present-oracle-license-v1-1  note    
oracle-java7-installer  oracle-java7-installer/local    string  
oracle-java7-installer  shared/accepted-oracle-license-v1-1 boolean true
oracle-java7-installer  shared/error-oracle-license-v1-1    error   
oracle-java7-installer  oracle-java7-installer/not_exist    error

Как будет выглядеть правильная команда debconf-set-selections, чтобы настроить два диалога, которые появляются во время установки?

В общем, какова правильная синтаксическая структура debconf-set-selections? Я предполагаю, что существуют не только логические значения, такие как true или false, да и yes или no.

Я думаю, что есть много других примеров, как например, как выбрать менеджер рабочего стола по умолчанию, если lightdm и gdm установлены через bash-скрипт.

Существует ли общий проверенный подход для определения правильных значений для пакета debconf и написания корректного bash-скрипта, который устанавливает, например, пакет java webupt8 и предварительно выбирает значения, которые пользователь обычно должен вводить?

Вам нужно использовать предварительную настройку. Команда debconf-set-selections задает заранее ответы на вопросы, которые задает debconf перед установкой пакета.

Например:

sudo debconf-set-selections <<< "shared/accepted-oracle-license-v1-1 boolean true"

Затем установите пакет.

sudo apt-get install -y oracle-java7-installer

Вот как это сделать пошагово:

  1. apt update как всегда.
  2. apt install debconf-utils, чтобы получить доступ к debconf-get-selections
  3. При установленном пакете foo, debconf-get-selections | grep foo не покажет вам то, что нужно.
  4. apt install foo и пройдите процесс вручную.
  5. debconf-get-selections | grep foo, чтобы увидеть точные строки, которые вам нужны. Например:
    debconf-get-selections | grep postfix
    
    postfix postfix/mailbox_limit   string  0
    postfix postfix/chattr  boolean false
    postfix postfix/root_address    string  
    postfix postfix/bad_recipient_delimiter error   
    postfix postfix/protocols   select  
    postfix postfix/recipient_delim string  +
    postfix postfix/mailname    string  /etc/mailname
    postfix postfix/main_mailer_type    select  No configuration
    postfix postfix/mynetworks  string  127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    postfix postfix/rfc1035_violation   boolean false
    postfix postfix/not_configured  error   
    postfix postfix/relayhost   string  
    postfix postfix/main_cf_conversion_warning  boolean true
    postfix postfix/newaliases  boolean false
    postfix postfix/dynamicmaps_conversion_warning  boolean 
    postfix postfix/destinations    string  
    postfix postfix/compat_conversion_warning   boolean true
    postfix postfix/procmail    boolean 
    
  6. Скопируйте нужные строки и измените их. Это может потребовать некоторых проб и ошибок, чтобы выяснить, какие из них актуальны, а какие не используются в вашей конкретной ситуации. Например, мне понадобились эти две строки, чтобы полностью пропустить конфигурацию postfix:
    postfix postfix/mailname    string  /etc/mailname
    postfix postfix/main_mailer_type    select  No configuration
    

    Я собрал из проб и ошибок, что:

    • Неверные параметры игнорируются без ошибок. Это очень привередливо.
    • Табуляцию можно заменить пробелами.
    • Значение идет последним. Не заключайте его в кавычки. Я обернул ‘No configuration’ в одинарные кавычки, и это не сработало, пока я не убрал кавычки.
  7. Удалите пакет и его конфигурацию: apt purge foo.
  8. Теперь используйте debconf-set-selections и передайте строки, которые вы скопировали на шаге 6. Например:
    debconf-set-selections <<< "postfix postfix/mailname string $(hostname)"
    debconf-set-selections <<< "postfix postfix/main_mailer_type select No configuration"
    
  9. Используйте debconf-get-selections, чтобы проверить, что вы сделали.
  10. apt install -y foo. На этот раз вы не должны увидеть интерактивный запрос. Однако, если потребуется опция, которую вы не установили с помощью debconf-set-selections, или если ей не понравится опция, установленная с помощью debconf-set-selections, она все равно запросит её. Здесь и возникает процесс проб и ошибок. Повторяйте с 5 шага, пока не получите правильный результат.
  11. Напишите свой скрипт установки.

Debconf принимает только ограниченный набор возможных значений типов, например boolean, string, note, select и другие, и к этому у него очень строгие требования.

В вашем вопросе я предполагаю, что вы хотите автоматизировать значение лицензии Java в debconf, поэтому вы можете запустить что-то вроде этого:

echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | sudo debconf-set-selections

Если вам нужно добавить строковое значение, выполните что-то вроде этого:

echo "oracle-java7-installer oracle-java7-installer/local string java" | sudo debconf-set-selections

Если вам нужно значение выбора, вы можете выполнить:

echo "oracle-java7-installer oracle-java7-installer/legacy select true" | sudo debconf-set-selections

ПРИМЕЧАНИЕ: после выполнения этих команд убедитесь, что установлены правильные значения, с помощью чего-то вроде sudo debconf-show oracle-java7-installer, и затем, конечно, протестируйте это на реальной установке сервера.

Совет: Вместо > result;cat result вы можете использовать | tee result, это работает очень похоже, но не ждет завершения первой команды, чтобы показать вам содержимое.

Ответ или решение

Для того чтобы использовать вывод команды debconf-show с командой debconf-set-selections для предварительной настройки пакетов Debian, необходимо воспользоваться механизмом предварительного заполнения (pre-seeding). Эта техника позволяет заранее задать ответы на вопросы, которые обычно задаются в процессе установки пакета.

Пример использования

Рассмотрим сценарий, когда вы хотите установить пакет oracle-java7-installer. Следуйте этим шагам:

  1. Обновите списки пакетов:

    sudo apt update
  2. Установите debconf-utils, если он еще не установлен:

    sudo apt install debconf-utils
  3. Установите пакет вручную, чтобы пройти процесс настройки:

    sudo apt install oracle-java7-installer
  4. Получите список настроек со значениями, которые нужны:

    sudo debconf-get-selections | grep oracle-java7-installer

    Результат может выглядеть следующим образом:

    oracle-java7-installer  shared/present-oracle-license-v1-1  note    
    oracle-java7-installer  oracle-java7-installer/local    string  
    oracle-java7-installer  shared/accepted-oracle-license-v1-1 boolean true
  5. Скопируйте необходимые строки и формируйте их для debconf-set-selections. Например:

    echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | sudo debconf-set-selections
    echo "oracle-java7-installer oracle-java7-installer/local string" | sudo debconf-set-selections
  6. Установите пакет без интерактивного ввода:

    sudo apt install -y oracle-java7-installer

Общая структура команды debconf-set-selections

Команда debconf-set-selections принимает строки в следующем формате:

<package> <question> <type> <value>

Где:

  • <package> — имя пакета,
  • <question> — идентификатор параметра,
  • <type> — тип значения (например, boolean, string, select и т.д.),
  • <value> — значение.

Например:

  • Для установки boolean значения:
    echo "postfix postfix/main_mailer_type select No configuration" | sudo debconf-set-selections
  • Для строки:
    echo "postfix postfix/mailname string $(hostname)" | sudo debconf-set-selections

Выбор менеджера десктопа

Если у вас установлены несколько менеджеров десктопа, и вы хотите выбрать один из них, вы можете сделать это следующим образом:

echo "your-package your-package/selected-manager select lightdm" | sudo debconf-set-selections

Подход к получению корректных значений

  1. Первоначально установите нужный пакет вручную.
  2. Используйте debconf-get-selections для получения настроек.
  3. Попробуйте определять необходимые значения через echo и выполнять debconf-set-selections.
  4. Тестируйте установку пакет. Может потребоваться несколько попыток для достижения оптимального результата.

Заключение

Используя описанные методы, вы сможете автоматизировать установку пакетов с предварительно заданными значениями конфигурации, что ускорит рабочий процесс. Не забывайте проверять установленные значения с помощью debconf-show после настройки.

Оцените материал
Добавить комментарий

Капча загружается...