InitNGを入れて、Linuxの起動速度を速くしよう
WindowsXPが出てきて以来、Linuxの起動時間の遅さが気に食わない。
ってな訳で、initを置き換えて、起動時間を早くする代物が、InitNGらしい。
例によって、関係するURLね。
Main Page - InitNG
http://initng.thinktux.net/index.php/Main_Page
オフィシャルサイト。
InitNG で高速ブート - Pocketstudio.jp Linux Wiki
http://pocketstudio.jp/linux/?InitNG%20%A4%C7%B9%E2%C2%AE%A5%D6%A1%BC%A5%C8
もう大学生ではない日誌(2005-05-07) : initng
http://kodou.net/diary/?date=20050507
HOWTO Initng - Gentoo Linux Wiki
http://gentoo-wiki.com/Initng
凹日記(2005-05-07) : [Momonga][野良package]initng
http://daemon.plala.jp/~meke/tdiary/?date=20050507#p03
Doi Lab. - maoeの日記 - fbsplashとInitng
http://doilab.g.hatena.ne.jp/maoe/20050508/p1
上のを見ながら、Red Hat Linux 9にinitngを入れる事に挑戦してみる。
インストール方法自体は、添付の README や INSTALL を見れば書いてある。
[root@wacky2 wacky]# tar xzvf initng-0.1.8.tar.gz [root@wacky2 wacky]# ls initng-0.1.8 initng-0.1.8.tar.gz [root@wacky2 wacky]# cd initng-0.1.8 [root@wacky2 initng-0.1.8]# ls AUTHORS Makefile.am TODO configure gen_system_runlevel mkinstalldirs tools CODING_STANDARDS Makefile.common aclocal.m4 configure.in initfiles plugins COPYING Makefile.in autogen.sh contrib install-sh scripts ChangeLog NEWS config.guess devtool link_install.sh src FAQ README config.h.in doc ltmain.sh stamp-h.in INSTALL TEMPLATE_HEADER config.sub fixes missing test [root@wacky2 initng-0.1.8]# ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking whether make sets $(MAKE)... yes checking for working aclocal-1.4... found ... config.status: creating initfiles/Makefile config.status: creating initfiles/plugin/Makefile config.status: creating initfiles/system/Makefile config.status: creating config.h config.status: executing default-1 commands [root@wacky2 initng-0.1.8]# [root@wacky2 initng-0.1.8]# make make all-recursive make[1]: 入ります ディレクトリ `/home/wacky/initng-0.1.8' Making all in tools make[2]: 入ります ディレクトリ `/home/wacky/initng-0.1.8/tools' ... Making all in debug make[3]: 入ります ディレクトリ `/home/wacky/initng-0.1.8/initfiles/debug' make[3]: `all' に対して行うべき事はありません。 make[3]: 出ます ディレクトリ `/home/wacky/initng-0.1.8/initfiles/debug' make[3]: 入ります ディレクトリ `/home/wacky/initng-0.1.8/initfiles' ../tools/install_service -i test.ii Distribution set: "unknown" chmod 644 test.i make[3]: 出ます ディレクトリ `/home/wacky/initng-0.1.8/initfiles' make[2]: 出ます ディレクトリ `/home/wacky/initng-0.1.8/initfiles' make[2]: 入ります ディレクトリ `/home/wacky/initng-0.1.8' make[2]: 出ます ディレクトリ `/home/wacky/initng-0.1.8' make[1]: 出ます ディレクトリ `/home/wacky/initng-0.1.8' [root@wacky2 initng-0.1.8]# make install ... make[3]: 出ます ディレクトリ `/home/wacky/initng-0.1.8/initfiles' make[2]: 出ます ディレクトリ `/home/wacky/initng-0.1.8/initfiles' make[1]: 出ます ディレクトリ `/home/wacky/initng-0.1.8/initfiles' make[1]: 入ります ディレクトリ `/home/wacky/initng-0.1.8' make[2]: 入ります ディレクトリ `/home/wacky/initng-0.1.8' /bin/sh ./mkinstalldirs /sbin /usr/bin/install -c gen_system_runlevel /sbin/gen_system_runlevel make[2]: `install-data-am' に対して行うべき事はありません。 make[2]: 出ます ディレクトリ `/home/wacky/initng-0.1.8' make[1]: 出ます ディレクトリ `/home/wacky/initng-0.1.8' Initng is installed. Add init=/sbin/initng in your bootloader configuration eg. at the end of the kernel line in /boot/grub/grub.conf Have a lot of fun! ./gen_system_runlevel Automatically generating system,runlevel,default.runlevel and up.runlevel Adding daemon/sshd to default.runlevel Adding net/eth0 to default.runlevel Adding daemon/syslogd to default.runlevel Done generating files. If you have initng running, you can reload it with: # /sbin/ngc -c
とまぁ、インストールまでは何の問題も無し。いや、あっけないね。
んで、GRUBのメニューファイルをカスタマイズする。
[root@wacky2 grub]# cat /boot/grub/menu.lst # grub.conf generated by anaconda ... title Red Hat Linux (2.4.20-8) root (hd0,0) kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ pci=noacpi initrd /initrd-2.4.20-8.img title Red Hat Linux (2.4.20-8) with initng root (hd0,0) kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ pci=noacpi init=/sbin/initng initrd /initrd-2.4.20-8.img
上が元の設定で、下が追加した設定ね。
単に、「init=/sbin/initng」を追加すればOKという適当さ。
カーネルのリコンパイルすら必要ない。うひょー。
で、喜び勇んでリブート。
mkdir: cannot create directory `/sys': Read-only file system Mounting devpts at /dev/pts ... Mounting devshm at /dev/shm ... Using /sbin/hotplug as hotplug agent ... 3% system/initial [done] ( 1 second to start. ) system/hostname: Setting hostname to wacky2 ... 6% system/hostname [done] system/clock: Setting system clock to hardware clock [Local Time] ... modprobe: modprobe: Can't locate module block-major-33 modprobe: modprobe: Can't locate module block-major-33 modprobe: modprobe: Can't locate module block-major-34 modprobe: modprobe: Can't locate module block-major-34 modprobe: modprobe: Can't locate module block-major-56 system/mountroot: Remounting root filesystem read-only (if necessary) ... modprobe: modprobe: Can't locate module block-major-56
おぉぉ…。うまく行ったか、行ったか?と思っていると。
** "initng_handler.c", start_new_service_named(): -- line:317 FAIL: Unable to load servie net/lo! ** "initng_depend.c", service_state(): -- line:124 FAIL: system need dep net/lo could not start! ** "initng_handler.c", start_new_service_named(): -- line:317 FAIL: Unable to load servie system! ** "initng_depend.c", service_state(): -- line:124 FAIL: default need dep system could not start! ** "initng_handler.c", start_new_service_named(): -- line:317 FAIL: Unable to load servie default! ** "main.c", main(): -- line:220 FAIL: Failed to load runlevel (default)!
あかん、止まってしまいましたがな。
結論から言うと、以下の設定を書き換える事で、ある程度まで動かす事が出来た。
[wacky@wacky2 initng]$ cat /etc/initng/system.runlevel system/initial system/mountroot system/mountfs system/bootmisc system/clock system/hostname system/modules system/static-modules system/hdparm system/keymaps system/urandom system/consolefont system/swap system/coldplug #net/lo daemon/agetty [wacky@wacky2 initng]$ cat /etc/initng/default.runlevel system #daemon/sshd #net/eth0 daemon/syslogd
上のコメントアウトを行っている所ね。
この修正を施せば、とりあえずログインできる所までは動いた。
** "initng_execute.c", start_launch(): -- line:72 FAIL: initng_execute(system/coldplug/ide): FAILED EXECUTING S ART ** "initng_handler.c", try_to_start_service(): -- line:417 FAIL: Did not find START file! ** "initng_simple_launcher.c", initng_s_start(): -- line:87 FAIL: Stat failed on /etc/hotplug/scsi.rc ** "initng_plugin_callers.c", initng_plugin_call(): -- line:59 FAIL: Plugin type 6 did return: -1, wont go for next plugin. ** "initng_execute.c", start_launch(): -- line:72 FAIL: initng_execute(system/coldplug/scsi): FAILED EXECUTING TART ** "initng_handler.c", try_to_start_service(): -- line:417 FAIL: Did not find START file!
こんな風に途中で止まったように見えるけど、ALT+F2を押せば先に進める。
Red Hat Linux release 9 (Shrike) Kernel 2.4.20-8 on an i686 wacky2 login: root Last login: Sun Aug 21 21:36:04 on tty2 You have mail. [root@wacky2 root]#
ほらね。
ただねぇ、先のコメントアウトした所から 判るように、ネットワークが全く使えないのよ。
…真面目に英文を読むか、それともディストリビューションを変えちゃうか…。
2005/08/24 続き
上の続き。
/etc/initng/net.i を修正したらOKだった。
[root@wacky2 net]# cat /etc/initng/net/net.i service net/lo { # */ need = system/mountfs system/modules system/hostname use = system/static-modules system/coldplug start = /sbin/ifup start_args = lo stop = /sbin/ifdown stop_args = lo } service net/* { # */ need = system/mountfs system/modules system/hostname use = system/static-modules system/coldplug provide = virtual/networking start = /sbin/ifup start_args = $NAME stop = /sbin/ifdown stop_args = $NAME }
上のように修正すれば、 /etc/initng/system.runlevel や /etc/initng/default.runlevel のネットワーク周りのコメントアウトを行わなくても、ちゃんと起動してくれる。
ただ、問題は、この設定を行っても、
クラッシュしないだけで、ネットワークまでは設定してくれない。
って所がネック。
とりあえず、ログイン後、
[root@wacky2 root]# /sbin/ifconfig [root@wacky2 root]# /sbin/ifup lo [root@wacky2 root]# /sbin/ifup eth0 [root@wacky2 root]# service sshd start Starting sshd: [ OK ] [root@wacky2 root]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:03:FF:92:52:56 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:190 errors:0 dropped:0 overruns:0 frame:0 TX packets:140 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:13031 (12.7 Kb) TX bytes:13871 (13.5 Kb) Interrupt:11 Base address:0x3000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
としてやれば、外部からsshでログイン出来るようになった。
(Poderosaで確認済み)
ちなみに、上記までの設定で、ログインした際のサービスの稼動状況は、 ngc ってコマンドで確認できる。
[wacky@wacky2 wacky]$ /sbin/ngc -s Next Generation init Control. written by Jimmy Wennlund <jimmy.wennlund@gmail.com> Error connecting to socket [wacky@wacky2 wacky]$ su [root@wacky2 wacky]# /sbin/ngc -s Next Generation init Control. written by Jimmy Wennlund <jimmy.wennlund@gmail.com> hh:mm:ss service : status ---------------------------------------------------------- 23:32:32 default : a dependency to service FAILED to start. 23:32:32 system : a dependency to service FAILED to start. 17:32:24 system/initial : done. 23:32:28 system/mountroot : done. 23:32:28 system/mountfs : done. 23:32:31 system/bootmisc : done. 08:32:27 system/clock : done. 17:32:24 system/hostname : done. 23:32:28 system/modules : done. 23:32:31 system/static-modules : done. 17:32:26 system/hdparm : done. 23:32:30 system/keymaps : done. 23:32:29 system/urandom : done. 23:32:31 system/consolefont : done. 23:32:28 system/swap : done. 23:32:32 system/coldplug : a dependency to service FAILED to start. 23:32:32 system/coldplug/pci : done. 23:32:32 system/coldplug/usb : done. 23:32:32 system/coldplug/isapnp : FAILED to start. 23:32:32 system/coldplug/input : a dependency to service FAILED to start. 23:32:32 system/coldplug/ide : FAILED to start. 23:32:32 system/coldplug/scsi : FAILED to start. 23:32:32 net/lo : a dependency to service FAILED to start. 23:32:29 daemon/agetty : done. 23:32:29 daemon/agetty/tty2 : running. 23:32:29 daemon/agetty/tty3 : running. 23:32:29 daemon/agetty/tty4 : running. 23:32:29 daemon/agetty/tty5 : running. 23:32:29 daemon/agetty/tty6 : running. 23:32:29 daemon/agetty/tty7 : running. 23:32:29 daemon/agetty/tty8 : running. 23:32:29 daemon/agetty/tty9 : running. 23:32:32 daemon/sshd : a dependency to service FAILED to start. 23:32:32 net/eth0 : a dependency to service FAILED to start. 23:32:32 virtual/networking : a dependency to service FAILED to start. 23:32:28 daemon/syslogd : running. [root@wacky2 wacky]#
何が動いてんのか、わかんねぇよ。って人には、試しに service でステータスをとってみた。
[root@wacky2 wacky]# /sbin/service --status-all jserverは停止しています usage: aep1000 [start|stop|restart|condrestart] anacronは停止しています atdは停止しています マウントポイントを設定: ------------------------ マウントポイントをアクティブ化: -------------------- BCM5820 driver not loaded. cannaserverは停止しています crondは停止しています cupsdは停止しています gpmは停止しています httpdは停止しています irattachは停止しています このパッケージについてはステータスを利用できません 設定されたデバイス: lo eth0 現在活動中のデバイス: lo eth0 rpc.mountdは停止しています nfsdは停止しています rpc.rquotadは停止しています rpc.statdは停止しています nscdは停止しています ntpdは停止しています portmapは停止しています postmasterは停止しています pxeは停止しています 乱数生成発生源が既に存在しています saslauthdは停止しています sendmailは停止しています smbdは停止しています nmbdは停止しています snmpdは停止しています snmptrapdは停止しています squidは停止しています FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname' Squid Cache (Version 2.5.STABLE1): Terminated abnormally. CPU Usage: 0.050 seconds = 0.000 user + 0.050 sys Maximum Resident Size: 0 KB Page faults with physical i/o: 387 /etc/init.d/squid: line 162: 724 アボートしました $SQUID -k check sshd (pid 345 343 339) を実行中... syslogd (pid 127) を実行中... klogdは停止しています tuxは停止しています vsftpdは停止しています winbinddは停止しています xfsは停止しています xinetdは停止しています ypbindは停止しています rpc.yppasswddは停止しています ypservは停止しています rpc.ypxfrdは停止しています
まぁ、停止ばっかし。
とはいえ、 single で普通に起動するより、かなり早いのも確か。
特殊な用途(つっても、組み込みぐらいしか思い浮かばんけど)で 頻繁にLinuxをリブートしたいって向きには、結構便利な選択肢では無いかな?と思う。