DEBCONF(7) | Miscellaneous Information Manual | DEBCONF(7) |
debconf - система настройки пакетов в Debian
Debconf — это система настройки пакетов в Debian. Она содержит редко используемую команду debconf, описанную в debconf(1)
Debconf предоставляет единообразный интерфейс для настройки пакетов, позволяя вам выбирать из нескольких пользовательских программ настройки. Она поддерживает предварительную настройку пакетов перед их установкой, что позволяет выполнять большие объёмы установок и обновлений, выяснив в начале всю необходимую информацию, и затем продолжить работу, в то время как вы можете заняться чем-то другим. Она позволяет, если вы торопитесь, пропускать менее важные вопросы и информацию при установке пакета (и вернуться к этому позже).
С помощью Debconf можно выполнить настройку пакетов перед тем как они будут установлены в систему. Хорошо, когда можно ответить на все вопросы пакетов в начале установки и пойти пить кофе пока производится установка.
Если вы используете apt (версии 0.5 или выше) и установлен пакет apt-utils, то каждый пакет при установке с помощью apt будет предварительно настраиваться. Это управляется через /etc/apt/apt.conf.d/70debconf
Иногда может понадобиться предварительно настроить пакет вручную, в случае если не используется apt для установки. Для этого вы можете использовать dpkg-preconfigure(8), просто указав при запуске имена файла пакетов, которые нужно предварительно настроить. Для этого должен быть установлен пакет apt-utils.
Предположим вы установили пакет и ответили на вопросы debconf, но после недолгого использования решили, что хотите изменить некоторые ответы на вопросы. Раньше, переустановка пакета помогала в этом, но теперь при переустановке пакета окажется, что debconf запомнил ответы на вопросы и не задаст их снова (это особенность).
К счастью,
debconf
позволяет
легко
перенастроить
любой
пакет его
использующий.
Предположим,
вы хотите
перенастроить
сам debconf.
Просто
запустите
суперпользователем:
dpkg-reconfigure debconf
Вам будут заданы все вопросы, которые вы видели при установке debconf. Также могут появиться дополнительные вопросы, так как задаются вопросы с более низким приоритетом, которые могли быть пропущены при установке пакета. Вы можете перенастроить любой пакет, который использует debconf.
Одним из уникальных свойств debconf является то, что при желании можно использовать любой из многих интерфейсов. Доступные интерфейсы debconf:
Этот интерфейс поддерживает несколько специальных горячих клавиш. С помощью Pageup (или ctrl-u) можно вернуться к предыдущему вопросу (если это поддерживается пакетом, который использует debconf), и по pagedown (or ctrl-v) можно перейти к следующему вопросу.
Это самый лучший интерфейс для удалённого администрирования через медленное соединение, или для тех кому больше нравится работать с unix.
Помните, что это очень небезопасный интерфейс. Любой, кто получит доступ к компьютеру во время настройки может подключиться к веб-серверу и выполнить настройку во время работы интерфейса. Поэтому это не более чем доказательство концепции.
Вы можете
изменить
интерфейс
по
умолчанию
debconf выполнив
перенастройку
debconf. С другой
стороны,
если вы
просто
хотите
изменить
интерфейс
ненадолго,
вы можете
установить
в
переменной
окружения
DEBIAN_FRONTEND
название
нужного
интерфейса.
Пример:
DEBIAN_FRONTEND=readline apt-get install slrn
Команды dpkg-reconfigure(8) и dpkg-preconfigure(8) также позволяют задать интерфейс с помощью параметра --frontend=.
Заметим, что не все интерфейсы работают во всех случаях. Если интерфейс не удалось запустить по какой-то причине, debconf покажет сообщение объясняющее почему, и перейдёт к запуску другого похожего интерфейса.
Другим замечательным свойством debconf является то, что задаваемые вопросы имеют приоритет. Если вы не хотите беспокоиться о каждом пустяке, то можете указать debconf задавать наиболее важные вопросы. С другой стороны, если вы фанат контроля, то можете сделать так, что будут показываться все вопросы. Каждый вопрос имеет приоритет. В порядке увеличения важности:
Будут показаны только вопросы с выбранным вами приоритетом и выше. Вы можете установить значение приоритета с помощью перенастройки debconf, или временно, передав --priority= значение командам dpkg-reconfigure(8) и dpkg-preconfigure(8), или установив переменную окружения DEBIAN_PRIORITY.
Debconf использует чрезвычайно гибкую и потенциально сложную среду базы данных для хранения вопросов и ответов. Для настройки базы данных используется файл /etc/debconf.conf. Если вам нужно сделать более сложную настройку, например заставить debconf читать значения по умолчанию из удалённой базы данных, сохраняя локальные замены, обратитесь к справочной странице debconf.conf(5). Как правило база данных расположена в каталоге /var/cache/debconf/.
Если вы обслуживаете много машин, то в какой-то момент вам потребуется выполнить установку или обновление пакетов на многих системах, но ответы о настройке по умолчанию вас не устраивают. Есть много способов сделать это; во всех нужно будет настроить базу данных и заставить debconf использовать её, чтобы получить ответы нужные вам.
Вам определённо следует прочитать debconf.conf(5) перед этим разделом, так как вы должны понимать как работают базы данных debconf.
Самый простой путь настроить базу данных — установить пакеты на одну машину, отвечая на все вопросы как обычно. Или вы можете просто использовать dpkg-preconfigure(8) для настройки списка пакетов без их реальной установки. Также вы можете даже решиться на написание текстового файла базы данных debconf вручную или каким-то другим способом.
После того как есть база данных, вам нужно выяснить как её задействовать с удалённой машины. Это естественно зависит от настройки этих систем и какой тип базы данных на них настроен.
Если вы пользуетесь LDAP базой данных debconf, то вся сеть машин debian может брать все ответы на вопросы любого или всех пакетов с одного сервера LDAP.
Но возможно вы будете использовать что-то более лёгкое в настройке, скажем, настройку базы данных debconf по умолчанию, или просто не хотите, чтобы удалённые системы постоянно использовали LDAP. В этом случае самое лучшее — временно поместить на удалённых системах вашу базу данных в стек ниже существующих баз данных, так чтобы из неё брались значения по умолчанию. Debconf предлагает две переменные окружения, DEBCONF_DB_FALLBACK и DEBCONF_DB_OVERRIDE, для лёгкого выполнения этого на лету. Пример:
cat /var/cache/debconf/config.dat | \
ssh root@target "DEBIAN_FRONTEND=noninteractive \
DEBCONF_DB_FALLBACK=Pipe apt-get upgrade"
Это заставляет debconf на удалённой машине прочитать данные, которые были переданы по каналу через соединение ssh и рассматривать их как базу данных debconf формата простого текста. Затем он использует эту базу данных как резервную: базу данных только для чтения, из которой берутся ответы на вопросы, если их нет в системной главной базе данных debconf.
Вот другой способ использования переменной окружения DEBCONF_DB_FALLBACK:
ssh -R 389:ldap:389 root@target \
"DEBCONF_DB_FALLBACK='LDAP{host:localhost}' apt-get upgrade"
Здесь используется ssh для настройки туннеля до LDAP и запуска debconf. Для debconf указывается использовать сервер LDAP в качестве резервной базы данных. Заметим, что для настройки доступа debconf к базе данных LDAP используется «{host:localhost}» , то есть поле «host» имеет значение «localhost».
Другой метод:
scp config.dat root@target:
ssh root@target "DEBCONF_DB_FALLBACK='File{/root/config.dat}' apt-get
upgrade
Здесь вы копируете базу данных с помощью scp, и затем через ssh debconf использует скопированный файл. Здесь показано как можно использовать сокращённую запись параметров DEBCONF_DB_FALLBACK — если поле имени отсутствует, то по умолчанию используется «имя файла».
Есть только одна проблема при использовании параметра DEBCONF_DB_FALLBACK: резервная база данных предоставляет ответы на вопросы, на которые не нашлось ответов в других базах данных, она служит только как резервная; после других баз данных. Если вам нужно вместо временной заменить существующие значения на удалённом узле, вы должны использовать переменную DEBCONF_DB_OVERRIDE. Подобно DEBCONF_DB_FALLBACK, она указывает на временную базу данных, но эта база данных просматривается раньше всех остальных, и может использоваться для замены существующих значений.
Разработчикам пакетов и всем, кто хочет разрабатывать пакеты, использующие debconf, нужно прочитать debconf-devel(7).
Вкратце, debconf связывается с сценариями сопровождающего или другими программами через стандартные ввод и вывод, используя простой командный язык, одна команда на строку протокола, похожий на распространённые протоколы интернет типа SMTP. Программы через протокол просят debconf показать вопросы пользователю и получить ответы. Сами вопросы хранятся в отдельном файле, называемом «файл templates», который имеет формат почти не отличающийся от формата debian файла control.
Пакеты Debian, которые используют debconf, обычно предоставляют и файл templates и сценарий «config» (запускается во время предварительной настройки пакета), хранящиеся в управляющем разделе метаданных пакета.
Соответственно,
здесь
используется
fallbackdb из debconf.conf:
DEBCONF_DB_FALLBACK=fallbackdb
А здесь
устанавливается
новая база
данных с
типом File,
указывается
имя файла
для неё и
выключается
резервное
копия:
DEBCONF_DB_FALLBACK=File{Filename:/root/config.dat Backup:no}
И для
краткости,
здесь
устанавливается
база
данных с
типом File и
именем
файла:
DEBCONF_DB_FALLBACK=File{/root/config.dat}
Заметим, что если резервная база данных устанавливается на лету, то по умолчанию она доступна только для чтения.
Вероятно имеются как и в любом другом коде большого размера.
При отправке отчёта об ошибке проверьте, что включили следующую информацию:
debconf.conf(5), debconf-devel(7), dpkg-preconfigure(8), dpkg-reconfigure(8), debconf(1),
Joey Hess <joeyh@debian.org>