Авторизация

Вы можете войти через одну из учетных записей:

ИЛИ



Напомнить пароль
Регистрация

How-toВыполняем разные скрипты/команды при загрузке разных ядер/опций одного дистрибутива

Это скорее «микро how-to» нежели пост. Хочу поделится с сообществом способом с помощью которого я при загрузки системы запускаю разных демонов и службы в зависимости от того какие параметры указаны в опциях загрузки ядра в GRUB.

Для чего это нужно? У меня например домашняя машина работает и как сервер и как рабочая станция. Когда я использую ее как десктоп то я хочу загружать «иксы», pidgin, clawsmail. И совсем не хочу видеть все перечислительное когда компьютер работает как сервер. Зато хочу видеть FTP, Apache2, PHP, самбашару, радиус, и SSH сервер для удаленного входа.

Для начала посмотрим мой «конфиг» загрузчика:
cat /boot/grub/grub.cfg


Вот так выглядит пункт загрузки в обычном режиме (обратите внимание на восьмую строчку):
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.35-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set a012f75d-11c9-447c-ac66-0a38527cb7dc
        linux   /boot/vmlinuz-2.6.35-23-generic root=UUID=a012f75d-11c9-447c-ac66-0a38527cb7dc ro splash vga=0x315  quiet splash
        initrd  /boot/initrd.img-2.6.35-23-generic
}

И вот так выглядит загрузка в «серверном режиме»:
menuentry 'Ubuntu, with terminal' {
        recordfail
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set a012f75d-11c9-447c-ac66-0a38527cb7dc
        echo    'Loading Linux 2.6.35-23-generic ...'
        linux   /boot/vmlinuz-2.6.35-23-generic root=UUID=a012f75d-11c9-447c-ac66-0a38527cb7dc ro text vga=0x317
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-2.6.35-23-generic
}


Как видите вся разница в появившемся параметре text который «говорит» ядру что не надо запускать «иксы», и что работать мы будем в терминале.

А дальше как говорится — «дело техники». В Ubuntu Linux и OpenSuse Linux ( в остальных не знаю, но думаю что так же или около того) с помощью команды:
cat /proc/cmdline

Мы можем узнать строчку загрузки системы. Например в данный момент у меня она:
[10:06]ivan@luntik:~$  cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.35-23-generic root=UUID=a012f75d-11c9-447c-ac66-0a38527cb7dc ro splash vga=0x315 quiet splash
[10:06]ivan@luntik:~$

Немного подумав как лучше воспользоваться этой «фичей» я написал вот такой скриптик:
[10:06]ivan@luntik:~$  cat /etc/rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
a=`cat /proc/cmdline |grep -c "text"`
if [ $a == 1 ] 
then
        /usr/bin/deluged&
        /usr/bin/ftp&
        /usr/bin/apache2&
        /usr/bin/sambashare&
        /usr/bin/razhoegovno.sh&
fi
exit 0
[10:07]ivan@luntik:~$

Принцип работы прост. При старте системы запускается файл rc.local ( не спрашивайте почему, это закон :) ) в котором в переменную $a записывается сколько раз слово «text» встречается в опциях загрузки ядра. И если это значение равно одному, то запускаются окружение «серверного варианта».

Раньше ( то есть вчера ) тут же выполнялись условия для старта «иксов» и запускались его приложения. Но я придумал другой, как мне кажется более «кошерный», способ запуска «иксовых» программ. Возможно расскажу о нем в следующий раз :-)
  • 0
  • Diesel
  • 19 декабря 2010, 12:23
  • add twitter 

Комментарии (0) Вконтакте (0) facebook (0)

Комментарии (0)

rss свернуть / развернуть

Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.