LINUX.ORG.RU

Пользовательские сервисы OpenRC: инструкция по применению

 , , ,


5

3

Как я уже писал раньше, в систему инициализации OpenRC недавно добавлена возможность запускать сервисы в пользовательской сессии. В этой статье я покажу, как этим пользоваться, на примере pipewire в Alpine Linux.

Что было раньше

Раньше в пакете с pipewire поставлялся (и до сих пор поставляется) скрипт /usr/libexec/pipewire-launcher, который предлагалось прописывать в конфиге sway. Особенность этого сетапа в том, что после остановки Sway все запущенные им в background процессы оставались висеть в памяти, и перед последующим запуском их предлагалось прибивать с помощью pkill. Не говоря уже про полное отсутствие логов, их не было.

Чтобы решить эти проблемы, нужно запускать pipewire в пользовательской сессии под супервизором. Собственно я так и делал при помощи s6, однако добавление пользовательских сервисов в OpenRC, а также соответствующих конфигов в пакеты в репозиториях Alpine позволяет отказаться от этих скриптов и пользоваться тем, что поддерживают мейнтейнеры дистрибутива.

Версии

Пользовательские сервисы были добавлены в OpenRC 0.60. Версия в репозиториях Alpine Edge на данный момент - 0.60.1. Используется pipewire 1.4.1 и wireplumber 0.5.8.

Зависимости

Для поддержки пользовательских сервисов нужно установить пакет openrc-user. Он содержит необходимые исполняемые файлы (openrc-user и openrc-user-pam), а также PAM-модуль pam_openrc.so.

PAM

Есть два способа запуска пользовательской сессии OpenRC: как сервис

$ doas rc-service user.${USER} start

и через PAM.

Предпочтительным является второй способ. Для того чтобы им воспользоваться, нужно подключить соответствующий PAM-модуль стандартным способом:

$ cat /etc/pam.d/base-session 
# ...
-session optional pam_rundir.so
session optional pam_openrc.so

Если $XDG_RUNTIME_DIR не создается автоматически, то нужно об этом позаботиться. Для этого я применяю еще один модуль pam-rundir (есть в репозиториях).

Перезагружаемся и проверяем, что пользовательская сессия работает:

$ rc-status --user

После этого можно запускать сервисы.

Запуск сервиса

В репозитории Alpine Linux уже начали добавлять файлы конфигурации пользовательских сервисов для разных пакетов, поэтому руками ничего писать не надо (если вы конечно не хотите запилить что-то свое кастомное):

$ rc-update --user add dbus default

Эта команда заставляет dbus автоматически запускаться при старте пользовательской сессии, являясь аналогом systemctl --user enable dbus. Симлинки на включенные сервисы располагаются в папке ~/.config/rc/runlevels, а сами конфиги лежат в /etc/user/init.d и /etc/user/conf.d.

Переменные окружения

DBus относится к типу сервисов, которые должны устанавливать особую переменную окружения, в данном случае $DBUS_SESSION_BUS_ADDRESS, для всех кто от них зависит. К таким зависящим относятся пользовательские сервисы и Sway. Раньше был только Sway, и подобная зависимость легко решалась тем что он запускался как потомок dbus-run-session:

cat /usr/share/wayland-sessions/sway.desktop | grep dbus
Exec=dbus-run-session /usr/bin/sway

Однако сейчас такой фокус не пройдет, потому что пользовательские сервисы запускаются независимо от Sway. И больше того, в OpenRC пока нет механизма, позволяющего сервисам подтягивать переменные окружения из их зависимостей. PR создан, но пока не смержен, поэтому $DBUS_SESSION_BUS_ADDRESS надо устанавливать вручную. Для этого предлагается использовать следующий кусок кода:

$ source /etc/user/conf.d/dbus

$ # в файле содержится вот такое:
$ cat /etc/user/conf.d/dbus
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"

Прописываем его перед запуском Sway, убрав там dbus-run-session, а также в conf.d всех релевантных пользовательских сервисов.

pipewire

Наконец, после всех этих манипуляций, можно запускать pipewire:

$ rc-update --user add pipewire default
$ rc-update --user add wireplumber default
$ rc-update --user add pipewire-pulse default

…работает! Для себя я сделал вывод, что несмотря на то что реализованы еще не все желаемые фичи, такой сетап уже вполне пригоден к использованию. На данный момент пользовательские сервисы добавлены для следующих пакетов в репозиториях Alpine:

  • gnome-keyring
  • kanshi
  • pipewire
  • wireplumber
  • wlsunset
  • dbus
★★★★★

Проверено: hobbit ()
Ответ на: комментарий от gaylord

Теперь ты знаешь что ответить (или ожидать) в философских дебатах.

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

По существу есть что сказать?

