Какво представлява init системата в Linux и Unix?
Стартирането при всички *nix системи е многостепенно - системата преминава през няколко етапа преди да бъде стартирана операционната система и нужният ѝ набор от софтуер.
Когато се натисне бутона на машината и всички хардуерни компоненти работят, се стартира BIOS (Basic Input/Output System). Следва проверка на хардуерните компоненти като CPU, RAM памет, периферни устройства. След това идва ред на проверка на MBR (Master Boot Record), от него се зарежда boot loader, зарежда се самото ядро на операционната система, включва се init системата и чак тогава се стартират софтуерните приложения и процеси, които са вградени в системата или са инсталирани от потребители в последствие.
Целта на init системата е да стартира всичко, както трябва да бъде стартирано, след като бъде заредено ядрото.
На практика тази система стартира и управлява всички системни и потребителски процеси. Работата ѝ включва проверка и монтиране на файловите системи, стартиране на включени потребителски процеси и превключване в потребителската среда, когато инициализацията завърши.
Systemd като нова init система
Systemd е абревиатура на System Management Daemon, към която е присвоена UNIX конвенция за добавяне на "d" накрая на всеки daemon, за да бъде по-лесно разпознаваем.
Първоначално systemd е публикувана под GNU General Public License, но следващите версии са под GNU Lesser General Public License. Подобно на init, systemd е отговорна за директното или индиректно стартиране на всички процеси в операционната система.
Първият процес представлява именно init и идентификационния му номер (pid) винаги е 1. systemd може да се отнася за всички пакети, инструменти и библиотеки, свързани с daemon. Системата е проектирана, за да превъзмогне недостатъците на init. Тя представлява процес, стартиран на заден фон, който стартира други процеси паралелно, а не поетапно, както init. По този начин ускорява първоначалното зареждане на операционната система.
При конвенционалната init система започва нов процес, само ако предишният е завършил стартирането си и е зареден в паметта. Това често водеше до по-бавно стартиране на системата.
Предимствата на systemd:
- Чисто и ефективно стартиране на процеси.
- Прост процес по инициализация на системата.
- Паралелно и едновременно стартиране на процесите.
- По-добро API.
- Опростен UNIX синтаксис.
- Възможност за премахване на опционални компоненти.
- По-ниска консумация на памет.
- Подобрена техника в изразяването на зависимости.
- Инструкциите за инициализация са описани в конфигурационен файл, а не в init shell скрипт.
- Може да използва Unix socket-и.
- Запис на събитята в логове с journald.
- Избор на система за логове (вкл. syslog).
- Логовете се съхраняват в бинарни файлове.
- Състоянието на systemd може да бъде запазено и извикано на по-късен етап.
- Следи процесите като се използва cgroup на ядрото, а не техният PID.
- По-добра имплементация с Gnome.
Към този момент systemd се използва във всички големи дистрибуции. Добавянето на systemd към пакетите на някои дистрибуции започна от 2011 г. От средата на 2014 г. пък е зададен като основен демон за мениджмънт на процесите.
Fedora са първата голяма дистрибуция, която реши да използва systemd, след тях и OpenSUSE,Arch, Red Hat (заедно с CentOS), а накрая и Debian, и Ubuntu. Част от Debian обществото обаче изрази силно неодобрение към systemd и това накара група хора да стартират проекта Devuan - Debian, но с традиционния sysvinit (проектът е в ALPHA).
Независимо дали ви харесва, или не, systemd е вече факт и ще остане така за дълго време. Впрочем има много добри страни, а освен това е една стъпка по напред от стандартния init. Причината за голямото недоволство е не толкова във възможностите и структурата, а по-скоро промяната.
Полезни команди за init и systemd
Ако имате предишен опит с init, но още не сте свикнали или тепърва ще използвате systemd, можете да опитате този “пищов” с команди, който подготвихме специално за вас: