Вернемся к процессу загрузки. Файл rc.sysinit предназначен для выполнения начальных действий, необходимых для корректного функционирования операционной системы. Ниже приведен список действий, выполняемых скриптом rc.sysinit. Конечно, он зависит от дистрибутива и от конфигурации системы, но в большей части он неизменен.
Действия скрипта:
• установка путей;
• установка имени хоста;
• чтение конфигурационных данных из /etc/sysconfig/network;
• вывод баннера;
• монтирование файловой системы /proc;
• конфигурирование параметров ядра системы, используя файл /etc/sysctl.conf;
• установка системных часов, используя конфигурацию из /etc/sysconfig/clock;
• установка параметров клавиатуры консоли программой loadkeys в соответствии с файлами /etc/sysconfig/console/default.kmap или /etc/sysconfig/keyboard;
• загрузка системного шрифта из /etc/sysconfig/i18n и файлов с расширением pcf.gz или gz из каталогов /etc/sysconfig/console, /usr/lib/kbd/consolefonts или /lib/kbd/consolefonts;
• активация области подкачки;
• инициализация USB-контроллера;
• запуск программы fsck для корневой системы, при обнаружении серьезных проблем выполняется немедленная перезагрузка;
• старт PNP-устройств в соответствии с /etc/isapnp.conf;
• перемонтирование корневой файловой системы в режим чтения/записи;
• перенастройка таблицы монтирования /etc/mtab;
• проверка квот для корневой файловой системы;
• проверка необходимости загрузки модулей, нахождение зависимостей, загрузка и конфигурирование модулей;
• подключение RAID-устройств;
• запуск fsck для других систем;
• монтирование локальных файловых систем;
• включение механизма квот;
• удаление тригерных файлов загрузки;
• очистка каталогов /var/lock и /var/run;
• очистка файлов /var/run/utmp и /var/run/utmpx;
• удаление файлов-защелок из /tmp;
• включение подкачки;
• инициализация последовательных устройств, используя скрипт /etc/rc.d/rc.serial;
• загрузка модулей для SCSI-стримера;
• генерация файла заголовка для определения загружаемого ядра командой /sbin/mkkerneldoth;
• установка ссылки /boot/System.map;
• проверка использования интерактивного режима загрузки и, в случае необходимости, создание файла /var/run/confirm.
Запуск проверки файловой системы командой fsck может быть принудительно отключен при наличии файла /fastboot, а также включен при наличии /forcefsck. Создать эти файлы можно выполнением команды shutdown с соответствующими ключами. Однако не рекомендуется злоупотреблять этими возможностями.
Sysctl позволяет зафиксировать ряд параметров и обеспечить (через /etc/sysctl.conf) их установку после перезагрузки. Вот как выглядит /etc/sysctl.conf сразу после инсталяции системы:# Disables packet forwarding
net.ipv4.ip_forward = 0
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables the magic-sysrq key
kernel.sysrq = 0
rcПрежде чем приступить к разбору скрипта гс, необходимо упомянуть о каталогах /rcX.d и /init.d. Уточним еще раз – иерархия /rcX.d характерна для дистрибутивов Red Hat и базирующихся на нем, в других дистрибутивах и в UNIX-системах их может и не быть. Эти каталоги играют исключительную роль в процессе загрузки, поскольку они содержит основные скрипты, необходимые для организации процесса загрузки.
Подкаталог /init.d содержит по одному скрипту для каждой из служб, установленных в системе (sendmail, HTTP, Samba, FTP и т. п.). Этот скрипт отвечает за запуск, остановку или перезагрузку соответствующей службы. В каталоге /rcX.d находятся ссылки на файлы скриптов, как правило расположенные в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы К, либо с буквы S, после которой вдет двухзначное число и имя соответствующей службы. Буквы S и К – первые буквы слов start и kill соответственно. Из этого следует, что файл, начинающийся с буквы S, отвечает за старт соответствующего процесса, а файл, начинающийся с буквы К, отвечает за остановку соответствующего процесса. Цифры, идущие после S или К в именах ссылок, задают порядок запуска скриптов.
Заглянем в файл гс. Первым делом скрипт пытается определить текущий уровень выполнения и уровень выполнения, в который необходимо перевести систему. После этого он проверяет, нажимал ли пользователь букву I для перехода в режим пошаговой загрузки процессов. Затем скрипт останавливает запущенные на предыдущем уровне выполнения процессы, отсутствующие на новом уровне выполнения, а потом запускает необходимые службы для нового уровня выполнения. Как правило, одна и та же служба нужна на нескольких уровнях. Поэтому не имеет смысла эту службу при переходе с одного уровня выполнения на другой останавливать и тут же запускать. В Linux для этой цели используются специальные флаги.