Описание и установка

Если требуется установка в "тихом режиме" (например, инсталляция нескольких однотипных систем), можно использовать штатное средство 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