как сначала распаковать пакет debain, прежде чем появится приглашение debconf?

Я работаю над источником упаковки Debian, чтобы установить несколько файлов на пользовательскую машину. Существует общая логика, используемая сценарием debconf/config и сценарием postinst. Итак, я поместил общую логику в отдельный файл и добавил его как часть пакета в /usr/share/pkg-name/.

Теперь, когда я устанавливаю пакет с помощью dpkg, все работает нормально. Сначала пакет распаковывается и по указанному пути помещается файл, содержащий общую кодовую базу. Затем сценарий debconf/config считывает файл и выдает соответствующий запрос пользователю.

Когда я помещаю файл в репозиторий APT, та же процедура выполняется в обратном порядке, когда я устанавливаю с помощью apt-get. Пакет не распаковывается первым, вместо этого отображается приглашение debconf, и скрипт конфигурации не может найти скрипт, содержащий общую кодовую базу.

Я хочу знать, почему существует разница в процедуре установки? Есть ли способ получить ту же последовательность при установке через apt-get? Все три файла являются сценариями оболочки.

Есть ли лучший способ обработки такой общей базы кода для использования различными сценариями сопровождающего?


person i01000001    schedule 17.10.2014    source источник


Ответы (1)


Квест завершен!

Теперь я понимаю весь процесс, описанный на справочной странице debconf. Существуют различные фазы или шаги, как бы вы это ни называли. Они есть:

  • dpkg-предварительная настройка
  • дпкг -я
  • dpkg-переконфигурировать

Все эти шаги инициируют связь debconf с пользователем. Когда кто-то устанавливает пакет с помощью dpkg -i, сценарий конфигурации запускается непосредственно перед запуском сценария postinst с теми же параметрами командной строки. К тому времени, когда начинается обмен данными с debconf, пакет уже распакован.

Когда кто-то устанавливает пакет с помощью apt-get, сначала запускается dpkg-preconfigure, который выполняет сценарий конфигурации, а затем dpkg -i для фактической установки пакета, который снова запускает тот же сценарий конфигурации.

Во втором случае apt-get, когда скрипт конфигурации запускается как часть dpkg-preconfigure, пакет еще не распакован, поэтому я столкнулся с этой проблемой.

Я просто добавил условие if, чтобы продолжить, если файлы распакованы, или выйти

if [ ! -f /usr/share/pkg-name/common-codebase ];
 then
    exit 0
 fi
 /usr/share/pkg/common-codebase

Таким образом, при установке пакета с помощью apt-get попытка dpkg-preconfigure запустить сценарий конфигурации пропускается, а вторая попытка dpkg -i учитывается. Это работает для меня, потому что вопросы debconf, которые я задаю пользователю, не влияют ни на какой другой пакет.

Если у вас есть общие шаблоны и ваш выбор может повлиять на что-либо за пределами пакета, помните, даже если вы откладываете свои подсказки, другие связанные/зависимые пакеты, устанавливаемые apt-get, все равно будут запрашивать пользователя на этапе dpkg-preconfigure. Убедитесь, что это нормально для вас, прежде чем пытаться использовать это решение.

person i01000001    schedule 20.10.2014