LINUX.ORG.RU

Первый публичный выпуск минималистичной системы инициализации Nitro

 , nitro,


0

6

Состоялся первый публичный выпуск нового проекта Nitro, развивающего минималистичную систему инициализации c функциями контроля над выполнением процессов. Проект развивает Лия Нойкирхен (Leah Neukirchen), одна из сопровождающих пакеты в дистрибутиве Void Linux. Код написан на языке Си и распространяется под лицензией 0BSD.

Nitro может применяться как в качестве init-процесса (pid 1), так и в форме непривилегированного процесса, контролирующего бесперебойное выполнение приложений в пространстве пользователя и перезапускающего задачи в случае сбоев. Поддерживается работа в Linux и FreeBSD, возможно применение в окружениях на базе стандартной Си-библиотеки Musl. В качестве областей применения упоминаются встраиваемые системы, образы ram-дисков (initramfs), контейнеры (Docker/Podman/LXC/Kubernetes), а также рабочие станции и серверные системы. Для управления работой сервисов и взаимодействия с init-процессом поставляется утилита командной строки nitroctl.

Вместо составных скриптов инициализации в Nitro применяется модель на основе выноса каждой функции в отдельный скрипт. Для каждого сервиса в иерархии /etc/nitro создаётся подкаталог, в котором могут размещаться следующие скрипты: setup - содержит команды, выполняемые до запуска сервиса; run - определяет сценарий запуска сервиса; finish - включает команды, выполняемые после завершения сервиса. Для организации ведения лога применяется символическая ссылка с именем log, указывающая на другой сервис, которому будет перенаправлен вывод. Для отключения автозапуска сервиса достаточно создать в его каталоге файл с именем «down», а для игнорирования сервиса следует добавить символ «@» к имени каталога.

Автором проекта отмечаются следующие достоинства Nitro по сравнению с другими системами инициализации:

  • Всё состояние хранится в ОЗУ, что упрощает работу в окружениях c дисковыми разделами в режиме только для чтения.
  • Архитектура на основе обработки событий, не использующая опрос в режиме полинга (polling).
  • Отсутствие операций выделения памяти во время работы (все буферы выделяются при запуске).
  • Ограниченное использование файловых дескрипторов во время работы.
  • Поставка в форме одного самодостаточного исполняемого файла и утилиты для управления системой.
  • Отсутствие стадий компиляции конфигурации - работу сервиса определяют простые скрипты в связанном с сервисом каталоге.
  • Наличие функции перезапуска сервисов после сбоя.
  • Наличие механизма ведения логов, которые могут включаться как по умолчанию, так и выборочно для отдельных сервисов.
  • Возможность построения цепочки обработки лога, охватывающей несколько сервисов.
  • Работа не зависит от точности выставления системных часов.
  • Поддержка запуска во FreeBSD через /etc/ttys.
  • Возможность сборки в форме миниатюрного статически скомпилированного исполняемого файла при использовании musl libc.

>>> Подробности на opennet

★★★★

Проверено: cetjs2 ()
Последнее исправление: dataman (всего исправлений: 4)

я так понимаю это не «система инициализации» операционки, а менеджер демнов системы.
хотя всех попояс и как обычно все смешивается в винигрет…

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

https://github.com/leahneukirchen/nitro/blob/master/NEWS.md

Таки первый публичный:

0.2 (2025-08-22)

  • initial public release
  • add NEWS.md file

А у кого https://git.vuxu.org/nitro/about/ открывается?

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

В билдрут добавят лет через 10 =(

SL_RU ★★★★
()

Проект развивает Лия Нойкирхен

Другие её интересные проекты – https://github.com/leahneukirchen/leahutils:

alerta, simple Prometheus-based alerting
arr, (re)arrange and select fields on each line
btac, print file in reverse order
extrace, trace exec() calls system-wide
fail, crash in various possible ways
holes, find runs of zero bytes
htping, periodically send HTTP requests
listening, check if a TCP server is listening
logcatch, run a process with private /dev/log
lr, list files, recursively
mblaze, Unix utilities to deal with Maildir
mlog, merge log files by timestamp
necho, minimal, sensible alternatives to echo(1)
nitro, tiny but flexible init system and process supervisior
notyet, a text-based recursive task tracker
nq, Unix command line queue utility
paddle, log processor to send logs from logdirs to TCP syslog
pds, parallel data substitution
px, search for processes and print top(1)-like status
rdd, random data dumper
rdumpfs, a rsync-based dump file system backup tool
reap, run process until all its spawned processes are dead
redo-c, an implementation of the redo build system in portable C with zero dependencies
rnl, remove trailing newlines
rwc, report when files change
snooze, run a command at a particular time
spit, atomically create a file with content
ulidgen, generate or tag lines with ULID
wcal, ISO weekly calendar
xe, simple xargs and apply replacement

dataman ★★★★★
()

Раньше начинающие программеры редакторы писали, теперь на инит переключились. Смысла не прибавилось, но всё лучше чем в подъезде курить и по гейклубам шляться :)

