Bug 24989 - add systemd support
Summary: add systemd support
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: service (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-01-28 20:10 MSK by Alexey Shabalin
Modified: 2013-03-01 14:18 MSK (History)
9 users (show)

See Also:


Attachments
add systemd support (1.27 KB, patch)
2011-01-28 20:11 MSK, Alexey Shabalin
no flags Details | Diff
обновлённый (980 bytes, patch)
2011-03-02 02:19 MSK, Alexey Shabalin
no flags Details | Diff
proposed patch (970 bytes, patch)
2011-03-06 02:12 MSK, Dmitry V. Levin
no flags Details | Diff
proposed change (1.31 KB, patch)
2011-03-14 20:41 MSK, Dmitry V. Levin
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey Shabalin 2011-01-28 20:10:48 MSK
Прошу добавить поддержку systemd в service.

PS: В приведенном патче мне не нравится двойная поверка. Если от неё избавлятся, то надо убирать check_service().
Comment 1 Alexey Shabalin 2011-01-28 20:11:50 MSK
Created attachment 4781 [details]
add systemd support
Comment 2 Dmitry V. Levin 2011-02-05 00:38:05 MSK
(In reply to comment #0)
> Прошу добавить поддержку systemd в service.
> 
> PS: В приведенном патче мне не нравится двойная поверка. Если от неё
> избавлятся, то надо убирать check_service().

Двойная статическая проверка не страшна.  А вот зачем нужна эта строка:
echo "Redirecting to /bin/systemctl $OPTIONS $SERVICE.service" >/dev/stderr
?
Comment 3 Alexey Shabalin 2011-02-07 14:00:22 MSK
(В ответ на комментарий №2)
> (In reply to comment #0)
> 
> Двойная статическая проверка не страшна.  А вот зачем нужна эта строка:
> echo "Redirecting to /bin/systemctl $OPTIONS $SERVICE.service" >/dev/stderr > ?

Согласен, это строка не нужна, даже вредна.
PS: вот к чему приводит copy-paste из других дистрибутивов.
Comment 4 Alexey Shabalin 2011-03-02 02:19:01 MSK
Created attachment 4830 [details]
обновлённый

обновление поддержки systemd
Comment 5 Dmitry V. Levin 2011-03-05 22:27:18 MSK
(In reply to comment #4)
> Created an attachment (id=4830) [details]
> обновлённый

Тут написано, что в случае когда $SYSTEMCTL есть, $SERVICEDIR/$SERVICE тоже есть, а $SYSTEMDSERVICEDIR/$SERVICE.service нет, нужно запускать $SYSTEMCTL.
Другими словами, что SYSTEMCTL умеет запускать $SERVICEDIR/$SERVICE.
Это правильно?
Comment 6 Alexey Shabalin 2011-03-06 01:11:10 MSK
(В ответ на комментарий №5)
> Тут написано, что в случае когда $SYSTEMCTL есть, $SERVICEDIR/$SERVICE тоже
> есть, а $SYSTEMDSERVICEDIR/$SERVICE.service нет, нужно запускать $SYSTEMCTL.
> Другими словами, что SYSTEMCTL умеет запускать $SERVICEDIR/$SERVICE.
> Это правильно?

да.
systemd умеет работать с init-скриптами SysV.
Если присутствуют оба файла foo.service и init.d/foo, то systemd будет использовать foo.service, а вот если его нет, тогда уже init.d/foo
Поэтому я делал так:
- если есть systemctl, то используем его во всех случаях, и для foo.service и для init.d/foo
- если нет systemctl, тогда используем init.d/foo

Правда есть ещё одна проблема: когда systemctl есть в системе, но мы по прежнему используем SysVinit. Если systemd не запущен, то systemctl сделать ничего не сможет. Надо бы еще проверять действительно systemd запущен.

PS: в исправленном патче ошибка - нужен пробел перед -f
Comment 7 Dmitry V. Levin 2011-03-06 01:19:12 MSK
(In reply to comment #6)
> systemd умеет работать с init-скриптами SysV.

тогда патч можно будет упростить

> Правда есть ещё одна проблема: когда systemctl есть в системе, но мы по
> прежнему используем SysVinit. Если systemd не запущен, то systemctl сделать
> ничего не сможет. Надо бы еще проверять действительно systemd запущен.

конечно, надо, но как?
Comment 8 Alexey Shabalin 2011-03-06 01:55:02 MSK
(В ответ на комментарий №7)

> > Правда есть ещё одна проблема: когда systemctl есть в системе, но мы по
> > прежнему используем SysVinit. Если systemd не запущен, то systemctl сделать
> > ничего не сможет. Надо бы еще проверять действительно systemd запущен.
> 
> конечно, надо, но как?

Пока только придумал проверять наличие директории
/sys/fs/cgroup/systemd
Её создаёт сам systemd, и без cgroup работать не будет.
Comment 9 Dmitry V. Levin 2011-03-06 02:12:02 MSK
Created attachment 4832 [details]
proposed patch
Comment 10 Dmitry V. Levin 2011-03-06 02:12:58 MSK
(In reply to comment #8)
> Пока только придумал проверять наличие директории
> /sys/fs/cgroup/systemd
> Её создаёт сам systemd, и без cgroup работать не будет.

Можно попробовать потестировать приложенный патч.
Comment 11 Alexey Shabalin 2011-03-06 02:57:44 MSK
(В ответ на комментарий №10)
> (In reply to comment #8)
> > Пока только придумал проверять наличие директории
> > /sys/fs/cgroup/systemd
> > Её создаёт сам systemd, и без cgroup работать не будет.
> 
> Можно попробовать потестировать приложенный патч.

Опробую.
Сейчас посмотрел initscrips  у fedora.
Они ещё модифицировали /etc/rc.d/functions для перенаправления команд на systemctl.
Я так понял для тех, кто не пользуется командой service, а использует /etc/init.d/foo напрямую.
Нужна ли нам такая заглушка?

И нашёл как они проверяют запущен ли systemd 
/bin/mountpoint -q /sys/fs/cgroup/systemd
Может так и правильней - это именно точка монтирования.
Comment 12 Alexey Shabalin 2011-03-09 22:19:27 MSK
опробовал этот вариант патча - работает нормально.
Достаточно ли проверять только наличие директории? Или лучше
/bin/mountpoint -q /sys/fs/cgroup/systemd?

PS: ждём в сизифах нашего города :)
Comment 13 Dmitry V. Levin 2011-03-14 20:41:04 MSK
Created attachment 4836 [details]
proposed change
Comment 14 Dmitry V. Levin 2011-03-14 20:42:21 MSK
(In reply to comment #12)
> опробовал этот вариант патча - работает нормально.
> Достаточно ли проверять только наличие директории? Или лучше
> /bin/mountpoint -q /sys/fs/cgroup/systemd?

Новая редакция патча, с проверкой на mountpoint.
Вроде бы должна устроить всех, проверьте.
Comment 15 Alexey Shabalin 2011-03-16 19:44:05 MSK
проверил - работает.
Comment 16 Repository Robot 2011-03-17 01:45:10 MSK
service-0.5.21-alt1 -> sisyphus:

* Thu Mar 17 2011 Dmitry V. Levin <ldv@altlinux> 0.5.21-alt1
- service: added systemd support (closes: #24989).
Comment 17 Pavel Shilovsky 2013-03-01 10:39:32 MSK
Решил написать сюда. Функционал, реализованный сейчас в service не позволяет использовать post_service и preun_service скрипты в спеке пакета с поддержкой systemd без дополнительных манипуляций. Данный патч исправляет данную проблему и позволяет сделать спек независимым от используемой системы - systemd или sysvinit.

http://git.altlinux.org/people/piastry/packages/?p=service.git;a=commitdiff;h=950540de8cf8e5987c5694a529efded393ed8bfa
Comment 18 Dmitry V. Levin 2013-03-01 14:18:21 MSK
(In reply to comment #17)
> Решил написать сюда. Функционал, реализованный сейчас в service не позволяет
> использовать post_service и preun_service скрипты в спеке пакета с поддержкой
> systemd без дополнительных манипуляций.

Это не сюда, это в #27390.