i386マシンを利用したNetBSD/Cobaltの導入

2000/12/06にリリースされたNetBSD 1.5において、新規に正式アーキテクチャとして認められたもののなかに Cobalt (Qube or RAQ)があります。それを記念して (?)i386マシンを利用したNetBSD/Cobaltのインストール方法についてまとめてみようと思います。

[免責] なお、この文書に従って操作した結果、ハードウェアまたはソフトウェアに恒久的、一時的な損害を被ることがあっても、筆者は責任をとれませんのであしからす。(匡体を空けるとCobaltの保証がうけられなくなることにも注意のこと)


変更履歴


用意するもの

Linuxマシンにて行なうこと

ここでは、インストールのためのベースマシンとしてi386 Linuxを想定しています。もしWindowsマシンしかないような場合にはPlamo Linuxのインストール用FDのようなシェルが起動できていろいろできるFDを利用することもできます。(が、linuxマシンぐらいありますよね?)
  1. とりあえずNetBSD/CobaltのバイナリをGetしておきます。バイナリはNetBSD (Japan)に一覧のあるftpサイトのNetBSD-1.5/cobalt/binary/setsディレクトリにあります。../kernel/netbsd.GENERIC.gz、kern.tgz、base.tgz、comp.tgz、etc.tgzぐらいは必須ですが、misc.tgz、man.tgz、text.tgzなどもかなり必要です。gamesやX関係のものは好みでどうぞ。Xのクライアントもちゃんと使えますので。
  2. ext2fsパーティションの作成するため、導入予定のHDDをi386マシンに接続してブートします。このext2fsのパーティションはNetBSDカーネルをブートさせるために必要です。というのは、CobaltのBIOSは第一パーティションの/boot/vmlinux.gz をメモリにロードし、起動するからです。カーネルの名前は違うこともあります (vmlinux_raq-2800.gzとか) ので自分のCobaltで確認してください。また、カーネルはgzippedされていなくてはならず、ext2fsのバージョンは1.2である必要があります。
  3. 普通にfdiskして基本パーティション1と基本パーティション2を作成します。基本パーティション2はNetBSDで使いますので、パーティションのタイプはa9 (NetBSD)にしておいてください。基本パーティション1は最小限でもいいのですが、今回はここにNetBSDのバイナリを置くことを予定していますのでちょっと大きめのほうがお勧めです。私は512MBとしました。あと、ディスクのジオメトリを記録しておいてください。
  4. mke2fsします。前述のようにext2fs 1.2である必要がありますので、カーネル 2.2.x以降のディストリビューションを使用しているときは、
    mke2fs -r 0 -O none /dev/hda1
    
    としてください。(/dev/hda1は適当に読みかえてください。しかしこれでどれだけ苦労したことか... (涙) )
  5. mke2fsしたパーティションをマウントしてください。(/mntにマウントしたと仮定します)
  6. /mnt/boot、/mnt/usr/games、/mnt/binaryのディレクトリを作成します。
  7. カーネルを転送します。netbsd.GENERIC.gzを/mnt/bootへコピーします。また cd /mnt/boot; ln netbsd.GENERIC.gz vmlinuz.gzとして正しい名前でリンクを作成しておきます。カーネルのコピーは cp netbsd.GENERIC.gz /mnt/usr/games/.dougとしてもう一つつくっておくと、非常時にこちらのカーネルからブートすることもできます。(最後のtips参照
  8. 全てのNetBSD/Cobaltバイナリのtgzを/mnt/binaryにコピーします。

Linuxマシンにて行なうこと (2)

ファイルの転送まで済んだところで、NetBSD/Cobaltの設定ファイルを展開、修正しておきます。始めてのブートのときにネットワークが使える状態にしておくことが目標です。
  1. cd /mnt; tar xzpf binary/etc.tgzとして、/mnt/etcにNetBSD/Cobaltの設定ファイルを展開します。
  2. /mnt/etc/defaults/rc.confを修正します。本当は修正したい部分の内容を/mnt/etc/rc.confにコピー、修正するのが正しいようですが、面倒なので (^^; 直接修正してしまします。修正部分と意味は以下のとおり。
  3. /mnt/etc/rc.confを修正。rc_configured=NOをrc_configured=YESに変更します。変更しないと設定がおわっていないということでシングルユーザモードで起動してしまいます。
  4. /mnt/etc/ifconfig.tlp0を作成します。内容は
    192.168.0.2 netmask 0xffffff00 media autoselect
    
    となっています。一目瞭然でいうまでもないですが、ホストのIPとネットマスクを環境にあわせて作成してください。
  5. /mnt/etc/resolv.conf。
    nameserver 192.168.0.1
    search domain.name
    
    のように、DNSのIPとドメイン名を設定してください。
  6. sshを使用したいときは/mnt/etcにssh_host_dsa_key、ssh_host_dsa_key.pub、ssh_host_key、ssh_host_key.pubを用意しておいてください。
  7. telnet等を使用したいときは/mnt/etc/inetd.confを修正しておいてください。

NetBSD/i386にて行なうこと

次にリブートしてNetBSD/i386を起動します。おそらく大抵の方はLinuxとNetBSDのデュアルブートの環境なんて持っていないと思いますので、NetBSDインストール用のFDを用意しておいてそれを利用します。FTPサイトのNetBSD-1.5/i386/installation/floppyディレクトリにあるboot1.fsとboot2.fsを利用します。(ところで、私のノートはNetBSDとLinuxのデュアルブートです。Windowsはなし。)
FDは用意できましたか。ではFD1をいれてリブートしてください。
  1. 要求されたら2枚目のFDを入れてリターンキーを押します (^^;
  2. インストーラを使用してfdisk、disklabelへとすすんでいきます。まずデバイスの選択ですが、HDDがhdaだったならwd0、hdbだったならwd1 (以下同じようになる) を選択します。ここではwd0としておきます。
  3. ディスクジオメトリ確認 (もちろんLinuxでfdiskしたときの値と一致させておいてください)、ディスクの一部を使う、と進みます。
  4. 次にfdiskの画面になるはずですが、既にLinuxで分割していますので、特にやることはありません。ただ、ext2fsの領域のスタートセクタ(多分63)と大きさを書きとめておいてください。ほかの単位で表示されているときはメニューのeで選択しなすのがいいでしょう。
  5. BIOS関連でいろいろ言われるかもしれませんが無視、ブートセレクタ関係はなしを選択。
  6. ディスクラベルの作成です。私の場合、wd0a (/) を2048MB、wd0b (swap) を128MB、wd0f (/home) を残り全部としました。また wd0e (/stand)には、先ほど書きとめたext2fsのスタートセクタと大きさを設定しておき、後にマウントできるようにしておきます。wd0eはとりあえずタイプとしてunused、マウントポイントなしにしておきます。disklabelの使い方は、はっきりいって始めて使うときには難物ですが、いぢっているうちにだんだん判ってくると思います。
  7. 終了して続行を選ぶと勝手にnewfsしてくれます。
  8. newfsが終了したところでCtrl+Cを押しシェルに戻ります。
  9. disklabel -i wd0としてwd0eを修正しておきます。プロンプトからeでタイプの設定ができますので、Linux Ext2とします。スタート位置と大きさはReturnキー連打でそのまま設定します。W、それからyで書きこみします。(Qで終了)
  10. mount -t ext2fs /dev/wd0e /mnt; mount /dev/wd0a /mnt2でそれぞれマウントします。
  11. cd /mnt2
  12. tar xzpf /mnt/binary/kern.tgz; tar xzf /mnt/binary/base.tgz; ... と全部のバイナリを展開します。
  13. /mnt/etc/のうち、先程修正したものを/mnt2/etc/にコピーします。
  14. cd /mnt2/devして、./MAKEDEV allします。
  15. 終わりです。syncしてシャットダウンします。電源を切ったらHDDをはずしてください。

Cobaltにて行なうこと

いよいよCobaltに接続します。匡体をあける覚悟はできていますか?
  1. 匡体をあけ、HDDをとりだし、あたらしいHDDをとりつけます。(簡単に固定しておきます。がっちり固定するのはあとまわしにするのがいいでしょう)
  2. RS232Cのリバースケーブルで端末エミュレータを継ぎます。115200bps、ハードフロー制御ぐらいが肝。
  3. 祈りつつ電源ON
  4. カーネルメッセージがシリアルから出力され、各種デーモンが起動してlogin: プロンプトが表示されます。(とか言いきっていますが、どこか抜けているところがあれば途中でとまるでしょう。そのときはazure@fan.gr.jpにメール下さい)
  5. rootでログイン。パスワードを設定。おそらく既にネットワークも使えるはずです。とはいえ、telnetを使ってrootでログインはできませんので適当にユーザを作成してから確認してみてください。sshはPermitRootLogin yesになっていますのでrootでもログインできるはずです。(パスワード無しでは駄目かも)
  6. また、/etc/groupのwheelにsuを使わせたいユーザを登録します。
  7. ハードの時計をUTCに設定。cd /etc; ln -s /usr/share/zoneinfo/Japan localtime (ハードの時計をJTCにして正しい時間を表示させるにはカーネルの再構築が必要です)
  8. これで終了です。うまくいかないときはもとのi386マシンに継ぎなおして再設定します。この文書のとおりの設定なら、(ディストリビューションによっては) /dev/wd0aはLinux から mount -t ufs -o ufstype=44bsd /dev/hda5 /mntでマウントできるはずです。readonlyでしょうが役にたつかもしれません。

おまけのtips


多分抜けはないと思うのですが、間違い等あればazure@fan.gr.jpまでお願いします。