Стартовые сценарии
Категория: Запуск и останов системы | Автор: admin | 24-09-2009, 06:18 | Просмотров: 5645

После выхода из интерактивного режима (или при автоматической загрузке, когда завершает работу командный интерпретатор, запущенный с правами root) программа init выполняет сценарии запуска системы. Они являются сценариями интерпретатора Bourne shell (sh), а их точное местоположение и содержимое зависит от системы.

Наиболее широко распространены два способа организации работы со стартовыми сценариями, уходящие корнями в историю. В BSD-системах эти файлы хранятся в каталоге /etc и их имена начинаются с префикса «rc». В системах семейства System V файлы сценариев располагаются в каталоге /etc/init.d, а ссылки на них созданы в каталогах /etc/rc0.d, /etc/rc1.d и т.д. второй вариант организации является более четким и позволяет аккуратнее выполнять останов системы.

Ниже приведен перечень задач, которые часто выполняется инициализационные сценариями:

  • задание имени компьютера;

  • установка часового пояса;

  • проверка дисков с помощью команды fsck (только в автоматическом режиме);

  • монтирование системных дисков;

  • удаление файлов из каталога /tmp;

  • конфигурирование сетевых плат;

  • запуск процессов-демонов и сетевых служб.

Большинство стартовых сценариев выводит на консоль подробную информацию о выполняемых ими задачах. Это может оказать существенную помощь при отладке или поиске зависания в процессе начальной загрузки.

В старых системах нередко приходилось модифицировать стартовые сценарии, чтобы настроить их для конкретной среды. Сегодня сценарии, поставляемые разработчиком системы, должны быть достаточно общими, чтобы работать в системах любой конфигурации. Сведенья о локальной конфигурации системы не задаются в самом сценарии, а помещается в отдельный файл (или набор файлов). Конфигурационные файлы, как правило, представляют собой небольшие файлы Bourne shell, включаемые в стартовые сценарии для получения доступа к некоторым переменным командного интерпретатора.

 

Стартовые сценарии в системах семейства System V

 

Сегодня сценарии в стиле System V наиболее распространены. Они используются в трех из четырех рассматриваемых нами операционных систем. Мы в первую очередь опишим общие принципы запуска системы, а затем перейдем к анализу особенностей конкретных ОС.

В системах семейства System V программа init определяет 7 «уровней выполнения», на каждом из которых должен выполнятся конкретный набор системных сценариев.

  • Уровень 0 говорит о том, система полностью прекратила работу.

  • Уровень 1 или S означает однопользовательский режим.

  • Уровни 2 – 5 предназначены для многопользовательского режима.

  • Уровень 6 определяет этап перегрузки системы.

Уровни 0 и 6 отличаются тем, что система в действительности не может в них оставаться. Переход на эти уровни означает, что система либо завершает работу, либо перегружается. В многопользовательском режиме чаще всего установлен уровень выполнения 2 или 3; уровни 4 и 5 используются редко. Уровни 1 и S различны для каждой системы.

Однопользовательскому режиму традиционно соответствует уровень 1. на этом уровне запрещены все многопользовательские сеансы и процессы удаленной регистрации, а в системе выполняется минимальный набор программ. Поскольку в данном режиме доступ к системе осуществляется с правами пользователя root, администраторам необходимо, чтобы при загрузке в таком режиме система выдавала приглашение на ввод пароля. Для этой цели предназначен уровень S: в нем создается отдельный процесс, выдающий требуемое приглашение на экран. В Solaris уровень S является вполне самостоятельным, но в Linux он носит переходной характер и завершается сразу после ввода пароля.

Создается впечатление, что уровней выполнения больше, чем нужно. Обычно это объясняется тем, что в телефонном коммутаторе 7 уровней, поэтому в UNIX-системе должно быть столько же. В Red Had поддерживается до 10-ти уровней, хотя уровни 7 – 9 не определенны.

