Система инициализации для linux

Systemd vs другие системы инициализации. Сравнение

hello world, сегодня я расскажу о системах инициализации. Приятного чтения.

Что такое система инициализации?

Система инициализации (СИ) — служба, отвечающая за другие службы (по другому — демоны, юниты) при запуске и завершении unix-подобной операционной системы.

Systemd пришёл на смену традиционной SysVinit и добился огромной популярности. Многие дистрибутивы (Arch linux, manjaro, debian, ubuntu, fedora и др.) официально предлагают только его. Однако остались дистрибутивы (Artix, gentoo, void linux), которые не предлагают systemd или предлагают вместе с ним другие СИ. Не стоит забывать о других системах инициализации — dinit, openrc, runit, s6. Сегодня мы сравним их.

1. Запуск и выключение

Сравнение происходило на чистых arch gnu/linux (systemd) и artix gnu/linux (остальные СИ). Сторонние службы не добавлялись, показано «холодное» включение и выключение. Время засчитывалось от нажатия enter при выборе ос, а не от старта СИ. Результаты я представлю в виде таблицы:

О включении. Популярный systemd показал самый худший результат при включении — 19 с. Лучше всех проявил dinit — 9 секунд, что на 10 меньше, чем в systemd. Я удивлён dinit и openrc. Я думал, что dinit не обгонит s6 (просто вторую за скорость при включении расхваливали), а openrc не обгонит systemd (видел сравнение systemd (arch linux), openrc (gentoo), runit (void linux)). Возможно, если это было бы сравнение не при холодном старте и (или) на других дистрибутивах gnu/linux, то результаты были другими, пусть и мало отличающимися.

О выключении. Systemd здесь также не занял первое место, но ситуация у него лучше — второе место (3 с). Лучший результат — всё тот же dinit — 2 с. Худший — openRC — 8 с, что являлось половиной от времени при его включении. Здесь я удивился результатами s6 и openRC. Я не думал, что s6 отстанет от systemd, а в openRC я наделся на более лучший результат.

Если результаты первого пункта спорны («холодный» старт, только два дистрибутива, так ещё и в варианте конструкторов), то здесь меньше претензий.

Мало кому приятно, когда выключаешь компьютер, а он не выключается. Вы смотрите логи, а там служба не отключается.

Читайте также:  2 ядерный процессор linux

Обычно такое я встречал на systemd (службы — usbmuxd, wpa_supplicant и networkmanager, дистрибутивы — arch linux, parabola, manjaro и fedora) и openrc (pacman-keyring, дистрибутив — parabola). В s6 проблем не встречал, runit тоже, dinit — dinit я установил сегодня.

Среди недостатков systemd можно отметить

  • Хранение логов в бинарном виде (чуть что случится, а потом логи не открываются)
  • Слишком много берёт на себя работы (может заменить chroot, загрузчик, mount и др.), в результате данной унификации появляются надежды у злоумышленников на взлом gnu/linux
  • Из-за предыдущего недостатка systemd имеет запутанный код, нестабильную работу

Есть ли у него плюсы перед другими СИ? Параллельная инициализация не помогает обойти в скорости другие СИ. Контроль за процессами можно реализовать в других системах инициализации сторонними службами. Не знаю, есть ли реализация условий для запуска демонов в других СИ, но в systemd оно есть.

Systemd прижился во многих дистрибутивах GNU/Linux, но это не лишило его недостатков — относительно медленная скорость работы, перегруженность, запутанный код. По сравнению с другими СИ он имеет мало плюсов.

Ставьте лайки, подписывайтесь на канал, делитесь статьёй в соцсетях, пишите комментарии. До встречи!

Источник

Система инициализации System V

featured.jpg

— Что это и зачем?

System V — одна из версий операционной системы Unix, выпущенная в 1983 году.

Система инициализации в UNIX и Linux — набор программ для управления формированием рабочей среды: текстовое/графическое рабочее окружение или служебный узел вычислительной сети. Традиционное имя основной программы — init (“инИт”). Её PID = 1.

Init является родителем всех процессов. Его главная задача — создавать процессы по сценарию из файла /etc/inittab. В этом файле обычно содержатся записи, указывающие init породить getty для каждой линии, по которой пользователи могут входить в систему. Он также контролирует автономные процессы, требуемые какой-либо системе. Уровень выполнения — программная конфигурация системы, которая позволяет существовать только заданной группе процессов. Процессы, порождаемые init на каждом из таких уровней выполнения, определяются в файле /etc/inittab.

По сути init организует и поддерживает всё пользовательское пространство, что включает в себя также проверку и монтирование файловых систем, запуск нужных пользовательских служб и, переключение в пользовательскую среду, когда запуск системы завершится.

— Как работает?

Системы инициализации запускают демоны силами сценариев, причем каждый из сценариев осуществляет запуск одного демона, а каждый следующий сценарий ожидает завершения исполнения предыдущего сценария.

Демон (daemon) является процессом, который выполняется в фоновом режиме без связи с графическим интерфейсом или терминалом. Обычно демоны запускаются при загрузке системы и находятся в рабочем состоянии вплоть до момента завершения работы системы. В современной технической документации демоны чаще всего называются службами (services).

Читайте также:  Сборка своего ядра linux

Процесс с идентификатором 1

Системный загрузчик передает контроль над системой ядру ОС. После непродолжительного периода времени ядро ОС запускает демон системы инициализации. Этот демон системы инициализации (/sbin/init) является первым демоном, запущенным в рамках системы, поэтому соответствующий процесс получает идентификатор 1 (PID 1). Демон системы инициализации никогда не завершает свою работу.

