Действительно ли возможно вынудить некоторый 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
сценарии, таким образом, я должен заказать им также.
Я нашел способ сделать это.
Так, для сингла 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),