устанавливаем cmake-2.4.5-1.i386.rpm
# rpm -ihv cmake-2.4.5-1.i386.rpm
или из src.rpm
# rpm --rebuild cmake-2.4.5-1.src.rpm
# rpm -ihv cmake-2.4.5-1.i386.rpm
устанавливаем initng-0.6.10.2.tar.bz2
распаковываем initng-0.6.10.2.tar.bz2 и переходим в папку
# tar xvjfp initng-0.6.10.2.tar.bz2
# cd initng-0.6.10.2
создаем папку build и переходим в нее
#mkdir build; cd build
запускаем cmake (используется здесь вместо ./configure)
# cmake ..
далее make и make install
# make
# make install
по аналогии устанавливаем конифигурационные файлы initng-ifiles-0.1.4.tar.bz2
# tar xvjfp initng-ifiles-0.1.4.tar.bz2
# cd initng-ifiles-0.1.4
#mkdir build; cd build
# cmake ..
# make
# make install
в принципе вышесказанное написано в initng-*/doc/FAQ и INSTALL, initng-ifiles-*/doc/INSTALL
теперь будем конфигурировать
в grub.conf в конце строки kernel добавляем init=/sbin/initng
kernel /boot/vmlinuz root=LABEL=fc4root ro elevator=as ramdisk_size=100000 vga=791 quiet init=/sbin/initng
кстати runlevel: single в строке kernel не работает не смотря на заявление в initng-0.6.10.2/doc/INSTALL. (об этом смотри в конце)
удаляем все файлы из /etc/initng/runlevel
они имеют только тестовый смысл.
Командой
#genrunlevel -all
пользоваться не стоит, мне она сформировала runlevel.default и system.default одинакового содержания. Загрузка была безуспешная соответственно.
Первая задача была запустить fedora в текстовом режиме. Для этого нужно чтобы запустился agetty или mingetty.
Создаем файл /etc/initng/runlevel/default.runlevel
из него читает конфигурацию initng по умолчанию, если прописать все в нем то файл system.runlevel не нужен. В противном случае, если планируется использовать system.runlevel то в первой строке default.runlevel нужно вставить system.
То есть как я понимаю в system.runlevel можно забить фундамент а в *.runlevel опции, но я этим не пользуюсь.
Добавляем в default.runlevel
system/mingetty
перезагружаемся и через 1.5 секунды загружка завершена, первая консоль не доступна, нажимаем Alt+F2 , вводим логин и пароль и мы в консоли. При этом конечно много чего нет например установленного hostname и прочего. Перезагрузка
# reboot
либо
# ngc -6
посмотреть статус успешности запуска
# ngs -s
для запуска mingetty нужно чтобы предварительно были загружены другие службы. Как это можно увидеть в
/etc/initng/system/mingetty
#!/sbin/itype
# This is a i file, used by initng parsed by install_service
# NAME:
# DESCRIPTION:
# WWW:
daemon system/mingetty/1 {
need = system/bootmisc system/mountfs/home;
provide = virtual/getty/1;
term_timeout = 3;
exec daemon = /sbin/mingetty tty1;
respawn;
last;
}
daemon system/mingetty/* {
need = system/bootmisc system/mountfs/home;
provide = virtual/getty/${NAME};
term_timeout = 3;
exec daemon = /sbin/mingetty tty${NAME};
respawn;
}
virtual system/mingetty {
need = system/mingetty/2 system/mingetty/3 system/mingetty/4 system/mingetty/5 system/mingetty/6;
use = system/mountfs/essential service/issue;
}
need это то что должно быть обязательно загружено перед , то есть от чего запускаемый объект (служба, daemon) зависит
use это то что загружается перед, при условии что вообще будет использоваться. Если нет, то и не загружается.
на примере system/mingetty: перед mingetty должно быть запущено system/mingetty/2 system/mingetty/3 system/mingetty/4 system/mingetty/5 system/mingetty/6;
system/mountfs/essential service/issue – должны быть запущены при условии что их планируется использовать.
Возникает вопрос, как смог запуститься mingetty если те объекты от которых он зависит не были прописаны нами, оказывается что initng читает default.runlevel смотрит чего не хватает (на основе зависимостей ) для запуска тех объектов что там прописаны определяет порядок запуска и подгружает их. Делает это достаточно неплохо.
Можно вручную разрешить зависимости и свериться посмотрев после загрузки ngc -s или посмотреть сам процесс загрузки добавив в kernel в grub - «interactive».
kernel /boot/vmlinuz root=LABEL=fc4root ro elevator=as ramdisk_size=100000 vga=791 quiet init=/sbin/initng interactive
Вот как выглядел бы полный список необходимых обьектов для system/mingetty в default.runlevel
initial/loglevel
initial/mountvirtfs
system/initial/filldev
system/initial
system/mountroot/check
system/mountroot/rootrw
system/mountroot/
system/checkfs
system/mountfs/essential
system/mountfs/home
system/bootmisc
system/mingetty/2
system/mingetty/3
system/mingetty/4
system/mingetty/5
system/mingetty/6
system/mingetty
для запуска GNOME по минимуму нужно прописать в default.runlevel
system/udev
daemon/instant-gdm (либо daemon/gdm)
далее опишу опции которые подключают те или иные функции.
system/hdparm – оптимизация работы винчестера
system/clock – сверка времени linux и биос
system/sysctl – переменные в sysctl.conf
system/swap – активизация swap
system/mountfs – монтирование разделов на основе fstab
daemon/syslogd – включает syslog
daemon/acpid – мне нужно для отображения статуса заряда батареи в gnome.
net/lo – сеть, активация кольцевого интерфейса
net/eth0 – активация сетевой карты
system/hostname – установка hostname
что сейчас не могу преодолеть - при перезагрузке пишет:
system/udev/udevd DAEMON_FAIL_START_RCODE
далее шел выброс в sulogin, избавился от него так:
в файле /etc/initng/system/udev
в районе daemon system/udev/udevd
закомментировал # critical
далее из-за этого самого daemon_fail_start_rcode перед самым good bye , restart была 15 секундная задержка, избавился так:
перекомпилировал заново initng, предварительно удалив sleep (15)
в файле
initng-0.6.10.2/src/initng_main.c
в районе
printf («Will sleep for 15 seconds before reboot/halt so you can see them. \n\n»);
--------------------------------------------------------
в итоге мой default.runlevel выглядит так:
system/hdparm system/clock system/sysctl system/swap system/mountfs daemon/syslogd daemon/acpid net/lo net/eth0 system/hostname system/udev daemon/instant-gdm -------------------------------------------------- про interactive и прочие плагины можно почитать в initng-0.6.10.2/plugins/...
в итоге загрузка от grub до экрана login gnome сократилась с 31 секунды (через init) до 20 секунд.
Возможно нет выигрыша в разы потому что запускаю не так много служб , возможно в данной конфигурации не так много параллельных. Bootchart ом не пользовался.
Еще момент - в system-config-services отображается не весь список загружаемых daemons из папки /etc/init.d при помощи init.
например xfs или bluetooth
наличие которых в запуске обнаружится через
# chkconfig --list | grep 5:вкл
xfs – это сервер шрифтов что то в этом роде у меня и без него все работает, при его отключении в /etc/X11/xorg.conf нужно закомментировать в Section «Files» строки с RgbPath и FontPath, иначе Gnome не загрузится.
-------------------------------------------
runlevel: single в строке kernel + наличие в /etc/initng/runlevel файла single.runlevel либо файла single = не работает, не смотря на заявление в initng-0.6.10.2/doc/INSTALL.
Чтоб заработало нужно писать runlevel:single.runlevel и иметь в /etc/initng/runlevel файл конфигурации single.runlevel
при этом при загрузке получаем надпись ignoring unknown boot option «runlevel:single.runlevel», однако все срабатывает.
Содержимое файла single.runlevel
system/hdparm system/clock system/sysctl system/swap system/mountfs daemon/syslogd net/lo system/hostname system/mingetty
---------------------------------------