Назад | Перейти на главную страницу

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

(Подсказка читателю: в рамках этого поста вы можете спокойно игнорировать, что такое 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?