Выбрать главу

Вернемся к процессу загрузки. Файл 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 для этой цели используются специальные флаги.