ディスクレス化(Linux, FreeBSD等)

Last-modified: 2009-01-18 (日) 21:26:29

(2009-01-18追記)このページに辿りついた方なら多分ご存知だと思いますがこの項を記述した後の2008年05月にRedHat ELのsystem-config-netbootがリリースされました。


旧コンテンツ:Fedora Core Linux ディスクレス化キット

新コンテンツ初出 2008-3-5
最終更新 2009-01-18(メインコンテンツの最終更新は2008-03-05)
いくつかののディストリ群をdiskless化する為の情報を簡単に紹介しています。
設定に関する情報は書いたのでとりあえず正式公開とします。
 

本当に知りたい情報はこのページにありますか?
検索エンジンの検索結果というのは「どのサイトにどんな情報があるか」についてはまずまず正確ですが、
「サイト内のどのページにどんな情報があるか」について解析する力はまだまだ不十分です。
このページに検索エンジンから直接来た方!
望みの情報は、実は当サイト内の他のページにある可能性がかなりありますよ。

 

Googleのような優秀な検索エンジンでも当サイトを必ずしも正確に解析出来るとは言えません。ヤフーやLive Searchなんかはお話にならないレベルです。(加えて言えば、いきなりディストリ名を絞って検索すると誤りが多くなるようです。)
知りたい情報は、
このあたりのページにあるのかもしれません。


 

旧コンテンツはゴテゴテと自前で作ったものでしたが、間もなくRed Hat ELが標準でディスクレスブート運用に対応すると思われるこの頃ですので、今度のコンテンツではほぼ全て、各ディストリの標準的な方法だけを使ってディスクレス環境を構築する手順を紹介します。

 

とりあえずは、nfsrootやディスクレスに興味を持ってこのページに来た方は、
ディスクレス化に関する情報にお立ち寄り下さい。

 


前書きの後半

このページで扱うネットワークブートは、PXEブート+NFSROOTです。しかしLinuxのカーネルnfsroot機能を使用したものは一つもありません。少し考えてもらうとわかると思いますが、Linuxのカーネルnfsroot機能に依存すると自由度や柔軟性がなくなり、いまどきの基準で言うと簡易的な用途にしか使用できません。

 

Debianは標準でカーネルnfsroot機能に依らない{nfsroot,pxeboot,ディスクレスブート}に対応しています。
しかもその仕組みは、本ページの旧コンテンツ(Fedora Core Linux ディスクレス化キット)で用いていた手法と同じです。個人で使用するのに向いています。
「Fedora Core Linux ディスクレス化キット」に代わるものが欲しい方はDebianを使ってみて下さい。

 

その他の取り上げる予定のディストリビューションについて簡単に...

  • Ubuntuのディスクレス化手法は当然Debianのそれと同じです。使えるものか否かが違いでしょう。
  • Fedora(標準)のディスクレス化手法は教育機関などで同じ構成の多数のディスクレスクライアントを設ける場合に向いた方式です。でも別に個人で使用するのに向いていないわけではありません。さすが商売で開発してるだけに開発パワーが割かれていることがよくわかります。企業とか教育機関のIT担当の方がディスクレスのLinuxの使い勝手を試してみるなら(まともに使えるのか?、どんな制限があるのか?等)、これでしょう。
  • FreeBSDのそれは個人用、大勢での共同利用、二つの方式があると言えるでしょう。公式に二つの方式があるという意味ではなく実質的にです。個人用のディスクレス化だと構築が非常に簡単です。
 

本サイトには他にもブートに関わる様々なページ群があります。→

ネットワークブートの共通事項

現在の普通の方法を書きます。

ディスクレスクライアントとディスクありクライアント(普通のクライアント)との違い

ファイルの配置と中身の違いだけについて触れます。
SolarisもFreeBSDもLinuxもほぼ共通です。
ブート周りとfstabが異なる程度です。

サーバに必要なもの

  • dhcpサーバ
  • tftpサーバ
  • nfsサーバ

Fedora8 CentOS5のディスクレス・マルチブート環境を構築する

簡素に見えるかもしれませんが、この章はほぼ完成させたつもりです。


Solarisとは異なりディスクレス環境をいきなり構築することは出来ず、最低1台のクライアントは一旦普通にローカルHDDにインストールする必要があります。つまりここで紹介する手順はディスクレス化手順です。
でも逆に言うと仮に100台のディスクレスクライアントを構築する場合でも一旦ローカルHDDにインストールしなければならないのは1台だけです。