В файле /etc/inittab содержатся параметры, определяющие, что должна делать программа init на каждом из уровней. Формат файла зависит от системы, но основная идея состоит в том, что в нем задаются команды, которые должны быть выполнены (или продолжать выполнятся), когда система переходит на конкретный уровень.

В процессе загрузки программа init последовательно продвигается от уровня 0 к уровню, заданному по умолчанию в файле /etc/inittab. Чтобы осуществить переход между соседними уровнями, программа init выполняет команды из этого файла. Аналогичные действия производятся в обратном порядке при останове системы.

К сожалению, структура файла /etc/inittab довольно сложна и не всегда согласуется с тем, как на самом деле происходит запуск и останов сервисов в UNIX-системах. Чтобы сделать этот файл более полезным, многие системы семейства System V реализуют дополнительный, абстрактный уровень. Он обычно представлен в виде команды. Которая запускается из файла /etc/inittab и осуществляет смену уровней. На этом уровне выполняются сценарии из каталога, зависящего от целевого уровня; они переводят систему в новое состояние.

Системным администраторам обычно нет необходимости работать непосредственно с файлом /etc/inittab, так как существующие сценарии подходят для большинства случаев. Далее в главе мы не будем упоминать это файл и все те механизмы, которые связывают программу init со стартовыми сценариями. Просто когда мы говорим о том, что программа init выполняет такой-то сценарий, нужно понимать: связь со сценарием может быть косвенной.

Основные копии стартовых сценариев хранятся в каталоге init.d. Он, в свою очередь, может располагаться в каталоге /etc, но это не всегда так. Каждый сценарий отвечает за запуск одного демона или определенной подсистемы. Сценариям можно передавать аргументы start и stop, которые означают, что соответствующий сервис должен быть либо запущен, либо остановлен. Большинство сценариев также аргумент restart, который эквивалентен связке start+stop. Обладая правами администратора, можно вручную или останавливать отдельные сервисы вызывая нужный сценарий из каталога init.d и передавая ему требуемый аргумент.

Ниже показан простой сценарий, позволяющий запускать, останавливать или перезапускать демон sshd:

#! /bin/sh

test –f /usr/local/sbin/sshd || exit 0

case “$1” in

start)

echo –n “Starting sshd: sshd”

/usr/local/sbin/sshd

echo “.”

;;

stop)

echo –n “Stoping sshd: sshd”

kill ‘cat /var/run/sshd.pid’

echo “.”

;;

restart)

echo –n “Stoping sshd: sshd”

kill ‘cat /var/run/sshd.pid’

echo “.”

echo –n “Starting sshd: sshd”

/usr/local/sbin/sshd

echo “.”

;;

*)

echo “Usage: /etc/init.d/sshd start|stop|restart”

exit 1

;;

esac

 

Чтобы перейти на требуемый уровень, программа init должна получить дополнительную информацию о том, какие сценарии и с какими аргументами запускать. Но она не просматривает непосредственно каталог init.d, а обращается к каталогу rcуровень.d, где уровень – это номер требуемого уровня выполнения, к которому осуществляется переход (rc0.d, rc1.d и т.д.).

В каталогах rcуровень.d обычно содержатся символические ссылки на сценарии в каталоге init.d. Имена ссылок начинаются с префикса S или K, за которым идет номер и имя сервиса, управляемого сценарием (например, S34named). Если программа init переходит к более высокому уровню, она выполняет все сценарии с префиксом S (“start” - запуск) в порядке возврастания номеров, причем каждому сценарию передается аргумент start. Когда осуществляется переход к более низкому уровню, запускаются сценарии с префиксом K (“kill” - уничтожить) в порядке убывания номеров, и всем им передается аргумент stop. В зависимости от системы, программа init может просматривать только каталог rcуровень.d, относящийся к целевому уровню, либо все каталоги на пути от исходного к целевому уровню.

