Операционная система Линукс
inf.by/linux
Блог ведется с 01.07.05
Записей: 252
Комментариев: 1565
Картинок: 513
Авторизация Об авторе | Сообщение автору | RSS
Беларуская | Русский
blog.inf.by > inf.by/linux > Initng - новое поколение загрузчика ...
по всем блогам


Initng - новое поколение загрузчика системы
10.09.07, 20:13; Программное обеспечение
Тэги: initng
Изменено автором 10.09.07, 20:14
inf.by/linux/203 Версия для печати

   

Громкий заголовок? Претензии не ко мне, ведь именно так и называется этот пакет в репозитарии - "A next generation init replacement".

Предыстория такова. Пингвин - животное неповоротливое на суше, но зато сверхшустрое в воде. Пастухам пингвинов надоело каждый раз гнать их к воде и они решили сделать их быстрыми и на суше... "В мире животных" какое-то получается...

В общем, старый добрый init хорошо себя зарекомендовал. Именно он как ломовая лошадь каждый раз при загрузке тянет все ваши срипты, грузит модули, включает сеть, грузит консоли. Вот только извилина у него всего одна и он ждет загрузки предыдущего процесса и только после этого переходит к следующему. Результаты скучные. Как я уже писал про bootchart - 40 секунд уходит на то, чтобы на обычной двухядерной тарантайке довести пингвина до состояния трезвости.

В воздухе повеяло весной... или зимой... в общем свежестью и наслушался я от умных селекционеров о таком звере как initng. Основная его задача - грузить сервисы параллельно, пока машинка занята чтением с диска или еще какой непотребностью. Набравшись умных мыслей на сайте initng.org я приступил к интимному процессу.

Как это ни грустно - сломать ничего не получится, если только руки не растут из места, о котором даже невоспитанные макаки стараются не говорить вслух. Initng ставится параллельно и никак не пересекается с основным init.

Если и вы хотите найти проблемы на то, на чем сейчас сидите (не стул), то милости прошу на официальный сайт, дабы познать искусство компиляции. Счастливым обладателям Gentoo достаточно чихнуть в консоли:
emerge initng
emerge initng-ifiles
Теперь вам остается дописать в загрузчик "init=/sbin/initng" в строку параметров ядра. Искренне рекомендую сделать это новым отдельным пунктом, чтобы иметь возможность без танцев с коммандной строкой GRUB загрузить систему обычным init.

Как бы и все. Ну почти. Для загрузки системы посредством initng ему понадобится файл /etc/initng/runlevel/default.runlevel, в котором описано какие сервисы нужно грузить. Вот какое содержимое прокатило в моем случае:
system/initial
system/udev
system/modules
system/checkfs
system/mountroot
system/mountfs
system/bootmisc
system/clock
system/hostname
system/rmnologin
daemon/hald
daemon/acpid
daemon/dbus
system/usb
system/hdparm
system/keymaps
system/urandom
system/swap
system/coldplug
daemon/cpufreqd
daemon/cpufrequtils
net/lo
net/eth0
system/agetty
service/alsasound
service/lm-sensors
system/consolefont
daemon/kdm
Отвечаю на ваш следующий вопрос - эти названия взяты не с потолка. Каждая строчка - это имя файла *.i из папок /etc/initng. Каждый такой файл понятен до последнего байта и именно в нем расписано с чем связан этот процесс, является ли он демоном и какую комманду нужно запустить. Например:
# cat dbus.i

#!/sbin/itype
daemon daemon/dbus {
need = system/bootmisc;
forks;
pid_file = /var/run/dbus.pid;
exec daemon = /usr/bin/dbus-daemon --system --fork;
}
Именно от этих строчек "need" будет зависеть, чего будет ждать этот процесс перед тем, как начать запускаться. Этих файлов хватает для базовых процессов, использующихся на Linux-системах, но в случае крайней необходимости его в три счета можно написать самому.

Для эксплуатации initng в режиме отладки можно использовать ngc. Ей можно загружать и стопорить процессы. Вот например результат вывода команды, показывающий статусы последней загрузки.
# ngc -s
initNGControl (0.6.10.1 ) by Jimmy Wennlund [URL]http://www.initng.org/[/URL]