Параметры конфигурации в файле /etc/inittab

После того, как исполняется бинарный файл /sbin/init, в первую очередь осуществляется чтение конфигурационного файла /etc/inittab. В данном файле демон будет искать значение переменной initdefault (равное 3 в примере ниже).

Переменная initdefault

С помощью значения переменной initdefault указывается стандартный уровень исполнения (default runlevel). В некоторых дистрибутивах Linux в файле /etc/inittab приводится краткое описание уровней исполнения подобное приведенному ниже переведенному описанию из соответствующего файла дистрибутива Red Hat Enterprise Linux 4.

Уровень исполнения 0 соответствует отключению системы. Уровень исполнения 1 используется для устранения неполадок, так как осуществить вход в систему может исключительно пользователь root, причем для входа в систему может использоваться исключительно консоль. Уровень исполнения 3 типичен для серверов, а уровень исполнения 5 — для настольных компьютеров (на которых вход в систему осуществляется в графическом режиме). За исключением уровней исполнения 0, 1 и 6, различные уровни исполнения могут отличаться в зависимости от дистрибутива. К примеру, в дистрибутиве Debian и производных дистрибутивах Linux на уровнях исполнения 2 и 5 имеется возможность входа в систему с использованием сетевого соединения и графического интерфейса. Исходя из этого, следует всегда сверяться с корректным описанием уровней исполнения вашей системы.

Сценарий sysinit

Следующая строка файла конфигурации /etc/inittab в дистрибутиве Red Hat и производных дистрибутивах выглядит следующим образом:

Эта запись означает, что независимо от выбранного уровня исполнения система инициализации будет исполнять сценарий /etc/rc.d/rc.sysinit. Этот сценарий осуществляет инициализацию аппаратного обеспечения, устанавливает значения некоторых основных переменных окружения, заполняет файл /etc/mtab в процессе монтирования файловых систем, подключает раздел подкачки, а также выполняет другие необходимые действия.

Приведенная выше команда egrep может быть заменена на аналогичную приведенную ниже команду grep:

Сценарии инициализации

Демон инициализации продолжит чтение конфигурационного файла /etc/inittab и перейдет к приведенной секции:

l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6

демон инициализации должен осуществить запуск сценария инициализации с единственным параметром, который соответствует уровню исполнения. На самом деле поля в конфигурационном файле /etc/inittab разделены с помощью символов двоеточия. Второе поле описывает уровень исполнения на котором команда из данной строки должна быть выполнена. Таким образом, в обоих случаях происходит выполнение только одной из семи команд в зависимости от текущего уровня исполнения, установленного с помощью переменной initdefault.

Читайте также:  How to check open ports on linux

Директории для хранения сценариев инициализации

Если рассмотрим содержимое одной из директорий /etc/rcX.d/, вы можете обнаружить множество сценариев (или ссылок на сценарии), имена которых начинаются либо с буквы K, либо с буквы S в верхнем регистре.

[root@RHEL52 rc3.d]# ls -l | tail -4 lrwxrwxrwx 1 root root 19 окт 11 2008 S98haldaemon -> ../init.d/haldaemon lrwxrwxrwx 1 root root 19 окт 11 2008 S99firstboot -> ../init.d/firstboot lrwxrwxrwx 1 root root 11 янв 21 04:16 S99local -> ../rc.local lrwxrwxrwx 1 root root 16 янв 21 04:17 S99smartd -> ../init.d/smartd

Директории /etc/rcX.d/ содержат только ссылки на сценарии, расположенные в директории /etc/init.d/. Благодаря ссылкам появляется возможность использования сценариев с отличными именами. При переходе на новый уровень исполнения все сценарии, имена которых начинаются с буквы K или буквы S в верхнем регистре начинают исполняться после сортировки по именам в алфавитном порядке. Сценарии, имена которых начинаются с буквы K, будут исполняться в первую очередь с передачей единственного параметра stop. Остальные сценарии, имена которых начинаются с буквы S, будут исполняться с передачей единственного параметра start.

Все эти операции выполняются силами сценария /etc/rc.d/rc в дистрибутиве Red Hat и сценария /etc/init.d/rc в дистрибутиве Debian.

Демоны mingetty

Описание демонов mingetty в конфигурационном файле /etc/inittab

Практически в конце конфигурационного файла /etc/inittab находится секция с описанием условий запуска и перезапуска нескольких демонов mingetty.

Run gettys in standard runlevels (Запуск gettys на различных уровнях исполнения)

1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6

Демоны mingetty и исполняемый файл /bin/login

Демон /sbin/mingetty выводит сообщение в виртуальной консоли и позволяет вам ввести идентификатор пользователя. После этого он выполняет бинарный файл /bin/login с передачей введенного идентификатора пользователя. Программа /bin/login проверяет, присутствует ли информация о пользователе в файле /etc/passwd и запрашивает пароль (а также проверяет его корректность). В том случае, если пароль корректен, программа /bin/login передает управление командной оболочке, установленной в файле /etc/passwd.

Какие особенности?

  • Написание файлов запуска служб на bash;
  • Последовательный запуск служб;
  • Сортировка порядка запуска с помощью номеров в именах файлов;
  • Команды для запуска, остановки и проверки состояния служб.
Дмитрий Данько
Студент РУДН

Мои исследовательские интересы включают распределенную робототехнику, мобильные вычисления и программируемую материю.

© 2022 Me. This work is licensed under CC BY NC ND 4.0

Published with Wowchemy — the free, open source website builder that empowers creators.

Источник

Оцените статью
Adblock
detector