F.2.4. Программа /sbin/init

F.2.4. Программа /sbin/init

Программа /sbin/init (также init) координирует оставшуюся часть процесса загрузки и выполняет настройку окружения пользователя.
Процесс init становится родительским по отношению ко всем автоматически запускаемым в системе процессам. Сначала он запустит сценарий /etc/rc.d/rc.sysinit, который задает путь окружения, инициализирует пространство подкачки, проверяет файловые системы и выполняет все необходимые для инициализации системы шаги. К примеру, для инициализации аппаратных часов rc.sysinit считывает файл конфигурации /etc/sysconfig/clock, а для инициализации отдельных процессов серийного порта выполняет файл /etc/rc.serial.
init затем выполняет задания в каталоге /etc/event.d, которые определяют настройки системы на каждом уровне выполнения SysV init. Уровень выполнения — это состояние или режим, которому соответствуют службы в каталоге /etc/rc.d/rc<x>.d/ (где <x> — номер уровня). Раздел F.4, «Уровни выполнения SysV Init» содержит подробную информацию.
Далее init задает библиотеку системных функций /etc/rc.d/init.d/functions, использующихся при запуске, завершении и определении номера процесса (PID) приложений.
init проверяет уровень выполнения в /etc/inittab и выполняет запуск всех фоновых процессов из соответствующего каталога rc. Каталоги rc пронумерованы соответственно уровням выполнения. Например, /etc/rc.d/rc5.d/ соответствует уровню выполнения 5.
При загрузке в 5-ый уровень init попытается найти каталог /etc/rc.d/rc5.d/, чтобы определить процессы для запуска и остановки.
Пример содержимого каталога /etc/rc.d/rc5.d/:
K05innd -> ../init.d/innd 
K05saslauthd -> ../init.d/saslauthd 
K10dc_server -> ../init.d/dc_server 
K10psacct -> ../init.d/psacct 
K10radiusd -> ../init.d/radiusd 
K12dc_client -> ../init.d/dc_client 
K12FreeWnn -> ../init.d/FreeWnn 
K12mailman -> ../init.d/mailman 
K12mysqld -> ../init.d/mysqld 
K15httpd -> ../init.d/httpd 
K20netdump-server -> ../init.d/netdump-server 
K20rstatd -> ../init.d/rstatd 
K20rusersd -> ../init.d/rusersd 
K20rwhod -> ../init.d/rwhod 
K24irda -> ../init.d/irda 
K25squid -> ../init.d/squid 
K28amd -> ../init.d/amd 
K30spamassassin -> ../init.d/spamassassin 
K34dhcrelay -> ../init.d/dhcrelay 
K34yppasswdd -> ../init.d/yppasswdd 
K35dhcpd -> ../init.d/dhcpd 
K35smb -> ../init.d/smb 
K35vncserver -> ../init.d/vncserver 
K36lisa -> ../init.d/lisa 
K45arpwatch -> ../init.d/arpwatch 
K45named -> ../init.d/named 
K46radvd -> ../init.d/radvd 
K50netdump -> ../init.d/netdump 
K50snmpd -> ../init.d/snmpd 
K50snmptrapd -> ../init.d/snmptrapd 
K50tux -> ../init.d/tux 
K50vsftpd -> ../init.d/vsftpd 
K54dovecot -> ../init.d/dovecot 
K61ldap -> ../init.d/ldap 
K65kadmin -> ../init.d/kadmin 
K65kprop -> ../init.d/kprop 
K65krb524 -> ../init.d/krb524 
K65krb5kdc -> ../init.d/krb5kdc 
K70aep1000 -> ../init.d/aep1000 
K70bcm5820 -> ../init.d/bcm5820 
K74ypserv -> ../init.d/ypserv 
K74ypxfrd -> ../init.d/ypxfrd 
K85mdmpd -> ../init.d/mdmpd 
K89netplugd -> ../init.d/netplugd 
K99microcode_ctl -> ../init.d/microcode_ctl 
S04readahead_early -> ../init.d/readahead_early 
S05kudzu -> ../init.d/kudzu 
S06cpuspeed -> ../init.d/cpuspeed 
S08ip6tables -> ../init.d/ip6tables 
S08iptables -> ../init.d/iptables 
S09isdn -> ../init.d/isdn 
S10network -> ../init.d/network 
S12syslog -> ../init.d/syslog 
S13irqbalance -> ../init.d/irqbalance 
S13portmap -> ../init.d/portmap 
S15mdmonitor -> ../init.d/mdmonitor 
S15zebra -> ../init.d/zebra 
S16bgpd -> ../init.d/bgpd 
S16ospf6d -> ../init.d/ospf6d 
S16ospfd -> ../init.d/ospfd 
S16ripd -> ../init.d/ripd 
S16ripngd -> ../init.d/ripngd 
S20random -> ../init.d/random 
S24pcmcia -> ../init.d/pcmcia 
S25netfs -> ../init.d/netfs 
S26apmd -> ../init.d/apmd 
S27ypbind -> ../init.d/ypbind 
S28autofs -> ../init.d/autofs 
S40smartd -> ../init.d/smartd 
S44acpid -> ../init.d/acpid 
S54hpoj -> ../init.d/hpoj 
S55cups -> ../init.d/cups 
S55sshd -> ../init.d/sshd 
S56rawdevices -> ../init.d/rawdevices 
S56xinetd -> ../init.d/xinetd 
S58ntpd -> ../init.d/ntpd 
S75postgresql -> ../init.d/postgresql 
S80sendmail -> ../init.d/sendmail 
S85gpm -> ../init.d/gpm 
S87iiim -> ../init.d/iiim 
S90canna -> ../init.d/canna 
S90crond -> ../init.d/crond 
S90xfs -> ../init.d/xfs 
S95atd -> ../init.d/atd 
S96readahead -> ../init.d/readahead 
S97messagebus -> ../init.d/messagebus 
S97rhnsd -> ../init.d/rhnsd 
S99local -> ../rc.local
Как показано в примере, /etc/rc.d/rc5.d/ не содержит запускающих или останавливающих службы сценариев. Все файлы в /etc/rc.d/rc5.d/ представляют собой символьные ссылки на сценарии, расположенные в каталоге /etc/rc.d/init.d/. Символьные ссылки используются во всех каталогах rc, чтобы сделать возможной перенастройку уровней выполнения путем создания, изменения и удаления этих ссылок, не оказывая тем самым влияния на сами сценарии.
Название каждой символьной ссылки начинается либо с K, либо с S. K (kill) обозначает процессы, работа которых будет завершена на данном уровне, а S (start) обозначает запускаемые процессы.
Сначала init останавливает все обозначенные буквой K процессы путем выполнения команды /etc/rc.d/init.d/<процесс> stop (где <процесс> — завершаемый процесс). Затем с помощью команды /etc/rc.d/init.d/<процесс> start запускаются все ссылки S.

