Чому systemd Linux все ще викликає розбіжності після всіх цих років

systemd виповнилося 10 років, але почуття з цього приводу в Linux-спільноті не пом’якшилися — зараз це таке розбіжність, як ніколи. Незважаючи на те, що він використовується багатьма основними дистрибутивами Linux, жорстка опозиція не послабилася.

Послідовність завантаження Linux

Коли ви вмикаєте комп’ютер, апаратне забезпечення завантажується, а потім (відповідно до типу завантажувальний сектор ваш комп’ютер) або головний запис завантаження (MBR) виконує або Уніфікований розширюваний інтерфейс прошивки (UEFI) працює. Остання дія обох — запустити Ядро Linux.

Ядро завантажується в пам’ять, розпаковується та ініціалізується. А тимчасова файлова система створюється в ОЗП, як правило, за допомогою утиліти, яка називається initramfs або initrd. Це дозволяє визначити та завантажити необхідні драйвери. Це, у свою чергу, дозволяє файловій системі простору користувача завантажуватися та підготуватися до встановлення середовища користувача.

Створенням середовища користувача займається процес ініціалізації, який є першим процесом, запущеним ядром у просторі користувача. Він має a ідентифікатор процесу (PID) з 1. Усі інші процеси є прямими або непрямими дочірніми дочірніми елементами процесу ініціалізації.

До systemd основним стандартом для процесу ініціалізації була переробка файлу Unix System V init. Були доступні й інші варіанти, але System V init був стандартним варіантом у більшості не-Розповсюдження програмного забезпечення Berkeley (BSD) похідні розподіли. Оскільки він прийшов безпосередньо з System V Unix — духовного предка Linux, — багато людей вважають його «офіційним способом» ініціалізації.

Процес ініціалізації запускає все демони і послуги, необхідні для того, щоб операційна система працювала змістовно, інтерактивно. Ці демони обробляють такі речі, як мережевий стек, увімкнення іншого обладнання всередині вашого комп’ютера та забезпечення екрана завантаження.

Багато з цих фонових процесів продовжують виконуватися після їх запуску. Вони виконують такі дії, як реєструють інформацію про події, стежать за змінами обладнання, коли ви вставляєте або видаляєте пристрої, і керують реєстрацією користувачів. Не дивно, що система ініціалізації також включає функції для керування службами.

Ми можемо використовувати пс щоб побачити процес, який має PID 1. Ми будемо використовувати параметри f (повноформатний список) і p (PID):

ps -fp 1

Ми бачимо, що процес з PID 1 є systemd. Виконання тієї ж команди в Manjaro Linux дало інший результат. Процес з PID 1 був ідентифікований як /sbin/init. Швидкий погляд на цей файл показує, що це символічне посилання на systemd:

ps -fp 1
ls -hl /sbin/init

Використовуючи параметр ppid (ідентифікатор батьківського процесу) з ps, ми можемо побачити, які процеси були безпосередньо запущені systemd:

ps -f --ppid 1

Це досить довгий список, як ви можете побачити на зображенні нижче.

Альтернативи

Кілька проектів намагалися створити альтернативу традиційній System V init. Одна з головних проблем полягає в тому, що в системі V init всі процеси запускаються послідовно, один за одним. Щоб підвищити ефективність послідовності завантаження, багато альтернативних проектів використовують паралелізм для одночасного та асинхронного запуску процесів.

  Як встановити Opera на Linux

Ось деяка інформація про деякі з них:

вискочка: Розроблено Канонічний, він використовувався в Ubuntu 9.10, червоний капелюх, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 і Fedora 9.
Руніт: Працює далі FreeBSD та інші похідні BSD, macOS та Соляріс, а також системи Linux. Це також увімкнена система ініціалізації за замовчуванням Порожнеча Linux.
s6-linux-init: Ця заміна для System V init була розроблена для точного слідування Філософія Unix, який часто зводиться до звукової фрази «роби одну річ і зроби це добре».

Є багато інших, що відрізняються за функціональністю та дизайном. Проте жодного з них створив фурор systemd зробив.

Шлях systemd

systemd був випущений у 2010 році і використовувався у Fedora у 2011 році. Відтоді він був прийнятий у багатьох дистрибутивах. Його розробив Леннарт Потерінг і Кей Сіверс, двох інженерів-програмістів RedHat.

