Система 5 init
розповість лише невелику частину історії.
Існує свого роду короткозорість, яка впливає на світ Linux. Люди думають, що вони використовують річ, яку називають "Система 5 init
", і це те, що є традиційним і найкращим місцем для початку. Насправді це не так.
Традиція насправді не є такою, якою говорять такі люди, для початку. Система 5 init
та Система 5 rc
відносяться до AT&T UNIX System 5, що було майже таким же далеким після першого UNIX, як зараз (скажімо, після першої версії Linux-Mandrake).
Перше видання UNIX мало init
. Цього не було rc
. Мова збірки 1-го видання init
( чий код був відновлений і наданий доступними Warren Toomey et al. ) Безпосередньо породив і відновив 12 getty
процесів, встановив 3 вбудовані файлові системи із вбудованої таблиці та безпосередньо запустив програму з домашнього каталогу ім'я користувача mel
. getty
Стіл був також безпосередньо в образі програми.
Ще через десятиліття після UNIX System 5 з'явилася так звана "традиційна" система init Linux. У 1992 році Мікель ван Смооренбург (пере-) написав Linux init
+ rc
та пов'язані з ними інструменти, які зараз люди називають «Система 5 init
», хоча це насправді не програмне забезпечення системи UNIX 5 (і це не просто init
).
Система 5 init
/ rc
не найкраще місце для запуску, і навіть якщо додати знання про systemd, яке не охоплює половини того, що потрібно знати. Провели багато роботи в галузі дизайну init (для Linux та BSD), що відбулося лише за останні два десятиліття. Були обговорені, прийняті, розроблені, впроваджені та застосовані всілякі інженерні рішення. Комерційні спілки теж багато зробили.
Існуючі системи для вивчення та навчання
Ось неповний перелік деяких основних систем init, окрім цих двох, та однієї чи двох їх (декількох) важливих точок:
- Фінанси Йоахіма Нілссона пішли шляхом використання більш зручного для редагування файлу конфігурації.
- Мінімальність Фелікса фон Лейтнера пішла на систему конфігурації файлової системи - це база даних, невеликі сліди пам’яті та залежність від запуску / зупинки
init
.
- Пробіг Герріта Папа підходив до того, що я раніше описав як підхід до нерегулярного чотирьох сценаріїв оболонок .
- InitNG мав на меті мати залежності, названі цілі, кілька файлів конфігурації та більш гнучкий синтаксис конфігурації з цілим завантаженням більше налаштувань для дочірніх процесів.
- На початку попрацювали на повне перепроектування, моделюючи систему не як послуги та взаємозалежності взагалі, а як події та завдання, викликані ними.
- Дизайн ноша включає виштовхування всіх служб управління (включаючи навіть нерестування та пожовкнення
getty
зомбі) в окремий менеджер сервісів, а також просто обробку пристроїв / символьних посилань / каталогів та каталогів та системних подій, характерних для операційної системи.
- sinit - дуже простий ініт . Він виконує
/bin/rc.init
завдання, запускати програми, монтувати файлову систему тощо. Для цього можна використовувати щось на зразок minirc .
Більше того, близько 10 років тому серед користувачів демонтів і інших людей було обговорено використання svscan
в якості процесу №1, що призвело до таких проектів, як svscan Пола Ярка як дослідження 1-го процесу , ідеї Герріта Папа та svscan Лорана Беркота як процес 1 .
Що підводить нас до того, чим займаються програми №1.
Що виконують програми №1
Поняття про те, що слід "робити" процесу №1, за своєю природою суб'єктивні. Важливим об'єктивним критерієм проектування є те, що потрібно робити як мінімум №1 . Ядро пред'являє до нього кілька вимог. І завжди є якісь особливі для операційної системи речі різного роду. Якщо говорити про те, який процес №1 традиційно робимо, то ми не на такому мінімумі і ніколи насправді не були.
Існує кілька речей, які вимагають у різних ядрах операційної системи та інших програмах процесу №1, від якого просто не вдається вийти.
Люди скажуть вам, що fork()
головна функція процесу №1 - це те, що є батьком сирітських процесів. Як не дивно, це неправда. Справа з осиротілими процесами (із останніми ядрами Linux, як пояснено на https://unix.stackexchange.com/a/177361/5132 ) є частиною системи, яку можна значною мірою вивести з процесу №1 в інші процеси, наприклад спеціалізований менеджер з обслуговування . Все це менеджери сервісних послуг, які працюють поза процесом №1:
Так само, як пояснено на веб- сайті https://superuser.com/a/888936/38062 , вся /dev/initctl
ідея не повинна знаходитись поблизу процесу №1. Як не дивно, саме високоцентралізована система, яка демонструє, що її можна вийти з процесу №1.
І навпаки, обов'язкові речі для init
, що люди зазвичай забувають в їх поза-топ-оф-головки конструкції, такі речі, як обробка SIGINT
, SIGPWR
, SIGWINCH
і так далі вирушає з ядра і введення в дію різні запити на зміну стану системи , послані від програм, які "знають", що певні сигнали для обробки №1 означають певні речі. (Наприклад: Як пояснено на https://unix.stackexchange.com/a/196471/5132 , набори інструментів BSD "знають", що SIGUSR1
мають конкретне значення.)
Існують також одноразові завдання ініціалізації та доопрацювання, які неможливо уникнути, або страждати від цього не будуть, наприклад, встановлення файлових систем "API" або промивання кешу файлової системи.
Основи роботи з файловими системами "API" мало чим відрізняються від функціонування init
ром 1-го видання UNIX: В одному є список інформації, вкладений в програму, а в одному просто mount()
всі записи в списку. Цей механізм ви знайдете в системах, таких як BSD (sic!) init
, Через ніс system-manager
, до systemd.
"налаштувати систему на просту оболонку"
Як ви зауважили, init=/bin/sh
не встановлюється файлова система "API", аварійно виходить з ладу , не змиваючись кеш, коли один тип exit
( https://unix.stackexchange.com/a/195978/5132 ) і взагалі залишає його (супер) користувачеві вручну робити дії, які роблять систему мінімально зручною.
Щоб побачити, що насправді не має іншого вибору, як робити в програмах № 1, і, таким чином, налаштувати вас на хороший курс для вашої заявленої мети проектування, найкращим варіантом є перегляд перекриттів у роботі провідника Герріта Папа, Фелікс фон Мініатюр Leitner, а system-manager
програма з пакету nosh. Колишні двоє демонструють дві спроби бути мінімалістичними, але все-таки обробляють речі, яких неможливо уникнути.
Останнє корисне, я пропоную, для його широкого ручного запису для system-manager
програми, в якому детально описано, які файлові системи "API" встановлені, які завдання ініціалізації виконуються та якими сигналами обробляються; у системі, яка за задумом системного менеджера просто породила три інші речі (менеджер сервісів, супровідний реєстратор та програма для запуску змін стану), і це зробити неминуче лише в процесі №1.