Основы OpenRC для чайников. Команды, демоны и уровни запуска. Linux статьи
Написать статью
Войдите, чтобы писать статьи

Основы OpenRC для чайников. Команды, демоны и уровни запуска

40

openrc настройка

Материал написан пользователем сайта.

Если вы зашли на эту статью, то, вероятно, хотите узнать об использовании системы инициализации OpenRC. Она довольно широко используется во многих дистрибутивах, таких как Gentoo, Artix, Devuan и некоторых других. В данном материале я попробую просто и понятно показать базовое использование OpenRC. Начнем!

Runlevel или "Уровни запуска"

Думаю, название говорит само за себя: Уровень выполнения (Runlevel) представляет собой уровень запуска процессов при инициализации системы. Всего существует 7 стандартных уровней, однако скорее всего вы будете использовать только 3: sysinit, boot, default.

Чем же отличаются эти "runlevels"?

sysinit - инициализирует систему и базовые компоненты. Например: cgroups, devfs, sysfs, udev.

boot - запускает все процессы, необходимые для работы операционной системы или других процессов. Например: bootmisc, hwclock, modules, swap, root.

default - запускает уже "кастомные" процессы пользователя. Например: dbus, cupsd, elogind, ntpd и иные.

В большинстве случаев вам хватит использования уровня "default", поэтому давайте посмотрим, как добавить нужный демон в автозагрузку:

# rc-update add имясервиса default

Чтобы удалить сервис, напишем следующее:

# rc-update del имясервиса default

Управление состоянием сервиса

Для старта демона напишем:

# rc-service имясервиса start

Чтобы перезагрузить:

# rc-service имясервиса restart

Для завершения процесса используем:

# rc-service имясервиса stop

Листинг доступных сервисов и их уровень запуска

# rc-update show -v

Ваши собственные "демоны", или скрипты запуска команд при старте

Все сервисы располагаются в директории /etc/init.d. Соответственно, перейдем туда:

cd /etc/init.d

Предположим, мы хотим скачивать главную страницу pingvinus.ru на наш компьютер локально в директорию /home/user/webpages. Для этого создадим файл (название может быть любым) и напишем туда следующее содержание:

#!/sbin/openrc-run

depend () {
      need networking
      after bootmisc
}

start() {
      wget -P /home/user/webpages pingvinus.ru
}

Поясню по содержанию файла. Функция depend отвечает за требования, которые должны быть выполнены перед запуском нашей команды. В данном случае мы требуем наличие выхода в Интернет и запуск процесса после старта bootmisc (полная базовая инициализация). Если вашему софту, например, нужен D-Bus для работы, то обязательно укажите его после after, а иначе процесс может не запуститься или работать некорректно.

После всех изменений мы сохраняем файл и даем ему разрешение на запуск с помощью следующей команды:

# chmod +x pingvinus

Далее добавим его в автозагрузку:

# rc-update add pingvinus default

Браво! Мы написали простейший сервис для OpenRC!

Отслеживание состояния сервисов

Состояние всех сервисов:

# rc-status --servicelist

Состояние одного конкретного демона:

# rc-service имясервиса status

Свои уровни запуска и как это может помочь

Смоделируем ситуацию: вы хотите проксировать ваш трафик в некую страну N. И вы хотите, чтобы это было на самом низком уровне. Для этого вы можете создать новый уровень запуска и создать там кастомные скрипты для проксирования. Такой подход исключает возможность конфликта сервисов и делает управление всей этой системой более удобным и логичным.

Для того чтобы создать новый runlevel напишем следующее:

# install -d /etc/runlevels/название

Далее просто добавьте нужные сервисы через rc-update и наслаждайтесь жизнью.

Контроль над упавшими сервисами

По умолчанию OpenRC будет пытаться запустить их снова, однако в некоторых случаях это может привести к еще более нежелательным последствиям.

Поэтому вы можете настроить правило поведения при сбое сервиса в /etc/rc.conf:

