Здається, systemd - це нова гаряча система init на блоці, така ж, як Upstart кілька років тому. Які плюси / мінуси у кожного? Крім того, як порівнюється кожна з іншими системами init?
Здається, systemd - це нова гаряча система init на блоці, така ж, як Upstart кілька років тому. Які плюси / мінуси у кожного? Крім того, як порівнюється кожна з іншими системами init?
Відповіді:
Більшість відповідей тут - п'ять років, тож час для деяких оновлень.
Ubuntu раніше використовував запуск за замовчуванням, але минулого року вони відмовилися від нього на користь systemd - див.
Через це є приємна стаття Systemd for Upstart Users на Ubuntu wiki - дуже детальне порівняння між запуском та systemd та керівництвом про перехід від upstart до systemd.
(Зверніть увагу, що згідно з вікі Ubuntu ви все ще можете запустити на початку поточні версії Ubuntu за замовчуванням, встановивши upstart-sysv
та запустивши, sudo update-initramfs -u
але враховуючи сферу проекту systemd, я не знаю, як це працює на практиці, чи є systemd чи ні можна видалити.)
Більшість інформації в розділах Команди та Сценарії нижче пристосовані з деяких прикладів, використаних у цій статті (що зручно ліцензувати так само, як і внески користувачів Stack Exchange згідно з ліцензією Creative Commons Attribution-ShareAlike 3.0 ).
Ось швидкий порівняння загальних команд та простих скриптів, див. Розділи нижче для детального пояснення. Ця відповідь порівнює стару поведінку систем на основі Upstart з новою поведінкою систем на основі системних систем, про що йдеться у запитанні, але зауважте, що команди, позначені як "Upstart", не обов'язково залежать від Upstart - це часто команди, які є загальними для кожної несистемної системи Linux та Unix.
su
machinectl shell
(див. розділ «Заміна команди su») нижче
screen
systemd-run --user --scope screen
(див. розділ "Несподіване вбивство фонових процесів" нижче)
tmux
systemd-run --user --scope tmux
(див. розділ "Несподіване вбивство фонових процесів" нижче)
start foo
systemctl start foo
stop foo
systemctl stop foo
restart foo
systemctl restart foo
initctl list
systemctl status
init-checkconf /etc/init/foo.conf
systemd-analyze verify /lib/systemd/system/foo.service
initctl list-env
systemctl show-environment
initctl set-env foo=bar
systemctl set-environment foo=bar
initctl unset-env foo
systemctl unset-environment foo
Після запуску журнали - це звичайні текстові файли в каталозі / var / log / upstart, тому ви можете обробити їх як завжди:
cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log
У системних журналах зберігаються у внутрішньому бінарному форматі (не як текстові файли), тому journalctl
для доступу до них потрібно використовувати команду:
sudo journalctl -u foo
sudo journalctl -u foo -f
Приклад початкового сценарію, написаний /etc/init/foo.conf
:
description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir
Приклад системного сценарію, написаного /lib/systemd/system/foo.service
:
[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target
su
Заміна команди була об'єднана в Systemd в запиті тягнути # тисячі двадцять-два:
тому що, на думку Леннарта Поттерінга, "су - це справді зламана концепція" .
Він пояснює, що "ви можете використовувати су і судо, як і раніше, але не сподівайтеся, що це спрацює в повному обсязі " .
Офіційний спосіб досягти su
подібної поведінки зараз:
machinectl shell
Це було пояснено Леннартом Поутеринг в обговоренні випуску № 825:
"Ну, довгі дискусії з цього приводу тривали, але проблема полягає в тому, що те, що передбачається робити, є дуже незрозумілим. [...] Довге коротке оповідання: су - це справді зламана концепція. Це дасть вам вигляд оболонки , і прекрасно використовувати його для цього, але це не повний логін, і його не слід помиляти ". - Леннарт Поетинг
Дивитися також:
Такі команди, як:
більше не працює, як очікувалося . Наприклад, nohup
це команда POSIX, щоб переконатися, що процес продовжує працювати після виходу з сеансу. Він більше не працює на systemd. Також такі програми, як screen
і tmux
потрібно викликати по-особливому, або в іншому випадку процеси, які ви запускаєте з ними, загинуть (хоча не отримувати цих процесів вбиті, як правило, головна причина запуску екрана або tmux в першу чергу).
Це не помилка, це обдумане рішення, тому воно, ймовірно, не виправиться в майбутньому. Ось що сказав Леннарт Поетрінг з цього приводу:
На мою думку, UNIX насправді був досить дивним, що він за замовчуванням дозволяв довільному коду користувача залишатись без обмежень після виходу з системи. Зараз багато людей ОС обговорювали, що це може бути можливим, але, звичайно, не за замовчуванням, але поки що ніхто не наважувався перевести комутатор, щоб перетворити його з замовчування на опцію. Не прибирати користувальницькі сеанси після виходу з мережі - це не тільки некрасиво і дещо шалено, але й проблема безпеки. systemd 230 тепер остаточно переключив перемикач і, нарешті, за замовчуванням все очистить правильно, коли користувач вийде з системи.
Для отримання додаткової інформації див:
Певним чином, systemd працює назад - в запущених роботах починаються, як тільки вони можуть, а в системних роботах починаються, коли треба. Зрештою, обидві системи можуть бути розпочаті однакові робочі місця і в майже однаковому порядку, але ви думаєте про це, дивлячись з протилежного напрямку, так би мовити.
Ось як це пояснює Systemd for Upstart Users :
Модель Upstart для запуску процесів (завдань) "жадібна на основі подій", тобто всі доступні завдання, чиї події запуску стартують якомога раніше. Під час завантаження upstart синтезує деякі початкові події, такі як запуск або rcS як "корінь дерева", ранні сервіси починаються з них, а пізніші служби починаються при запуску першого. Нове завдання просто повинне встановити його файл конфігурації в / etc / init /, щоб стати активним.
Модель systemd для запуску процесів (одиниць) "ледача залежність", тобто одиниця запускається лише тоді, коли і коли від неї залежить інший стартовий блок. Під час завантаження systemd запускає "кореневу одиницю" (default.target, може бути замінена в grub), яка потім транзитивно розширюється і запускає свої залежності. Новий блок повинен додати себе як залежність одиниці завантажувальної послідовності (зазвичай багатокористувацької. Цільової), щоб стати активним.
Зараз деякі останні дані згідно Вікіпедії:
(Дивітьсясь у Вікіпедії для найновішої інформації)
Раніше вилка Debian пропонувалася уникати системних . Створено Devuan GNU + Linux - роздріб Debian без systemd (завдяки fpmurphy1 за вказівку на це у коментарях).
Для отримання додаткової інформації про цю суперечку див.
Декларація про вихід Debian у 2014 році :
Як багато хто з вас, можливо, вже знає, голосування Init GR Debian за сприяння Ian Jackson не було корисним для захисту спадщини Debian та її користувачів від системної лавини.
Ця ситуація розраховує на блокування системних залежностей, що фактично загрожує свободі розвитку та має серйозні наслідки для Debian, його верхової та нижньої течії.
CTTE вдалося змінити залежність і завоювати нам час на тонку установку systemd над sysvinit, але навіть цей процес був виснажливим і повним драматизму. Зрештою, тиждень тому Іен Джексон пішов у відставку. [...]
Я подаю у відставку з Технічного комітету негайно.
Хоча важливо, щоб погляди 30-40% проекту, які погоджуються зі мною, продовжували бути представлені в ТК, я сам напевно занадто суперечливий на сьогоднішній день, щоб це зробити. Я повинен відійти, щоб спробувати зменшити ступінь персоналізації розмов про управління проектом. [...]
Девуан народився із суперечки щодо рішення використовувати Debian як систему за замовчуванням для Debian. Офіційна позиція Debian на Systemd повна претензій , що інші розвінчали . Зацікавлені читачі можуть продовжувати обговорювати цю гарячу тему в "Полеміці" . Однак ми радимо вам зберігати прохолоду та голос. У Devuan нам більше цікаво програмувати їх неправильно, ніж озиватися назад. [...]
Створено деякі веб-сайти та статті, присвячені системній суперечці:
У новинах Hacker є багато цікавих дискусій:
Аналогічні тенденції спостерігаються і в інших дистрибутивах:
на початку слідує філософії Unix DOTADIW - "Зроби одну річ і зроби це добре". Це заміна традиційному демону Ініта. Це не робить нічого, крім запуску та зупинки послуг. Інші завдання делеговані іншим спеціалізованим підсистемам.
systemd робить набагато більше, ніж це. Окрім запуску та зупинки послуг, він також управляє паролями, входами, терміналами, керуванням електроенергією, скиданням заводських налаштувань, обробкою журналів, точками кріплення файлової системи, мережевим зв’язком та багато іншого - про деякі функції див. У файлі NEWS .
Згідно з перспективою систематизованого того, що було досягнуто, а що - перед собою презентація Lennart Poettering у 2014 році на GNOME.asia, ось основні цілі системи, сфери, які вже були охоплені, та ті, що ще тривають:
Наші цілі
- Перетворення Linux з пакету бітів у конкурентну операційну систему загального призначення.
- Побудова в Інтернеті ОС нового покоління Об'єднує безглузді відмінності між дистрибутивами
Повернення нововведень до основної ОС
Настільний, сервер, контейнер, вбудований, мобільний, хмара, кластер,. . . Ці області ближче один до одного, ніж ви могли подумати
- Зниження складності адміністратора, надійності без нагляду
- Все самоаналіз
- Автовідкриття, підключення та відтворення є ключовим
- Ми фіксуємо речі там, де вони зламані, ніколи не стрічайтесь на них
Що ми вже висвітлюємо:
система init, журнал журналу, управління входом, управління пристроями, тимчасове і мінливе управління файлами, реєстрація бінарного формату, збереження / відновлення підсвічування, збереження / відновлення rfkill, завантаження, перегляд головок, налаштування зашифрованого зберігання, відкриття розділів EFI / GPT, віртуальна машина / контейнер реєстрація, мінімальне управління контейнерами, управління ім'ям хостів, управління локальними ресурсами, управління часом, управління випадковим насінням, управління змінною sysctl, управління консолями,. . .
Над чим ми працюємо:
- управління мережею
- systemd-networkd
- Локальний кеш DNS, mDNS-відповідь, LLMNR-відповідь, перевірка DNSSEC
- IPC в ядрі
- kdbus, sd-bus
- Часова синхронізація з NTP
- systemd-timesyncd
- Більше інтеграція з контейнерами
- Пісочниця послуг
- Пісочниця програм
- Формат зображення ОС
- Формат зображення контейнера
- Формат зображення програми
- GPT з автоматичним відкриттям
- Системи без громадянства, миттєві системи, скидання заводу
- / usr - ОС
- / etc - це (необов'язково) конфігурація
- / var - стан (необов'язково)
- Ініціалізація та оновлення атомного вузла
- Інтеграція з хмарою
- Управління сервісом через вузли
- Перевірені образи ОС
- Повністю до прошивки
- Завантаження завантаження
Як зазначається в коментарях fpmurphy1 , "слід зазначити, що systemd протягом багатьох років розширив сферу своєї роботи, що виходить за рамки простого запуску системи".
Я намагався включити сюди більшість відповідної інформації. Тут я порівнюю загальні риси Upstart і systemd, коли вони використовуються як системи init, про що йдеться у запитанні, і я згадую лише функції systemd, які виходять за рамки системи init, оскільки їх не можна порівняти зі запуском, але важлива їх наявність щоб зрозуміти різницю між цими двома проектами. Для отримання додаткової інформації слід перевірити відповідну документацію.
Більше інформації можна отримати за адресою:
Команда LinOxide створила чіт-лист Systemd vs SysV Init Linux .
service <foo> start/stop/restart/status
як і раніше працює чудово. Як і більшість програмного забезпечення Unix, systemd забезпечує сумісність команд з відомими типовими налаштуваннями.
І початкові, і системні - це спроби вирішити деякі проблеми з обмеженнями традиційної системи init SysV. Наприклад, деякі служби потрібно запускати після інших служб (наприклад, ви не можете монтувати файлові системи NFS, поки мережа не працює), але єдиний спосіб в SysV для обробки полягає у встановленні посилань у каталозі rc # .d такий, що один знаходиться перед іншим. Додайте до цього, можливо, вам доведеться перенумерувати все пізніше, коли залежність буде додано чи змінено. Upstart і Systemd мають більш розумні налаштування для визначення вимог. Крім того, проблема полягає в тому, що все є певним сценарієм оболонки, і не всі пишуть найкращі сценарії init. Це також впливає на швидкість запуску.
Деякі з переваг systemd я бачу:
Одним з недоліків, про які я знаю, є те, що для того, щоб скористатись попередньою передачею гнізда систем / FH, багатьом демонам доведеться виправити, щоб FH перейшов до них системою.
Побачила сьогодні systemd
на Генеральній Арці МЛ . Тож читайте на ньому. H Online, як ніколи, є чудовим джерелом для технології Linux і саме там я знайшов своє місце, щоб почати дослідження Systemd як альтернативи SysV Init та Upstart . Однак стаття H Online (в даному випадку) не дуже корисна для читання, реальна користь за нею - це посилання на корисні читання.
Справжня відповідь - в оголошенні systemd . Що дає ключові моменти, що не так з SysV initd, і що потрібно зробити для нових систем
Щоб почати менше.
І починати більше паралельно.
Його основний план зробити це, здається, запускати сервіси лише за необхідності та запускати сокет для цієї послуги, щоб служба, яка її потребує, могла підключитися до створеного сокета задовго до того, як демон буде повністю онлайн. Мабуть, сокет збереже невелику кількість захищених даних, що означає, що жодні дані не будуть втрачені під час затримки, вони будуть оброблятися, як тільки демон перейде в Інтернет.
Інша частина плану, схоже, полягає в тому, щоб не серіалізувати файлові системи, а замість того, щоб монтувати такі на вимогу, таким чином, ви не чекаєте на своє /home/
і т.д. (не плутати з ним /etc
) для монтажу та / або fsck
коли ви могли б бути стартові демони як /
і /var/
т. д. вже встановлені. У ньому сказано, що для цього збираються використовувати автофайли.
Це також має на меті створення .desktop
дескрипторів стилю init як заміну сценаріїв. Це дозволить уникнути безлічі повільних sh
процесів і ще більше вилок процесів, таких як sed
і grep
які часто використовуються в скриптах оболонок.
Вони також планують не запускати деякі сервіси до тих пір, поки їх не вимагають, і, можливо, навіть відключають їх, якщо вони більше не потрібні, модуль Bluetooth і демон потрібні лише тоді, коли ви, наприклад, використовуєте Bluetooth-пристрій. Ще один приклад - демона ssh. Це та річ, на яку здатний inetd. Особисто я не впевнений, що мені це подобається, оскільки це може означати затримку, коли мені вони потрібні, а у випадку ssh я думаю, що це означає можливу вразливість безпеки, якби мій inetd був порушений цілою системою. Однак мені було повідомлено, що використання цієї системи для порушення цієї системи неможливо і що, якщо я хочу, я можу відключити цю функцію за послугу та іншими способами.
Іншою особливістю, очевидно, буде можливість починати з урахуванням подій у часі, або через регулярно запланований інтервал, або в певний час. Це схоже на те, що crond
і atd
зараз роблять. Хоча мені сказали, що він не підтримуватиме "cron" користувача. Особисто це звучить як найнезначніше. Я думаю, що це було написано / придумано людьми, які не працюють у багатокористувацьких середовищах, немає особливої мети користувальницькому крону, якщо ви єдиний користувач у системі, крім того, що він не працює як root. Я працюю над багатокористувацькими системами щодня, і правило завжди виконується як користувальницькі сценарії. Але, можливо, я не маю передбачуваності, яку вони роблять, і це ні в якому разі не зробить це так, що я не можу запустити crond
або atd
, так що це не зашкодить нікому, окрім розробників, які я думаю.
Великим недоліком systemd є те, що деякі демони доведеться модифікувати, щоб повною мірою скористатися цим. Вони працюватимуть зараз, але краще працюватимуть, якби вони були написані спеціально для його моделі розетки.
Здається, здебільшого проблема народів системних з початком - це система подій, і вони вважають, що це не має сенсу і не буде зайвим. Можливо, їх слова найкраще говорять.
Або простіше кажучи: той факт, що користувач щойно запустив D-Bus, ні в якому разі не свідчить про те, що NetworkManager також слід запускати (але це те, що робитиме Upstart). Це навпаки: коли користувач запитує NetworkManager, це, безумовно, є свідченням того, що D-Bus слід також запустити (що, звичайно, очікує більшість користувачів, правда?).
Хороша система init повинна починати лише те, що потрібно, і те, що вимагається. Або ліниво, або паралельно і заздалегідь. Однак він не повинен запускатися більше, ніж потрібно, особливо не все встановлене, що могло б скористатися цією послугою.
Як я вже говорив, це обговорюється набагато всебічніше в оголошенні systemd .
Ну одне, про що ви забули - це організація процесів у групах .
Отже, якщо systemd розпочав щось, він помістить цю річ у свою власну групу, і немає жодного (неприхованого) засобу для виходу з цієї групи. Ось наслідки цього:
Щоб дуже детально ознайомитись із systemd, починаючи з перших чернеток проектування (та детальної критики існуючих систем init, включаючи на початку, та того, як systemd пропонує їх виправити), перейдіть на головну сторінку . З часом у LWN було опубліковано кілька статей про стартап . Зауважте, що будь-яка згадка про систематизований (або імпульсний аудіо) запускає непостійні полум'я.
IMVHO (і як користувач Fedora) я дуже задоволений цим. Щось із цього рядка вже давно назріло для вирішення складності існуючих систем Linux. Fedora деякий час використовувала ногу, але вона ніколи не виходила зі стадії фантастичної заміни на sysvinit, працюючи здебільшого незмінними сценаріями init. Його обіцянка спростити конфігурацію завантаження знову коштуєвручну встановити взаємозалежності, а це просто не працює. Системні фігури залежать самостійно (або просто дозволяють починати роботу без огляду залежностей, вони розбираються). Ще одна велика перевага (деякі кажуть, що це серйозний недолік) полягає в тому, що він використовує специфічні для Linux функції hilt (зокрема, групи дозволяють ізолювати демона та всіх його нащадків, тому легко стежити, обмежувати ресурси або вбивати їх як група; є багато інших).
Журналістика - Systemd буквально нагадує папку WinSXS, коли справа доходить до реєстрації матеріалів, вона створює копії копій, якщо ви не видаляєте або зменшуєте розмір файлу вручну, він буде їсти далеко на вашому диску. Я називаю це файли cookie завантажувача.