Bug 27987 - Проверить и доработать совместимость с systemd
: Проверить и доработать совместимость с systemd
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/alterator-fbi)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
: 27865
: 28008
  Show dependency tree
 
Reported: 2012-11-16 15:30 by
Modified: 2013-06-28 22:48 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2012-11-16 15:30:29

    
------- Comment #1 From 2012-11-21 20:03:25 -------
Перецепляю под отдельный bug #28008.
------- Comment #2 From 2012-11-22 15:43:34 -------
  Можно проверять:

http://git.altlinux.org/tasks/84795
------- Comment #3 From 2012-11-22 18:36:44 -------
alterator-fbi-5.28-alt1 -> sisyphus:

* Thu Nov 22 2012 Paul Wolneykien <manowar@altlinux> 5.28-alt1
- Do not daemonize in socket-activation mode (closes: 27865).
- Add the systemd unit files.
- Start the server on the given socket if any (closes: 27987).
------- Comment #4 From 2012-12-04 17:14:18 -------
В service файле не производится генерация ssl сертификата.
------- Comment #5 From 2012-12-04 17:16:55 -------
в .socket юните не реализован механизм настройки номера порта через
EnvironmentFile.
------- Comment #6 From 2012-12-04 18:23:16 -------
(В ответ на комментарий №4)
> В service файле не производится генерация ssl сертификата.

  А можно на пальцах, что имеется в виду? Проверка и обновление сертификата
скриптом в ExecStartPre? Или что-то более systemd-специфичное?
------- Comment #7 From 2012-12-04 18:25:38 -------
(В ответ на комментарий №5)
> в .socket юните не реализован механизм настройки номера порта через
> EnvironmentFile.

  С этим понятно, делал такое для squidmill. Есть пожелания, куда положить
конфигурационный файл? Хотя /etc/ahttpd.conf может подойти…
------- Comment #8 From 2012-12-05 19:29:33 -------
(В ответ на комментарий №6)
> (В ответ на комментарий №4)
> > В service файле не производится генерация ssl сертификата.
> 
>   А можно на пальцах, что имеется в виду? Проверка и обновление сертификата
> скриптом в ExecStartPre? Или что-то более systemd-специфичное?

Добавить перед ExecStart, директиву - "ExecPreStart=/usr/bin/cert-sh ahttpd"
------- Comment #9 From 2012-12-05 19:31:36 -------
(В ответ на комментарий №7)
> (В ответ на комментарий №5)
> > в .socket юните не реализован механизм настройки номера порта через
> > EnvironmentFile.
> 
>   С этим понятно, делал такое для squidmill. Есть пожелания, куда положить
> конфигурационный файл? Хотя /etc/ahttpd.conf может подойти…

Скорее всего да, нужно использовать /etc/ahttpd/ahttpd.conf. Только проверить
надо, сможет ли systemd распарсить такой конфиг.
------- Comment #10 From 2012-12-05 20:16:53 -------
(В ответ на комментарий №9)
> (В ответ на комментарий №7)
> > (В ответ на комментарий №5)
> > > в .socket юните не реализован механизм настройки номера порта через
> > > EnvironmentFile.
> > 
> >   С этим понятно, делал такое для squidmill. Есть пожелания, куда положить
> > конфигурационный файл? Хотя /etc/ahttpd.conf может подойти…
> 
> Скорее всего да, нужно использовать /etc/ahttpd/ahttpd.conf. Только проверить
> надо, сможет ли systemd распарсить такой конфиг.

  Ничего, если что, то мы немного прогнём конфиг в сторону systemd.
------- Comment #11 From 2012-12-06 01:54:09 -------
(В ответ на комментарий №9)
> Скорее всего да, нужно использовать /etc/ahttpd/ahttpd.conf. Только проверить
> надо, сможет ли systemd распарсить такой конфиг.

Не сможет. В man четко написано какой это должен быть конфиг:
The text file should contain new-line separated variable assignments.

(В ответ на комментарий №10)
>   Ничего, если что, то мы немного прогнём конфиг в сторону systemd.

