(Подсказка читателю: в рамках этого поста вы можете спокойно игнорировать, что такое ufw и как он на самом деле работает. Мой вопрос не о ufw, а об упаковке).
У меня есть собственный пакет Deb мой пакет. Он выполняет некоторую работу в сети и требует открытия определенных портов. Можно с уверенностью предположить, что единственный брандмауэр, который может быть установлен, - это 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
phase вызывается сначала для 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?