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-контейнер.