....
rc_crashed_stop=YES/NO # останавливать или НЕ останавливать упавший сервис
rc_crashed_start=YES/NO # запускать или НЕ запускать сломавшийся процесс

На этом я завершаю эту заметку и говорю "спасибо" за прочтение! Приятного дня.

Лайков: +26
войдите, чтобы ставить лайки
40
  • Опубликовано: 11.05.2024
  • vantiki

Комментарии

x230
Активный пользователь
Активный
11.05.2024
08:36
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Нужно, ибо полезно!
+
Спасибо.
UlyssesJJ
Активный пользователь
Активный
11.05.2024
09:33
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Очень полезная статья!
В моем случае даже весьма своевременная, так как в процессе работы с OpenRC.
Большое человеческое спасибо и жирнющее "Мне нравится"! :D
xKDE
Активный пользователь
Активный
11.05.2024
10:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
+
С одним моментом. Runlevel - это не "уровень запуска процессов", а уровень работы системы. Так будет более понятен механизм работы. Система может переходить с одного уровня на другой, но в каждый момент времени работает на одном уровне. И на каждом есть сервисы, выполняющиеся только тогда, когда система переходит на соответствующий уровень.
Посему, уровни по тексту "sysinit boot default" - это немного не верно.
Minor748
Активный пользователь
Активный
11.05.2024
10:30
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+2
войдите, чтобы ставить лайки
Сохранил себе уже давно статью, где наиболее понятно написано про OpenRC. Использую только boot (до появления рабочего стола) и default (уже после загрузки всего).

# rc-update — таблица загруженных служб с уровнями запуска (или rc-update --all)

Команда вывода служб по уровню запуска, например default и boot
# rc-update show default
# rc-update show boot

Команда вывода состояния (started или stoped) служб с сортировкой по уровням запуска
# rc-status --all

Команда вывода списка служб и их состояния (started или stoped)
# rc-status --servicelist

Команда вывода списка действующих уровней запуска
# rc-status --list

sysinit
shutdown
nonetwork
default
boot

Но вот про создание собственных ещё не встречал (не искал и не было нужды). Спасибо
scorpii
Активный пользователь
Активный
11.05.2024
10:42
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Красавчик, собственный уровень запуска может быть использован в создании многоуровневого, например:
# rc-update add -s default мойуровень

И потом любой сервис можно удалить из уровня default и запускать его под уровнем "мойуровень". Не забыть добавить в /etc/inittab:
::once:/sbin/openrc мойуровень

Это может быть полезно, если какой-то сервис тормозит запуск окна входа в систему, например chronyd
Minor748
Активный пользователь
Активный
11.05.2024
11:06
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
+1
войдите, чтобы ставить лайки
Точно! Надо для chronyd свои серваки прописать
choice
Активный пользователь
Активный
11.05.2024
11:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
У меня на двух ПК есть Calculate с OpenRC, так что присоединяюсь к бригаде землекопов, которым статья полезна и практически.
AquaVerso
Активный пользователь
Активный
11.05.2024
16:58
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Полезное дело делаешь :))
DrSheppard
Активный пользователь
Активный
11.05.2024
18:52
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Большое спасибо за статью!
Сам небольшой поклонник openrc, т.к. использовал его на Alpine
sofar
11.05.2024
19:39
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
интересно почему нет редакции арча с openrc...
Minor748
Активный пользователь
Активный
11.05.2024
19:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийsofarРодительский комментарий
0
войдите, чтобы ставить лайки
Была, которая переродилась в Artix. Но и время Артикс тоже ушло — пользователи тут говорят (-ли), что работает либо не стабильно, либо до первого обновления.
breeder
Активный пользователь
Активный
11.05.2024
20:09
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Ну, артикс работал плохо ещё 2.5 года назад, я в скрине про obarun про это упоминал, а openrc плохо работает и в devuan, например: переставлял тут свой многострадальный и сначала поставил с openrc, всё криво и косо, видимо на сегодня openrc только для генты.
vantiki
Активный пользователь
Активный
11.05.2024
20:38
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
Мне лично кажется, что хороший дистр без systemd это тот, в котором оный не по умолчанию)

