Как заставить postinst для пакета A запускаться раньше, чем для пакета B, не завися от него?

(Подсказка для читателя: для целей данного поста вы можете спокойно игнорировать, что такое UFW и как он на самом деле работает. Мой вопрос не о UFW, а об упаковке).

У меня есть свой собственный пакет Deb mypackage. Это делает некоторые сети и требует, чтобы определенные порты были открыты. Можно с уверенностью предположить, что единственный брандмауэр, который может быть установлен - это UFW. Я хочу, чтобы моя посылка не зависела от присутствия UFW. Вместо этого я хочу его postinst рутина, чтобы определить, стоит ли ufw на месте, и если да, чтобы добавить правило. Вот это мой ток postinst:

if ufw version > /dev/null 2>&1; then
    ufw allow in proto udp from any to any port 12345
fi

Это работает нормально, если UFW установлен, и это работает нормально, если UFW не установлен.

Однако, если мой пакет и ufw будут установлены одновременно, произойдет сбой:

apt-get install mypackage ufw

Что происходит, так это то, что mypackage и ufw распаковываются, а затем Setting up фаза сначала вызывается для mypackage, который находит ufw присутствующий (ufw version успешно), но поскольку он еще не настроен, он еще не работает должным образом, и добавление правила завершается неудачно:

Selecting previously unselected package mypackage.
Unpacking mypackage (from .../mypackage_1.0_all.deb) ...
Selecting previously unselected package ufw.
Unpacking ufw (from .../archives/ufw_0.31.1-2_all.deb) ...
# ...
Setting up mypackage (1.0) ...
ERROR: Couldn't stat '/etc/default/ufw'
ERROR: Couldn't stat '/etc/default/ufw'
dpkg: error processing mypackage (--configure):
  subprocess installed post-installation script returned error exit status 1

Как я могу заставить --configure для UFW, чтобы бежать перед моим, вне зависимости от UFW?

0 ответов

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