Scroll to navigation

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:

диалоговый
Интерфейс по умолчанию, использует программы whiptail(1) или dialog(1) для показа вопросов. Работает в текстовом режиме.
из командной строки
Наиболее традиционный интерфейс, он подобен тому, как всегда выполняласьнастройка Debian: серия вопросов, вывод на консоль простым текстом, иприглашение, использующее библиотеку readline. Он даже поддерживаетавтодополнение по tab. Настоятельно рекомендуется пакетlibterm-readline-gnu-perl, если вы выбрали этот интерфейс; модуль readlineпо умолчанию не поддерживает вывод значений по умолчанию. Как минимум, вамнужно установить пакет perl-modules для использования этого интерфейса.

Этот интерфейс поддерживает несколько специальных горячих клавиш. С помощьюPageup (или ctrl-u) можно вернуться к предыдущему вопросу (если этоподдерживается пакетом, который использует debconf), и по pagedown (orctrl-v) можно перейти к следующему вопросу.

Это самый лучший интерфейс для удалённого администрирования через медленноесоединение, или для тех кому больше нравится работать с unix.

пакетный
Это анти-интерфейс. Он вообще не взаимодействует с вами и для всех вопросовиспользует ответы по умолчанию. Изредка он может посылать по почте сообщениясуперпользователю о пакете, но это всё; он молчалив и скромен, идеальныйинтерфейс для автоматической установки. Если вы используете этот интерфейс,и вам нужны ответы не по умолчанию, то нужно заранее ввести их в базу данныхdebconf; подробности смотрите в разделе далее «Установка пакета безобслуживания».
Это современный графический X-интерфейс, использующий библиотеки gtk иgnome. Естественно, для работы требуется правильное значение DISPLAY, иначеdebconf перейдёт на другие интерфейсы. Заметим, что этому интерфейсутребуется установленный пакет libgtk3-perl.
This frontend provides a modern X GUI based on the KDE Platform. You ofcourse need a DISPLAY to use this frontend and you must installdebconf-kde-helper package. The frontend will fall back to dialog if some ofthe prerequisites are not met.
из текстового редактора
Для фанатиков, любящих всё делать из текстового редактора. Он запускает вашредактор с файлом, который выглядит как обычный файл настройки unix, и выредактируете файл для связи с debconf. Автор debconf предпочитает некомментировать обстоятельства, которые сподвигли к написанию этогоинтерфейса.
веб-интерфейс
Этот интерфейс работает как веб сервер, к которому вы подключаетесь спомощью веб браузера для получения вопросов и ответов на них. Это звучитмногообещающе, но пока немного не доделано. При запуске интерфейса, онвыводит адрес, который вы должны указать в веб-браузере. С цельюбезопасности запускайте веб-браузер на той же машине, которую настраиваете.

Помните, что это очень небезопасный интерфейс. Любой, кто получит доступ ккомпьютеру во время настройки может подключиться к веб-серверу и выполнитьнастройку во время работы интерфейса. Поэтому это не более чемдоказательство концепции.

Вы можете изменить интерфейс по умолчанию 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, нужно прочитать debconf-devel(7).

Вкратце, debconf связывается с сценариями сопровождающего или другимипрограммами через стандартные ввод и вывод, используя простой командныйязык, одна команда на строку протокола, похожий на распространённыепротоколы интернет типа SMTP. Программы через протокол просят debconfпоказать вопросы пользователю и получить ответы. Сами вопросы хранятся вотдельном файле, называемом «файл templates», который имеет формат почти неотличающийся от формата debian файла control.

Пакеты Debian, которые используют debconf, обычно предоставляют и файлtemplates и сценарий «config» (запускается во время предварительнойнастройки пакета), хранящиеся в управляющем разделе метаданных пакета.

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

Используется для временного изменения интерфейса debconf. Смотрите ранее.
Используется для временного изменения минимального приоритета задаваемыхвопросов debconf. Описание смотрите ранее.
Отправлять отладочный вывод в стандартный поток ошибок. Может быть заданоимя функции(facility) или регулярное выражение описывающее нужные функции(типа «.*», которое заставляет выводить всю отладочную информацию). Именафункций:
Отладочная информация, интересная пользователю debconf.
Отладочная информация, интересная разработчику пакета.
Отладочная информация о среде хранения базы данных.
Установите в «yes», чтобы выключить некоторые предупреждения, которые можетвыдавать debconf. Критические ошибки всё равно выводятся.
Установите в «yes», чтобы включить краткий режим вывода, в котороминтерфейсы debconf сокращают свой поток сообщений насколько возможно.
База данных, использующаяся после всех обычных баз, поэтому она можетиспользоваться как резервная для получения настройки. Смотрите ранее«Установка пакета без обслуживания». Если значение переменной — имясуществующей базы данных в debconf.conf, то будет использоваться эта базаданных. Иначе, переменная окружения может быть использована для настройкибазы данных на лету, с помощью задания типа базы данных и необязательногопередаваемых настроек поле:значение внутри фигурных скобок после типа. Дляразделения полей используются пробелы, поэтому вы не можете указыватьзначение поля с пробелами.

Соответственно, здесь используется 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_DB_FALLBACK.
Использовать указанную базу данных вместо обычных. Это может быть полезнодля тестирования с отдельной базой данных без создания отдельного файлаdebconf.conf, или чтобы избежать блокировки обычных баз данных.
Если эта переменная окружения установлена, debconf будет игнорироватьпользовательский файл ~/.debconfrc, и использовать вместо негосистемный. Если в ней задано имя обычного файла, то debconf будетиспользовать этот файл вместо системных файлов настройки.
Если эта переменная окружения установлена, то debconf будет использоватьdialog вместо whiptail для интерфейса dialog.
Если эта переменная окружения установлена, то debconf будет использоватьXdialog вместо whiptail для интерфейса dialog.
Установка в «true» вызовет установку флага seen для вопросов заданныхнеинтерактивным интерфейсом.

ОШИБКИ

Вероятно имеются как и в любом другом коде большого размера.

При отправке отчёта об ошибке проверьте, что включили следующую информацию:

*
Название интерфейса debconf при работе с которым возникла ошибка
*
Что вы сделали что возникла ошибка.
*
Полный текст любых сообщений об ошибках. Если вы можете повторить этуошибку, сделайте это с установленной переменной DEBCONF_DEBUG='.*'. Этонамного ускорит отладку.

СМОТРИТЕ ТАКЖЕ

debconf.conf(5), debconf-devel(7), dpkg-preconfigure(8), dpkg-reconfigure(8), debconf(1),

АВТОР

Joey Hess <joeyh@debian.org>