hh:mm:ss T service : status
----------------------------------------------------------------
19:04:24 R runlevel/default : WAITING_FOR_START_DEP
19:04:24 S system/initial/loglevel : SERVICE_DONE
19:04:24 S system/initial/mountvirtfs : SERVICE_DONE
19:04:24 S system/initial/filldev : SERVICE_DONE
19:04:25 S system/udev/filldev : SERVICE_DONE
19:04:24 D system/udev/udevd : DAEMON_RUNNING
19:04:24 S system/udev/mountdev : SERVICE_DONE
19:04:25 S system/modules : SERVICE_DONE
19:04:25 S system/mountroot : SERVICE_DONE
19:04:25 S system/mountroot/rootrw : SERVICE_DONE
19:04:25 S system/mountroot/check : SERVICE_DONE
19:04:25 S system/modules/loop : SERVICE_DONE
19:04:25 S system/checkfs : SERVICE_DONE
19:04:27 S system/mountfs : SERVICE_DONE
19:04:26 S system/mountfs/essential : SERVICE_DONE
19:04:26 S system/mountfs/home : SERVICE_DONE
19:04:26 S system/bootmisc : SERVICE_DONE
19:04:26 S system/clock : SERVICE_DONE
19:04:25 S system/hostname : SERVICE_DONE
19:04:26 S system/rmnologin : SERVICE_DONE
19:04:34 D daemon/hald : DAEMON_RUNNING
19:04:28 D daemon/dbus : DAEMON_RUNNING
19:04:33 D daemon/acpid : DAEMON_RUNNING
19:04:28 S daemon/acpid/modules : SERVICE_DONE
19:04:27 S system/usb : SERVICE_DONE
19:04:25 S system/modules/usbcore : SERVICE_DONE
19:04:25 S system/hdparm : SERVICE_DONE
19:04:28 S system/keymaps : SERVICE_DONE
19:04:27 S system/urandom : SERVICE_DONE
19:04:25 S system/modules/nvram : SERVICE_DONE
19:04:26 S system/swap : SERVICE_DONE
19:04:31 S system/coldplug/pci : SERVICE_DONE
19:04:33 S system/coldplug/usb : SERVICE_DONE
19:04:31 S system/coldplug/input : SERVICE_DONE
19:04:26 D daemon/cpufreqd : DAEMON_RUNNING
19:04:33 S net/lo : SERVICE_DONE
19:04:26 D system/agetty/2 : DAEMON_RUNNING
19:04:26 D system/agetty/3 : DAEMON_RUNNING
19:04:26 D system/agetty/4 : DAEMON_RUNNING
19:04:26 D system/agetty/5 : DAEMON_RUNNING
19:04:26 D system/agetty/6 : DAEMON_RUNNING
19:04:33 S service/alsasound : SERVICE_DONE
19:04:28 S service/lm-sensors : SERVICE_DONE
19:04:27 S service/lm-sensors/modules : SERVICE_DONE
19:04:25 S system/modules/i2c-core : SERVICE_DONE
19:04:29 S system/consolefont : SERVICE_DONE
19:04:33 D daemon/kdm : DAEMON_RUNNING
19:04:25 S system/udev/move_rules : SERVICE_DONE
19:04:26 S system/udev/retry_failed : SERVICE_DONE
Уже по этому списку видно, что initng сработал в 19:04:24 и загрузил последний процесс в 19:04:34, т.е. 10 секунд. Если снова завести bootchart, то он вместо тех самых 40 секунд покажет 15. И если посмотреть на график то прослезится даже бетонный столб:


    (530x1436 px, 70.3 Кб)

Выводы

Initng намного более гибкий, чем предшественник. Зависимости можно описать четко и логично. Дистроклепатели до косоглазия присматриваются в его сторону, потому как всем хочется выпускать не только быстрый, но и быстрозагружающийся продукт. Initng лишь недавно вышел из нестабильного шаткого продукта в перспективного новичка и без нареканий может быть использован на большинстве систем.