Void, Gentoo, Slackware - вот наверное топ-3, который не подводит. С девуаном у меня вообще как то дела не очень, хотя наверное я просто криворукий, не знаю.
Minor748
Активный пользователь
Активный
11.05.2024
20:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийvantikiРодительский комментарий
0
войдите, чтобы ставить лайки
Это я криворукий по сравнению с тем, кто Дженту ставит, но у меня тоже с Девуан дела не пошли (пытался несколько раз), плюнул на них и ушёл на кальку. Для меня её оказалось проще освоить, чем там бодаться.
breeder
Активный пользователь
Активный
11.05.2024
21:05
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
а вот сколько бы я ни ставил кальку, приводил её в непотребное состояние и ломал. больше не пробую.
vantiki
Активный пользователь
Активный
11.05.2024
21:19
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
Не знаю, у меня с калькой во многом только позитивный опыт был. В первые разы когда пробовал не разобрался в паре вещей, но потом въехал как там все устроено и было прям прикольно. Переходил даже как на основную ось, да правда всё равно вернулся к её родоначальнику в лице генты (чище и интереснее пользовать). А то что калька ломается это для меня что то новое, как то не случалось "доводить до непотребства".
Minor748
Активный пользователь
Активный
11.05.2024
21:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
Есть такое … Ломать я сам пару раз ломал по началу, ломал так конкретно, что было проще переустановить. Сейчас основная проблема в том, что просто засоряется, раздувается /. Это после игр с чужими оверлэями, откуда я стороннее ПО ставлю (не родное): хвосты, лишние пакеты. И вот не всё получается вычистить стандартными командами. Это всё лечится культурой и опытом использования. Если не играться с ней в качестве тестового полигона …

