Система инициализации System V
Linux
- Что это и зачем?
System V — одна из версий операционной системы Unix, выпущенная в 1983 году.
Система инициализации в UNIX и Linux - набор программ для управления формированием рабочей среды: текстовое/графическое рабочее окружение или служебный узел вычислительной сети. Традиционное имя основной программы - init (“инИт”). Её PID = 1.
Init является родителем всех процессов. Его главная задача — создавать процессы по сценарию из файла /etc/inittab. В этом файле обычно содержатся записи, указывающие init породить getty для каждой линии, по которой пользователи могут входить в систему. Он также контролирует автономные процессы, требуемые какой-либо системе. Уровень выполнения — программная конфигурация системы, которая позволяет существовать только заданной группе процессов. Процессы, порождаемые init на каждом из таких уровней выполнения, определяются в файле /etc/inittab.
По сути init организует и поддерживает всё пользовательское пространство, что включает в себя также проверку и монтирование файловых систем, запуск нужных пользовательских служб и, переключение в пользовательскую среду, когда запуск системы завершится.
- Как работает?
Системы инициализации запускают демоны силами сценариев, причем каждый из сценариев осуществляет запуск одного демона, а каждый следующий сценарий ожидает завершения исполнения предыдущего сценария.
Демон (daemon) является процессом, который выполняется в фоновом режиме без связи с графическим интерфейсом или терминалом. Обычно демоны запускаются при загрузке системы и находятся в рабочем состоянии вплоть до момента завершения работы системы. В современной технической документации демоны чаще всего называются службами (services).
Процесс с идентификатором 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/rc.d/rc.sysinit
Следующая строка файла конфигурации /etc/inittab в дистрибутиве Red Hat и производных дистрибутивах выглядит следующим образом:
si::sysinit:/etc/rc.d/rc.sysinit
Эта запись означает, что независимо от выбранного уровня исполнения система инициализации будет исполнять сценарий /etc/rc.d/rc.sysinit. Этот сценарий осуществляет инициализацию аппаратного обеспечения, устанавливает значения некоторых основных переменных окружения, заполняет файл /etc/mtab в процессе монтирования файловых систем, подключает раздел подкачки, а также выполняет другие необходимые действия.
Приведенная выше команда egrep может быть заменена на аналогичную приведенную ниже команду grep:
grep “^# Ini∥Sta∥Che”.
Сценарии инициализации
Демон инициализации продолжит чтение конфигурационного файла /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.
Директории для хранения сценариев инициализации
Если рассмотрим содержимое одной из директорий /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;
- Последовательный запуск служб;
- Сортировка порядка запуска с помощью номеров в именах файлов;
- Команды для запуска, остановки и проверки состояния служб.