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» содержит подробную информацию об уровнях выполнения 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
.
Note
После завершения загрузки будет возможно войти в систему в качестве пользователя root и выполнить эти же сценарии запуска и остановки служб. Например, для остановки HTTP-сервера Apache надо выполнить команду /etc/rc.d/init.d/httpd stop
.
Символьные ссылки пронумерованы по порядку их запуска и остановки. Этот порядок может быть изменен путем модификации номера; чем меньше число, тем раньше будет запущена служба. В случае, если число совпадает, порядок служб будет определяться по алфавиту.
После прохождения init
через соответствующий для текущего уровня выполнения каталог rc
сценарий Upstart запустит процесс /sbin/mingetty
для каждой виртуальной консоли. Уровни выполнения 2-5 имеют 6 виртуальных консолей, уровень 1 (монопольный режим) имеет одну консоль, а уровни 0 и 6 — ни одной. Процесс /sbin/mingetty
откроет пути доступа к устройствам tty[], задаст их режимы, покажет строку приглашения и начнет процесс авторизации.
На пятом уровне Upstart выполняет сценарий /etc/X11/prefdm
, который запускает менеджер дисплея X[] — gdm
, kdm
или xdm
в зависимости от настроек в файле /etc/sysconfig/desktop
.
По завершению система будет работать на уровне выполнения 5 и появится экран входа.