Но мне проще переустановить, делается это быстро, чего не скажешь про установщик Devuan, где надо всё по шагам, а потом ещё и докачивать половину пакетов. Я вообще там с установочными iso не сильно разобрался, уже на этом этапе проблемы были. Тут же всё в графике и по шагам, освоился быстро. Скачал последний срез, быстро установил, перенёс конфиги забэкапленные и дальше пользуюсь.
xKDE
Активный пользователь
Активный
12.05.2024
06:40
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
+1
войдите, чтобы ставить лайки
>> не всё получается вычистить стандартными командами
После eclean-dist загляните и почистите:
/usr/src/*
/lib/modules/*
rm -rf /var/tmp/portage/[a-z]*
А вообще полезно посмотреть, где "пухнет":
du --max-depth=1 -lh /
и далее разворачивая путь.
Minor748
Активный пользователь
Активный
12.05.2024
14:18
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
Хорошо, что я покуфал только что.
Для контроля / у меня конки на раб столе показывают занятое место (но туда не всегда обращаю внимание) + программа QDirStat, предустановленная в Xfce.
Я сам добавил в закладки Thunar директорию /var/calculate/distfiles/, периодически 'sudo rm *' там. Как я понял, там остаются исходники и архивы, которые emerge загружает, но не удаляет потом (после установки), поэтому со временем папка пухнет.

А вот в системные каталоги лезть боюсь, вдруг чего удалю и сломаю что-то … Те строки выше себе схоронил.
Anonymous
13.05.2024
06:19
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
0
войдите, чтобы ставить лайки
Кэш бинарных пакетов там. Нет, по дефолту сам не чистится. Можно периодически rm * и тогда, при следующей установке, пакеты снова будут тянуться из интернета. Но рациональнее чистить не под корень, а оставлять там крайнюю из версий пакета. Особенно актуально, если пакет собирался локально.
breeder
Активный пользователь
Активный
11.05.2024
20:53
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийvantikiРодительский комментарий
0
войдите, чтобы ставить лайки
я почти два года прожил в devuan unstable без каких-либо значительных нареканий и поломок, пока не перестал в него заходить пару месяцев и он помер насовсем после первой попытки обновления. нестабильные роллинг-дистры надо обновлять регулярно, иначе всё ломается.
scorpii
Активный пользователь
Активный
11.05.2024
22:03
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
> нестабильные роллинг-дистры надо обновлять регулярно, иначе всё ломается.

При правильном обновлении ничего не ломается.
Вот арч, нужно обновлять постоянно, пару-тройку дней не зайдешь - лови десятка два-три обновлений. За Калькой такого не замечено. Манжара вообще смотрю плавно переходит к стабильному варианту, обновления стали выкатывать раз в 2-3 месяца.
breeder
Активный пользователь
Активный
11.05.2024
22:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
калька (генту) - стабильный роллинг, в официальных репах нет нестабильных пакетов, его как и debian stable, например, можно обновлять хоть раз в год или по крайней необходимости, ломаться не должен, иначе грош цена его стабильности. в этом его отличие от sid или arch, например, которые являются нестабильными роллингами, в которых при длительном отсутствии обновлений апдейт одной библиотеки раньше другой легко может привести ( и приводит) к краху системы.
ChubaDuba
Активный пользователь
Активный
11.05.2024
22:33
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
> калька (генту) - стабильный роллинг, в официальных репах нет нестабильных пакетов
Почему нет? Подключаете ветку unstable (ACCEPT_KEYWORDS="~amd64") и в бой :) Всё официально.
breeder
Активный пользователь
Активный
11.05.2024
22:56
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийChubaDubaРодительский комментарий
0
войдите, чтобы ставить лайки
я в курсе, я кальку курочил и калечил (см. выше).


в debian stable можно подключить репы sid, и после этого он прекратит быть таким, как его задумали разработчики.

абсолютно точно так же и в calculate: подключая нестабильные ветки Вы превращаете прекрасный и стабильный calculate в собственное поле экспериментов. Но дистром, как его задумали разрабы он быть перестаёт.
choice
Активный пользователь
Активный
11.05.2024
22:50
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
Рад снова видеть вас в комментариях.
Скорее всего ваш опыт - это два-три года назад или даже больше. У меня более свежий опыт - всё стало получше. Parabola (да, не арч) обновилась за 4,5 года, EOS (не арч) за год, Calculate за 10 месяцев, Sid за 6 месяцев.
xKDE
Активный пользователь
Активный
12.05.2024
06:18
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
+1
войдите, чтобы ставить лайки
У sid, arch и gentoo разные политики обновления. Arch "льет" все сразу, sid - с небольшим лагом, а перед релизом stable вообще замораживается, gentoo - более консервативна. Сам не сталкивался с "крахом", но возможно, просто не попадал в такую вилку, т.к. включаю не часто sid и кальку (живут на подопытных пк, но обновления от нескольких месяцев до года были без поломок).
x230
Активный пользователь
Активный
12.05.2024
13:17
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
А какой смысл Вы вкладываете в термин "стабильность" ?
В том смысле, например, что версия Винды обновляется вообще раз в несколько лет и официально может не поддерживать свои же старые сервисы и утилиты...

Как, в этой связи, мы можем требовать от Линуксов (мега)стабильности?

P.S. Чем ближе к K.I.S.S., тем стабильнее. Но доступнее ли от этого (разнообразный и полезный) софт?

P.P.S. Непреодолимая делемма, имхо...
Minor748
Активный пользователь
Активный
12.05.2024
15:27
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийx230Родительский комментарий
0
войдите, чтобы ставить лайки
Стабильно не работает, стабильно ломается — это тоже варианты стабильности :-)
breeder
Активный пользователь
Активный
12.05.2024
20:39
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийx230Родительский комментарий
0
войдите, чтобы ставить лайки
Давайте на примере дебиан:
стабильные (пакеты, ядра) - хорошо протестированные и документированные, требующие обновления только в случае фиксов безопасности (не обязательно в них, в используемых библиотеках и т. д.) либо обновления функционала.
нестабильные - самые свежие, собранные мэйнтэйнерами (не обязательно самые свежие вообще, тут тоже много "но", начиная от количества мэйнтейнеров, заканчивая тщательностью тестирования: в принципе нерабочий пакет нечасто попадает в sid, но нередко в arch).
между ними тестируемые - попадающие по строгим внутренним критериям из нестабильных, предназначенные для следующей стабильной версии.

это всё термины debian, а не мои представления, в других дистрах критерии могут несколько отличаться, но принципиально сути это не меняет.

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

Оптимальной для обычного пользователя мне видится testing-ветка у debian (убунта LTS болтается где-то около), хотя я сижу на unstable (void и devuan, последнее время в основном void).
choice
Активный пользователь
Активный
13.05.2024
00:09
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
За полтора года однажды в Sid перекосило python, в arch пока мне везёт, но если что - не удивлюсь..
stargest
13.05.2024
00:05
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийbreederРодительский комментарий
0
войдите, чтобы ставить лайки
У меня Artix с OpenRC стоит с 18 февраля этого года, обновляюсь +- регулярно, всё летает, ядро за это время ну раз 5 точно успело обновиться. Единственная проблема для меня – маленькая скорость загрузки с Arch репозиториев и я хз как это фиксить, приходится по ночам обновлять, тогда скорость нормальная вроде.
vantiki
Активный пользователь
Активный
11.05.2024
20:28
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMinor748Родительский комментарий
+1
войдите, чтобы ставить лайки
Странно вообще. У меня с Артиксом единственная проблема была это gpg ключи, которые как то косо работали. Что то там с синхронизацией времени - приходилось ждать несколько часов, чтобы начать пользоваться репозиториями. А по обновлениям вроде всё в порядке, никаких проблем. Ради надежности не трогал СИ в обновлениях и вроде такая конструкция вполне себе существовала. Однако Артикс это так или иначе васяносборка Арча с вырезаной сисдой, а потому проблемы вполне ожидаемы.
breeder
Активный пользователь
Активный
11.05.2024
20:59
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийvantikiРодительский комментарий
+1
войдите, чтобы ставить лайки
многое упирается в набор софта, с тех времён я значительно его изменил и сократил и отказался от DE (XFCE) в пользу тайлингого WM (сначала i3, потом Sway)
stargest
13.05.2024
00:06
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийvantikiРодительский комментарий
0
войдите, чтобы ставить лайки
Тоже были проблемы с временем, и соответственно, с gpg ключами, но проблема была в том, что винда в дуалбуте. Если интересно – могу рассказать, как фиксил.
PedroAmor
Активный пользователь
Активный
11.05.2024
22:16
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
+ Приятно когда автор пытается что то полезное донести нам, что может пригодится
scorpii
Активный пользователь
Активный
12.05.2024
23:29
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
systemD при этом анонсировала свой новый сервис run0 , который в будущем должен заменить sudo:
https://github.com/systemd/systemd/releases/tag/v256-rc1
[аноним]
13.05.2024
13:35
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
Это просто оболочка для уже существующего сервиса много лет.
DrSheppard
Активный пользователь
Активный
14.05.2024
03:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
+2
войдите, чтобы ставить лайки
Блестящая идея заменить 180 килотонный sudo на n-мегатонный run0 который работает через polkit, правила доступа к которому пишутся на JavaScript и т.д.
А может лучше всем вернуться в лоно природы и сделать opendoas стандартом?
Minor748
Активный пользователь
Активный
14.05.2024
11:20
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
https://www.comss.ru/page.php?id=13538

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила