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

Обновление дела с файлом спецификации RPM

Я пытаюсь создать пакет rpm. В файле спецификации есть следующие макросы:

%postun
systemctl stop metrics_haproxy.service
systemctl stop checker_haproxy.service
systemctl stop keep_alive.service
systemctl disable metrics_haproxy.service
systemctl disable checker_haproxy.service
systemctl disable keep_alive.service
rm -f /etc/httpd/conf.d/haproxy-wi.conf
rm -f /etc/rsyslog.d/metric.conf
rm -f /etc/rsyslog.d/checker.conf
rm -f /etc/rsyslog.d/keep_alive.conf
rm -f /etc/logrotate.d/metric
rm -f /etc/logrotate.d/checker
rm -f /etc/logrotate.d/keep_alive
systemctl restart rsyslog
systemctl daemon-reload

%post
systemctl daemon-reload
systemctl restart rsyslog
systemctl restart metrics_haproxy.service
systemctl restart checker_haproxy.service
systemctl restart keep_alive.service
systemctl restart httpd
systemctl enable metrics_haproxy.service
systemctl enable checker_haproxy.service
systemctl enable keep_alive.service
systemctl enable httpd

но сталкиваюсь с одной проблемой: когда я обновляюсь с новой версией rpm, yum сначала создает все службы, а затем удаляет. И я остаюсь без запущенных и включенных сервисов после обновления

Есть какой-то workaorund?

Вы должны прочитать эта страница чтобы понять порядок выполнения сценария при установке rpm. Самое главное:

  1. % пост нового пакета
  2. % postun старого пакета

так что %postun скрипт вашего старого пакета запускается после в %post скрипт вашего нового пакета. Вероятно, вы захотите:

%postun
if [ $1 = 0 ]
then
  # the package is really being uninstalled, not upgraded
fi

НО поскольку ваш старый пакет уже установлен, %postun скрипт вашего старого пакета все равно будет работать. Чтобы исправить это, я думаю, что самое простое решение - изменить %post в %posttrans так что он будет работать после в %postun сценарий.