zabbal ★★★★★
()

Как он с сервисами системд, со всякими логиндами и удевами намерен уживаться? Они ведь для гнома необходимы.

Кстати, на главной странице есть вот это:

this software would not have been possible without detailed study
of prior systems such as daemontools, freedt, runit, perp, and s6.

Системд даже не в списке рассмотренных.

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

я так понимаю это не «система инициализации» операционки,

Вообще написано что первый процесс системы.

Nitro может применяться как в качестве init-процесса (pid 1),

mx__ ★★★★★
()

возможно применение в окружениях на базе стандартной Си-библиотеки Musl

🤡.png

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

лучше чем в подъезде курить и по гейклубам шляться :)

Вижу знатока, который попробовал в жизни всё. На самом деле гетеросексуальному мужчине лучше ходить в ЛГБТ-клубы широкого профиля.

И нет, иниты извращенцы пишут. SystemD задал очень высокую планку, которую в одиночку не перепрыгнуть, а у сообщества есть дела поважнее. Поэтому аналога SystemD без недостатков SystemD не будет, а будет нечто заведомо худшее. И будет просто чтобы было. С калькулятором или текстовым редактором хоть взаимодействовать приходится, и кому-то очередное поделие придется по вкусу.

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

Зачем?!? Вы это сюда притащили? Мои глаза сломались ещё в начале этого списка. Но чисто рандомно тыкнул на «px, search for processes and print top(1)-like status» Это вот реально для нетакуиков в стиле «Я ж тоже погромист и кое что умею»?

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

Раньше начинающие программеры редакторы писали, теперь на инит переключились.

Нет, начинающие программеры начинали с игорь :)

anc ★★★★★
()

Для каждого сервиса в иерархии /etc/nitro создаётся подкаталог, в котором могут размещаться следующие скрипты

Я правильно понял, что зависимости туда не завезли?

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

Как я понял, это для всякого эмбеда, куда тащить системды явный оверхед.

Но ведь системД подмял под себя удев. А без удева у вас никакой эмбед особо то работать не будет. И тут уже не про Гном вопрос, а в общем: чем предлагаете удев заменить?

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

Но ведь системД подмял под себя удев.

pgrep udev
630
pgrep systemd

O'Rly?

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

Это ещё что

Мне вчера надо было на винде throttlestop на чудном ноуте в автозагрузку засунуть, кидаешь ярлык в папку, которая так и называется «автозагрузка», и нехера не работает! Надо через какой-то планировщик задач делать

Всё поцтеринг ваш, подослали диверсанта

shalom_ ★★★
()

Ну круто, снесли ветку, где я объяснил человеку, что в окирпичивании MSI ноутов не системд виноват… Если и это уже оффтоп, то я не знаю, о чём тут вообще можно говорить. :)

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

Мне вчера надо было на винде throttlestop на чудном ноуте в автозагрузку засунуть, кидаешь ярлык в папку, которая так и называется «автозагрузка», и нехера не работает!

Навеяло... тоже на такое попал... там вроде толи в десяточках, толи в 11 это депрекейтнули, короче оставили только вариант через этот ваш реестр. Было реально удивительно такое увидеть, пришлось толи искать нужную ветку реестра, толи по лене гуглить полный путь...

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

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

если это его работа - его даже завуважать будет не грех! :о)

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

Это не человек, это флудогенератор, которому даже настолько элементарные вещи приходится объяснять. Впрочем, всё-равно без толку - он слишком тупой чтобы понять объяснения.

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

Это тот процесс который первым запускает ядро.

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

Но ведь системД подмял под себя удев. А без удева у вас никакой эмбед особо то работать не будет.

Я тебя разочарую, но не только одними ситемдэ и удевом жив Линукс.

Например есть mdev.

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

Например есть mdev.

Ну в эмбедщине есть, да. Что ж, посмотрим, войдёт ли сабж хотя бы в билдрут… Я бы на это не поставил.

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

Они еще не понимают, что глючный musl явно не является стандартной библиотекой в отличии от glibc, хотя и стоит признать, что в большинстве сценариев подводных камней от его применения нет (alpine - стандартный дристрибутив для докер, который использует этот мюсль)

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

https://wiki.musl-libc.org/open-issues

там даже gdb не работает… а так всем «хорош». он просто drop-in replacement, те его существование довольно беcсмысленно… ну типа как есть иксы и вейленд, только вейленд можно оправдать тем, что на разработку иксов забили, но вот glibc активно развивается… а так рядовым мышевозам в общем-то срать, пока вдруг не выяснится, что какой-то гуишный софт времен царя гороха без glibc не работает… хотя у musl есть и плюс - он меньше весит за счет недостающего функционала. это как раз важно во всяких встраиваемых системах для максимального удешевления… ну раньше важно было. сейчас гигабайт пзу стоит от 10 центов, а вот озу - на порядки дороже, те на пару долларов musl может снизить цену холодильника

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