Примечание

После завершения загрузки можно будет войти в систему в режиме пользователя root и выполнить эти же сценарии запуска и остановки служб. Например, для остановки HTTP-сервера Apache надо выполнить команду /etc/rc.d/init.d/httpd stop.
Символьные ссылки пронумерованы по порядку их запуска и остановки. Этот порядок можно изменить путем модификации номера; чем меньше число, тем раньше будет запущена служба. Если число совпадает, порядок служб будет определяться по алфавиту.

Примечание

Одним из последних запускаемых программой init файлов является /etc/rc.d/rc.local, который помогает задать индивидуальные настройки системы. Раздел F.3, «Выполнение дополнительных программ во время загрузки» содержит информацию о rc.local.
После прохождения init через соответствующий для текущего уровня выполнения каталог rc служба Upstart запустит процесс /sbin/mingetty для каждой виртуальной консоли. Уровни выполнения 2-5 имеют 6 виртуальных консолей, уровень 1 (монопольный режим) — одну консоль, а уровни 0 и 6 — ни одной. /sbin/mingetty откроет доступ к устройствам tty[16], настроит их режимы, откроет окно приглашения, получит введенное имя пользователя и пароль и начнет процесс авторизации.
На уровне выполнения 5 Upstart выполнит сценарий /etc/X11/prefdm, который запустит менеджер дисплея X[17] gdm, kdm или xdm в зависимости от настроек в файле /etc/sysconfig/desktop.
По завершению система будет работать на уровне выполнения 5 и появится окно входа.


[16] За информацией об устройствах tty обратитесь к руководству по развертыванию Red Hat Enterprise Linux.

[17] Подробную информацию о менеджерах дисплеев можно найти в руководстве по развертыванию Red Hat Enterprise Linux.