«  Прямая установка дистрибутива прямо из Live CD копированием (3)
06.09.07, 21:09
   Кто ты? ОС в лицах, выбор за вами... (9)
14.09.07, 08:48
 »

Комментарии

demonjaka (веб-сайт)
 
1
11.09.07, 03:27
Насколько я помню, подобная статья с описанием альтернативных способов загрузки системы была в библиотеке ibm.com, есть перевод на русском языке.
[bobrik] (веб-сайт)
 
2
11.09.07, 15:25
Я когда-нибудь тоже попробую. Когда мой ноутбук перестанет быть ломовой лошадью, а станет ноутбуком :=)
Mebius
 
3
11.09.07, 19:30
2 demonjaka: может быть, может быть... но как показал опрос моих читателей, многие не знали об альтернативе init, а значит все было не зря.

2 bobrik: желаю вашей двуколке, запряженной ломовой лошадью, стать сверхзвуковым истребителем... с линукс на борту wink
tosha
 
4
13.09.07, 02:44
Тема приключении на то самое место не раскрыта.
А если используется initramfs для ROOT-on-LVM ?
Mebius
 
5
13.09.07, 22:40
Так система init-скриптов не связана с загрузчиком так тесно. Init ведь запускается после загрузки ядра и initram. В остальном - это тот же init. Вроде он умеет все, разве что местами придется ручками скрипты сварганить.
Livid (веб-сайт)
 
6
07.09.09, 16:39
OpenRC?
А чем OpenRC не устраивает, раз уж заговорили про Gentoo? В baselayout2 оно по умолчанию. И тоже прекрасно распараллеливается при правильной конфигурации:
$ grep -i rc_parallel /etc/rc.conf
rc_parallel="YES"

Ваш комментарий

Имя:
E-mail:
Веб-сайт: 
Заголовок:

Картинка:
 
Подпись к картинке:
Настроение:
Сейчас играет:

Код подтверждения
* Код:
Код, маленькие латинские буквы и цифры     Введите код, показанный слева.
По состоянию на 04.02, 08:35
Темы

Дети (1)
Законодательство (6)
Игры и игрушки (1)
Интернет (11)
Компьютеры (26)
Музыка (4)
Программное обеспечение (228)
Фото (1)
По состоянию на 04.02, 08:35
Облако тэгов

По состоянию на 04.02, 08:35
Блог-лента

Архив: 

Есть картинка Apple Macbook Pro + MacOS X. Часть 4. Состав системы (14)
Программное обеспечение
11.03, 20:05
Есть картинка Apple Macbook Pro + MacOS X. Часть 3. Операционная система (4)
Программное обеспечение
07.03, 0:21
Есть картинка Касание яблока (2)
Компьютеры
10.12, 22:53
Devilspie - приложений начальник и окон командир (5)
Программное обеспечение
21.10, 21:30
Методики программировани я и производительно сть  (12)
Программное обеспечение
01.09, 22:05
Есть картинка Arch Linux. Не так сложен, но далеко не прост (15)
Программное обеспечение
02.08, 22:36
Есть картинка Мысли о хакинтоше (16)
Программное обеспечение
30.07, 22:37
Благое начинание умирает от жадности (7)
Законодательство
12.06, 16:36
Есть картинка Не все то блестит, что Kubuntu (15)
Программное обеспечение
08.05, 22:47
Есть картинка Wicd - замена многострадально го Network Manager (22)
Программное обеспечение
30.04, 19:29
Есть картинка GNOME и KDE - единообразие внешнего вида (13)
Программное обеспечение
22.04, 22:28
Есть картинка MPD (Music Player Daemon) - нестандартный подход к проигрыванию музыки (6)
Музыка; Программное обеспечение
26.03, 22:32
Есть картинка Новый KDE 4.2. Наверное уже можно (11)
Программное обеспечение
24.02, 21:32
Централизация хранения deb-пакетов с apt-cacher (7)
Программное обеспечение
02.02, 20:51
Есть картинка Раскрасить Gnome быстро и просто. Gnome-art (10)
Программное обеспечение
17.12, 7:21
Есть картинка Что новый Windows 7 нам готовит (40)
Программное обеспечение
16.11, 10:21