Nitro: A tiny but flexible init system and process supervisor
nitro — миниатюрный, но гибкий init и супервизор процессов.
Назначение
- init для встраиваемых, десктопных и серверных Linux-систем
- initramfs, контейнеров (Docker, Podman, LXC, K8s)
- непривилегированный демон на POSIX
Конфигурация — каталог скриптов (по умолчанию /etc/nitro
).
Требования
- Unix-сокеты
tmpfs
или записываемый/run
Плюсы
- Всё состояние в RAM, работает на read-only root.
- Событийная модель без polling.
- Ноль аллокаций и ограниченных fd во время работы.
- Один статический бинарник + опциональный
nitroctl
. - Сервисы — просто каталоги со скриптами, компиляция не нужна.
- Перезапуск, логирование, цепочки логов, независимость от времени.
- Запускается на FreeBSD через
/etc/ttys
.
Сервис
Каждый подкаталог /etc/nitro
может содержать:
setup
— предзапуск, должен завершиться с 0.run
— основной процесс (не должен завершаться).finish
— пост-обработка, получает код выхода и сигнал.log
→ symlink на другой сервис для логов.down
— не поднимать автоматически.- Имена ≤ 64 символов, без
/
,,
, переводов строк. - Каталоги с
@
в конце игнорируются (параметризованные сервисы).
Специальные сервисы
LOG
— лог по умолчанию.SYS/setup
— перед стартом остальных.SYS/finish
— перед остановкой всех.SYS/final
— после завершения всех процессов.SYS/fatal
— при критической ошибке.SYS/reincarnate
— вместо выключения (полезно для initramfs).
Параметризованные сервисы
Каталог foo@
+ symlink foo@bar
→ запуск foo@/run bar
.
nitroctl up foo@baz
запустит foo@/run baz
даже без symlink.
Жизненный цикл
- Подъём:
SYS/setup
, затем все непомеченныеdown
. - Работа: перезапуск при падении (пауза 2 с при частых падениях).
- Останов:
nitroctl Shutdown/Reboot
→SYS/finish
→ SIGTERM (7 с) → SIGKILL →SYS/final
→ reboot/off/exit.
Управление nitroctl
nitroctl [команда] [сервис]
list
— состояния, pid, uptime, код выхода.up
/down
— запустить/остановить (SIGTERM илиdown-signal
).start
/stop
/restart
— с ожиданием успеха.p
/c
/h
— SIGSTOP/SIGCONT/SIGHUP.
Комментарии (82)
- Участники сравнивают Nitro с runit, s6, dinit и systemd: общие черты — минимализм, отсутствие декларативных зависимостей, ручная настройка порядка запуска.
- Некоторые считают Nitro скорее «голым» супервизором процессов, чем полноценной init-системой из-за отсутствия управления ресурсами, пользователями и параллельного запуска.
- Обсуждаются контейнерные кейсы: одни считают наличие init внутри контейнера избыточным, другие — необходимым при форке процессов.
- Упоминаются альтернативы: собственные минимальные init-системы на C и Rust, а также новый модульный подход в NixOS.
- Критика имени: «nitro» уже занято AWS Nitro, Nitro.js и другими проектами; предлагают сменить название.
I run a full Linux desktop in Docker just because I can
Запускаю полноценный Linux-десктоп в Docker — просто потому что могу
Автор: Ali Haider
Docker считается исключительно для CLI-сервисов, но я решил разместить в контейнере полноценный графический Linux. Зачем? Из чистого любопытства и желания проверить границы технологии.
Почему не VirtualBox или dual-boot?
Хотелось получить Linux, который живёт рядом с Windows без перезагрузок и разделов. Казалось, что за пару дней подниму GNOME/KDE в контейнере, но эксперимент затянулся на четыре дня и превзошёл все ожидания.
Что получилось
На Windows 10 через Docker удалось запустить полноценный рабочий стол. Проект стал жёстким crash-курсом по X11, PulseAudio, GPU-пасsthrough и сетевым трюкам, но в итоге всё работает: окна Linux-приложений появляются поверх Windows, звук идёт, файлы доступны.
Комментарии (96)
- Участники делятся опытом запуска полноценных Linux-десктопов в Docker/LXC: Arch + noVNC, Selkies + KDE, linuxserver/webtop, SkiffOS.
- Обсуждают производительность: 70 % от нативной при web-VNC, лучше через Sunshine или xrdp с аппаратным ускорением.
- Появляются идеи: эфемерные браузеры через Tailscale+Mullvad, Twitch/Discord-Plays-Pokemon, тесты из разных стран.
- Кто-то предпочитает LXC/LXD или systemd-nspawn, чтобы не мучиться с systemd внутри OCI-контейнеров.
- Вспоминают исторические проекты: Jess Frazelle, Samsung DeX, WSL2 + MobaXterm, MATLAB-контейнер.