Если менять формат конфига, то с сохранением обратной совместимости.
При этом стоит учитывать, что переменных окружения с "-" в имени не бывает.
------- Comment #12 From 2012-12-06 16:06:04 -------
(В ответ на комментарий №11)
> (В ответ на комментарий №9)
> > Скорее всего да, нужно использовать /etc/ahttpd/ahttpd.conf. Только проверить
> > надо, сможет ли systemd распарсить такой конфиг.
> 
> Не сможет. В man четко написано какой это должен быть конфиг:
> The text file should contain new-line separated variable assignments.
> 
> (В ответ на комментарий №10)
> >   Ничего, если что, то мы немного прогнём конфиг в сторону systemd.
> 
> Если менять формат конфига, то с сохранением обратной совместимости.
> При этом стоит учитывать, что переменных окружения с "-" в имени не бывает.

  Я решил, что из-за одной-двух переменных не стоит городить огород. Потому что
даже User=$server_user по какой-то причине, не работает.
------- Comment #13 From 2012-12-06 16:54:33 -------
>   Я решил, что из-за одной-двух переменных не стоит городить огород. Потому что
> даже User=$server_user по какой-то причине, не работает.

sem@ говорит, что systemd не может сорсить файл такого формата.
------- Comment #14 From 2012-12-06 16:58:12 -------
  Да нет, я уже не про формат, а про то, что, видимо, переменные можно
использовать только для ограниченного числа директив. И для User переменную
подставить нельзя.

  Как выяснилось, для ListenStream тоже.

[Socket]
EnvironmentFile=/etc/ahttpd/ahttpd.env
ListenStream=$server_port

Не работает. И Google ничего не находит по запросу systemd + ListenStream=$.
Видимо они там крепко что-то не доработали в этом systemd. Ну или я что-то
крепко не понял… :)
------- Comment #15 From 2012-12-07 14:54:19 -------
(В ответ на комментарий №5)
> в .socket юните не реализован механизм настройки номера порта через
> EnvironmentFile.

Если я, всё таки, всё понял правильно, то выходит, что технических средств
использовать EnvironmentFile в *.socket нет. Так что оставляем его как есть.
  Обновление SSL сейчас соберу.
------- Comment #16 From 2012-12-07 15:03:32 -------
alterator-fbi-5.28-alt4 -> sisyphus:

* Thu Dec 06 2012 Paul Wolneykien <manowar@altlinux> 5.28-alt4
- Check/generate the SSL certificate before starting the service
  from systemd (closes: 27987).
------- Comment #17 From 2012-12-07 15:13:17 -------
$ git --git-dir=/gears/a/alterator-fbi.git grep ExecPreStart sisyphus
sisyphus:alterator-fbi/systemd/system/ahttpd.service:ExecPreStart=/usr/bin/cert-sh
ahttpd

ExecPreStart?
Пакет с изменением в файле ahttpd.service перед отправкой в Сизиф не
тестировался на systemd совсем?
------- Comment #18 From 2012-12-07 15:55:52 -------
  Совсем. Я так понял, что мне был передан готовый рецепт. Но оказалось, что
там было целых две ошибки. Правильно так:

ExecStartPre=/usr/bin/cert-sh generate "ahttpd"

Проверил, сертификат обновляется. Но всё равно теперь прошу провести приёмку
перед отправкой в Сизиф: http://git.altlinux.org/tasks/85685/
------- Comment #19 From 2012-12-07 18:19:53 -------
(В ответ на комментарий №18)
>   Совсем. Я так понял, что мне был передан готовый рецепт. Но оказалось, что
> там было целых две ошибки. Правильно так:
> 
> ExecStartPre=/usr/bin/cert-sh generate "ahttpd"
> 
> Проверил, сертификат обновляется. Но всё равно теперь прошу провести приёмку
> перед отправкой в Сизиф: http://git.altlinux.org/tasks/85685/

генерация сертификата работает.
Нужно убрать из юнита директиву Also, она тут не нужна.
------- Comment #20 From 2012-12-07 18:39:17 -------
  А ты в курсе, что просто по

# systemctl start ahttpd.service

сервер не работает, поскольку процесс сразу же завершается. Необходимо, чтобы
сокет уже прослушивался (ahttpd.socket был запущен) к моменту запуска
ahttpd.service. Видимо, я его слишком заточил на socket activation.