ディスクレスブートには言うまでもなくディスクレス母艦とディスクレスクライアントの双方が必要です。(標準で用意されている手段に限れば、)Red Hat EL 5, CentOS 5は今のところディスクレスクライアントにはなれますが、ディスクレス母艦にはなれません。具体的に言うとFedora8には付属しているディスクレス母艦構築用のユーティリティ(system-config-netboot)が付属していません。多分Red Hat EL 6にはFedoraのsystem-config-netbootが移植されてディスクレス母艦機能に対応するもの思われます。
このFedoraが実装を始めている、(Red Hat EL系にも同様にも実装される筈の、)ディスクレスブート機能は、前述のとおり、教育機関などで多数のクライアントを必要とする場合に対応できるものです。

 

ということで、現在(2008年2月)は暫定期間なので、母艦はFedora8で、クライアントはRed Hat EL 5互換のCentOS 5とFedora8のディスクレス・マルチブート構成という環境の構築手法を簡単に紹介します。

 

※:これをおこなう人はある程度の知識がある人ばかりの筈なのでポイントだけを記します。母艦には既にFedora8がインストールされているとして説明を始めます。

母艦のdhcpサーバ

Linuxのpxeブートは一般にpxegrubとpxelinuxの2つの選択肢があるわけですが、ここではFedoraが採用しているpxelinuxの方を使用します。てことで、クライアントにはdhcpdで固定のIPアドレスを与えて下さい。

option domain-name "hoge.com";
filename "linux-install/pxelinux.0";
  host hoge {
    hardware ethernet 00:AA:BB:CC:DD:EE;
    fixed-address 192.168.1.48;
    option host-name "hoge";
  }

基本的にはクライアントをインストールするより前にdhcpdを設定して稼動させておいて下さい。
最低限、system-config-netbootを使用する前(際)にdhcpdを稼動させておいて下さい。

母艦にpxelinux

Fedora8がインストールしてくれたpxelinux 3.10は何故だか使い物にならないので、syslinuxのサイト(ダウンロード元はkernel.org)からもっと新しいバージョンのsyslinuxをダウンロードして下さい。

 

そして/tftpboot/linux-installに、pxelinux.0とvesamenu.c32を置いて下さい。
勿論そこに既にpxelinux.0があれば上書きです。

母艦のnfsサーバ

/etc/exportsの一例(適宜セキュリティに気を使って下さい)

/DISKLESS/Fedora8Clients 192.168.1.0/255.255.255.0(rw,no_root_squash,async)
/DISKLESS/CentOS5Clients 192.168.1.0/255.255.255.0(rw,no_root_squash,async)

必ずクライアントのOSの種類毎にexportしなければなりません。これはnfsrootの仕様ではなく、system-config-netbootがチェックするからです。

 

system-config-netbootを使用する前(際)に必ずnfsサーバを稼動させておいて下さい。

クライアントのインストール

一旦、Fedora 8とCentOS 5(5.?)をクライアントの1台(後でクライアントを多数設ける場合の言い方です)に普通にインストールします。つまりローカルHDDにインストールします。

 

busybox-anacondaを追加インストールしておいて下さい。(Fedora, Red Hat EL系 共通)
後で必要となります。

 

これも必ず実行しておいて下さい。。(Fedora, Red Hat EL系 共通)

# chkconfig autofs off
 

説明は省きますが、実際にはFedora 8とCentOS用に合計2つのパーティションを用意する必要はありません。適宜自分で作業順を工夫して下さい。

クライアントのOS環境を丸ごと母艦にコピー

Fedora推奨のコピーの仕方は、母艦側からおこなうやり方です。

# rsync -v -a -e ssh --exclude='/proc/*' -exclude='/sys/*' CLIENTIP:/ DISKLESSDIR/root

だそうです。
/DISKLESSDIR/rootは、ここでは
/DISKLESS/Fedora8Clients/root
/DISKLESS/CentOS5Clients/root
に該当します。適宜読み替えて下さい。

 

実際には方法は他にも沢山あります。好きな方法を使って下さい。

 

重要なのは稼動中クライアントの/devの中身をサーバ側にコピーする必要がある点です。
これもnfsrootの仕様ではなく、Fedoraのsystem-config-netbootの仕様です。
どんな方法を使う場合でも必ずサーバ側に稼動中クライアントの/devの中身をコピーして下さい。

system-config-netboot

いよいよsystem-config-netbootユーティリティを使用します。勿論母艦側での作業です。この時点で初めてsystem-config-netbootをインストールしても構いません。
ポイントだけを記します。

 

disklessfc_1_s.png
OSの種類が識別できる文字列を入力すべきでしょう。

 

disklessfc_2_s.png
上から読んでいれば特に説明は要らないと思います。

 

disklessfc_3_s.png
最低限入力しなければならないのはこれだけです。
私はここでクライアントのIPアドレスを入力することを推奨します。OKを押した際にクライアント名に変換されるか否かでdhcpサーバが正しく設定できているかが確認できるからです。

 