Работает там gdb. Вот санитайзеров нет, вот это неприятно.

drop-in replacement

И тут ты тоже неправ, он не может быть replacement, так как с glibc несовместим.

a1ba ★★★
()

Архитектура на основе обработки событий, не использующая опрос в режиме полинга (polling).

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

Типа если

void onCreated() {
 printf("File created");
}

void main() {
 wait_for_file_create("/tmp/file", onCreated);
}

то wait_for_file_create(char *file, void handler) - это какая-то магия, а не периодическое опрашивание любого состояния

void wait_for_file_create(*char file, void handler) {
 while (access(file, F_OK) != 0){
  }
 handler();
}
windows10 ★★★★★
()
Ответ на: комментарий от windows10

В эмбеддинге «событием» может быть хардварное прерывание от устройства, например. А пока его нет, процессор стоит в idle.

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

Печально. Я предполагал, что там сделано через события при изменении каталога.

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

Хотя не, чувак, получаешь-ка ты клоуна. Во-первых, за ссылку на кртинку, вместо ссылки на код, а во-вторых, за то, что ты так ловко обрезал начало функции. Я уж даже поверил сперва.

https://github.com/torvalds/linux/blob/master/fs/notify/inotify/inotify_user.c#L249

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

В эмбеддинге «событием» может быть хардварное прерывание от устройства, например. А пока его нет, процессор стоит в idle.

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

Некоторые обработчики интегрированы в ведро, как вышеупомянутый inotify, но алгоритм неизменен.

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

Коду бы ты не поверил, да и места он бы занял больше.

Начало функции каким-то боком отменяет бесконечный цикл с периодическими проверками, и передаче юзеру уведомления с выходом из этого цикла?) Вроде нет.

И это я тебе еще кусок кода ext4 не показал, где сюрпрайз сюрпрайз, события мониторятся в режиме поллинга =)

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

I repeat: do not use spinlocks in user space, unless you actually know what you’re doing. And be aware that the likelihood that you know what you are doing is basically nil.

Linus Torvalds

так что строго говоря, разница есть.

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

Зато в начале фуцнкции есть DEFINE_WAIT_FUNC. Пожешь грепнуть по сети, что это за штука и как она работает.

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

нууу, цикл-то там обычно есть, что-то типа:

for(;;) {
   idle();
}

но периодическим опросом я бы это не назвал.

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

Мы говорим не за ожидание, а за обработку события.

Расскажи алгоритмическим языком - как ты собрался обрабатывать любое событие без проверок на это самое событие, и возвращать наверх упрощенно говоря true\false?

От того что ты перенес этот алгоритм на низший уровень абстракции - он не перестанет быть цикличным.

Более того, даже не нужно углубляться в механизмы ФС, достаточно открыть реализацию твоего костыльного inotify, чтобы увидеть подтверждение тому что я говорил.

https://github.com/inotify-tools/inotify-tools/blob/master/src/inotifywait.cpp - ня, изучай.

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

А других вариантов нет.

Опрашивать можно не всегда непосредственно само событие. Создатель события может вести какую-нибудь таблицу уведомлений и туда записывать факт события, но вот функция «мониторинга» все равно должна опрашивать на предмет появления новой информации, и возвращаться на следующую итерацию если новой информации нет, либо возвращать признак появления этой новой информации.

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

Мы говорим не за ожидание, а за обработку события.

Нет, мы говорим про ожидание.

В этом Первый публичный выпуск минималистичной системы инициализации Nitro (комментарий) посте ты буквально зацеплся за функцию wait_for_file_create.

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

Да без проблем, открываешь свой костыльный https://github.com/inotify-tools/inotify-tools/blob/master/src/inotifywait.cpp и смотришь как там реализован монитор.

Скажи мне еще вот что. Если на твой взгляд, в таких функциях «нет циклов» - то почему же они все как одна, блокируют основной поток?))

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

открываешь

смотришь

Не, я всё. Ты победил, а я слился. Я лучше пойду сишку вспоминать. А то я из кикада уже пару месяцев не вылезал и уже забыл, какие аргументы принимает функция main() xD

P.S. Можешь поставить мне клоуна вдогонку, если хочешь ;)

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

то почему же они все как одна, блокируют основной поток?

Именно чтобы не было холостой долбёжки проца

Вот проверять в цикле из пользовательского процесса свойства файлов, как у тебя, это как раз костыль и говнокод. Кроме того что вычислительный ресурс впустую тратишь, можешь просто ещё и пропустить событие

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