Громкий заголовок? Претензии не ко мне, ведь именно так и называется этот пакет в репозитарии - "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. И если посмотреть на график то прослезится даже бетонный столб:
ВыводыInitng намного более гибкий, чем предшественник. Зависимости можно описать четко и логично. Дистроклепатели до косоглазия присматриваются в его сторону, потому как всем хочется выпускать не только быстрый, но и быстрозагружающийся продукт. Initng лишь недавно вышел из нестабильного шаткого продукта в перспективного новичка и без нареканий может быть использован на большинстве систем.