Summary: | add systemd support | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Alexey Shabalin <shaba> | ||||||||||
Component: | service | Assignee: | placeholder <placeholder> | ||||||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||||
Severity: | normal | ||||||||||||
Priority: | P3 | CC: | aen, evg, glebfm, ldv, legion, piastryyy, placeholder, radik, shaba | ||||||||||
Version: | unstable | ||||||||||||
Hardware: | all | ||||||||||||
OS: | Linux | ||||||||||||
Attachments: |
|
Description
Alexey Shabalin
2011-01-28 20:10:48 MSK
Created attachment 4781 [details]
add systemd support
(In reply to comment #0) > Прошу добавить поддержку systemd в service. > > PS: В приведенном патче мне не нравится двойная поверка. Если от неё > избавлятся, то надо убирать check_service(). Двойная статическая проверка не страшна. А вот зачем нужна эта строка: echo "Redirecting to /bin/systemctl $OPTIONS $SERVICE.service" >/dev/stderr ? (В ответ на комментарий №2) > (In reply to comment #0) > > Двойная статическая проверка не страшна. А вот зачем нужна эта строка: > echo "Redirecting to /bin/systemctl $OPTIONS $SERVICE.service" >/dev/stderr > ? Согласен, это строка не нужна, даже вредна. PS: вот к чему приводит copy-paste из других дистрибутивов. Created attachment 4830 [details]
обновлённый
обновление поддержки systemd
(In reply to comment #4) > Created an attachment (id=4830) [details] > обновлённый Тут написано, что в случае когда $SYSTEMCTL есть, $SERVICEDIR/$SERVICE тоже есть, а $SYSTEMDSERVICEDIR/$SERVICE.service нет, нужно запускать $SYSTEMCTL. Другими словами, что SYSTEMCTL умеет запускать $SERVICEDIR/$SERVICE. Это правильно? (В ответ на комментарий №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
(In reply to comment #6) > systemd умеет работать с init-скриптами SysV. тогда патч можно будет упростить > Правда есть ещё одна проблема: когда systemctl есть в системе, но мы по > прежнему используем SysVinit. Если systemd не запущен, то systemctl сделать > ничего не сможет. Надо бы еще проверять действительно systemd запущен. конечно, надо, но как? (В ответ на комментарий №7) > > Правда есть ещё одна проблема: когда systemctl есть в системе, но мы по > > прежнему используем SysVinit. Если systemd не запущен, то systemctl сделать > > ничего не сможет. Надо бы еще проверять действительно systemd запущен. > > конечно, надо, но как? Пока только придумал проверять наличие директории /sys/fs/cgroup/systemd Её создаёт сам systemd, и без cgroup работать не будет. Created attachment 4832 [details]
proposed patch
(In reply to comment #8) > Пока только придумал проверять наличие директории > /sys/fs/cgroup/systemd > Её создаёт сам systemd, и без cgroup работать не будет. Можно попробовать потестировать приложенный патч. (В ответ на комментарий №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 Может так и правильней - это именно точка монтирования. опробовал этот вариант патча - работает нормально. Достаточно ли проверять только наличие директории? Или лучше /bin/mountpoint -q /sys/fs/cgroup/systemd? PS: ждём в сизифах нашего города :) Created attachment 4836 [details]
proposed change
(In reply to comment #12) > опробовал этот вариант патча - работает нормально. > Достаточно ли проверять только наличие директории? Или лучше > /bin/mountpoint -q /sys/fs/cgroup/systemd? Новая редакция патча, с проверкой на mountpoint. Вроде бы должна устроить всех, проверьте. проверил - работает. 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). Решил написать сюда. Функционал, реализованный сейчас в service не позволяет использовать post_service и preun_service скрипты в спеке пакета с поддержкой systemd без дополнительных манипуляций. Данный патч исправляет данную проблему и позволяет сделать спек независимым от используемой системы - systemd или sysvinit. http://git.altlinux.org/people/piastry/packages/?p=service.git;a=commitdiff;h=950540de8cf8e5987c5694a529efded393ed8bfa (In reply to comment #17) > Решил написать сюда. Функционал, реализованный сейчас в service не позволяет > использовать post_service и preun_service скрипты в спеке пакета с поддержкой > systemd без дополнительных манипуляций. Это не сюда, это в #27390. |