Расширенное управление программным обеспечением 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *