ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

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をリブートしたいって向きには、結構便利な選択肢では無いかな?と思う。