LINUX.ORG.RU

Можно ли сделать deb для systemd и других init'ов одновременно?

 ,


1

2

У меня есть небольшое Java приложение для которого у меня был простой SysV скрипт. Оно было запаковано в deb с архитектурой all и единственной зависимостью от java-runtime. И вот теперь у меня проблема с systemd.

Можно ли как-то сделать deb пакет чтобы он был универсальным и включал и SysV скрипт и systemd юнит, а в пост-инсталл бы детектировал systemd и линоквал бы юнит в /etc/systemd/system, а если нет, то SysV скрипт в /etc/init.d?

Учитывая мой почти нулевой опыт с systemd я никак не могу найти ответа...

Сустемд умеет в SysVinit-скрипты. Собственно, я на дебиан тестинг и тут почти добрая половина инитов старые, а уже заморозка. Значит еще один релиз и несколько лет можно смело забивать.

И вот теперь у меня проблема с systemd.

И в чем она выражается? Только в осознании факта наличия сустемд в качестве изкоробочного инита или есть реальные затыки?

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 1)
Ответ на: комментарий от mandala

Я попробовал, но оно не работает. То есть /etc/init.d/myapp start работает, а systemctl start myapp не работает. Не запускает процесс и остаётся в active (exited) состоянии.

Наверняка что-то в этом инит-скрипте не так, что он не нравится ковертеру systemd, но я не думаю что на выяснение что именно там не так стоит тратить время. Я бы написал просто unit, но вот не могу найти ни одного примера или документации о том как детектить systemd

voronaam ★★
() автор топика
Ответ на: комментарий от arcanis

В дебиане 8 и 9 после установки sysvinit сустемд ни куда не девается, а update-grub2 (который сразу запускается через постинсталл при отключении сустемд) даже автоматом добавляет отдельный пункт с загрузкой systemd в качестве инита. Так что любой не подойдет, но первый вполне.

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 2)
Ответ на: комментарий от voronaam

Я бы написал просто unit, но вот не могу найти ни одного примера или документации о том как детектить systemd

Костыльно слишком: а если переключиться на загрузку другого инита? Штатный функционал сейчас в тестинге (выше описал). Может проще два пакета собрать и пусть друг друга удаляют/конфликтуют.

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 3)

Не изобретай велосипед, положи в пакет .service (по желанию можешь и для usptart с openrc файлики положить) и добавляй в загрузку с помощью update-rc.d, который сам сделает остаток работы для текущего инита.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

А вот это отлично, надо доверять существующим тулзам. Спасибо!

voronaam ★★
() автор топика
Ответ на: комментарий от voronaam

ЕМНИП, при /etc/init.d/myapp start всё равно дергается обработчик systemd.

Я лично использую service myapp start|stop|restart|status|etc, чтобы не гадать.

Radjah ★★★★★
()

Если вдруг кому интересно, я в итоге сделал и SysV скрипт и systemd юнит и в пост-инсталл сприкпте и поставил симлинк. systemd сам выбирает свой юнит и игнорирует SysV скрипт если имя сервиса одно и то же.

voronaam ★★
() автор топика
Последнее исправление: voronaam (всего исправлений: 1)
Ответ на: комментарий от voronaam

Я бы написал просто unit, но вот не могу найти ни одного примера или документации о том как детектить systemd

man sd_booted
sd_booted - Test whether the system is running the systemd init system

Internally, this function checks whether the directory /run/systemd/system/ exists. A simple check like this can also be implemented trivially in shell or any other language.

anonymous00 ★★
()
Последнее исправление: anonymous00 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.