И вроде бы именно это и рекомендуется в мануале:
--- Type=simple ---
In this mode, if the process offers functionality to other processes on the
system its communication channels should be installed before the daemon is
started up (e.g. sockets set up by systemd, via socket activation).
---

И хотя директива Also=ahttpd.socket не помогает запускать прослушивание сокета
при старте службы, она хотя бы синхронизирует enable/disable. Точно нужно
убрать её?
------- Comment #21 From 2012-12-07 19:16:37 -------
(В ответ на комментарий №20)
>   А ты в курсе, что просто по
> 
> # systemctl start ahttpd.service
> 
> сервер не работает, поскольку процесс сразу же завершается. Необходимо, чтобы
> сокет уже прослушивался (ahttpd.socket был запущен) к моменту запуска
> ahttpd.service. Видимо, я его слишком заточил на socket activation.
> 
> И вроде бы именно это и рекомендуется в мануале:
> --- Type=simple ---
> In this mode, if the process offers functionality to other processes on the
> system its communication channels should be installed before the daemon is
> started up (e.g. sockets set up by systemd, via socket activation).
> ---
> 
> И хотя директива Also=ahttpd.socket не помогает запускать прослушивание сокета
> при старте службы, она хотя бы синхронизирует enable/disable. Точно нужно
> убрать её?

1. Зачем делать "systemctl start ahttpd.service", как и enable, если
используется socket активация?
2. Ты не правильно трактуешь документацию
3. Почему реализовал поддержку socket активации в ahttpd, выкинув возможность
работы без оной? (cups работает как с socket активацией, так и без нее)
4. Параметр "Alsо" не нужен
------- Comment #22 From 2012-12-07 19:26:45 -------
(В ответ на комментарий №21)
> 1. Зачем делать "systemctl start ahttpd.service", как и enable, если
> используется socket активация?

  Я просто не знаю, как происходит загрузка системы с systemd. Если ты
считаешь, что это нормальное поведение, то так и скажи.

> 2. Ты не правильно трактуешь документацию

  Очень возможно.

> 3. Почему реализовал поддержку socket активации в ahttpd, выкинув возможность
> работы без оной? (cups работает как с socket активацией, так и без нее)

  Здесь тонкий момент. Прямой запуск ahttpd работает без всяких дополнительных
сокетов, и обратная совместимость сохранена. Но при запуске через `systemctl
start ahttpd` процесс моментально завершается. Может быть systemd передаёт ему
закрытый сокет? Буду разбираться.

> 4. Параметр "Alsо" не нужен

  ОК. Эту багу можно считать закрытой?
------- Comment #23 From 2012-12-10 16:11:34 -------
alterator-fbi-5.28-alt5 -> sisyphus:

* Mon Dec 10 2012 Paul Wolneykien <manowar@altlinux> 5.28-alt5
- Add the 'PIDFile' option to the service unit.
- Remove the 'Also=ahttpd.socket' option.
- Fix the service unit file syntax and the SSL generator command
  (closes: 27987).