Юзерам теперь будет предлагаться нормальный способ запуска пайпвари (вместо скрипта с & и pkill), а я могу отказаться от части самописных конфигов. Это безусловно плюсы.

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

Юзерам теперь будет предлагаться нормальный способ запуска пайпвари (вместо скрипта с & и pkill), а я могу отказаться от части самописных конфигов. Это безусловно плюсы.

Плюсы страдания с OpenRC. Сделать-то можно, но зачем? Люди придут, статью увидят, пойдут страдать, пару лет будут делать вид что им нравится, потом поймут что страдали ради страдания и поставят KDE. Может проще сразу KDE?

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

В KDE нет педофилов среди авторов

Я от жизни opensource-ной сильно отстал, поэтому o_O

Или ты прикалываешься?

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

О, так это классика, когда очередной товарищ обвиняет других в том что сам делает. Гектор Мартин точно такой же.

И ЧСХ оба свалили из публичных соцсетей, когда их вывели на чистую воду. Теперь видимо общаются только в закрытых чатах со своими друзьями-фриками.

Что до sway то Деволт не только уже несколько лет не имеет к нему отношения, но ещё и посрался с его нынешним мейнтейнером. Что в плюс последнему.

Вообще я давно хотел поюзать что-нибудь кроме sway, и желательно wlroots. В hyprland разрабы занимаются фигней. Остаётся ещё miracle-wm, его я пока не тыкал.

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

Пользовательские сервисы были добавлены в OpenRC 0.60.

В основную ветку? Или в форк? У меня в Gentoo есть пакет sys-apps/openrc-navi с описанием «OpenRC fork with user services support».

Основная ветка хостится на https://github.com/openrc/openrc/
Форк хостится на https://github.com/navi-desu/openrc/

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

Если твоя цель пердолиться — то openrc и правда твой выбор. В остальном, вся инфраструктура отрицателей systemd слегка сдохла: поддержка eudev и elogind прекращена. Alpine убедил поцтеринга сделать изолированную сборку этих компонентов проще, и собирается нести их в дистрибутив. Можно, конечно, и дальше делать вид, что openrc чем-то удобнее, но зачем?

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

Вот я пользуюсь опенрц уже лет 15. Я задал простой вопрос: что мне даст переход на системд? Это так сложно кратко описать?

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

Так я тебе ответил: отсутствие пердолева из-за самостоятельной поддержки нишевого RC, который никто не тестирует.

gaylord
()
Ответ на: комментарий от LightDiver

Оно не тестируется с DE. Поэтому в KDE постоянно прилетает куча багов в духе «у меня опенрц и ничего не работает».

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

Ну так пусть тестируют. Или пусть отказываются от поддержки Опенрц. Мне то как юзеру какое до этого дело? У меня все работает.

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

Бога ради. Но не все живут в лесу и молятся колесу. Люди вот RDP в KDE пользуются, а он полгода с openrc сломан был.

gaylord
()
Ответ на: комментарий от LightDiver

Ваще пофиг. Суть в том, что если твой набор фичей работает – ваще классно. Но в общем случае это не так и пользователи регулярно огребают.

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

Ничего подобного. Лес и степь - вообще различные биомы. Разница огромна.

В отличие от системд и опенрц - что то херня, что это херня. Я как пользователь разницы не вижу никакой. Только какие то специализированные нюансы «для программистов».

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

В отличие от системд и опенрц - что то херня, что это херня. Я как пользователь разницы не вижу никакой. Только какие то специализированные нюансы «для программистов».

Ясно.

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

Кстати, я сам тут сижу гадаю, а каким боком система инициализации к рдп?

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

А причём тут система инициализации?

Там кто-то захардкодил включение сервиса с помощью пользовательских юнитов systemd. У всех остальных развалилось. Но, поскольку в лялексе никто не тестирует ничего кроме systemd, заметили это только после выпуска релиза. Баг висит с осени 2024, кстати. Все ещё открыт :DDD

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

Нуу.. В последних кедах вообще много чего сломали. Тут не думаю, что это вина опенрц. Они кучу фич выпилили (некоторые не работали по 20 лет и больше, к слову). Что то просто сломали.

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

Нуу.. В последних кедах вообще много чего сломали. Тут не думаю, что это вина опенрц. Они кучу фич выпилили (некоторые не работали по 20 лет и больше, к слову). Что то просто сломали.

Никто не говорит вина это OpenRC или нет. Но есть факт: кроме отдельных выдающихся личностей, никто не заморачивается тестированием альтернативных инитов.

gaylord
()
Ответ на: комментарий от LightDiver

Ты замечаешь, что то же самое можно сказать про винду и линукс?

