Глава 6. Система rc.d

Глава 6. Система rc.d

Русский перевод: Вадим Лопатюк

Начиная с версии NetBSD 1.5 загрузка системы была изменена на использования rc-сценариев (скриптов), для контроля за сервисами, используемых в некоторых системах инициализации (init-system) System V и Linux, но без уровней запуска (runlevels). Эта глава - обзор rc- системы и ее конфигурации в NetBSD.

6.1. Конфигурация rc.d

Загрузочные файлы системы располагаются в каталоге /etc и называются:

  • /etc/rc

  • /etc/rc.conf

  • /etc/rc.d/*

  • /etc/rc.lkm

  • /etc/rc.local

  • /etc/rc.shutdown

  • /etc/rc.subr

  • /etc/defaults/*

  • /etc/rc.conf.d/*

Сначала посмотрите как управляются и поддерживаются сценарии, подробная информация содержится в rc(8):

  • Когда ядро инициализирует все устройства при загрузке - оно обычно запускает init(8), который, в свою очередь, производит запуск /etc/rc.d

  • /etc/rc сортирует сценарии в /etc/rc.d используя rcorder(8), и запускает их в этом порядке. См. rcorder(8) страницу руководства для ознакомления с правилами определяется очередности /etc/rc.d сценариев.

  • /etc/rc.subr содержит общие функции используемые большинством сценариев /etc/rc.d/*.

  • Когда система отключается командой shutdown(8), то /etc/shutdown запускает скрипты из /etc/rc.d в обратном порядке (определенном в rcorder(8)) с ключом останова сервиса.

Дополнительные скрипты, находящиеся вне директории rc.d:

  • /etc/rc.lkm загрузка или выгрузка Загружаемых Модулей Ядра (Loadable Kernel Modules), см. modload(8) и /etc/rc.d/lkm[123].

  • /etc/rc.local это едва ли не последний сценарий, вызываемый при загрузке. Этот сценарий может редактироваться администратором для запуска локальных демонов (daemons), он не соответствует концепции rc.

    Например, пакеты установленные pkgsrc обычно добавляют в него загрузочные файлы из/usr/pkg/etc/rc.d, и оставляют системному администратору принимать решение о их подключении любым способом: ручное копирование/ссылка на них в /etc/rc.d, или включение их в /etc/rc.local. Далее пример из системы с установленным web-сервером apache, запуск которого прописан в /etc/rc.local:

    if [ -f /usr/pkg/etc/rc.d/apache ]; then
    	/usr/pkg/etc/rc.d/apache start
    fi

Основным конфигурационным файлом для загрузочных сценариев является rc.conf(5), который располагается в /etc/rc.conf. /etc/rc.conf загружает настройки "по умолчанию" из /etc/defaults/rc.conf, к которому не нужно прикасаться. При необходимости вернуться к старым настройкам "по умолчанию", им можно подменить установленный в /etc/rc.conf.

Например, если вам нужно подключить демон SSH (Secure Shell Daemon):

# cd /etc; grep ssh defaults/rc.conf
sshd=NO     sshd_flags=""
# echo "sshd=YES" >> rc.conf

Или просто отредактируйте /etc/rc.conf вашим любимым редактором. Таким же образом можно поступить с любыми настройками "по умолчанию", которые необходимо изменить. Общая последовательность команд, часто выполняемая после установки свежей системы NetBSD:

# cat /etc/defaults/rc.conf >>/etc/rc.conf
# vi /etc/rc.conf 

Будте внимательны! Используйте «>>», а не «>» в противном случае вы можете уничтожить предыдущее содержание /etc/rc.conf. Учтите, в этом файле находятся необходимые для работы системы параметры! После того, как вы скопируете установки этим способом, модифицируйте все что вам необходимо в /etc/rc.conf. Проконсультируйтесь со страницей руководства rc.conf(5) для получения более подробной информации.

Последний каталог по списку но не по значению: /etc/rc.conf.d/, который может быть использован для хранения скриптов стороннего программного обеспечения, позволяя устанавливать одну или несколько настроек на каждый файл.

6.2. Сценарии rc.d

Актуальные сценарии управления сервисами располагаются в /etc/rc.d. Каждый сервис должен быть единожды активирован или не активирован в /etc/rc.conf, который также может быть модифицирован для вызова rc сценариев из командной строки, например, если администратору необходимо запустить демон SSH:

# /etc/rc.d/sshd start
Starting sshd.

Сценарии rc могут принимать один из следующих аргументов:

  • start

  • stop

  • restart

  • kill

Например, когда должна быть добавлена новая запись в базу данных named сервера:

# /etc/rc.d/named restart
Stopping named.
Starting named.

Немного более комплексный пример - когда было изменено несколько настроек.правил брандмауэра ipfilter, конфигурации ipnat и изменен тип криптования SSH сервера:

# sh /etc/rc.d/ipfilter restart
# sh /etc/rc.d/ipnat restart
# sh /etc/rc.d/sshd restart 

6.3. Роль rcorder и rc сценариев

Загрузка системы во всех Unix системах основывается на определении последовательности в которой будут запускаться сервисы в том или ином случае. На некоторых Unix системах это реализуется определенным порядком именования файлов и/или помещении их в отдельные директории запуска (Solaris полагается на маски, такие как - /etc/rc[23].d/S*, осуществляя сортировку по цифровому расширению), или просто размещая все команды, которые должны запускаться при системной загрузке в один монолитный сценарий (который использовался в старых BSD и NetBSD до rc-системы). Но он будет очень запутан. В NetBSD это выполняется rc-сценариями и их содержанием. Обратите внимание NetBSD не имеет многих уровней запуска, какие можно найти в системах System V, таких как Solaris или Linux.

В начале каждого из rc-сценариев в /etc/rc.d/*, там где серия строк-коментариев, имеется одна из следующих составляющих:

  • REQUIRE

  • PROVIDE

  • BEFORE

  • KEYWORD

Здесь устанавливаются зависимости данного rc сценария и отсюда rcorder может легко работать «вверх» или «вниз» в зависимости от требований ситуации. Следующий пример /etc/rc.d/nfsd сценария:

...
 PROVIDE: nfsd
 REQUIRE: mountd

. /etc/rc.subr
...

Здесь мы можем увидеть, что этот сценарий необходим для «nfsd» и он требует, чтобы «mountd» был запущен раньше. Утилита rcorder(8) должна использоваться во время системной загрузки для сковозного прочтения всех rc-сценариев, и определения корректной последовательности их запуска (индивидульно по имени).

6.4. Дополнительно к прочтению

Это дополнительно доступные ресурсы, относящиеся к rc.d system:

  • Один из главных создателей rc.d, Luke Mewburn, сделал презентацию системы на USENIX 2001. Она доступна в PDF формате.

  • Will Andrews написал в Daemonnews статью, названную The NetBSD rc.d System.

Обновлено: 16.03.2015