pxelinuxを使ってマルチブートを実現する場合のみ必要な追加作業
system-config-netbootでクライアントを追加する度に、/tftpboot/linux-install/pxelinux.cfg内の「IPアドレスをオクテット毎に16進に変換したファイル名のファイル」をバックアップして下さい。

pxelinux用の設定ファイルのカスタマイズ

これもpxelinuxを使ってマルチブートを実現する場合のみ必要な追加作業です。
簡単に言うと、先にバックアップ対象としたファイルを、バックアップしておいたファイルからコピペしてこのような中身にするということです。

default vesamenu.c32
timeout 300
menu color sel 7 #ffffffff #ff000000
label Fedora8
    menu label Fedora8
    menu default
    kernel Fedora8/vmlinuz
    append  initrd=Fedora8/initrd.img root=/dev/ram0 init=disklessrc 実際には改行しない
NFSROOT=192.168.1.4:/DISKLESS/Fedora8Clients ramdisk_size=21116 実際には改行しない
ETHERNET=eth0 SNAPSHOT=
label CentOS5
    menu label CentOS5
    kernel CentOS5/vmlinuz
    append  initrd=CentOS5/initrd.img root=/dev/ram0 init=disklessrc 実際には改行しない
NFSROOT=192.168.1.4:/DISKLESS/CentOS5Clients ramdisk_size=16293 実際には改行しない
ETHERNET=eth0 SNAPSHOT=

ただし、pxelinux用の設定ファイルはdefaultというファイル名がデフォルトなので、
ディレクトリpxelinux.cfgの中をこんな風にdefaultだけにしても構いません。

/tftpboot/linux-install/---pxelinux.0
             |
             |---pxelinux.cfg/---default
             |
             |---Fedora8/
             |      |---vmlinuz
             |      |
             |      |---initrd.img
             |
             |---CentOS5/
                    |---vmlinuz
                    |
                    |---initrd.img

※ここではFedoraの流儀に従い/tftpboot/linux-install以下にファイルを配置しています。しかし言うまでもなく、tftpdのルート以下にいきなりファイルを配置してももちろん構いません。そうする場合は合わせてdhcpd.confのfilenameの指定を修正して下さい。

Debian のディスクレスブート環境を構築する

これもディスクレス化手順です。
Fedora,Red Hat EL系とは異なり、個人用のディスクレス環境です。
母艦はLinuxであればどのディストリビューションでも構いません。


普通にインストールしたクライアントOS環境を丸ごと母艦側にコピーします。

オフラインで(他のOSを作業用OSと使用して)作業しても構いません。

クライアント環境の/etc/network/interfacesのカスタマイズ

母艦上で、
/クライアントroot/etc/network/interfacesのeth0に関する記述をコメントアウトします。

クライアント環境の/etc/fstabのカスタマイズ

母艦上で、
/クライアントroot/etc/fstabをカスタマイズします。一例

192.168.1.4:/DISKLESS/Debian4hoge / nfs defaults      0       0

スワップの行はコメントアウト

クライアント環境のイニシャルラムディスクをnfsroot用に変更する

母艦上で、
/クライアントroot/etc/initramfs-tools/initramfs.conf内の

BOOT=local

BOOT=nfs

に変更します。そして、
クライアントroot直下でchrootし、

# update-initramfs -u

exitしてchroot環境を抜けます。

pxegrub

以下のpxegrubを使った設定例を推奨しているわけではありません。上でpxelinuxを取り上げているので、多少はpxegrubも紹介しようと、取り上げただけです。現状ではpxelinuxの方が対応環境が多いのでおすすめです。pxelinuxの使い方はDebianにおいても上のFedoraの場合と全く同じです。
 

pxegrubを使用する場合に母艦/tftpboot以下のファイルの配置(一例)
見てわかるようにクライアント毎に独立した設定を持つ個人用のディスクレス環境です。

/tftpboot/-----pxegrub
      |
      |----hoge/-----grub.conf
      |     |
      |     |---vmlinuz-xxxxxxx
      |     |
      |     |---initrd-xxxxxxx.img
      |
      |----fuga/-----grub.conf
            |
            |---vmlinuz-xxxxxxx
            |
            |---initrd-xxxxxxx.img

pxegrubのコンパイル

grubのtarballは、ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gzからダウンロードできます。
これを解凍し、./configureし、makeします。私は./configure時に以下のようなオプションを付けました。
enableの個所は重要ですが、--disableの個所は好みです。

./configure \
  --enable-eepro100 \
  --enable-3c90x \
  --enable-rtl8139 \
  --enable-diskless \
  --disable-ext2fs \
  --disable-fat \
  --disable-ffs \
  --disable-ufs2 \
  --disable-minix \
  --disable-reiserfs \
  --disable-vstafs \
  --disable-jfs \
  --disable-xfs \
  --disable-iso9660 \
  --disable-gunzip \
  --disable-packet-retransmission \
  --disable-hercules \
  --disable-serial

makeするとgrub-0.97/stage2にファイルpxegrubが作成されます。
これを/tftpbootにコピーしておきます。

grub.conf

grub.conf(一例)

default=0
timeout=2
color cyan/blue white/blue
title Debian GNU/Linux, kernel 2.6.18-6-686
	root (nd)
	kernel /hoge/vmlinuz-2.6.18-6-686 nfsroot=192.168.1.4:/DISKLESS/Debian4hoge
	initrd /hoge/initrd.img-2.6.18-6-686

カーネルとイニシャルラムディスク

先に記したファイル配置となるように、
カーネルと、先に更新したイニシャルラムディスクを、クライアント環境から母艦rootの/tftpboot以下にコピーします。

dhcpd.conf

ヘッダ部分にoptionを記述します。

option option-150 code 150 = text;
中間略
  host hoge {
    hardware ethernet 00:AA:BB:CC:DD:EE;
    fixed-address 192.168.1.48;
    option host-name "hoge";
    filename "pxegrub";
    option option-150 "/hoge/grub.conf";
  }

"option-150"は実際には任意です。ファイル内で統一されていればいいだけです。

Ubuntu のディスクレスブート環境を構築する

変更の手順的にはDebianと全く同じです。
ただしこっちで触れた問題があります。

 

(2009-01-18)これもUbuntuのディスクレスブートの一形態です。

FreeBSD のディスクレスブート環境を構築する

こっちで触れたように、
dhdp.confにfilename "pxeboot";とoption root-path "ipaddr:yournfsrootpath";を書くことだけが
、特に皆さんに伝えるべき内容です。
他にはファイルを配置し、fstabを修正するくらいです。


(旧コンテンツの名残)
Fedora Core Linux ディスクレス化キット
(2008-2-12) 古くなり過ぎたのでキットの公開を停止します。

初出 2006-8-18
最終更新 2007-8-23
開発時期 2005-5~
※本ページはカーネル再構築(再コンパイル)せずにディスクレス化する技術を紹介するページですが、参考としてこのページにカーネル再構築の手順を載せてあります。
※Solaris x86、FreeBSDのディスクレス化のことならこちらに少々の情報があります。
 

(2007-8-23) FedoraのUSBブートに関する情報ならこちら→ Linux各ディストリビューションのUSBブート・対応状況

 

(2007-7-16) キットそのものは2006年11月から更新していません。カーネルモジュールの仕様は頻繁に変わるので最近のアップデートを施したFedora Core 6やFedora 7やRedHat EL 5ではうまく動かない可能性がある(高い!)と思っています。ただ本キットに興味を持たれる方であれば適宜ご自身で対応することも可能ではないかと思っています。

 

また、本キットの技術の実質的に最大の特徴は、カーネルのnfsroot機能に頼らない為、自由に無線LANやVPNと組み合わせることが可能な点にあります。(2007-8-23追記)単なるnfsroot化ならSolarisやFreeBSDやDebianを使えば簡単です。
ローカルにデータを保存しないクライアントを実現する技術としては(1)リモートデスクトップの類、(2)http-fuse LinuxやOneCDLinuxやUSBブートLinuxとWeb上のOffice等の組合せ等、様々ありますが、その他の選択肢の一例を示すのが本キットの価値だと思っています。その意味では今のままでもある程度その役割を示せているのではないかと思います。

 
  • 2006-11-15 CentOS 4.4(カーネル2.6.9-42.0.3.EL)にも対応したVersion0.09aを公開しました。
  • 2006-10-30 Fedora Core 6 および Fedora Core 5(カーネル2.6.18-1.2200.fc5)に対応したVersion0.09を公開しました。
     
    当ページでは既にローカルHDDにインストールされたFedora Core Linuxをカーネルの再コンパイルなしにDiskless化(NFS ROOT化)するキットを公開しています。
     
    NFS ROOTというとLinuxではカーネル再コンパイルが常識ですが、このキットではネットワーク機能を持つリッチなイニシャルラムディスク(initrd)を作ることで、カーネル再コンパイルなしにNFS ROOTを実現します。
 

最初は2005年にFC3対応のキットを作ったのですが、当時のカーネルではNFSで排他ロックが出来ないため、多くのディレクトリをラムディスクにしなくてはならず、とても非実用的でした。
FC4で試してみたところその問題は一応解決しているようで、実用的なものになりました。

 

Diskless環境上でyum upgradeを用いてFC4からFC5、FC5からFC6へのアップグレードもおこなえます。


説明文を表示したままにしておくとGoogleが誤誘導しがちなので削除しました。
代わりに同じ内容の、キットに内包していたREADMEを載せておきます。
ダウンロード fileREADME.euc

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)