CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
29.03.2017

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Заметки :: Блогометки :: Системы

Дистрибутивы :: Slackware

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

http://www.slackguide.com/

В 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.




Комментарии

Страницы комментариев: 1 :: 2 :: 3 :: 4 :: следующая

аноним, Fri Sep 18 20:38:48 2009:
аноним, пятница, 18 сентября 2009 г. 20:33:23:
Скачиваем Hiren'sBootCD

------------------

HBCD - УГ. Есть получше вещи.
аноним, Fri Sep 18 20:33:23 2009:
аноним, пятница, 11 сентября 2009 г. 21:14:43:
можно все. зачем? не об этом речь. ты знаешь сколько способов в лине поменять пороль root-а и сколько в винде? в линухе это намного проще чем в винде, особо если имеешь прямой доступ к машине и к сети.

Скачиваем Hiren'sBootCD и больше не несём чушь о "намного проще в линухе"
аноним, Fri Sep 11 21:19:25 2009:
аноним, пятница, 11 сентября 2009 г. 21:14:43:
если имеешь прямой доступ к машине

Ключевые слова.
Если имеешь доступ, то сложность(а точнее простота) нулевая. Что там, что там. А число способов при данном условии значения не имеет, ИМХО.
аноним, Fri Sep 11 21:14:43 2009:
аноним, пятница, 11 сентября 2009 г. 20:55:47:
Как два пальца. Чего там сложного.

можно все. зачем? не об этом речь. ты знаешь сколько способов в лине поменять пороль root-а и сколько в винде? в линухе это намного проще чем в винде, особо если имеешь прямой доступ к машине и к сети.
аноним, Fri Sep 11 20:55:47 2009:
аноним, пятница, 11 сентября 2009 г. 20:38:11:
так очень труднее взломать вин и сеть

Как два пальца. Чего там сложного.
аноним, Fri Sep 11 20:38:11 2009:
САЕшник, пятница, 11 сентября 2009 г. 20:29:45:
А поскольку ещё - и всему нормальному человечеству, - то только в бюджетных отстойниках люди, не могущие найти себе работу с зар.платой выше даже половины прож.мин. (пардон, им подняли аж до целого прож.мин., правда, приравняв при этом к ним всех неквалифиц. работников, например, уборщиц), могли такое учудить, как сервер на винях. И теперь всем этим нормальным людям без допила этих виней вход воспрещён!

я работаю в гос. учреждении. У нас не только сервер - и рабочие столы на винях. поскольку - гос., то очень ограниченные учетки и сеть, грамотный одмин. и мне, так очень труднее взломать вин и сеть в отличие от линуха. про сервер не говорю - не пробовал никогда )))
САЕшник, Fri Sep 11 20:29:45 2009:
"аноним, пятница, 11 сентября 2009 г. 19:54:48:
NT_STATUS_ACCESS_DENIDED !!!
Линуксоидам , собакам и китайцам вход воспрещен!!!"

А поскольку ещё - и всему нормальному человечеству, - то только в бюджетных отстойниках люди, не могущие найти себе работу с зар.платой выше даже половины прож.мин. (пардон, им подняли аж до целого прож.мин., правда, приравняв при этом к ним всех неквалифиц. работников, например, уборщиц), могли такое учудить, как сервер на винях. И теперь всем этим нормальным людям без допила этих виней вход воспрещён!
аноним, Fri Sep 11 19:54:48 2009:
NT_STATUS_ACCESS_DENIDED !!!
Линуксоидам , собакам и китайцам вход воспрещен!!!
аноним, Fri Sep 11 19:23:55 2009:
аноним, пятница, 11 сентября 2009 г. 19:18:05:
Надо что-то вроде

ты озабочен на-мертво
аноним, Fri Sep 11 19:18:05 2009:
Надо что-то вроде /dev/my_ass/o;i;rvjmemhtp9b46n7aw4umqtnpa;6a8umijva[c4,t98q35bmu 9tm0viehgl; jy---044t-8j389y5v98jy5vq[jvq038u4n562p8u6b9p[8 muq9pt7y u95i6t0[djrthkot,'x[pzgfrlpa9m v3o4my3u[ vja ;9tajrpio gcni[pbelo0-ge=0av-9u34vt07809gt8hjk-9h4twk905ygtv0t5v30-k954vk89h45098t-t354y7u5078uyb-ji8,4w08hn6c5ty3qj0jm- 3y0a985g9m,paj5 eh9u85p[3ejy8p5wu[v6myqw5360iw04y-][04hl]-4=-0ko2439[ rht239xd46hcpk3-9.0-=pl,.okmougvvv6twe42yw4r8y834295it=v-592i-866698 4uy[c4qi5[,0ufcyw6498jyuv3p9b 6j894wkc0[95376ubv298bv gt4yop5hyujb,[ou6j0[[ik80fu pywv96y9m5,40u6f8y,u7[v99[wqymp45um69p58m6yv5wpv6y8w99pc45

Страницы комментариев: 1 :: 2 :: 3 :: 4 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds