[[LinuxSoft]] * InitNG で高速ブートを実現しよう [#b941a3e7] #contents ** InitNG って? [#l926b5bb] InitNG は /sbin/init に替わり高速で各種デーモンの起動やシステムのセットアップを行うツールです。通常のブート手順を踏まないため、高速な起動が出来ます。起動時だけではなく、ついでに再起動や電源停止時も非常に速くなるのが特徴的です。 ちなみに私の環境 Fedora Core 4(Linux 2.6.12-1.1398_FC4)、CPU は Celeron 2.66GHz、HDD は ATA 100 です。システム構成は"ワークステーション"でインストールした直後の状態です。導入前は起動にちょうど1分かかっていたものが、導入後は15秒まで短縮されました。4倍高速化されたことになります。 [[bootchart>http://pocketstudio.jp/linux/?bootchart%A4%C7%B5%AF%C6%B0%BB%FE%A4%CE%A5%D7%A5%ED%A5%BB%A5%B9%BF%E4%B0%DC%A4%E4%C9%E9%B2%D9%A4%F2%A5%B0%A5%E9%A5%D5%B2%BD]] というブート時のシステム状況をグラフ化するツールを使った比較した画像をアップしてみました。 - before 〜 [[通常のブート時間(1分):http://pocketstudio.jp/r_images/wiki_linux/2005/bootchart-FC4.png]] - before 〜 [[通常のブート時間(1分):http://www.23styles.com/bbs]] - after 〜 [[InitNG導入後のブート時間(15秒):http://pocketstudio.jp/r_images/wiki_linux/2005/bootchart-FC4-InitING.png]] - after 〜 [[InitNG導入後のブート時間(15秒):http://www.23styles.com/bbs]] どうでしょう? 起動手順がスッキリして高速化されていることが分かります。(ただし、初期状態の InitING インストール直後は必要最低限のサービスしか起動されず、その分が速いといえば当然ですが、それでもネットワークや X も起動しますし、rc.sysinit を経由しない高速起動は目を見張るものがあります。一度、実際に目で見て感じてください) ** システム必要条件 [#d51a58e8] 基本的に Linux 系で動作するようです。ただし、ハードディスク内の構成が論理ボリュームだと動作しません。必ず df で見たとき、以下のような物理ボリュームでなくてはいけません。 $ df -Th Filesystem Type サイズ 使用 残り 使用% マウント位置 /dev/hda2 ext3 10G 2.6G 6.9G 28% / /dev/hda1 ext3 99M 9.2M 85M 10% /boot /dev/shm tmpfs 110M 0 110M 0% /dev/shm Fedora Core 4 では通常、論理ボリューム(LVM)へのインストールがデフォルト(初期設定値)となっています。その場合は正常に動作できません。。もし df を実行して、中に論理ボリューム(/dev/mapper/VolGroupXX〜の記述)がある場合は残念ですが現行バージョンでは対応していません。 $ df -TH Filesystem Type Size Used Avail Use% マウント位置 /dev/mapper/VolGroup00-LogVol00 ext3 85G 4.3G 76G 6% / /dev/hda1 ext3 104M 11M 88M 11% /boot /dev/shm tmpfs 393M 0 393M 0% /dev/shm 色々試してみましたが、必ずシングル・ユーザ・モードになってしまって通常のサーバとしては機能をなしません。。。以下のようなエラーを吐いてシングル・ユーザ・モードに移行してしまいます。 ** "initing_main.c", ready_to_quit(): ********* No more services! ************ -- line:76 WARN Sending all processes the TERM signal, and 2 sec... -- line:79 WARN Sending all processes the KILL signal... system is start up! Give root password for maintenance (or type Control-D to continue): ここで root パスワードを入れないと Kernel Panic を起こしてリセットボタンを押すはめになってしまいます……。 今後の InitNG バージョンアップ時の対応に期待しましょう。 また、ここでは Fedora Core 4 での検証方法を紹介します。ディストリビューション毎に注意事項があるようです。詳しい個別情報が[[フォーラム(英語):http://forum.initng.thinktux.net/]]に公開されてます。記述があるのは Debian, Fedora Core, Gentoo, Ubuntu についてです。 あわせて、本当に高速化されているかどうか目で確認できるように、予め [[bootchart>http://pocketstudio.jp/linux/?bootchart%A4%C7%B5%AF%C6%B0%BB%FE%A4%CE%A5%D7%A5%ED%A5%BB%A5%B9%BF%E4%B0%DC%A4%E4%C9%E9%B2%D9%A4%F2%A5%B0%A5%E9%A5%D5%B2%BD]] というブート時のシステム状況をグラフ化するツールをセットアップされた状態を想定しています。 なお、SELinux が有効な場合 Targeted では動作するようです。strict モードで動作させるには別途[[パッチ:http://forum.initng.thinktux.net/viewtopic.php?t=170]]が必要になるようです。 ** ライセンス [#wf5dbbd1] GNU Public License (GPL) version 2 ということで、無料で利用できます。作者さんに感謝ですね! ** 英語情報 [#n4fe62f5] - http://initng.thinktux.net/index.php/Main_Page#Forum 開発サイト - http://forum.initng.thinktux.net/ フォーラム(掲示板) - http://initng.thinktux.net/index.php/Documentation 各種ドキュメント類 * InitNG のセットアップ [#nb735360] ここでは以下の条件下でのセットアップ情報を掲載しています。もし他の環境でうまく動作できましたら、私のページからリンクをはりますので、[[どうかお知らせ下さい:zem@pocketstudio.jp]]。 ** セットアップ条件 [#y86e4991] - ディストリビューション:Fedora Core 4 - ファイルシステム:物理ボリュームを使用 - [[bootchart>http://pocketstudio.jp/linux/?bootchart%A4%C7%B5%AF%C6%B0%BB%FE%A4%CE%A5%D7%A5%ED%A5%BB%A5%B9%BF%E4%B0%DC%A4%E4%C9%E9%B2%D9%A4%F2%A5%B0%A5%E9%A5%D5%B2%BD]] をインストール済み - SELinux は無効もしくは targeted モード ** セットアップ手順 [#l094839d] まずは、アーカイブの取得と展開。ここのあたりはお約束ですね。 $ cd /usr/local/src $ wget http://initng.thinktux.net/download/initng-0.1.6.tar.gz $ tar xfz initng-0.1.6.tar.gz $ cd initng-0.1.6 次に configure です。KERNEL-OS の指定をしないとエラーになるので、必ずづけてから make します。 $ ./configure KERNEL-OS=linux-gnu $ make $ make check 特にエラーが出なければ問題ありません。 # make install 問題が無ければ、次のような表示が出ます。 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.sh Automatically generating system,runlevel,default.runlevel and up.i Adding daemon/sshd to default.runlevel Adding daemon/acpid to default.runlevel Done generating files. 次にブート時に bootchart がデータを収集する bootchartd の記述を変更します。 # cat /sbin/bootchartd | sed 's:/sbin/init:/sbin/initng:g' > /sbin/bootchartdng # chmod a+x /sbin/bootchartdng ちゃんと実行属性(x)がついているか念のために確認しておきます。 # ls -al /sbin/bootchartd -rwxr-xr-x 1 root root 5835 7月 30 21:49 /sbin/bootchartd このようになっていれば問題ありません。 最後にブートローダーの設定変更を行います。 # vi /etc/grub.conf title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/bootchartd initrd /initrd-2.6.12-1.1398_FC4.img この中の【 init=/sbin/bootchartd 】の記述を【 init=/sbin/bootchartdng 】と書き換えます(書き換えるのは bootchart に関する grub.conf の行だけで、間違えて InitNG ではない元々の記述を書き換えないように注意)。 title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/bootchartdng initrd /initrd-2.6.12-1.1398_FC4.img 次に InitNG の設定ファイルを変更します(Fedora Core 専用設定です)。 # vi /etc/initng/system.runlevel ファイルを開いたら、14行目 system/coldplug こちらをコメントします #system/coldplug 次にもう1つの設定ファイルを開きます。 # vi /etc/initng/default.runlevel ファイルの末尾に以下の行を追加します。 daemon/xfs daemon/gdm daemon/hald system/alsasound ファイルを保存したあとは、サーバの再起動をしてテストします。 あとは通常通りブートしたら設定成功です。 この設定では [[bootchart>http://pocketstudio.jp/linux/?bootchart%A4%C7%B5%AF%C6%B0%BB%FE%A4%CE%A5%D7%A5%ED%A5%BB%A5%B9%BF%E4%B0%DC%A4%E4%C9%E9%B2%D9%A4%F2%A5%B0%A5%E9%A5%D5%B2%BD]] 用のデータが /var/log/bootchart.tgz に保存されています。[[このデータを元に画像を作成すると、設定前と後の起動時間の違いがはっきりします>http://pocketstudio.jp/linux/?bootchart%A4%C7%B5%AF%C6%B0%BB%FE%A4%CE%A5%D7%A5%ED%A5%BB%A5%B9%BF%E4%B0%DC%A4%E4%C9%E9%B2%D9%A4%F2%A5%B0%A5%E9%A5%D5%B2%BD#content_1_8]] 今後 IntNG を使って常にブートさせたい場合は /etc/grub.conf を再度書き換えます。 default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/bootchartdng initrd /initrd-2.6.12-1.1398_FC4.img おそらく通常では【 default=1 】(上から2番目の通常の起動手順)が指定されていますが、これを1番上にするため【 default=0 】とします。 また kernel 行の "init" も【 /sbin/bootchartdng 】から【 /sbin/initng 】に書き換えて起動時のログを取らなくします(必要であれば取るままにしておいても問題ありません) default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Bootchart logging root (hd0,0) kernel /vmlinuz-2.6.12-1.1398_FC4 ro root=LABEL=/ rhgb quiet init=/sbin/initng initrd /initrd-2.6.12-1.1398_FC4.img その他は必要に応じて /etc/initng/ 内のファイルの編集を行うことで、より細かな動作制御が出来るようです。詳しくはドキュメントをご覧下さい。 * InitNG の日本語情報 [#j2cfafca] 日本語訳の情報を掲載します(の予定です)。 - [[ドキュメント>InitNG/Documentation]] -- [[FAQ>InitNG/Documentation/FAQ]] -- [[README>InitNG/Documentation/README]] -- [[インストール方法>InitNG/Documentation/インストール方法]] -- [[bootchart の作成>InitNG/Documentation/bootchartの作成]] - Developer Documentation -- [[InitNG のデバッグ>InitNG/Documentation/InitNG のデバッグ]] -- [[service の作成>InitNG/Documentation/service の作成]] -- [[plugin の作成>InitNG/Documentation/plugin の作成]] -- [[chroot jail 環境での実行>InitNG/Documentation/chroot jail 環境での実行]] ※出典がないとの指摘がありますが、 私は README 等オリジナルの一次情報を参照しています。特定の URL を参照している場合は書いています。あと、ここは wiki で凍結してない箇所ですので、気に入らなければどうぞご自由にお書き換えいただいて結構です。 // ご自分の場合は出典を明記しないのに、私に対して一方的に避難をなさるのは不公平と思います(心あたりのある方へ)。