Чтобы сообщить системе, когда следует запускать тот или иной демон, необходимо создать символическую ссылку в соответствующем каталоге. В большинстве систем основная часть сетевых демонов запускается на уровне 2. следующие команды информируют систему о том, что демон sshd должен быть запущен на уровне 2 и остановлен при завершении работы системы:

# ln -s /etc/init.d/sshd /etc/rc2.d/S99ssh2

# ln -s /etc/init.d/sshd /etc/rc2.d/K25ssh2

Первая ссылка говорит о том, что сценарий /etc/init.d/sshd следует запустить в самом конце этапа перехода на уровень 2 и передать ему аргумент start. Вторая ссылка сообщает, что в процессе завершения работы системы сценарий /etc/init.d/sshd должен быть запущен относительно рано, причем с аргументом stop. В некоторых системах процессы останова и перезагрузки трактуются по-разному, поэтому необходимо также поместить символическую ссылку в каталог /etc/rc6.d, чтобы обеспечить корректный останов демона при перезагрузке системы.

 

Solaris

 

Системы Solaris, HR-UX и Red Hat используют сценарии в стиле System V, которые хранятся в каталоге init.d. В Solaris этот каталог, как и каталоги rcуровень.d находятся в каталоге /etc.

Раньше стартовые сценарии Solaris обращались к конфигурационным файлам, разбросанным по всей системе, что приводило к невообразимой путанице. В последних версиях системы компании Sun устранила большинство проблем. Стартовые сценарии теперь значительно улучшены и большей частью самодостаточны.

Некоторые конфигурационные файлы собраны в каталоге /etc/defaults (табл. 2.3), однако общее число настраиваемых параметров не так уж велико. Остальные файлы по-прежнему распределены между различными каталогами.

 

Таблица 2.3 Конфигурационные файлы стартовых сценариев Solaris

Файл

Назначение

/etc/.UNCONFIGURED

Сообщает стартовым сценариям о необходимости полностью переконфигурировать систему (обычно используется только в процессе инсталляции)

/etc/hostname.интерфейс

Содержит имя узла, связанное с указанным сетевым интерфейсом (сетевой платой)

/etc/dhcp.интерфейс

Сообщает о том, что сетевой интерфейс должен быть сконфигурирован с помощью протокола DHCP

/etc/defaultrouter

Содержит имя узла и адрес стандартного шлюза

 

HP-UX

 

В HR-UX стартовые сценарии хранятся в каталоге /sbin/init.d. Каталоги символических ссылок также находятся в каталоге /sbin. Конфигурационные файлы размещаются в каталоге /etc/rc.config.d. Их имена соответствуют именам стартовых сценариев. Например, сценарий

/sbin/init.d/SnmpMaster

 

извлекает конфигурационную информацию из файла

/etc/rc.config.d/SnmpMaster

 

и вызывается программой init с помощью таких ссылок:

/sbin/rc2.d/S560SnmpMaster

/sbin/rc1.d/K440SnmpMaster

 

Результаты работы стартовых сценариев сохраняются в файле /etc/rc.log. Если какой-то из сценариев не смог выполнится, просмотрите этот файл на предмет наличия сообщений об ошибках или другой информации, позволяющей выявить суть проблемы. Это настолько полезная и несложная в реализации особенность, что просто удивительно, почему поставщики других систем не догадались сделать нечто подобное.

Конфигурационные файлы могут быть сложны для понимания, хотя они снабжены хорошими комментариями. В табл. 2.4. описано назначение файлов, которые модифицируются чаще других.

 

Таблица 2.4. Конфигурационные файлы HR-UX (каталог /etc/rc.config.d)

Файл(ы)

Назначение

SnmpMaster

Включает или отключает поддержку протокола SNMP

Snmp*

Другие параметры связанные с протоколом SNMP

acct

Включает или отключает подсистему учета процессов; см. acct(1M)

auditing

Управляет работой подсистемы аудита; см. audsys(1M) и audevent()1M

cde

Содержит настройки CDE (Common Desktop Environment – единая настольная среда)

clean*

Управляет операциями очистки, выполняемыми на этапе загрузки

desktop

Определяет, какой из имеющихся рабочих столов будет выбран по умолчанию

hpbase100conf

Конфигурирует устройства Fast Ethernet

hpetherconf

Конфигурирует Ethernet-платы; см. lanadmin(1M)

list_mode

Управляет отображением меню стартовой загрузки

lp

Включает или отключает подсистему буферизации печати

mailservs

Запускает утилиту sendmail или задает почтовый сервер

nameservs

Конфигурирует или запускает демон службы имен

nddconf

Задает параметры ядра, устанавливаемые на этапе загрузки с помощью демона ndd

netconf

Задает параметры конфигурации сети (IP-адрес и т.п.)

netdaemons

Указывает на то, какие сетевые демоны следует запустить

nettle

Конфигурирует подсистемы сетевой трассировки и регистрации; см. nettle(1M), nettlconf(1M) и nettlgen.conf(4)

nfsconf

Задает параметры NFS (Network File System – сетевая файловая система)

pd

Конфигурирует сервис распределенной печати HR-UX

vt

Запускает демон vtdaemon

xfs

Включает и отключает сервис шрифтов X Windows

 

Для большинства этих файлов вполне подходят стандартные установки. Чаще всего модифицируются файлы netconf, netdaemons и, возможно, nddconf.

 

Red Hat

 

Стартовые сценарии – это то, отличает дистрибутивы Linux друг от друга. Например, сценарии Debian очень напоминают сценарии Solaris, а сценарии Slackware сходны со своими «родственниками» во FreeBSD. В Red Hat используются гибридные сценарии, сочетающие в себе черты сценариев System V и FreeBSD плюс еще несколько «наворотов», добавленных только для того, чтобы сделать жизнь администраторов сложнее.

В сценариях Red Hat достаточно сложно разобратся, так как в них могут присутствовать комментарии вида

 

# дурацкий прием, но должен работать

и

# это неправильно!

 

 

Программа init в Red Hat в основном соответствует своему аналогу в System V. На каждом уровне выполнения программа вызывает сценарий /etc/rc.d/rc, передавая ему номер уровня в качестве аргумента. Этот сценарий может выполнятся как в обычном режиме, так и в режиме подтверждения, в котором перед выполнением каждого стартового сценария выдается запрос. Управлять символическими ссылками на стартовые сценарии можно с помощью команды chkconfig.

В Red Hat имеется также сценарий rc.local, напоминающий одноименный сценарий во FreeBSD. В процессе загрузки он выполняется последним. Не стоит добавлять в него собственные команды; лучше воспользоваться средствами System V.

Вот пример загрузки в Red Hat:

[информация о ядре]

INIT: version 2.77 booting

Welcome to Red Hat Linux

Press ‘I’ to enter interactive startup.

Mounting proc filesystem [OK]

Setting clok (utc): Fri Mar 10 07:16:41 MST 2000 [OK]

Loading default keymap [OK]

Activating swap partitions [OK]

. . .

 

Когда появляется сообщение «Welcome to Red Hat Linux», можно нажать клавишу <I>, чтобы продолжить загрузку в режиме подтверждения. Однако подтверждение о нажатии самой клавиши выдано не будет. Red Hat спокойно продолжит монтировать локальные файловые системы, активизировать разделы диска подкачки, загружать таблицы клавиш и вести поиск модулей ядра. Только после перехода на уровень 3 программа init начнет выдавать запросы:

Welcome to Red Hat Linux

Press ‘I’ to enter interactive startup.

Mounting proc filesystem [OK]

Setting clok (utc): Fri Mar 10 07:16:41 MST 2000 [OK]

Loading default keymap [OK]

Activating swap partitions [OK]

Setting hostname redhat.synack.net [OK]

Checking root filesystem [OK]

/dev/hda1: clean, 73355/191616 files, 214536/383032 blocks [OK]

Finding module dependencies [OK]

Checking filesystem [OK]

Mounting local filesystem [OK]

Turning on user and group quotas for local filesystem [OK]

Enabling swap space [OK]

INIT: Entering runlevel: 3

Entering interactive startup

Start service kudzu (Y)es/(N)o continue? [Y]

 

 

Режимы интерактивной и однопользовательской загрузки начинаются с одного и того же места. Если в процессе загрузки возникли серьезные проблемы и этой точки достичь невозможно, воспользуйтесь спасательной загрузочной дискетой.

Можно передать загрузчику LILO параметр init=/bin/sh, чтобы заставить его вызвать командный интерпритатор однопользовательского режима еще до того, как будет запущена программ init . В этом случае все действия по запуску системы придется производить вручную, включая выполнение программы fsck и монтирование локальных файловых систем.

Повлиять на процесс загрузки в Red Hat можно путем модификации конфигурационных файлов, расположенных в каталоге /etc/sysconfig. Принципы работы с ними такие же, как и с файлами в каталоге /etc/rc.config.d в HP-UX, хотя самих файлов меньше, а опций в них больше (табл. 2.5)

Таблица 2.5. Файлы и подкаталоги каталога /etc/sysconfig в Red Hat

Файл/подкаталог

Название или содержимое

apmd

Список аргументов для демона подсистемы APM (Advanced Power Management – расширенное управление питанием)

clock

Задает тип системных часов (почти всегда UTC)

console

Загадочный каталог, который всегда пуст

hwconf

Включает всю информацию о системном оборудовании; используется сервисом Kudzu

i18n

Содержит региональные установки системы (формат представления даты/времени, язык и т.д.)

init

Определяет, как отображаются сообщения, постопающие от стартовых сценариев

keyboard

Задает тип клавиатуры (используйте идентификатор «us» для стандартной 101-клавишной клавиатуры)

mouse

Задает тип мыши; используется системой X Windows и программой gpm

network

Задает глобальные сетевые опции (имя узла, шлюз, маршрутизация и т.д.)

network-scripts

Каталог, в котором содержатся вспомогательные сценарии и сетевые конфигурационные файлы

pcmcia

Сообщает, следует ли запускать демоны PCMCIA, и содержит необходимые опции

sendmail

Задает параметры для утилиты sendmail

 

Некоторые элементы из списка заслуживают дополнительных комментариев:

  • Файл hwcong просматривается сервисом Kudzu, который проверяет, было ли добавлено или удалено какое-нибудь устройство, и запрашивает у пользователя дополнительные инструкции. В промышленных системах этот сервис можно деактивировать, поскольку он сильно задерживает процесс загрузки. Каждый раз, когда обнаруживается изменение аппаратной конфигурации, возникает задержка в 30 с.

  • Каталог network-scripts содержит вспомогательные файлы, связанные с сетевой конфигурацией. Все, что может потребоваться в ней изменить, - это файлы с именами ifcfg-интерфейс. Например, файл network-scripts.ifcfg-eth0 включает параметры платы с идентификатором eth0, в частности ее IP-адрес. О конфигурации сетевых плат рассказывается в параграфе 13.10.

  • Файл sendmail содержит две переменные: DAEMON и QUEUE. Если переменная DAEMON равна yes, система запустит утилиту sendmai в процессе загрузки. Переменная QUEUE информирует утилиту sendmail о том, сколько времени после возникновения ошибки сообщение должно находится в очереди, прежде чем будет предпринята попытка повторной отправки.

 

FreeBSD

 

Представленная ниже информация касается FreeBSD, но общие принципы организации стартовых сценариев применимы ко всем BSD-системам.

Программа init во FreeBSD выполняет только один, главный сценарий - /etc/rc. Он, в свою очередь, запускает остальные сценарии, которые расположены в каталоге /etc и носят имена вида rc.имя. Сценарии запускаются в определенном порядке, а концепция уровней выполнения не поддерживается.

Сценарий /etc/rc начинает свою работу с выполнения трех сценариев, определяющих конфигурационную информации.:

  • /etc/defaults/rc.conf

  • /etc/rc.conf

  • /etc/rc.conf.local

В этих файлах задаются другие каталоги, в которых необходимо искать стартовые сценарии (имена каталогов заносятся в переменную local.startup). кроме того, в них определяется ряд переменных интерпретатора shell, используемых последующими сценариями. Сценарий /etc/rc применяет команду source (точнее, ее оригинальный псевдоним '.'), чтобы преобразовать конфигурационные и все последующие сценарии в единый поток выполнения. Эта процедура включает в себя конкатенацию файлов в один большой сценарий.

Файл /etc/defaults/rc.conf содержит огромный перечень всех конфигурационных параметров и их стандартных значений. Его нельзя редактировать. Если требуется изменить значение какой-либо переменной, просто переопределите ее в файлах /etc/rc.conf и /etc/rc.conf.local. на страницах интерактивного руководства, посвященных файлу /etc/rc, приведен исчерпывающий список переменных, которые можно менять.

Заглянув в каталог /etc, вы можете обнаружить в нем много различных сценариев:

% ls /etc/rc*

rc       rc.diskless1   rc.isdn     rc.pccard

rc.atm   rc.diskless2   rc.local    rc.resume

rc.conf  rc.firewall    rc.serial   rc.devfs

rc.i386  rc.network     rc.shutdown rc.suspend

 

 

Если ядро сконфигурировано как бездисковый клиент, в первую очередь вызывается сценарий rc.diskless1. затем вызывается сценарий rc.sysctl, rc.serial, rc.pccard и rc.network, после чего сценарий /etc/rc переходит к выполнению служебных функций. В качестве завершающего аккорда запускается сценарий rc.local. Если какой-то сценарий не определен. Он просто пропускается (в приведенном выше списке сценарий rc.sysctl отсутствует).

Стандартный сценарий rc.serial ничего не делает, а лишь определят набор функций, которые позволяют инициализировать последовательные порты и устройства на этапе загрузки.

Если в одном из файлов rc.conf задана поддержка интерфейсов PCMCIA/CardBus, сценарий rc.pccard загружает модули ядра, связанные с контролером PCMCIA, и запускает демон pccard, управляющий динамическим конфигурированием устройств PCMCIA по мере их подключения и отключения.

Сценарий rc.network инициализирует сетевую среду компьютера. Он использует переменные, определенные в файлах rc.conf, для конфигурирования сетевых интерфейсов, протоколов DHCP и PPP, маршрутизаторов и брандмауэров. Редактировать этот сценарий нет необходимости, так как все параметры содержатся в файлах rc.conf. он вызывает другие сетевые стартовые сценарии: rc.atm, rc.isdn и rc.firewall.

Для конфигурирования сетевого интерфейса во FreeBSD предназначены три переменные: hostname, defaultrouter и ifconfig_инт (где инт – имя интерфейсного устройства). Переменная ifconfig_инт должна содержать строку опций, передаваемых команде ifconfig при инициализации устройства. Например, в строках сценария

hostname=”my.fullyqualified.name”

ifconfig_de0=”inet 192.168.1.2 netmask 0xffffff00”

defaultrouter=”192.168.1.1”

узлу назначается IP-адрес 192.168.1.2 и задается стандартный адрес шлюза 192.168.1.1. Если данное интерфейсное устройство должно конфигурироваться динамически по протоколу DHCP, задайте строку следующего вида:

ifconfig_de0=”DHCP”

Сервер DHCP автоматически назначает узлу IP-адрес, доменное имя и маршрут по умолчанию.



 (голосов: 1)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page