Как заставить 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?