systemd – це набагато більше, ніж заміна ініціалізації. Швидше, це набір із приблизно 70 бінарних файлів, які обробляють ініціалізацію системи, демони та служби, ведення журналів та багато інших функцій, які вже оброблялися виділеними модулями в Linux. Більшість із них не мають жодного відношення до ініціалізації системи.

Деякі з демонів, які надає systemd:

systemd-udevd: Керує фізичними пристроями.
systemd-logind: керує логіном користувачів.
systemd-resolved: забезпечує роздільну здатність мережевих імен для локальних програм.
systemd-networkd: керує мережевими пристроями та виявляє їх, а також керує мережевими конфігураціями.
systemd-tmpfiles: створює, видаляє та очищає нестабільні та тимчасові файли та каталоги.
systemd-localed: керує налаштуваннями мовного стандарту системи.
systemd-machined: виявляє і відстежує віртуальні машини та контейнери.
systemd-nspawn: може запускати команду або інший процес у легкому контейнері простору імен, надаючи функціональність, подібну до chroot.

І це лише верхівка айсберга, що також є суть справи. systemd вже давно випередив те, що вимагається від системи ініціалізації, яка, на думку її опонентів, є самим визначенням повзучості області.

«Це занадто великий. Це робить занадто багато».

Противники systemd відзначають великий, цікавий поєднання функціональних можливостей, які він охоплює. Усі ці функції вже існували в Linux, і, можливо, деякі з них потребували оновлення або нового підходу. Однак об’єднати всю цю функціональність у те, що має бути системою ініціалізації, архітектурно дивно.

systemd називають єдиною точкою відмови для занадто багатьох критичних функцій, але це не виправдовується. Правда, це кидає Філософія Unix створення невеликих інструментів, які працюють разом, замість великого програмного забезпечення, яке виконує все поза вікном. Хоча systemd не є суворо монолітним (він складається з багатьох двійкових файлів, а не з одного величезного), він містить багато різних інструментів керування та команд під однією парасолькою.

Хоча він може бути не монолітним, він великий. Щоб отримати уявлення про масштаб, ми порахували рядки тексту в кодовій базі ядра 5.6.15 і гілки masterd systemd репозиторію GitHub.

Це був відносно грубий показник. Він рахував рядки тексту, а не лише рядки коду. Отже, це включало коментарі, документацію та все інше. Проте, це було порівняння як-на-як, і дало нам простий критерій:

( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l

Ядро містило майже 28 мільйонів (точніше 27 784 340) рядків тексту. На відміну від цього, у systemd було 1 349 969, або майже 1,4 мільйона. З нашою беззаперечною метрикою, systemd виходить приблизно на 5 відсотків від розміру ядра, що божевільно!

  Як використовувати команду seq в Linux

Як ще одне порівняння, кількість рядків для сучасної реалізації System V init для дистрибутива Arch Linux склала 1721 рядок.

Поетерство явно не зважає на Інститут інженерів електротехніки та електроніки (IEEE) Комп’ютерне суспільство, ні Портативний інтерфейс операційної системи (POSIX) стандарт. Насправді він закликав розробників ігнорувати POSIX:

«Отже, придбайте собі копію програмного інтерфейсу Linux, ігноруйте все, що там говорить про сумісність POSIX, і зламайте ваше дивовижне програмне забезпечення Linux. Це дуже полегшує!»

Були звинувачення в тому, що systemd є проектом Red Hat, який приносить тільки користь Red Hat, але його примусово передають у широкий світ Linux. Так, він був народжений у Red Hat і ним керують і керують. Проте з 1321 автора лише частина працює на Red Hat.

Отже, які переваги має Red Hat?

Джим Уайтхерст, президент IBM, який був одного разу генеральний директор Red Hat сказав:

«Red Hat розглянула багато доступних варіантів і навіть використала Upstart Canonical для Red Hat Enterprise Linux 6. Зрештою, ми обрали systemd, оскільки це найкраща архітектура, яка забезпечує розширюваність, простоту, масштабованість та чітко визначені інтерфейси для вирішення проблем, які ми бачимо. сьогодні і передбачити в майбутньому».

Уайтхерст також сказав, що бачать переваги і у вбудованих системах. Red Hat співпрацює з «найбільшими постачальниками вбудованих пристроїв у світі, особливо в телекомунікаційній та автомобільній промисловості, де стабільність та надійність є проблемою номер один».

Це здається технічно обґрунтованими причинами. Ви можете зрозуміти потребу компанії в надійності, і для Red Hat не безпідставно піклуватися про власні інтереси, але чи всі інші слідувати цьому прикладу?

П’єте systemd Kool-Aid?

Деякі противники systemd кажуть, що дистрибутиви і люди просто сліпо слідують прикладу Red Hat і приймають його.

Однак, як і фраза «пити Kool-Aid», це не зовсім правильно. Придуманий у 1978 році після Лідер культу Джим Джонс, змусив своїх понад 900 прихильників покінчити життя самогубством, випивши рідину зі смаком винограду з ціанідом, ця фраза неправильно ганьбить Kool-Aid. Група насправді пила Flavor Aid, але з тих пір Kool-Aid був смолений цією щіткою.

Крім того, дистрибутиви Linux не слідують сліпо Red Hat; вони приймають systemd після серйозних роздумів. Дискусія розгорілася на Debian списки розсилки протягом тривалого часу. Однак у 2014 році спільнота проголосувала за прийняття systemd як система ініціалізації за замовчуванням, але також для підтримки альтернатив.

Debian є важливим прикладом, оскільки він не є похідним від RedHat, Fedora чи CentOS. До Debian від Red Hat не застосовується керування. І Debian, як і PID 1, має багато нащадків, включаючи Ubuntu та його численні допоміжні продукти.

  Як встановити клієнт qTox на Linux

Рішення, прийняті спільнотою Debian, є далекосяжними. Вони також активно обговорюються і голосують за використання метод голосування Кондорсе. Громада також не легковажно приймає такий вибір.

У грудні 2019 року він проголосував знову продовжувати зосереджуватися на systemd і продовжувати досліджувати альтернативи. На відміну від сліпого слідування, це насправді хрестоматійний приклад демократії та свободи вибору на роботі.

Обмеження вибору

Зазвичай ви не можете вибирати, чи використовувати systemd з певним дистрибутивом Linux. Швидше, самі дистрибутиви вибирають, чи хочуть вони його використовувати, і ви можете вибрати, який дистрибутив Linux ви віддаєте перевагу. Можливо, дистрибутив Linux, який вам подобається, перейшов на systemd. Як улюбленого музиканта, який змінює жанри, це може бути дратівливим.

Люди, які використовують Debian, Fedora, CentOS, Ubuntu, Арх, Solus, і openSUSE, і заперечувати проти прийняття systemd, можуть відчути, що їх виганяють з використання свого розподілу вибору. Якщо вони досить сильно відчувають будь-який з архітектурних рішень, повзучість обсягу чи ігнорування POSIX, вони можуть вважати невиправданим продовжувати використовувати цей розподіл.

Спектр, звичайно, є. З одного боку, у вас є люди, які не розуміють проблеми (або навіть не хвилюються), а з іншого — пристрасні заперечення. Десь посередині знаходяться ті, хто не любить змін, але не турбується про це настільки, щоб стрибати з корабля. Але як щодо розподільних біженців, які не можуть залишитися на обраному розподілі через свої переваги чи принципи?

На жаль, це не так просто, як просто встановити необхідну систему ініціалізації. Не всі мають технічні можливості для цього, незважаючи на труднощі, які виникають, коли програми або середовища робочого столу, такі як GNOME, мають залежності від systemd.

А як щодо переходу на інший дистрибутив? Деякі, як Девуан, з’явилися як несистемні форки дистрибутивів (у даному випадку Debian), які прийняли systemd. Використання Devuan має бути подібним до батьківського дистрибутива, але це не стосується всіх несистемних форків. Наприклад, якщо ви залишите Fedora і переїдете до AntiX, Gentoo, або Slackware, у вас буде зовсім інший досвід.

Це нікуди не дінеться

Мені подобається дещо з того, що робить systemd (прості та стандартизовані механізми керування процесами). Я не розумію обґрунтування деяких з того, що він робить (бінарні журнали). Мені також не подобається те, що він робить (оновлення домашніх папок — хто про це просив?).

Дистрибутиви, такі як Debian, роблять розумні речі та досліджують альтернативи, щоб зберегти свої можливості відкритими. Проте, systemd в ньому надовго.

Якщо ви адмініструєте машини Linux для інших, вивчайте systemd так само добре, як ви знаєте System V init. Таким чином, з чим би ви не зіткнулися, ви зможете виконувати свої обов’язки.

Просто використовувати Linux вдома? Якщо так, виберіть дистрибутив, який одночасно відповідає вашим технічним потребам і доповнює вашу ідеологію Linux.