Приложение В. Debconf
Описание и установка
Если требуется установка в "тихом режиме" (например, инсталляция нескольких однотипных систем), можно использовать штатное средство debian-based дистрибутивов — https://wiki.debian.org/DebianInstaller/Preseed и заранее подготовить файл ответов.
Для работы с базой ответов debconf необходимо установить пакет debconf-utils.
sudo apt install debconf-utils
Формат данных
Данные представляют собой набор строк. Строки, начинающиеся с символа #, считаются комментариями. Пустые строки игнорируются. Все остальные строки являются ответом на один вопрос и должны содержать четыре значения, каждое из которых отделяется от другого одним пробельным символом:
- Первое значение — имя пакета, которому принадлежит вопрос;
- Второе значение — имя вопроса;
- Третье значение — тип вопроса;
- Четвёртое значение (до конца строки) — значение, используемое для ответа на вопрос.
Также третье значение может быть равно "seen". Такая строка помечает вопрос в базе данных debconf как заданный.
Заметим, что автозаполнение ответов на вопросы по умолчанию помечает эти вопросы как заданные, поэтому для изменения ответа по умолчанию без пометки вопроса как заданного вам нужны две строки. Строки переходят и продлеваются на следующую строку, если оканчиваются символом "\".
Использование
Основные команды
Ниже приведены примеры использования некоторых команд. Подробную информацию о команде можно получить из справки (man).
debconf-get-selections
Команда выводит содержимое базы данных debconf. Примеры:
ecss1:~$ sudo debconf-get-selections | grep ecss-web-conf ecss-web-conf ecss-web-conf/http-terminal-password password password ecss-web-conf ecss-web-conf/db-password password postgres1 ecss-web-conf ecss-web-conf/https-port string 443 ecss-web-conf ecss-web-conf/db-pool-size string 10 ecss-web-conf ecss-web-conf/http-terminal-host string 127.0.0.1 ecss-web-conf ecss-web-conf/http-terminal-login string admin ecss-web-conf ecss-web-conf/config-list multiselect ecss-web-conf ecss-web-conf/use-default-conf boolean true ecss-web-conf ecss-web-conf/db-name string ecss_web_conf ecss-web-conf ecss-web-conf/elph-proxy-ip-port string ecss-web-conf ecss-web-conf/http-terminal-port string 9999 ecss-web-conf ecss-web-conf/http-port string 80 ecss-web-conf ecss-web-conf/elph-proxy-enabled boolean false ecss-web-conf ecss-web-conf/db-username string postgres ecss-web-conf ecss-web-conf/db-host string 127.0.0.1 ecss-web-conf ecss-web-conf/docker-install boolean false ecss-web-conf ecss-web-conf/db-port string 5439
В данном формате можно подготовить свой файл ответов с нужными настройками.
debconf-set-selections
Команда может быть использована для автоматической настройки ответов из базы данных debconf или для изменения имеющихся ответов. Каждый вопрос будет помечен как уже заданный, чтобы debconf больше не задавал его пользователю. В качестве параметра возможно указать имя файла ответов. Если задано имя файла, то оно рассматривается как файл для чтения, иначе данные берутся со стандартного входного потока (stdin).
Примеры:
debconf-set-selections ds-answer.txt
echo "ecss-node ecss-configuration/ntp_server string 192.168.1.21" | sudo debconf-set-selections
И после этого уже ставить пакет. Вопросов по внесенным настройкам задаваться не будет.
debconf-communicate
Команда позволяет обращаться к debconf из командной строки. В необязательном параметре «пакет» указывается название пакета, от имени которого производится обращение к debconf.
Debconf-communicate читает команды из стандартного входного потока (stdin), которые задаются в формате протокола команд debconf. Описание допустимых команд и их использование можно найти в спецификации к debconf.
Пример использования очистки базы от сохраненных ответов:
for pk in $(sudo debconf-get-selections | grep postgres | awk '{print $1}' | grep postgres | sort | uniq); do sudo echo PURGE | sudo debconf-communicate $pk; done
Получение значения сохраненного ответа:
echo get ecss-configuration/ntp_server_external | sudo debconf-communicate 0 ntp.ubuntu.com
debconf-show
Команда позволяет выполнить запрос к базе данных debconf различными способами.
Наиболее распространённый запрос — «debconf-show имя-пакета», по которому выдаются все элементы базы данных debconf, принадлежащие этому пакету и их текущие значения. Вопросы, которые были уже заданы, отмечены символом «*».
Пример:
ecss1:~$ sudo debconf-show ecss-media-server ecss-media-server/general/log-level: 3 ecss-media-server/codec/g729: 5 ecss-media-server/media/video-src: /usr/share/ecss-media-server/video/dummy_video.yuv ecss-media-server/codec/g726: 11 ecss-media-server/codec/l16: 8 ecss-media-server/codec/g722: 3 ecss-media-server/codec/h264: 1 ecss-media-server/transport/port: 5040 ecss-media-server/codec/h263-1998: 2 ecss-media-server/codec/t38: 1 ecss-media-server/rtp/type: auto ecss-media-server/media/mixer-clock-rate: 8000 ecss-media-server/accounts/realm_addr: 127.0.0.1 ecss-media-server/rtp/auto: ecss-media-server/codec/pcmu: 2 ecss-media-server/codec/select: pcma, pcmu, g722, h264, h263-1998, t38 ecss-media-server/codec/speex: 7 ecss-media-server/codec/opus: 10 ecss-media-server/rtp/manual: * ecss-media-server/transport/bind-addr: 10.5.20.51 ecss-media-server/mcc/port: 5700 ecss-media-server/codec/ilbc: 6 ecss-media-server/accounts/realm_name: msr.ecss1 ecss-media-server/codec/g7221: 9 ecss-media-server/accounts/realm_port: 5000 ecss-media-server/codec/pcma: 1 ecss-media-server/codec/gsm: 4 * ecss-media-server/mcc/bind-addr: 10.5.20.51 * ecss-media-server/config-list: transport bind-addr, mcc bind-addr ecss-media-server/accounts/install: true