Не особо. Кроссплатформенный софт, которым я пользуюсь, под Линукс тестируют. Даже Steam под Линукс тестируют. Дикие времена, когда страдальцы из wine тащили все в соло, уже кончились.

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

Там нечем наслаждаться, одно сплошное пердолево же. Все то, что шиштемд дает из коробки запуском пяти сервисов, приходится из говна и палок делать руками. Зачем? Ради чего? Никто не знает.

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

Не знаю где ты там нашёл пердолево, если у меня всё из коробки работает. Покажи пальцем.

Или может OpenRC тебя как-то обидел? Что-то плохое с тобой сделал?

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

Не знаю где ты там нашёл пердолево, если у меня всё из коробки работает.

Давай начнем с очевидного – жрунала нет. udev’а нет, надо ставить мертый eudev. logind нет, надо ставить мертвый elogind. tmpfiles.d нет, надо руками пердолиться. Логи сервисов на старте пишутся в отдельны файл, и то, если ты лично руками это напердолил. Формат файла максимально нечитаемый. Ротации логов тоже нет, надо пердолить logrotate. Нет resolved, надо пердолить руками через dnsmasq или openresolv или ещё какую срань. Поддержка cgroups очень рудиментарная.

Я знаю что сейчас начнется парад «я запустил sway из консоли обмазов его переменными окружения и все замечательно!», но не все же хотят жить как животные.

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

Ну-ну. А eudev вроде как теперь и не нужен, типа можно udev без systemd юзать. Гентушники же как-то живут уже давно без eudev. Вообще это редкостная дурь была вливать udev в systemd. Ну понятно зачем так сделали, чтобы всех загнать на сисямду. Но теперь это не нужно уже, можно и обратно отпилить.

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

Ну-ну. А eudev вроде как теперь и не нужен, типа можно udev без systemd юзать. Гентушники же как-то живут уже давно без eudev. Вообще это редкостная дурь была вливать udev в systemd. Ну понятно зачем так сделали, чтобы всех загнать на сисямду. Но теперь это не нужно уже, можно и обратно отпилить.

Да, все так. В свете этого начинает вставать вопрос, а смысл в альтернативных инитах-то какой? Если весь стек все равно от systemd. Сотни пердоликов по всему Интернету страдали какой systemd сложный, а вот openrc и sysv ваще простые и сейчас все сделаем.

А в итоге поцтеринг в одни щщи затащил весь базовый Линукс. Ставишь systemd и тебе хорошо. А чтобы заменить его части, надо пердолиться. Вопрос – а зачем, если все уже написано, стандартизировано и протестировано?

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

Там даже этого не было?

// Счастливый пользователь systemd

gremlin_the_red ★★★★★
()

В вики добавьте как статью, пожалуйста

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

Давай начнем с очевидного – жрунала нет

не нужно

udev’а нет, надо ставить мертый eudev

хрень, можно сделать гораздо лучше. И я сделаю, когда руки дойдут.

logind нет, надо ставить мертвый elogind

не нужно ни в виде logind, ни в виде elogind

tmpfiles.d нет, надо руками пердолиться

ни разу не возникало желание пользоваться ничем подобным. То есть, не нужно.

Логи сервисов на старте пишутся в отдельны файл, и то, если ты лично руками это напердолил. Формат файла максимально нечитаемый. Ротации логов тоже нет, надо пердолить logrotate

output_logger шлет вывод сервиса той программе, которую укажешь. В моем случае это s6-log, который позволяет конфигурировать и формат, и ротацию.

Что до журналд, то из-за него на рядовом линукс-десктопе насраны гигабайты бинарных логов, которые никому нафиг не нужны и которые никто никогда не посмотрит. В сети куча статей типа такой о том как все это чистить. Ручной пердолинг, или это другое?

Нет resolved, надо пердолить руками через dnsmasq или openresolv или ещё какую срань

местные фанаты сустемд тут годами затирали, что resolved отдельный независимый сервис и вообще. А сейчас оказывается что его отсутствие - это недостаток. Кто из вас идиот? Спойлер, вы все. Кстати resolved надо конфигурировать руками точно так же как dnsmasq и openresolv, мне приходилось это делать.

Поддержка cgroups очень рудиментарная.

какой процент юнитов в репозитории арча в принципе использует cgroups, хоть пара наберется? Из тех которые запилены не корпоратами из redhat? Смешно.

Я знаю что сейчас начнется парад «я запустил sway из консоли обмазов его переменными окружения и все замечательно!», но не все же хотят жить как животные.

вали на макось с оффтопиком и пользуйся ими. Что ты тут вообще забыло, неживотное?

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

Вот пришел системд-хейтер и начал рассказывать как сделать как в системд только с помощью изоленты, а если нельзя, то не очень-то и хотелось. Классика.

gaylord
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.