postinst всегда терпит неудачу из-за debconf

postinst всегда терпит неудачу из-за debconf

У меня возникли некоторые проблемы с использованием debconf для моего пакета. Я запрашиваю mysql pw в файле package.config:

. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw
db_go

Затем в postinst я запрашиваю пароль у debconf и записываю его в файл конфигурации:

. /usr/share/debconf/confmodule
db_get mypkg/mysql_root_pw
# write pw to config file

Это работает, когда я делаю dpkg-reconfigure --force mypkg. Однако при использовании apt-get -f install(что мне приходится делать, потому что он говорит, что мой pkg сломан) это всегда приводит к сбою:

Setting up mypkg (1.5.4-3) ...
debconf (developer): frontend started
debconf (developer): frontend running, package name is mypkg
debconf (developer): starting /var/lib/dpkg/info/mypkg.config configure 
debconf (developer): <-- INPUT low mypkg/mysql_root_pw
debconf (developer): --> 30 question skipped
dpkg: error processing mypkg (--configure):
 subprocess installed post-installation script returned error exit status 30
Errors were encountered while processing:
 mypkg

Я отредактировал скрипты, /var/lib/dpkg/info/mypkg.postinstи ошибка возникла в строке, где я подключаю библиотеку debconf:

. /usr/share/debconf/confmodule

Вероятно, это потому, что debconf уже имеет значение из исходной установки и не показывает вопрос снова. Но как я могу пропустить его, если у меня уже есть это значение, и почему он терпит неудачу на этой строке, а не когда я это делаю db_get?

Я поискал в Google и не нашел никакой полезной информации по этому вопросу.

решение1

Итак, я наконец-то заставил это работать. debconf всегда терпел неудачу при получении первого вопроса в моем postinst, если debconf уже имел значение. У меня наконец-то появилась (очевидная) идея проверить файлы postinst и config других пакетов в моей системе, и вот трюк:

В вашей конфигурации

. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw || true
db_go || true

Вот и все. Когда я запрашиваю значения в моем postinst debconf счастлив. Очевидно, вам нужно иметь обработку, когда вы не получаете никаких значений.

Также я добавил db_stopк своему посту «inst», не знаю, нужно ли это, но я добавлю это для полноты картины.

mypkg.postinst

. /usr/share/debconf/confmodule
db_get mypkg/mysql_root_pw
mysql_root_pw=$RET
db_get mypkg/some_other_value
some_other_value=$RET
db_stop
# do something with the $mysql_root_pw and $some_other_value vars

Надеюсь, это когда-нибудь поможет кому-нибудь ещё.

Ваше здоровье

Связанный контент