Bug 27987 - Проверить и доработать совместимость с systemd
Summary: Проверить и доработать совместимость с systemd
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: alterator-fbi (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: manowar@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 27865
Blocks: 28008
  Show dependency tree
 
Reported: 2012-11-16 15:30 MSK by manowar@altlinux.org
Modified: 2013-06-28 22:48 MSK (History)
11 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description manowar@altlinux.org 2012-11-16 15:30:29 MSK

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

http://git.altlinux.org/tasks/84795
Comment 3 Repository Robot 2012-11-22 18:36:44 MSK
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 Mike 2012-12-04 17:14:18 MSK
В service файле не производится генерация ssl сертификата.
Comment 5 Mike 2012-12-04 17:16:55 MSK
в .socket юните не реализован механизм настройки номера порта через EnvironmentFile.
Comment 6 manowar@altlinux.org 2012-12-04 18:23:16 MSK
(В ответ на комментарий №4)
> В service файле не производится генерация ssl сертификата.

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

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

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

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

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

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

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

Если менять формат конфига, то с сохранением обратной совместимости.
При этом стоит учитывать, что переменных окружения с "-" в имени не бывает.
Comment 12 manowar@altlinux.org 2012-12-06 16:06:04 MSK
(В ответ на комментарий №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 Mike 2012-12-06 16:54:33 MSK
>   Я решил, что из-за одной-двух переменных не стоит городить огород. Потому что
> даже User=$server_user по какой-то причине, не работает.

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

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

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

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

Если я, всё таки, всё понял правильно, то выходит, что технических средств использовать EnvironmentFile в *.socket нет. Так что оставляем его как есть.
  Обновление SSL сейчас соберу.
Comment 16 Repository Robot 2012-12-07 15:03:32 MSK
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 Dmitry V. Levin 2012-12-07 15:13:17 MSK
$ 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 manowar@altlinux.org 2012-12-07 15:55:52 MSK
  Совсем. Я так понял, что мне был передан готовый рецепт. Но оказалось, что там было целых две ошибки. Правильно так:

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

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

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

# 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 Mike 2012-12-07 19:16:37 MSK
(В ответ на комментарий №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 manowar@altlinux.org 2012-12-07 19:26:45 MSK
(В ответ на комментарий №21)
> 1. Зачем делать "systemctl start ahttpd.service", как и enable, если
> используется socket активация?

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

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

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

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

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

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

  ОК. Эту багу можно считать закрытой?
Comment 23 Repository Robot 2012-12-10 16:11:34 MSK
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 Dmitry V. Levin 2012-12-10 16:16:26 MSK
(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 manowar@altlinux.org 2012-12-10 16:38:12 MSK
(В ответ на комментарий №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 Repository Robot 2012-12-10 18:21:29 MSK
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 Dmitry V. Levin 2012-12-12 04:29:53 MSK
Итак, что мы имеем в 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 manowar@altlinux.org 2012-12-12 13:31:20 MSK
(В ответ на комментарий №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 manowar@altlinux.org 2012-12-12 13:40:27 MSK
(В ответ на комментарий №27)
> Итак, что мы имеем в alterator-fbi-5.28-alt6:
> - ahttpd.service включается по умолчанию при установке пакета…
> - ahttpd.socket не включается по умолчанию при установке пакета…

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

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

Стало быть, "работает в некоторых случаях" и "работает в конфигурации по умолчанию" это теперь одно и то же?
Comment 31 manowar@altlinux.org 2012-12-12 15:20:38 MSK
(В ответ на комментарий №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 Mikhail Efremov 2012-12-12 15:34:08 MSK
> 4. Включаю оба юнита и перезагружаюсь. Панель управления доступна через
> браузер.

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

  Отключил ahttpd.socket. Перезагрузился. Служба работает и доступна.
Comment 34 manowar@altlinux.org 2012-12-13 14:48:22 MSK
(В ответ на комментарий №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 Mike 2012-12-14 15:25:17 MSK
(В ответ на комментарий №34)
>   Посмотрел openssh.spec и в его историю. Ничего про включение юнитов при
> установке не нашёл — только /sbin/service и chkconfig. Есть общепринятый способ
> это сделать? Или [пока ещё] нет?
> 
>   Может быть тогда просто делать нужные ссылки в
> /etc/systemd/system/*.target.wants ?

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

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