Bsdadmin.ru

Записки администратора FreeBSD

Путь на сайте

Домашняя FreeBSD Расширенное управление программным обеспечением FreeBSD.Часть1

Расширенное управление программным обеспечением FreeBSD.Часть1

FreeBSD поддерживает работу множества различных программных продуктов. Большая их часть доступна в виде исходного кода, поэтому их можно собрать как «родное» программное обеспечение FreeBSD. И благодаря продуманной организации FreeBSD в ней также можно запускать программы из многих других операционных систем. Посмотрим, как это можно реализовать. Внимание будет сосредоточено на популярном пакете совместимости с Linux, который позволяет запускать во FreeBSD программы Linux без их модификации.
Кроме того, для запуска программ во время начальной загрузки и их останове при выключении системы необходимо редактировать и создавать заново сценарии запуска и останова.  Здесь будет рассмотрено, как реализовать такие системы и управлять ими во FreeBSD. 
Также, здесь будет рассмотрена работа систем с несколькими процессорами и их взаимодействие с программным обеспечением. Хотя несколько процессоров могут значительно усилить мощь системы, они не принесут пользы, если программы не сконфигурированы должным образом.

Сценарии запуска и останова.

Основные программы FreeBSD запускаются посредством / etc/rc, но дополнительные программы запускаются отдельными сценариями, которые устанавливаются системой «портов» и пакетов. Однако при установке собственной программы необходимо создать сценарий, который управляет ее запуском и остановом. Для изменения процесса запуска существующего пакета необходимо понимать, как работают сценарии запуска и останова.
Командные сценарии /etc/rc   управляют процессом запуска основной системы. В ходе начальной загрузки сценарии запуска FreeBSD проверяют несколько каталогов и запускают найденные в них дополнительные командные сценарии. Чаще всего сценарии запуска и останова находятся в каталоге /usr/local/etc/rc.d, но могут располагаться по умолчанию и в /usr/XllR6/etc/rc.d. Эти каталоги задаются в /etc/defaults/rc.conf и могут быть подменены в /etc/rc.conf.

Дополнительные каталоги сценариев можно добавить с помощью переменной local_startup в rc.conf.

 

В процессе поиска командных сценариев система проверит эти каталоги на наличие файлов, имена которых заканчиваются на «.sh». Если система находит такой файл, он расценивается как командный сценарий и выполняется с аргументом start. При останове система FreeBSD запускает те же сценарии с аргументом stop. Предполагается, что сценарии принимают эти аргументы и выполняют соответствующие действия.

Типичный сценарий запуска
Рассмотрим типичный сценарий запуска, snmpd.sh. Он является частью пакета net-snmp, который будет рассмотрен чуть позже. Сейчас достаточно знать, что этот сценарий запускает сервер SNMP при начальной загрузке и останавливает этот демон при выключении системы. Вот этот сценарий:
№!/bin/sh
в if ! PREFIX=$(expr $0 : "\(Л -\)/etc/rc\.d/$(basename $0)\$"); then echo "SO: Cannot determine the PREFIX" >&2 exit 1
fi
® case "$1" in start)
[ -x ${ PREFIX} /sbin/snmpd ] && ${ PREFIX} /sbin/snmpd && echo -n ' snmpd'
stop)
killall snmpd && echo -n ' snmpd'
echo "Usage: basename $0' { start|stop} " >&2 • •i
*)
esac exit 0
Строка #!/bin/sh (О) показывает, что это командный сценарий. Остальная часть файла (подобно командному файлу в Windows) содержит команды, которые выполняются сценарием.
Первый раздел, ограниченный if (©) и fi, определяет путь к программам и сообщает следующим командам сценария, в каком каталоге он запущен - в /usr/local, /usr/XllR6 или в каком-то другом. Оставшейся части сценария (©) надо знать об этом, чтобы находить соответствующие команды.
В строке case "$1" (©) сценарий принимает решение о дальнейших операциях. Здесь считывается первый аргумент, с которым был вызван сценарий. Например, если сценарий запущен как snmpd. sh start, то start - это первый аргумент. Если запустить сценарий как snmpd. sh stop, первым аргументом будет stop. В сценарии есть несколько подразделов. Все строки между start) и символами «;;» - это шаги, выполняемые при условии, что первым аргументом является start. Все строки между stop) и следующими двумя символами точка с запятой (;;) - это действия, выполняемые при условии, что первым аргументом является stop. Последний раздел, *), - групповой символ (wildcard) для всех других возможных аргументов.
Например, если запустить этот сценарий как snmpd.sh start, он выполнит следующую команду:
[ -X ${PREFIX}/sbin/snmpd ] && ${PREFIX}/sbin/snmpd && echo -n ' snmpd'
Это стандартные команды оболочки. Сначала проверяется существование программы snmpd. Если такая программа есть, она запускается и выводит свое имя. Аналогично, если вызвать сценарий с аргументом stop, он запросто уничтожит все процессы snmpd.
Чтобы изменить поведение пакета при запуске, необходимо отредактировать сценарий запуска. Например, для запуска snmpd с аргументом -0 надо отредактировать стартовую строку. Найдите часть команды, в которой запускается snmpd, и измените ее:
[ -х ${PREFIX}/sbin/snmpd ] && ${PREFIX}/sbin/snmpd -0 && echo -n ' snmpd'
Эти сценарии можно применять не только при запуске и останове, но и в ходе работы системы. Например, чтобы перезапустить демон snmpd и заставить его перечитать свой конфигурационный файл, можно выполнить такую команду:

#/usr/local/etc/rc.d/snmpd.sh stop && /usr/local/etc/rc.d/snnpd.sh start

Домашняя FreeBSD Расширенное управление программным обеспечением FreeBSD.Часть1