Север
2008-02-06
В Slackware Linux используется система инициализации, очень похожая на систему инициализации BSD, которая отличается простотой стартовых скриптов. Все скрипты располагаются в директории /etc/rc.d.
Согласно файлу /etc/inittab, самой первой, независимо от уровня выполнения, запускается программа /etc/rc.d/rc.S. Программа написана на языке shell script и по ее коду легко проследить, какие действия выполняются при старте системы.
Ниже, на примере скрипта rc.S из дистрибутива Slackware Linux, будут подробно рассмотрены этапы запуска системы.
#!/bin/shВ первой строке определяется интерпретатор, используемый для выполнения программы.
PATH=/sbin:/usr/sbin:/bin:/usr/binОпределяется переменная PATH. Переменная содержит пути к директориям, в которых будут искаться выполняемые программы.
| Внимание! | Эта переменная локальная для данного скрипта и ее значение не будет передаваться остальным программам системы. Первоначальное значение переменной PATH определяется в специальном конфигурационном файле, который будет рассмотрен позже. |
/sbin/mount -v proc /proc -n -t procЗатем происходит подключение файловой системы proc к директории /proc. После этого будут доступны все возможности предоставляемые данной файловой системой.
Обратите внимание на опцию -n, которая отменяет запись строки в файл /etc/mtab.
if [ -w /proc/sys/kernel/hotplug ]; then
if grep -wq nohotplug /proc/cmdline ; then
echo "/dev/null" > /proc/sys/kernel/hotplug
elif [ ! -x /etc/rc.d/rc.hotplug ]; then
if [ ! "$(uname -r | cut -f 1,2 -d .)" = "2.4" ]; then
echo "/dev/null" > /proc/sys/kernel/hotplug
fi
fi
fi
В этих строках происходит проверка возможности запуска системы hotplug.
Основное назначение системы hotplug — загрузка драйверов для устройств, подключаемых без выключения питания компьютера. К таким устройствам относятся устройства, подключаемые к шинам PCMCIA, PCI и USB.
Сначала проверяется существование и возможность записи в файл /proc/sys/kernel/hotplug. В этом файле записана строка запуска программы, которая будет выполняться ядром Linux, если последнее обнаружит подключение нового устройства. Если этого файла нет, значит ядро собрано без поддержки возможности «горячего» подключения устройств, и тогда нет необходимости запускать автоматическую загрузку драйверов при старте системы.
Если вам по каким либо причинам не хочется использовать hotplug, то его можно отключить передав при старте ядру параметр nohotplug. Первый оператор if проверяет наличие этого параметра в файле /proc/cmdline. Если параметр присутствует, содержимое файла /proc/sys/kernel/hotplug обнуляется, и ядро не будет знать какую программу запустить в случае обнаружения нового устройства.
Если используется ядро версии 2.4, то для отключения системы hotplug достаточно сделать не исполняемым файл /etc/rc.d/rc.hotplug. Оператор elif проверяет этот файла. Если он не исполняемый, содержимое файла /proc/sys/kernel/hotplug обнуляется.
При использовании hoplug могут возникать проблемы с загрузкой модулей, приводящие к краху системы. Если вы знаете какие модули вызывают проблемы их загрузку можно отключить. Для этого достаточно дописать имя модуля в файл /etc/modprobe.d/blacklist (для ядер версии 2.6) или в /etc/hotplug/blacklist (для ядер версии 2.4).
if [ -x /etc/rc.d/rc.devfsd ]; then /etc/rc.d/rc.devfsd start fiЗатем проверяется наличие файла /etc/rc.d/rc.devfsd. Этот файл является скриптом, позволяющим включить поддержку виртуальной файловой системы devfsd. В современных версиях Linux эта система не рекомендуется к дальнейшему применению.
if [ -d /sys ]; then
if cat /proc/filesystems | grep -wq sysfs 1> /dev/null 2> /dev/null
then
if ! cat /proc/mounts | grep -wq sysfs 1> /dev/null 2> /dev/null
then
/sbin/mount -v sysfs /sys -n -t sysfs
fi
fi
fi
В следующих строках происходит проверка возможности подключения виртуальной файловой системы sysfs. Ее поддержка появилась в ядрах Linux, начиная с версии 2.6.х. В этой файловой системе отображаются параметры всех устройств обнаруженных в системе.
Подключение файловой системы sysfs возможно:
/sbin/swapon -aПодключаются все файловые системы типа swap и swap файлы, описанные в файле /etc/fstab.
READWRITE=no if touch /fsrwtestfile 2>/dev/null; then rm -f /fsrwtestfile READWRITE=yes else echo "Testing root filesystem status: read-only filesystem" fiПосле загрузки ядра, Linux подключает корневую файловую систему. В этих строках происходит проверка, в каком режиме была подключена эта файловая система: только для чтения или в режиме полного доступа.
Проверяется, удалось ли создать файл /fsrwtestfile. Если удалось, значит система подключена в режиме rw и переменной READWRITE присваивается значение yes. Если не удалось создать, на экран выводится сообщение, а у переменной остается старое значение no.
if [ -r /etc/forcefsck ]; then FORCEFSCK="-f" fiПроверяется наличие файла /etc/forcefsck. Если файл существует, переменной FORCEFSCK присваивается значение -f.
Если вы хотите, что бы при старте системы происходила обязательная проверка файловых систем, достаточно создать файл /etc/forcefsck. В дальнейшем, в файле rc.S, для проверки файловых систем будет вызываться программа fsck, которой будет передаваться опция, находящаяся в переменной FORCEFSCK.
Ниже описывается большой участок кода, в котором происходит проверка корневой файловой системы.
if [ ! $READWRITE = yes ]; then RETVAL=0Если корневая файловая система подключена в режиме только для чтения (проверяется содержимое переменной READWRITE), то выполняется первая часть оператора if.
if [ ! -r /etc/fastboot ]; then echo "Checking root filesystem:" /sbin/fsck $FORCEFSCK -C -a / RETVAL=$? fiПроверяется отсутствие файла /etc/fastboot. Если файл не существует, выполняется проверка корневой файловой системы.
Файл fastboot используется администратором для быстрой загрузки Linux, без проверки файловых систем. То есть, достаточно его создать и при старте системы не будет происходить проверка файловых систем. Файл fastboot имеет приоритет перед файлом forcefsck.
if [ $RETVAL -ge 2 ]; then
if [ $RETVAL -ge 4 ]; then
echo
PS1="(Repair filesystem) \#"; export PS1
sulogin
else
echo
fi
echo "Unmounting file systems."
/sbin/umount -a -r
/sbin/mount -n -o remount,ro /
echo "Rebooting system."
sleep 2
reboot -f
fi
Затем проверяется код возврата программы fsck.
Если при проверке файловой системы программа fsck не нашла никаких ошибок, она возвращает 0. Если были обнаружены ошибки и программа их исправила, она возвращает 1. Если после исправления ошибок требуется перегрузить компьютер, код возврата равен 2. Если программа не может автоматически исправить ошибки и требуется вмешательство администратора, она возвращает 4 или более.
Первый оператор if проверяется условие: код возврате больше или равно 4. Если условие верно, на экран выводиться большое сообщение (в примере кода оно не показано). Переменной PS1 присваивается соответствующее значение и она экспортируется. Затем запускается программа sulogin, которая спрашивает пароль пользователя root и запускает shell. В этом shell администратор производит все необходимые действия по восстановлению корневой файловой системы и выходит из shell.
Если код возврата больше либо равен 2 но меньше 4, значит требуется только перезагрузка системы. Срабатывают операторы после else, и на экран выводится сообщение о необходимости перезагрузки системы (в примере сообщение не показано).
Все строки, начиная с echo "Unmounting file systems.", выполняются всегда, при условии, что код возврата больше либо равен 2. Отключаются все файловые системы, кроме корневой. Корневая файловая система переводится в режим только для чтения. Происходит задержка на 2 секунды и система перегружается.
/sbin/mount -w -v -n -o remount / if [ $? -gt 0 ] ; then echo read junk; fiЕсли после проверки корневой файловой системы не требуется перезагружать компьютер, тогда запускается программа mount, которая переводит файловую систему в режим полного доступа.
Затем проверяется код возврата программы mount. Если возникли ошибки, на экран выводится сообщение (в примере текст сообщения отсутствует) и система ждет, когда пользователь нажмет на клавишу Enter.
Если корневая файловая система изначально была подключена в режиме полного доступа, то будут выполняться операторы после else.
else
echo "Testing root filesystem status: read-write filesystem"
if cat /etc/fstab | grep ' / ' | grep umsdos
1> /dev/null 2> /dev/null ; then
ROOTTYPE="umsdos"
fi
if [ ! "$ROOTTYPE" = "umsdos" ]; then
echo
echo -n "Press ENTER to continue. "
read junk;
fi
fi
В первую очередь проверяется тип корневой файловой системы. Если используется файловая система umsdos, то переменной ROOTTYPE присваивается значение umsdos. Если корневая файловая система имеет тип, отличный от umsdos, то на экран выводится сообщение об ошибке и система ожидает нажатия пользователем клавиши Enter.
Файловая система umsdos применялась для установки Linux поверх файловой системы FAT. В настоящее время, эта файловая система практически не используется.
/bin/rm -f /etc/mtab* /sbin/mount -w -o remount /При подключении файловой системы, программа mount , добавляет строку в файл mtab. При отключении файловой системы, программа umount удаляет соответствующую строку. Если система была выключена не корректно, в этом файле могла остаться неверная информация. Поэтому при старте системы mtab удаляется.
Но файл mtab необходим для работы некоторых программ. Поэтому программа mount запускается еще раз и перемонтирует уже подключенную корневую файловую систему только для того, чтобы описание этой файловой системы было добавлено в файл mtab. Заодно этот файл создается.
if [ -d /proc/sys ]; then /sbin/mount -f proc /proc -t proc fi if [ -d /sys/bus ]; then /sbin/mount -f sysfs /sys -t sysfs fiОписание виртуальных файловых систем proc и sysfs, также должно присутствовать в файле /etc/mtab. Несмотря на то, что эти файловые системы уже могли быть подключены, их повторное подключение происходит только для того, чтобы соответствующие записи появились в файле mtab.
if cat /proc/mounts | grep -wq sysfs && cat /proc/filesystems | grep -wq tmpfs ;
then
if ! grep -wq nohotplug /proc/cmdline ; then
if [ -x /etc/rc.d/rc.udev ]; then
/bin/sh /etc/rc.d/rc.udev start
/bin/sh /lib/udev/udev.count_events.sh
fi
fi
fi
Затем происходит проверка подключения файловой системы [sysfs], а так же поддерживает ли ядро Linux файловую систему [tmpfs]. Если оба условия истинны, и при запуске ядру не был передан параметр nohotplug, тогда происходит запуск системы udev (/bin/sh /etc/rc.d/rc.udev start и /bin/sh /lib/udev/udev.count_events.sh).
if [ -x /sbin/hwclock ]; then
# Check for a broken motherboard RTC clock (where ioports for rtc are
# unknown) to prevent hwclock causing a hang:
if ! grep -q -w rtc /proc/ioports ; then
CLOCK_OPT="--directisa"
fi
if grep -wq "^UTC" /etc/hardwareclock ; then
echo "Setting system time from the hardware clock (UTC)."
/sbin/hwclock $CLOCK_OPT --utc --hctosys
else
echo "Setting system time from the hardware clock (localtime)."
/sbin/hwclock $CLOCK_OPT --localtime --hctosys
fi
fi
Если установлена программа hwclock, происходит попытка прочитать системное время из часов, установленных на материнской плате. И устанавливается время системы.
if [ -r /etc/isapnp.conf ]; then
if [ -x /sbin/isapnp ]; then
/sbin/isapnp /etc/isapnp.conf
fi
fi
Если существует конфигурационный файл isapnp.conf и программа isapnp, последняя запускается.
if [ -x /etc/rc.d/rc.modules.local -a -r /proc/modules ]; then echo "Running /etc/rc.d/rc.modules.local:" /bin/sh /etc/rc.d/rc.modules.local elif [ -x /etc/rc.d/rc.modules-$(uname -r) -a -r /proc/modules ]; then echo "Running /etc/rc.d/rc.modules-$(uname -r):" . /etc/rc.d/rc.modules-$(uname -r) elif [ -x /etc/rc.d/rc.modules -a -r /proc/modules -a -L /etc/rc.d/rc.modules ]; then echo "Running /etc/rc.d/rc.modules -> $(readlink /etc/rc.d/rc.modules):" . /etc/rc.d/rc.modules elif [ -x /etc/rc.d/rc.modules -a -r /proc/modules ]; then echo "Running /etc/rc.d/rc.modules:" . /etc/rc.d/rc.modules fiЭта часть скрипта позволяет произвести "ручную" загрузку модулей при старте системы. В первую очередь проверяется наличие файла /etc/rc.d/rc.modules.local. Если файл присутсвует, происходит его запуск. Если этого файла нет, происходит проверка наличия файла /etc/rc.d/rc.modules-версия.ядра (например: /etc/rc.d/rc.modules-2.6.19). Если файл существует, он запускается.
Если и этого файла нет, производим поиск классического для Slackware Linux файла: /etc/rc.d/rc.modules. Причем, этот файл обязательно должен быть выполнен в виде символьной ссылки! Хотя, если он не символьная ссылка, ничего страшного, последний elif его все равно запустит.
Таким образом, существует строгий порядок проверки файлов:
if [ -x /sbin/sysctl -a -r /etc/sysctl.conf ]; then /sbin/sysctl -e -p /etc/sysctl.conf fiПроверяется наличие программы sysctl и ее конфигурационного файла sysctl.conf. Если они существуют, запускается программа sysctl.
Программа sysctl применяется для записи параметров в файлы в директории /proc/sys. Вместо этой программы значения в файлы можно записывать напрямую. Например, так:
echo 1 > /proc/sys/net/ipv4/ip_forwardСтроки, запускающие LVM, пропущены.
if [ ! -r /etc/fastboot ]; then /sbin/fsck $FORCEFSCK -C -R -A -a fiЕсли отсутствует файл /etc/fastboot, включается проверка остальных файловых систем, описанных в файле /etc/fstab.
if grep -wq usbfs /proc/filesystems; then
if /bin/grep -wq nohotplug /proc/cmdline || /bin/test ! -x /etc/rc.d/rc.hotplug;
then
if ! cat /proc/mounts | grep -wq usbfs ; then
/sbin/mount -v usbfs /proc/bus/usb -t usbfs
fi
fi
fi
Если поддерживается файловая система типа usbfs и отключена система hotplug, происходит ее подключение.
echo "Mounting non-root local filesystems:" sleep 3 if /bin/grep -wq devpts /proc/mounts ; then /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts else /sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs fiПодключаются все файловые системы, описанные в файле /etc/fstab, за исключением файловых систем nfs, smbfs, cifs, proc, sysfs, devpts.
/sbin/swapon -aНа всякий случай, еще раз подключается swap.
( cd /var/log/setup/tmp && rm -rf * ) /bin/rm -f /var/run/utmp /var/run/*pid /etc/nologin /var/run/lpd* \ /var/run/ppp* /etc/dhcpc/*.pid /etc/forcefsck /etc/fastboot \ /var/state/saslauthd/saslauthd.pid
Происходит удаление временных файлов, оставшихся после процесса установки системы. А также удаление различных временных файлов. В том числе /etc/forcefsck и /etc/fastboot.
if [ ! -e /tmp/.ICE-unix ]; then mkdir -p /tmp/.ICE-unix chmod 1777 /tmp/.ICE-unix fi if [ ! -e /tmp/.X11-unix ]; then mkdir -p /tmp/.X11-unix chmod 1777 /tmp/.X11-unix fiСоздание временных директорий, необходимых для работы X Wondow System.
if [ -d /initrd ]; then umount /initrd/proc 2> /dev/null /sbin/umount /initrd 2> /dev/null rmdir /initrd 2> /dev/null blockdev --flushbufs /dev/ram0 2> /dev/null fiЕсли при загрузке ядра использовалась технология inird (Initial RAM disk), RAM диск отключается, удаляется временная директория initrd и освобождается память, отведенная под RAM диск.
touch /var/run/utmp chown root.utmp /var/run/utmp chmod 664 /var/run/utmpСоздается файл utmp, который был удален ранее. Файл содержит список пользователей, которые в данный момент находятся в системе. Затем он передается пользователю root и группе utmp и у него изменяются права доступа. Следующие строки пропущены, так как файловая система umsdos практически не используется.
echo "$(/bin/uname -sr)." > /etc/motdВ файл /etc/motd помещается информация о системе и номер ядра Linux. Содержимое файла выводится после входа пользователя в систему, и о его применении мы поговорим позже.
| Внимание! | Обратите внимание на то, что файл /etc/motd создается после каждой загрузки системы. |
if [ -x /etc/rc.d/rc.sysvinit ]; then . /etc/rc.d/rc.sysvinit fiSlackware Linux позволяет использовать стартовые скрипты SystemV. Для их запуска используется скрипт /etc/rc.d/rc.sysvinit. Он эмулирует систему инициализации SystemV.
if [ -f /etc/random-seed ]; then
echo "Using /etc/random-seed to initialize /dev/urandom."
cat /etc/random-seed > /dev/urandom
fi
if [ -r /proc/sys/kernel/random/poolsize ]; then
dd if=/dev/urandom of=/etc/random-seed count=1
bs=$(cat /proc/sys/kernel/random/poolsize) 2> /dev/null
else
dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null
fi
chmod 600 /etc/random-seed
В последних строках файла создается все необходимое для устройства генератора псевдослучайных чисел.
Ниже приведен пример строки из файла rc.modules.
#/sbin/modprobe 3c503Почти все строки в этом файле закоментированы. Для того, чтобы интересующий вас модуль загружался при старте системы, следует найти соответствующую строку, убрать символ комментария и, если необходимо, дописать параметры загрузки.
В файле rc.modules происходит подключение файла rc.netdevice:
if [ -x /etc/rc.d/rc.netdevice ]; then . /etc/rc.d/rc.netdevice fiНачиная с 11-й версии Slackware Linux кроме файла rc.modules появилась возможность использовать другие файлы для ручной загрузки модулей. Ниже приведен список этих файлов.
| Внимание! | Если вы решили использовать файл rc.modules.local, вы должны понимать, что остальные файлы выполняться не будут. После установки дистрибутива в системе будет присутствовать один из файлов rc.modules. В этом файле происходит вызов программ необходимых для нормальной работы системы. Поэтому, если вы используете rc.modules.local, обязательно предусмотрите вызов основного файла rc.modules. |
В нем, как и в файле rc.modules прописывается явный вызов программы modprobe.
/sbin/modprobe 8139too
| Внимание! | Начиная с 11-й версии Slackware Linux, система hoplug начинает работать раньше, чем происходит вызов этого файла. Поэтому, если вы хотите что бы модули сетевых карт загружались не по hotplug, а при помощи rc.modules, вы должны запретить загрузку модулей hotplug-ом. Для этого поместите имя модуля в файл /etc/hotplug/blacklist (для ядер версии 2.4) или в файл /etc/modprobe.d/blacklist (для ядер версии 2.6). |
Файл /etc/rc.d/rc.S запускается самым первым в системе, не зависимо от уровня выполнения. Он предназначен для:
Таким образом можно сказать, что после выполнения скрипта rc.S все готово для запуска сервисов.
Файл /etc/rc.d/rc.M выполняется при переходе системы на второй, третий и четвертый уровни выполнения.
Ниже подробно рассмотрено содержимое файла rc.M.
echo "Going multiuser..."На экран выводится информационное сообщение о переходе на многопользовательский уровень выполнения.
/bin/setterm -blank 15 -powersave powerdown -powerdown 60Вызывается программа setterm, устанавливающая параметры терминалов.
if [ -r /etc/HOSTNAME ]; then /bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .) else echo "darkstar.example.net" > /etc/HOSTNAME /bin/hostname darkstar fiПроверяется наличие файла /etc/HOSTNAME. Если файл существует, выполняется программа hostname, которая устанавливает имя машины. Имя берется из файла HOSTNAME.Если файл не существует, он создается. В него заносится имя машины darkstar.example.net. Самой машине присваивается имя darkstar.
Файл /etc/HOSTNAME играет важную роль при инициализации системы. В нем содержится полностью квалифицированное доменное имя машины (FQDN). Если файл случайно удалить, при старте машине будет присвоено не правильное имя. Поэтому, в файле rc.M рекомендуется заменить darkstar.example.net на реальное имя машины.
/bin/dmesg -s 65536 > /var/log/dmesgСообщения, которые выводились ядром при старте системы, помещаются в файл /var/log/dmesg.
| Внимание! | Обратите внимание на то, что программа показывает только сообщения ядра. Сообщения стартовых скриптов показаны не будут. |
if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ] then . /etc/rc.d/rc.syslog start fiЕсли существуют исполняемые файлы /etc/rc.d/rc.syslog и /usr/sbin/syslogd, а так же существует директория /var/log, выполняется стартовый скрипт /etc/rc.d/rc.syslog. Этот скрипт запускает систему журнальной регистрации SYSLOG.
if [ -x /etc/rc.d/rc.pcmcia ] ; then
. /etc/rc.d/rc.pcmcia start
if [ -r /var/run/cardmgr.pid ]; then
sleep 5
fi
fi
Если существует исполняемый файл /etc/rc.d/rc.pcmcia, то он выполняется. Этот стартовый скрипт, предназначен для включения поддержки PCMCIA контроллеров.
if [ -x /etc/rc.d/rc.inet1 ]; then . /etc/rc.d/rc.inet1 fiПроверяется наличие исполняемого файла /etc/rc.d/rc.inet1. Если он есть, то скрипт выполняется. rc.inet1 предназначен для конфигурации сетевых устройств и таблицы маршрутизации. Его использование будет рассматриваться в следующей главе.
if [ -x /etc/rc.d/rc.hotplug -a -r /proc/modules ]; then
if ! grep nohotplug /proc/cmdline 1> /dev/null 2> /dev/null ; then
echo "Activating hardware detection: /etc/rc.d/rc.hotplug start"
. /etc/rc.d/rc.hotplug start
fi
fi
Проверяется наличие исполняемого файла /etc/rc.d/rc.hotplug и файла /proc/modules. Также, рассматривается содержимое файла cmdline (в нем находится командная строка, переданная ядру при запуске) на отсутствие параметра nohotplug. Если все условия верны, запускается скрипт rc.hotplug, предназначенный для поиска установленных в системе устройств и загрузки соответствующих драйверов.
if [ -x /etc/rc.d/rc.inet2 ]; then . /etc/rc.d/rc.inet2 fiЕсли существует исполняемый файл /etc/rc.d/rc.inet2, он выполняется.
Стартовый скрипт rc.inet2 применяется для запуска различных сетевых сервисов и для подключения сетевых файловых систем.
/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* \ /tmp/.X*lock /tmp/core /core 2> /dev/null
Удаляются различные временный файлы.
chmod 755 / 2> /dev/null chmod 1777 /tmp /var/tmpИзменяются права на корневую директорию, а также на директории /tmp и /var/tmp устанавливается sticky бит.
if [ -x /sbin/ldconfig ]; then echo "Updating shared library links: /sbin/ldconfig" /sbin/ldconfig fiПроверяется наличие исполняемого файла ldconfig. Если он есть, программа выполняется.
Ldconfig предназначена для создания кеша динамических библиотек. Более подробно об этой программе будет рассказано ниже.
if [ -x /usr/X11R6/bin/fc-cache ]; then echo "Updating X font indexes: /usr/X11R6/bin/fc-cache" /usr/X11R6/bin/fc-cache fiЕсли существует исполняемый файл fc-cache, программа выполняется. Fc-cache применяется для обновления индексов шрифтов системы X Window.
if [ -x /etc/rc.d/rc.dnsmasq ]; then /etc/rc.d/rc.dnsmasq start fiЕсли существует исполняемый файл rc.dnsmasq, он выполняется и ему передается параметр start. Скрипт предназначен для запуска простого, кеширующего DNS сервера.
if [ -x /etc/rc.d/rc.cups ]; then /etc/rc.d/rc.cups start elif [ -x /etc/rc.d/rc.lprng ]; then . /etc/rc.d/rc.lprng start fiПроверяется, какая система печати установлена, cups или LPRng. В зависимости от результатов проверки, запускается соответствующий стартовый скрипт.
#if [ -x /usr/sbin/smartd ]; then # /usr/sbin/smartd #fiЕсли необходимо включить поддержку технологии S.M.A.R.T., удалите комментарии со строк показанных выше. Тогда при старте системы будет запускаться соответствующий демон.
#if [ -x /sbin/genpowerd ]; then # echo "Starting genpowerd daemon..." # /sbin/genpowerd #fiДемон genpowered позволяет системе работать с «интеллектуальными» UPS. Если в нем возникнет потребность, уберите комментарии со строк показанных выше.
if [ -x /sbin/accton -a -r /var/log/pacct ]; then /sbin/accton /var/log/pacct chmod 640 /var/log/pacct echo "Process accounting turned on." fiПроверяется возможность запуска программы accton. Это так называемая система «BSD process accounting», предназначенная для контроля над процессами в системе. Для ее включения необходима соответствующая поддержка в ядре Linux и наличие журнального файла /var/log/pacct.
| Внимание! | В свой журнальный файл система «BSD process accounting» помещает огромное количество информации. Следует следить за тем, чтобы он не переполнил файловую систему |
if [ -x /usr/sbin/crond ]; then /usr/sbin/crond -l10 >>/var/log/cron 2>&1 fiПроисходит проверка возможности запуска программы crond. Если программа установлена, то она запускается. Система CRON будет подробно рассмотрена на следующих занятиях.
if [ -x /usr/sbin/atd ]; then /usr/sbin/atd -b 15 -l 1 fiЕсли существует исполняемый файл atd, то он запускается при старте системы. Демон atd позволяет выполнять программы в заранее определенное время.
if grep -q quota /etc/fstab ; then
if [ -x /sbin/quotacheck ]; then
echo "Checking filesystem quotas: /sbin/quotacheck -avugm"
/sbin/quotacheck -avugm
fi
if [ -x /sbin/quotaon ]; then
echo "Activating filesystem quotas: /sbin/quotaon -avug"
/sbin/quotaon -avug
fi
fi
Приведенные выше строки позволяют включить механизм квотирования дискового пространства.
Квоты в Linux можно применять только к разделам. При использовании квот, раздел необходимо подключать с параметрами монтирования usrquota или grpquota. Первый оператор if проверяет наличие разделов с указанными параметрами монтирования.
Перед включением квот, необходимо запустить программу проверки текущего состояния файловой системы — quotacheck. Она проверит, сколько места занимают файлы пользователя, и сохранит эту информацию в специальных файлах.
Затем запускается механизм поддержки квот. Для этого используют программу quotaon с соответствующими параметрами.
О том, как настаивать квотирование дискового пространства будет рассказано позднее.
if [ -x /etc/rc.d/rc.sendmail ]; then . /etc/rc.d/rc.sendmail start fiЕсли существует исполняемый файл /etc/rc.d/rc.sendmail, он запускается.
Запуск всех остальных программ в файле rc.M выполнен по тому же принципу, что и запуск sendmail. Сначала проверяется наличие соответствующего стартового скрипта, и если он есть, то программа запускается.
Самым последним, при старте системы запускается файл /etc/rc.d/rc.local. Он предназначен для запуска приложений , у которых нет стандартных стартовых скриптов в системе инициализации Slackware Linux.
Для конфигурации сетевых интерфейсов используется дополнительный конфигурационный файл /etc/rc.d/rc.inet1.conf. Содержимое этого файла достаточно простое, в нем присутствуют четыре группы переменных, предназначенных для конфигурации четырех сетевых интерфейсов:
IPADDR[0]="192.168.0.1" NETMASK[0]="255.255.255.0" USE_DHCP[0]="" DHCP_HOSTNAME[0]=""Так же используется переменная для определения маршрута по умолчанию:
GATEWAY="192.168.0.100"В этом файле так же находятся переменные, которые позволяют сконфигурировать беспроводные интерфейсы. Но, по умолчанию они закоментированы.
Недостатком скрипта rc.inet1 является его ограниченность. Например, при помощи rc.inet1 нельзя определить дополнительные IP адреса на сетевом интерфейсе. Невозможно сконфигурировать больше, чем четыре сетевых интерфейса. Для добавления дополнительных маршрутов в таблицу маршрутизации их приходится добавлять вручную. Поэтому можно полностью удалять все содержимое файла rc.inet1 и переписывать его по новой. При написании скрипта необходимо учесть следующее:
Предположим, что у Вас есть один сетевой интерфейс eth0 с IP адресом 192.168.0.1. Маршрут по умолчанию — 192.168.0.100. Тогда файл rc.inet1 будет выглядеть следующим образом:
#! /bin/bash /sbin/ifconfig lo 127.0.0.1 /sbin/ifconfig eth0 192.168.0.1 /sbin/route add -net 127.0.0.0/8 lo /sbin/route add default gw 192.168.0.100Если необходимо добавить маршруты к каким-либо сетям, эти маршруты добавляются в файле rc.inet1 путем вызова программы route, в любом месте этого файла, сразу после конфигурации всех сетевых интерфейсов.
/etc/rc.d/rc.firewall — настройка firewall.
| Внимание! | На самом деле, запуск этого скрипта необходимо осуществлять в начале файла rc.inet1, перед конфигурацией сетевых интерфейсов. А в файле rc.inet2 вызов скрипта следует удалить. |
| Внимание! | Некторые программы, которые можно отнести к сетевым сервисам, запускаются из файла rc.M, например sendmail и samba. |
Система инициализации Slackware Linux построена на использовании стартовых скриптов, размещенных в директории /etc/rc.d.
Если необходимо, что бы какой-либо сервис запускался при старте системы, соответствующий скрипт необходимо сделать исполняемым. И наоборот, если сервис не надо запускать при старте системы, стартовый скрипт не должен быть исполняемым.
Все стартовые скрипты - это простые программы, написанные на shell script. Некоторые из них понимают параметры командной строки: start — запуск и stop — останов сервиса.
Если для запуска какой-либо программы, в системе инициализации Slackware Linux не предусмотрено стартового скрипта то можно поступить двумя способами:
Во втором случае стартовый скрипт может выглядеть следующим образом:
#! /bin/bash
start()
{
echo “Program started”
program_start
}
stop()
{
echo “Program stoped”
killall program
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
sleep 2 start ;;
*)
echo “Usage: Program start|stop|restart”
esac
Вызов скрипта в файле /etc/rc.d/rc.M организуется следующим образом:
if [ -x /etc/rc.d/rc.script ]; then . /etc/rc.d/rc.script start fi
| Внимание! | При помощи оператора точка можно выполнять только программы, написанные на языке shell script. Другие программы необходимо вызывать без оператора точка. |
Ну и пожалуй, самое главное - вы можете вносить изменения в любые стартовые скрипты. При обновлении (update) системы, стартовые скрипты не будут изменяться, в отличии от дистрибутивов использующих систему инициализации SystemV. Рядом с текущим стартовым скриптом появляется новый, но с расширением .new.