упорядочивание выполнения preinst и сценариев конфигурации

Действительно ли возможно вынудить некоторый preinst сценарий работать перед другим?

То, что я хотел бы сделать, создают пакет в моем частном репозитории, который при установке СНАЧАЛА задаст некоторые вопросы и только затем другие пакеты (от которого он зависит), был бы распакован.

Например, скажем, я хочу создать my-mysql пакет, который зависел бы от mysql-server-5.5 из стандартного репозитория. Я хотел бы, когда пользователь вводит apt-get install my-mysql для my-mysql.preinst работать прежде mysql-server-5.5.preinst (таким образом, это может сделать debconf-set-selections автоматически сгенерировать пароль root и мешать пакету mysql-сервера просить его в интерактивном режиме).

Я мог сделать это, не помещая никого, зависит в my-mysql пакет и вручную выполнение двух команд:

apt-get install my-mysql
apt-get install mysql-server-5.5

но мне нужен он для работы только с одной командой (apt-get install my-mysql). Я попытался играть с Pre-depends на третьем пакете, который сделал бы конфигурацию, и Depends на mysql-server-5.5, но это кажется mysql-server-5.5.preinst всегда выполняемый сначала. Существует ли способ изменить это и вынудить мой пакет preinst работать перед ним?

Как альтернативный путь, я также не могу работать apt-get install mysql-server-5.5 от postinst из-за dpkg блокирующие проблемы, и хотел бы сделать это намного более чистым способом, чем блокировка клуджей как этот.

ОБНОВЛЕНИЕ: как упомянуто в комментариях, кажется, что пакет mysql-сервера также имеет .config сценарии (со связанным .templates) которые выполняются даже прежде .preinst сценарии, таким образом, я должен заказать им также.

0
задан 11 March 2016 в 19:28

1 ответ

Я нашел способ сделать это.

Так, для сингла apt-get install my-mysql для работы описанным рассматриваемый я должен был сделать несколько вещей:

  • сделать my-mysql пакет, таким образом, это предварительно зависит от my-mysql-config и зависит от mysql-server
  • создайте дополнительный пакет my-mysql-config, который предварительно зависит от debconf и содержит my-mysql-config.templates и my-mysql-config.config сценарий (то, которое среди прочего устанавливает пароль так mysql-server-5.5, не попросит его), содержащий код как:

    . /usr/share/debconf/confmodule
    db_set  mysql-server/root_password "$PW"
    db_fset mysql-server/root_password seen true
    
    db_set  mysql-server/root_password_again "$PW"
    db_fset mysql-server/root_password_again seen true
    
  • также my-mysql-config.preinst содержит код, который делает db_get и создает файлы конфигурации, прежде чем mysql-сервер начнет

  • можно использовать my-mysql пакет .postinst сценарий для выполнения материала, который Вы хотите после mysql-сервера, установлен и выполнение.

Учебное руководство Программиста Debconf было большой справкой там, как использовал export DEBCONF_DEBUG=developer и set -x в сценариях для отладки.

Еще две трудоемких проблемы для отладки удостоверялись, что config/preinst/postinst сценарии НИЧЕГО не производят к STDOUT (поскольку это повреждает debconf странными и интересными способами), и что Вам нужно db_stop если Вы действительно наполняете как invoke-rc.d mysql restart или подобный (или Ваша Кв. - добираются, зависнет трудно, даже не отвечая Ctrl + C),

2
ответ дан 29 September 2019 в 12:01

Другие вопросы по тегам:

Похожие вопросы: