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

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

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

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

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

1 ответ1

0

Квест закончен!

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

  • Dpkg-предварительная настройка
  • дпкг -i
  • Dpkg-перенастроить

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

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

Во втором случае apt-get, когда скрипт config запускается как часть 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. Убедитесь, что это хорошо для вас, прежде чем пытаться это решение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .