Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Система инициализации Slackware Linux

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Другие дистры
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Фев 25, 2008 7:35 am    Заголовок сообщения: Система инициализации Slackware Linux
Ответить с цитатой

В Slackware Linux используется система инициализации очень похожая на систему инициализации BSD, которая отличается простотой стартовых скриптов.
Все скрипты располагаются в директории /etc/rc.d.
Файл /etc/rc.d/rc.S

Согласно файлу /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 возможно:
если существует директория /sys;
если sysfs поддерживается ядром (список поддерживаемых файловых систем находится в файле /proc/filesystems);
если её нет в списке подключенных файловых систем (список подключенных файловых систем находится в файле /proc/mounts).
/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 его все равно запустит.

Таким образом существует строгий порядок проверки файлов:
/etc/rc.d/rc.modules.local
/etc/rc.d/rc.modules-версия.ядра
символьная ссылка /etc/rc.d/rc.modules
файл /etc/rc.d/rc.modules

Кроме присутствия файла как такового, проверяется, поддерживает ли ядро Linux загружаемые модули (-r /proc/modules). Если файл /proc/modules существует - то модули поддерживаются.
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
fi

Slackware 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

В последних строках файла создается все необходимое для устройства генератора псевдослучайных чисел.
Файлы /etc/rc.d/rc.modules*

Файлы /etc/rc.d/rc.modules* служат для загрузки модулей при старте системы. Загрузка модулей происходит «вручную», то есть, путем явного вызова программы modprobe.

Ниже приведен пример строки из файла 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 появилась возможность использовать другие файлы для ручной загрузки модулей. Ниже приведен список этих файлов.
/etc/rc.d/rc.modules.local
/etc/rc.d/rc.modules-версия.ядра
символьная ссылка /etc/rc.d/rc.modules
файл /etc/rc.d/rc.modules

Поиск и выполнение файлов присходит в том порядке, в котором они перечислены в списке. Если файл был найден, остальные файлы рассматриваться не будут. Внимание! Если вы решили использовать файл rc.modules.local, вы должны понимать, что остальные файлы выполняться не будут. После установки дистрибутива в системе будет присутствовать один из файлов rc.modules. В этом файле происходит вызов программ необходимых для нормальной работы системы. Поэтому, если вы используете rc.modules.local, обязательно предусмотрите вызов основного файла rc.modules.

Файл /etc/rc.d/rc.netdevice

Файл rc.netdevices используется для загрузки модулей сетевых карт при старте системы. Обычно он создается программой установки.

В нем, как и в файле 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 запускается самым первым в системе, не зависимо от уровня выполнения. Он предназначен для:
Подключения swap пространства;
Проверки файловых систем;
Подключения файловых систем;
Загрузки драйверов устройств вручную (файлы rc.modules.*);
Некоторых других действий, необходимых при старте системы.

Таким образом можно сказать, что после выполнения скрипта rc.S все готово для запуска сервисов.
Файл /etc/rc.d/rc.M

Файл /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

Файл /etc/rc.d/rc.inet1 предназначен для конфигурации сетевых интерфейсов и таблицы маршрутизации.

Для конфигурации сетевых интерфейсов используется дополнительный конфигурационный файл /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 и переписывать его по новой. При написании скрипта необходимо учесть следующее:
Конфигурация всех сетевых интерфейсов происходит при помощи программы ifconfig. Следовательно, для конфигурации каждого интерфейса необходимо написать одну строку, содержащую вызов программы ifconfig со всеми необходимыми параметрами.
Для добавления маршрута в таблицу маршрутизации используют программу route. Следовательно, для каждого добавляемого маршрута необходимо написать строку, содержащую вызов программы route со всеми необходимыми параметрами.
При конфигурации сетевых интерфейсов, маршрут к сети подключенной к ним в таблицу маршрутизации добавляется автоматически. Что не требует явного вызова программы route.
При конфигурации сетевого интерфейса lo, сеть 127.0.0.0 в таблицу маршрутизации автоматически не добавляется. Поэтому эту сеть необходимо добавлять явно: route add -net 127.0.0.0/8 lo

Предположим, что у Вас есть один сетевой интерфейс 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/r.inet2

Файл /etc/rc.d/rc.inet2 применяется для запуска сетевых приложений и подключения сетевых файловых систем при старте Linux. В этом файле происходит попытка подключения сетевых файловых систем nfs и smbfs.

Дальше запускаются (если это необходимо) следующие стартовые скрипты:
/etc/rc.d/rc.firewall — настройка firewall. Внимание! На самом деле, запуск этого скрипта необходимо осуществлять в начале файла rc.inet1, перед конфигурацией сетевых интерфейсов. А в файле rc.inet2 вызов скрипта следует удалить.

/etc/rc.d/rc.ip_forward — этот скрипт разрешает пересылку пакетов с одного сетевого интерфейса на другой.
/etc/rc.d/rc.inetd — запуск сетевого суперсервера.
/etc/rc.d/rc.sshd — запуск демона sshd.
/etc/rc.d/rc.bind — запуск DNS сервера.
И другие программы. Внимание! Некторые программы, которые можно отнести к сетевым сервисам, запускаются из файла rc.M, например sendmail и samba.

Заключение

Система инициализации Slackware Linux построена на использовании стартовых скриптов, размещенных в директории /etc/rc.d.

Если необходимо, что бы какой-либо сервис запускался при старте системы, соответствующий скрипт необходимо сделать исполняемым. И наоборот, если сервис не надо запускать при старте системы, стартовый скрипт не должен быть исполняемым.

Все стартовые скрипты - это простые программы, написанные на shell script. Некоторые из них понимают параметры командной строки: start — запуск и stop — останов сервиса.

Если для запуска какой-либо программы, в системе инициализации Slackware Linux не предусмотрено стартового скрипта то можно поступить двумя способами:
Запуск программы описать в файле /etc/rc.d/rc.local.
Написать свой собственный стартовый скрипт и дописать его запуск в файле /etc/rc.d/rc.M.

Во втором случае стартовый скрипт может выглядеть следующим образом:
#! /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.

Оригинал slackguide.com/content/view/47/18/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Другие дистры Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис