30.2.4. Программа /sbin/init

30.2.4. Программа /sbin/init

30.2.4. Программа /sbin/init

Программа /sbin/init (также init) координирует оставшуюся часть процесса загрузки и выполняет настройку окружения пользователя.

Выполняемый процесс init становится родительским по отношению ко всем автоматически запускаемым в системе процессам. Сначала он запустит сценарий /etc/rc.d/rc.sysinit, который задает путь окружения, стартует пространство подкачки, проверяет файловые системы и выполняет все необходимые для инициализации системы шаги. К примеру, для инициализации аппаратных часов rc.sysinit считывает файл конфигурации /etc/sysconfig/clock, а для инициализации отдельных процессов серийного порта выполняет файл /etc/rc.serial.

init затем выполняет сценарий /etc/inittab, который определяет настройки системы на каждом уровне выполнения SysV init. Уровень выполнения — это состояние или режим, который определяют сервисы, перечисленные в каталоге /etc/rc.d/rc<x>.d/ (где <x> — номер уровня выполнения). Информация об уровнях выполнения SysV init может быть найдена в Раздел 30.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 и выполнить эти же сценарии запуска и остановки служб. Например, для остановки сервера Apache HTTP надо выполнить команду /etc/rc.d/init.d/httpd stop.

Символические ссылки пронумерованы по порядку их запуска и остановки. Этот порядок может быть изменен путем модификации номера; чем меньше число, тем раньше будет запущена служба. В случае, если число совпадает, порядок служб будет определяться по алфавиту.

Замечание

Одним из последних запускаемых программой init файлов является файл /etc/rc.d/rc.local, который помогает задать индивидуальные настройки системы. Раздел 30.3, «Выполнение дополнительных программ во время загрузки» содержит информацию о rc.local.

После прохождения init через соответствующий для уровня выполнения rc-каталог сценарий /etc/inittab запустит процесс /sbin/mingetty для каждой виртуальной консоли. Уровни выполнения со 2 по 5 имеют 6 виртуальных консолей, уровень 1 (монопольный режим) имеет одну консоль, а уровни 0 и 6 — ни одной.

На пятом уровне /etc/inittab выполняет сценарий /etc/X11/prefdm. prefdm запускает X менеджер[14]gdm, kdm или xdm в зависимости от заданного в файле /etc/sysconfig/desktop.

По завершению система будет работать на уровне выполнения 5, и будет отображен экран входа.



[14] Обратитесь к руководству по развертыванию за информацией о менеджерах дисплеев.