------- Comment #24 From 2012-12-10 16:16:26 -------
(In reply to comment #23)
> alterator-fbi-5.28-alt5 -> sisyphus:
> 
> * Mon Dec 10 2012 Paul Wolneykien <manowar@altlinux> 5.28-alt5
> - Add the 'PIDFile' option to the service unit.

Зачем PIDFile?  Разве его кто-то создает для simple service?
------- Comment #25 From 2012-12-10 16:38:12 -------
(В ответ на комментарий №24)
> (In reply to comment #23)
> > alterator-fbi-5.28-alt5 -> sisyphus:
> > 
> > * Mon Dec 10 2012 Paul Wolneykien <manowar@altlinux> 5.28-alt5
> > - Add the 'PIDFile' option to the service unit.
> 
> Зачем PIDFile?  Разве его кто-то создает для simple service?

  Я думал, что может быть это поможет идентифицировать процесс, запущенный не
через systemd. Но раз не нужен, уберу тогда.
------- Comment #26 From 2012-12-10 18:21:29 -------
alterator-fbi-5.28-alt6 -> sisyphus:

* Mon Dec 10 2012 Paul Wolneykien <manowar@altlinux> 5.28-alt6
- Remove the 'PIDFile' option from the service unit file
  (closes: 27987).
------- Comment #27 From 2012-12-12 04:29:53 -------
Итак, что мы имеем в alterator-fbi-5.28-alt6:
- ahttpd.service упакован, это хорошо;
- ahttpd.socket упакован, это хорошо;
- systemctl start ahttpd.service не работает, см.
https://bugzilla.altlinux.org/show_bug.cgi?id=27987#c20 , это плохо;
- ahttpd.service включается по умолчанию при установке пакета, что в сочетании
с предыдущим пунктом получается плохо;
- ahttpd.socket не включается по умолчанию при установке пакета, что в
сочетании с предыдущим пунктом получается совсем плохо.

2 manowar@, amike@: Пожалуйста, относитесь к своей работе профессионально!
Мне надоело исполнять обязанности QA и в который раз уже переоткрывать этот
баг.  Или вам не надо, чтобы ahttpd работал из коробки в дистрибутивах?
Напрягитесь уже, что ли, заставьте себя внимательнее прочитать документацию по
systemd, если без этого не получается, тестируйте тщательнее!
------- Comment #28 From 2012-12-12 13:31:20 -------
(В ответ на комментарий №27)
> - systemctl start ahttpd.service не работает, см.
> https://bugzilla.altlinux.org/show_bug.cgi?id=27987#c20 , это плохо;

  Дим, ну работает же.

# rpm -q alterator-fbi
alterator-fbi-5.28-alt6

# systemctl status ahttpd.socket
ahttpd.socket - Alterator WWW frontend server (socket)
      Loaded: loaded (/lib/systemd/system/ahttpd.socket; enabled)
      Active: inactive (dead) since Wed, 2012-12-12 13:27:20 MSK; 11s ago
      CGroup: name=systemd:/system/ahttpd.socket

# systemctl status ahttpd.service
ahttpd.service - Alterator WWW frontend server
      Loaded: loaded (/lib/systemd/system/ahttpd.service; enabled)
      Active: inactive (dead) since Wed, 2012-12-12 13:27:17 MSK; 39s ago
     Process: 27846 ExecStart=/usr/sbin/ahttpd (code=killed, signal=TERM)
     Process: 27838 ExecStartPre=/usr/bin/cert-sh generate ahttpd (code=exited,
status=0/SUCCESS)
      CGroup: name=systemd:/system/ahttpd.service

# systemctl start ahttpd.service

# systemctl status ahttpd.service
ahttpd.service - Alterator WWW frontend server
      Loaded: loaded (/lib/systemd/system/ahttpd.service; enabled)
      Active: active (running) since Wed, 2012-12-12 13:28:16 MSK; 7s ago
     Process: 2764 ExecStartPre=/usr/bin/cert-sh generate ahttpd (code=exited,
status=0/SUCCESS)
    Main PID: 2772 (ahttpd)
      CGroup: name=systemd:/system/ahttpd.service
          └ 2772 /usr/bin/guile18 -s /usr/sbin/ahttpd


Я бы не стал закрывать баг, если бы не работало.
------- Comment #29 From 2012-12-12 13:40:27 -------
(В ответ на комментарий №27)
> Итак, что мы имеем в alterator-fbi-5.28-alt6:
> - ahttpd.service включается по умолчанию при установке пакета…
> - ahttpd.socket не включается по умолчанию при установке пакета…

  Ничего нового, про %post_service/%preun_service или их аналоги на
altlinux.org не написано (плохо искал?). Я сделал вывод, что текущее поведение
умолчательное и правильное.

  Там ещё пачка триггеров, использующих /sbin/service и /sbin/chkconfig. Что с
ними-то делать?
------- Comment #30 From 2012-12-12 14:14:40 -------
(In reply to comment #28)
> (В ответ на комментарий №27)
> > - systemctl start ahttpd.service не работает, см.
> > https://bugzilla.altlinux.org/show_bug.cgi?id=27987#c20 , это плохо;
> 
>   Дим, ну работает же.

Стало быть, "работает в некоторых случаях" и "работает в конфигурации по
умолчанию" это теперь одно и то же?
------- Comment #31 From 2012-12-12 15:20:38 -------
(В ответ на комментарий №30)
> (In reply to comment #28)
> > (В ответ на комментарий №27)
> > > - systemctl start ahttpd.service не работает, см.
> > > https://bugzilla.altlinux.org/show_bug.cgi?id=27987#c20 , это плохо;
> > 
> >   Дим, ну работает же.
> 
> Стало быть, "работает в некоторых случаях" и "работает в конфигурации по
> умолчанию" это теперь одно и то же?

1. Удалил alterator-fbi и все конфиги. Перезагрузил.
2. Поставил alterator-fbi. Теперь уже точно «конфигурация по умолчанию».
3. Наблюдаю и ahttpd.service, и ahttpd.socket в состоянии disabled, в то время
как ты пишешь, что один из них включается сам при установке пакета. Что я делаю
не так?
4. Включаю оба юнита и перезагружаюсь. Панель управления доступна через
браузер.

По поводу включения юнитов при установке. Могу добавить в спек строки вроде

/bin/systemctl enable ahttpd.socket || chkconfig ahttpd on

Или есть лучший способ?
------- Comment #32 From 2012-12-12 15:34:08 -------
> 4. Включаю оба юнита и перезагружаюсь. Панель управления доступна через
> браузер.

Все-таки хотелось бы уточнить: а если enabled только ahttpd.service?
------- Comment #33 From 2012-12-12 16:02:32 -------
(В ответ на комментарий №32)
> > 4. Включаю оба юнита и перезагружаюсь. Панель управления доступна через
> > браузер.
> 
> Все-таки хотелось бы уточнить: а если enabled только ahttpd.service?

  Отключил ahttpd.socket. Перезагрузился. Служба работает и доступна.
------- Comment #34 From 2012-12-13 14:48:22 -------
(В ответ на комментарий №31)
> (В ответ на комментарий №30)
> > (In reply to comment #28)
> > > (В ответ на комментарий №27)

> > > ahttpd.service включается по умолчанию при установке пакета…
> > > ahttpd.socket не включается по умолчанию при установке пакета

> По поводу включения юнитов при установке. Могу добавить в спек строки вроде
> 
> /bin/systemctl enable ahttpd.socket || chkconfig ahttpd on
> 
> Или есть лучший способ?

  Посмотрел openssh.spec и в его историю. Ничего про включение юнитов при
установке не нашёл — только /sbin/service и chkconfig. Есть общепринятый способ
это сделать? Или [пока ещё] нет?

  Может быть тогда просто делать нужные ссылки в
/etc/systemd/system/*.target.wants ?
------- Comment #35 From 2012-12-14 15:25:17 -------
(В ответ на комментарий №34)
>   Посмотрел openssh.spec и в его историю. Ничего про включение юнитов при
> установке не нашёл — только /sbin/service и chkconfig. Есть общепринятый способ
> это сделать? Или [пока ещё] нет?
> 
>   Может быть тогда просто делать нужные ссылки в
> /etc/systemd/system/*.target.wants ?

Сейчас этот вопрос решается с ldv@, т.к. chkonfig ничего не знает о .socket,
.path и .target юнитах. 
Так же не включаются по умолчанию сервисы с имеющимися init-скриптами.
------- Comment #36 From 2013-01-19 17:00:18 -------
(В ответ на комментарий №35)
> (В ответ на комментарий №34)
> >   Посмотрел openssh.spec и в его историю. Ничего про включение юнитов при
> > установке не нашёл — только /sbin/service и chkconfig. Есть общепринятый способ
> > это сделать? Или [пока ещё] нет?
> > 
> >   Может быть тогда просто делать нужные ссылки в
> > /etc/systemd/system/*.target.wants ?
> 
> Сейчас этот вопрос решается с ldv@, т.к. chkonfig ничего не знает о .socket,
> .path и .target юнитах. 
> Так же не включаются по умолчанию сервисы с имеющимися init-скриптами.

2ldv@, glebfm@, boyarsh@: Очень(!) прошу решить "этот вопрос", уже пора!
------- Comment #37 From 2013-06-28 22:48:15 -------
  Насколько мне известно, всё давно уже готово.