Я сделал минимальный init. Это всё ещё WIP (Work In Progress) штучка. Работоспособность в реальных условиях не проверял, но работать должен.
TODO-лист на данный момент:
- Сделать некий "сервис-менеджмент", а не простые стартап-скрипты
- Доработать систему управления питанием
- Обкатать это дело до идеала
Инит парсит и запускает по очереди каждую строку из rc-файла, указанного в config.c до компиляции (по дефолту - /etc/rc.local).
Важно учитывать: поток stdout при выполнении команды из rc-файла перенаправляется в /dev/null, чтобы не засорять TTY лишним текстом. stderr по-прежнему функционален, в него выведутся ошибки.
Можно писать комменты - как в строке с командой (ин-лайн), так и отдельной строкой.
Пример rc-файла:
# /etc/rc.local
# пример rc-файла
// C++-комментарии тоже поддерживаются
whoami # так как поток stdout уходит в /dev/null, результата работы этой команды вы не увидите
mount -a
nvidia-smi -lgc 1300,2100
# ...
На данный момент инит должен вырубать девайс так:
- sync файловых систем
- выполнение скрипта shutdownScript, указанного в
config.cдо компиляции - моментальное выключение/перезагрузка/halt
Механизм управления - инит получает SIGи:
| Сигнал | Действие |
|---|---|
| SIGTERM | Выключение |
| SIGINT | Перезагрузка |
| SIGHUP | Halt |
Можно.
-
Linux, компилятор GCC:
makeИли TCC:
make CC=tcc -
Скопировать результат -
initв директорию/sbin.