[devel] обновления пакетов с поддержкой systemd
Alexey Shabalin
a.shabalin на gmail.com
Вт Май 17 03:12:07 UTC 2011
Всем привет.
Возможно я кого-то ввел в заблужение (сам ошибался) по поводу
использования родных для systemd файлов.
Вопрос из FAQ:
Q: I have a native systemd service file and a SysV init script
installed which share the same basename, e.g.
/lib/systemd/system/foobar.service vs. /etc/init.d/foobar -- which one
wins?
A: If both files are available the native unit file always takes
precedence and the SysV init script is ignored, regardless whether
either is enabled or disabled. Note that a SysV service that is
enabled but overriden by a native service does not have the effect
that the native service would be enabled, too. Enabling of native and
SysV services is completely independent. Or in other words: you cannot
enable a native service by enabling a SysV service by the same name,
and if a SysV service is enabled but a the respective native service
is not, this will not have the effect that the SysV script is
executed.
То есть, если мы раньше имели включеный сервис /etc/init.d/foobar, а
теперь подложили в rpm-пакет /lib/systemd/system/foobar.service, то
этот сервис будет выключен и после перезагрузки не стартует.
Надо запустить что-то типа
if chkconfig foobar ; then
chkconfig foobar on
fi
(если сервис включен, включить его ещё раз - в этот раз уже с
перенаправлением на systemd)
Предполагается, что chkconfig из people/shaba/systemd -
модифицированный для перенаправления команд к systemd.
либо
if chkconfig --no-redirect foobar ; then # не перенаправлять на systemd
systemctl enable foobar.sevice # можно использовать сразу
systemctl, без перенаправления из chkconfig
fi
В fedore во всех пакетах, где добавляют поддержку нативных сервисов
добавляют тригер типа:
%triggerun -- httpd < 0.47.11-1
if /sbin/chkconfig httpd ; then
/bin/systemctl enable httpd.service >/dev/null 2>&1 || :
fi
или
%triggerun -- avahi < 0.6.28-1
if /sbin/chkconfig --level 5 avahi-daemon ; then
/bin/systemctl --no-reload enable avahi-daemon.service
>/dev/null 2>&1 || :
fi
Как лучше сделать у нас?
Я пока придумал только модифицировать post_service:
--- post_service.def 2011-03-17 01:41:42.000000000 +0300
+++ post_service 2011-05-17 07:02:27.640147135 +0400
@@ -1,5 +1,21 @@
#!/bin/sh -e
+SYSTEMCTL=/bin/systemctl
+SYSTEMD_SERVICE_DIR=/lib/systemd/system
+SYSTEMD_CGROUP_DIR=/sys/fs/cgroup/systemd
+
+systemd_status=
+systemd_is_active()
+{
+ if [ -z "$systemd_status" ]; then
+ [ -x "$SYSTEMCTL" -a \
+ -d "$SYSTEMD_CGROUP_DIR" ] &&
+ mountpoint -q "$SYSTEMD_CGROUP_DIR"
+ systemd_status=$?
+ fi
+ return $systemd_status
+}
+
if ! [ "$RPM_INSTALL_ARG1" -ge 1 ] 2>/dev/null; then
echo "post_service: invalid or undefined variable: RPM_INSTALL_ARG1" >&2
exit 1
@@ -14,5 +30,9 @@
/sbin/chkconfig --add "$1"
else
/sbin/chkconfig "$1" resetpriorities ||:
+ [ -f "$SYSTEMD_SERVICE_DIR/$1.service" ] &&
+ systemd_is_active &&
+ /sbin/chkconfig --no-redirect "$1" &&
+ /sbin/chkconfig "$1" on
/sbin/service "$1" condrestart ||:
fi
Или это можно в какой-нибудь filetrigger сделать?
Как лучше?
--
Alexey Shabalin
Подробная информация о списке рассылки Devel