戻る

ネットワークインストール・マルチブート

正確には、ネットワークブートして、LAN 越しに CD からインストールしてるんだが…


[更新履歴]

04/04/30 … 誤字修正 (^-^;;
03/11/24 … パーティション例を追加
03/10/28 … インストール後の設定をちょこっと追加
ネットで探すと、HDDを母艦に移してインストールとか、CFでブートしてネットワークインストールとかあったけど、HDD摘出するのはなんかヤだったし(笑)、CFカードをわざわざ買うのも面倒だったので、ネットワークブート&ネットワークインストールでやります。
幸い Libretto はネットワークブート(PXEブート)にはH/W的に(?)サポートしてる(っぽい)ので、何も特別なことはなしに実行。
ついでに、XP領域は別になくてもよかったけど(3度も修理だしてるし)、せっかくなんでマルチブートにしてみる。

参考:
ごとむにっき 7月1日 (http://gotom.jp/~gotom/diary/?0701)
Debian GNU/Linux 3.0 のインストール (Intel x86) - システムインストールメディアの入手 (http://www.debian.org/releases/stable/i386/ch-install-methods.ja.html#s-install-tftp)
PXEネットワークブートによるNFSインストール (http://www.turbolinux.co.jp/knowledge/public/532.html)

※ 全ての記述は、stable: woody, フレーバ: bf2.4 を前提に書いています。idepci とかを使う場合は、パスを適時読み替えて下され。(idepciでも動きました)
また、使用するネットワークは、192.168.1.1〜255(subnet: 255.255.255.0)での説明だったりします。
ちなみに、Xのドライバの都合で、sargeにあげます。

母艦がDebianじゃない場合、リブに入れたいのがDebianじゃない場合は知りません :p

P.S.
母艦: debian / リブ: RedHat9 でのトリプルブートはやりました(なんで?)。そのうち(いつ?)書きます(マジ?)

P.S.2
書きました。Fedora Core だけど。 基本的に Linux であれば他のディストリビューションにも応用できるはず。ネットワークブート用のイメージは、(複数のディスクがある場合は disk1 の中に)tftp とか pxe とかそれっぽい名前のファイルがあるので、それを使おう。

ん、Vine ? 多分 Debian しか使わん…

準備するもの一覧&作業手順

準備するものは そーいや、Debian Server で iptables と dhcp のドキュメント書くのすっかり忘れてたな…

作業手順としては
  1. リブをネットワークブート
  2. ディスクのパーティションを切って(XPのデータは一旦なくなります)ネットワークインストール
  3. 一度目のリブート後、XPを再セットアップ
  4. bootpart.exeを使って、DebianのブートセクタをXPのntldrに登録 (ちょっと違うが…)
  5. Debianセットアップの続き
まぁ、こーなったらXP使わないんだけどな、と言ってみる。

サーバ側準備

1. tftpサーバ

PXEブートしたリブに、ブートイメージを転送するのに必要。
# apt-get install atftp
# apt-get install atftpd
tftpパッケージもあるが、なんかうまくいかなかった。インストール時にいろいろと聞かれる項目は全部デフォで(Enter連打)。設定は /etc/inetd.conf
tftp           dgram   udp     wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd
 --tftpd-timeout 300 --retry-timeout 5     --mcast_port 1753 --mcast_addr 239.25
5.0.0-255 --maxthread 100 --verbose=5  /tftpboot
こんなのを確認(実際は1行)
行末の"/tftpboot"はデフォは違ったかも。とりあえずここで指定されているパスを実際に作成する。-p で一気にやってもいーけど
# mkdir /tftpboot
# mkdir /tftpboot/pxelinux.cfg
次のファイルを作成する。
# cat /tftpboot/pxelinux.cfg/default
default install
label install
kernel tftpboot.img
append load initrd=root.bin devfs=nomount
インストールCD内にあるブートイメージ関連ファイルをコピー
# cp /cdrom/dists/stable/main/disks-i386/current/bf2.4/tftpboot.img /tftpboot
# cp /cdrom/dists/stable/main/disks-i386/current/images-1.44/bf2.4/root.bin /tftpboot
でもって、syslinuxパッケージに入っている、下記ファイルをコピー
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot
tftpの設定は以上。
2. dhcpサーバ

PXEブートするリブに、IPアドレスを割り当てるのに必要。
同一ネットワーク内に既に dhcpサーバが動いてるときは、そいつは止めておく。
# apt-get install dhcp
設定は /etc/dhcpd.conf
デフォルト設定(つーかテンプレート?)は、やたらと無駄な記述が多いので、1から書き直したほうが早い(かも)量も少ないし
とにかく、母艦とdhcpクライアントが通信できるように設定する。その上で、リブはMACアドレスを控えておいて、次のように設定
host mimolette{                        リブのホスト名(って、今からセットアップするんだけど)
  filename "/tftpboot/pxelinux.0";     tftpサーバの設定でのpxelinux.0のパス
  hardware ethernet XX:YY:ZZ:XX:YY:ZZ; リブのNICのMACアドレス
  fixed-address 192.168.1.101;         リブに割り当てるIPアドレス
}
ちなみに dhcpd.conf の全内容はこんな感じ (とりあえず動いてるけど自信なし)
また、リブでPXEブートしなかったら(普通にブートしたら)192.168.1.101が振られて普通に使用できるので、インストールが終わったら設定を元に戻す必要もない(みたい)
option domain-name "ddns.example.org";
option domain-name-servers 192.168.0.1, 210.196.3.183, 210.141.112.163;
# 192.168.0.1はADSLモデム / あとはプロバイダ(私はdion)のDNSサーバ

option routers 192.168.1.1;   クライアントから見たサーバのアドレス
option broadcast-address 192.168.1.255;

option subnet-mask 255.255.255.0;
default-lease-time 7200;      リース時間
max-lease-time 72000;

subnet 192.168.1.0 netmask 255.255.255.0 { DHCPで割り当てるサブネットの範囲
  range 192.168.1.50 192.168.1.99;         DHCPで割り当てる実際のIPアドレスの範囲
}

host mozzarella{  レッツノート用
  hardware ethernet ZZ:YY:XX:ZZ:YY:XX;
  fixed-address 192.168.1.100;
}

host mimolette{
  filename "/tftpboot/pxelinux.0";
  hardware ethernet XX:YY:ZZ:XX:YY:ZZ;
  fixed-address 192.168.1.101;
}
dhcpdの設定は以上。とりえあずリブのXPでも起動して確認。
3. httpサーバ

ドライバやインストールパッケージを転送するのに使用。ファイルが転送できればftpでもnfsでもいいはず。うちはProFTPDは入れてないし、nfsはサービス止めてるから、既に動いているApacheの設定をいじった。Apacheのインストール&細かい(?)設定はこちら

まず、ドライバ類を置いておく、わかりやすいパスを確保 (/tftpboot 配下である必要はないです) driver と bf2.4 っつーディレクトリ名は任意だが、images-1.44 は固定 (sを忘れないように)
# mkdir /tftpboot/driver
# mkdir /tftpboot/driver/bf2.4
# mkdir /tftpboot/driver/bf2.4/images-1.44
CDからファイルをコピー
# cd /cdrom/dists/stable/main/disks-i386/current
# cp bf2.4/* /tftpboot/driver/bf2.4
# cp images-1.44/bf2.4/* /tftpboot/driver/bf2.4/images-1.44
インストールパッケージはCDから直接(Apache経由で)リードするのでファイルのコピーは不要。HDDにファイルがある場合は、CDの場合と同じ構成になるように、httpd.confも設定する。
ドライバ類は、CD内のパス構成がそのままだとうまくいかないので苦肉の策(笑)

でもって、httpd.conf の(追加)設定
Alias /debian/ /cdrom/
<Directory /cdrom>
   Options MultiViews Indexes FollowSymLinks
   Order deny,allow
   Deny from all
   Allow from 192.168.1.0/24 127.0.0.1
</Directory>

Alias /debian-driver/ /tftpboot/driver/
<Directory /tftpboot/driver>
   Options MultiViews Indexes FollowSymLinks
   Order deny,allow
   Deny from all
   Allow from 192.168.1.0/24 127.0.0.1
</Directory>
招かざる客からのアクセス防止に、Orderはdeny->allowの順に。ディレクトリアクセスでファイル一覧が見れるように、OptionsにはIndexesを、シンボリックリンクでアクセスできるように、FollowSymLinksを設定しておく。
この状態で、http://母艦/debian/ でCD-ROMのルートに、http://母艦/debian-driver/bf2.4/ で、bf2.4のドライバへアクセスできることを確認。

これでサーバ側の設定は終了のようです。
ここまできたらあとはチョロいです。(多分)

とりあえず、netstat -tau にて、http(tcp), bootps(udp), tftp(udp) がLISTENしてるのを確認しておく。(udpはLISTENしねーけど(^-^;))

ブート&インストール

■ 1. PXEブート

キー"F12"を押しながらリブを電源投入する(ゼロだとリカバリですよ)。
説明書27ページにしたがって、ネットワークブートのアイコンを選択しEnter(右から2番目)。もしくは"N"押しながらブート。
起動するとまずDHCPサーバを探しに行き、IPアドレスを取得すると次は、TFTPサーバを探しに行く。
起動に成功すると、見慣れた(?)ペンギンのロゴとともに、それっぽい画面にかわる(テキトー)

■ 2. インストール作業

こっからは、通常のインストール作業と同等。言語を選択し、パーティションの設定。/dev/hda2 へインストールすること。

■ 3. パーティションの設定

最重要項目!! (XPに未練がない場合はその限りではない)
しくじると2度とXPのリカバリができなくなります(多分)。初期状態では、

/dev/hda1 ... NTFS (XP領域)
/dev/hda3 ... Hidden Win95 FAT32 (XPリカバリ領域)

となっているので、/dev/hda3に触れることなく /dev/hda1をいったんDeleteし、新たに

/dev/hda1 ... Linux (領域確保するだけ。beginから4G〜5Gくらい?XP用テキトー)
/dev/hda2 ... Linux / boot (1と4の余り。Debian用)
/dev/hda4 ... swap (endからメモリの2倍くらい。swap用)
/dev/hda3 ... Hidden Win95 FAT32 (いじるな危険)

などを、作成。
設定できたら、/dev/hda3 が原型を保っているのを再度確認したうえでWriteしてcfdiskを抜ける。ちなみに、リカバリ直後のXPのディスク使用量は3.3GB(使いすぎデショ)
debian 以外に赤帽とか__も__入れたい場合は、logical で論理パーティションを一旦作成し、/dev/hda5, /dev/hda6... とパーティションを作ってやればOK。

ちなみにXPは、SP1を当てる最中に作業用に約800M(??)使用(足りないときはディスククリーンナップがなんとかしてくれる??)、SP1適用後(アーカイブ無し)は合計3.5GBくらい

一応、うちのリブの現在の cfdisk 時のパーティション例
                                cfdisk 2.11n

                            Disk Drive: /dev/hda
                          Size: 20003880960 bytes
            Heads: 255   Sectors per Track: 63   Cylinders: 2432

   Name       Flags      Pert Type  FS Type          [label]        Size (MB)
-----------------------------------------------------------------------------
   hda1                   Primary   Linux                             6144.29  XP用
   hda2       Boot        Primary   Linux                             6654.26  debian用
   hda5                   Logical   Linux                             1019.94  何か用
   hda6                   Logical   Linux swap                         254.99  swap用
   hda7                   Logical   Linux                             3874.11  RedHatでもいれるか
   hda3                   Primary   Hidden Win95 Fat32 (LBA)          2056.32

■ 4. カーネルとドライバモジュールのインストール

この例ではApache使ってhttpでやるんで、networkを選択。と同時に、先にネットワークの設定をしろぃと怒られるが、フツーに続行してやると、ホスト名とIPアドレス取得の方法(DHCPか手動か)を選択すると勝手にやってくれる。すばらしい。
でもって、インストールサーバの選択では、"http://母艦/debian-driver/bf2.4/"を入力。Apache の ServerName の設定にもよるが、URL最後のスラッシュはつけといたほうが確実。

■ 5. デバイスドライバモジュールの設定

まぁどうせ、カーネル再構築はやるんで(やるよね?)テキトーに。とりあえず、ntfs, smbfs あたりいれとけばえーやろ。usbは最初から選択されてるし(bf2.4)、ネットワーク周りはすでに設定されてるし。あとはbf2.4ならiptables関連とか、か。

■ 6. 基本システムのインストール

4と同じように、networkを選択。"http://母艦/debian/"を入力。デフォルト値は末尾のスラッシュがつかないんで注意。

■ 7. LILOのインストール

マルチブートをする場合は、インストールパーティション(/dev/hda2)へ。おそらくそれが楽かと(MBRはntldrを想定)。他の起動可能パーティションは、XPのリカバリ領域だけでなく(これからリカバリする)/dev/hda1 の(とりあえず確保している)XP領域を含むので、いれといても良いかも。ただし、リカバリ領域の /dev/hda3 は、起動することはできないので、落ち着いたら /etc/lilo.conf をイジっておきましょう。
/dev/hda へのマスターブートレコードはインストールしまへん。
ブートフロッピーは作成しない(つーかFDDないし)

■ 8. システムのリブート & XPのリカバリ

Debian セットアップの手順どおりに、1度目のリブートを実行。ブートの際は"0"キーを押しながら、XPのリカバリを行う。XPのリカバリは"Y"を2回タイプした後は何のオペレーションも要らないので、メシ時ならこのスキに吉野家にでも行けば良い。(約20分)
吉野家から戻ってきたら、リカバリが終了したら、XPのセットアップまで済ます。ちなみにXPは /dev/hda1 へ入る。

■ 9. bootpart.exe

XP が起動したら、http://www.winimage.com/bootpart.htm から、bootpaXX.zip(XXはバージョン)をパクってくる。2003/10/20の時点ではbootpa25.zip
そーいや、リカバリ直後のXPはSP1ですらないんで、ダイレクトにインターネットにつながる環境の場合はモロにMSBlastなんかのマトになっちゃうんで、別マシンで DL しませう。
で、適当なフォルダに展開してやり(C:\bootpart など)コマンドプロンプトを起動し、以下のように実行する。詳しくは、"bootpart, linux"あたりでググるなりなんなりしてください。
C:/bootpart>bootpart 1 c:\bootdeb.img "Debian GNU/Linux"
んで、c:\bootdeb.img written とか C:\BOOT.INI updated とか表示されたらOK。ついでに、My Computerのプロパティから、詳細設定タブの起動と回復の設定で、既定のOSを変更しましょう。
ちなみに bootpart を使うと、マルチブートでよくやる[ddでブートイメージ作成 -> winにコピってboot.ini編集]において、liloの修正(カーネル再構築等に伴う)のたびに再度実行する必要がないので幸せです。

■ 10. リブート & Debian セットアップ続き

bootpart で boot.ini の設定まで終わったら、リブートします。ブート時には何もキーは押しません。ブートしたら OS 選択画面になるので、Debian を選んでブートします。既定のOSを Debian にしてたら放置してても Debian がブートするけど。
無事にブートすると、XP のリカバリで時間が空いてつい忘れてしまいますが、セットアップの続きです。
とりあえず、pcmcia packages を消さないようにしとけばいいんかな… まだ使えてないけど(^-^;

で、tasksel と dselect は両方とも No で抜けた。どうせ sarge にするなら、dist-upgrade にしてから apt 実行すればいーかなーと思ったんで。(嘘っぽい)

Configuring Pcmcia-cs はよくわからん(汗) とりあえずデフォで。

後はちまちまと設定やってけば、インストールは終了するはず。

あぁ、だんだんテキトーに書いてる。。。
サーバの設定を除いた全作業所要時間は、1時間くらいかな。

■ 11. インストール直後に行う個人的な設定

CapsLock を Ctrl にします。母艦のほうは HHK 使ってるから不要なんだけど。

# cd /etc/console
# cp boottime.kmap.gz boottime.kmap.bak.gz ばっくあっぷ
# gzip -d boottime.kmap.gz
# vi boottime.kmap

Caps_Lock についての記述の部分
keycode  58 = Caps_Lock
の部分を
keycode  58 = Control
へ変更

# gzip boottime.kmap
# /etc/init.d/keymap.sh reload
んで、リブート

ちなみに上の記述は CapsLock を Ctrl にするだけなので、CapsLock は実質なくなります。「入れ替える」ときは、Control のとこもイジりましょう。

で、/dev/hda1 にある XP領域をとりあえずマウントしておく。(NTFSモジュールをロードしていること)
# mkdir -p /share/win
# mount /dev/hda1 /share/win
んで、/etc/fstab にも書いておこう。
/dev/hda1  /share/win  ntfs  defaults   0 0 <- rootしかreadできんかった
/dev/hda1  /share/win  ntfs  ro,umask=000   0 0
あとは、今後カーネル再構築をした際、万一ブートしなかったときに備え、現在のカーネル(2.4.18-bf2.4)が自動で消えないように手動で設定。ちゃんと起動できるカーネルを残しておく、という意味
# cd /
# ln -s boot/vmlinuz-2.4.18-bf2.4 vmlinuz.2.4.18-bf2.4
# vi /etc/lilo.conf

Line:124 付近に追記
image=/vmlinuz.2.4.18-bf2.4
	label=2.4.18(bf2.4)
	read-only

ついでに、Other(/dev/hda3)に関する記述はコメントアウト

# lilo -v  エラーがないことを確認
最後に、今後 Debian を再インストールする場合は、パーティションの変更をしないのであれば、手順8, 9 はスキップできます。(当然か)

あ、lilo から /dev/hda3(リカバリ領域)をブートしようとしても、問答用無用にリカバリが始まったりしません。ウンともスンともいわなくなるだけで、これといって害もない(ハズ)みたい。