[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

NetBSD を入れてみた


はじめに

長年(といっても6年くらい)、Sun の SPARCStation20(以下 SS20)にインター ネットサーバをやらせていましたが、とうとう HDD が壊れておなくなりに なってしまいました。
幸い、丁度 PC に OpenBSD を入れて代替マシンを用意している最中でした ので(これに関しては
こちら)、実害はあまり ありませんでした。しかし、これでお蔵入りにしてしまうには可哀想です。
というわけで、この間は OpenBSD を入れましたが、今回は NetBSD を入れて みました。
# まだほんとに入れただけの状態ですが…。(^__^;;

0. 環境

雑誌の付録についていた CD-ROM を使用してインストールしました。これに NetBSD-1.5 が入っていましたが、x86 のみ bootable でした。 ブートさせる方法はいくつかあるようでしたが、比較的方法がわかっている ネットワークブートを用いてブートさせました。
よって、ネットワークブートを行うためのサーバが必要になりました。 同サブネット上で比較的自由に触れるマシンが Solaris2.6 の入った Ultra1 でしたので、これをサーバにしました。
というわけで、サーバとターゲットは以下のようになります。

製品名(略称)IPアドレスMACアドレス OS
SS20192.168.0.2008:0:20:20:4:70 これから NetBSD-1.5
Ultra1192.168.0.1割愛 Solaris2.6


1. 前準備

ネットワークブートを行うためには、同サブネット上に以下のサーバが 必要となります。 まず最初に、RARP によって自分の IP アドレスを知ります。次に、ARP を返してくれたマシンに対して TFTP でブートイメージをダウンロードし ます。ブートイメージの名前(パス)はあらかじめ決まっています。 そして、bootparam によって自分のファイルシステムのルートを知ります。 あとは、ルートを NFS で mount できれば、一人前(?)に動き出します。
この辺の動作は、ディスクレスクライアントと同じだと思います。 NetBSD のインストール時には、インストールに必要なものだけを NFS サーバ 上に置き、mount したらインストーラを起動させる(というか勝手にインス トーラが動き出します)ことになるのだと思います。
もちろん、これらを別々のマシンにやらせても何ら問題はないと思います。 (RARP サーバと TFTP サーバは同一である必要があると思いますが。) …が、そんなにマシンを持っていませんので、今回は、これらを前述の Solaris2.6 マシン1台にやらせました。

1.1 rarpd の設定

/etc/ethers(実体は /etc/inet/ethers) に以下を追加します。
ethers というファイルがなければ、/etc に直接作ってもいいと思います し、/etc/inet の下に作ってシンボリックリンクを張ってもいいのでは ないかと思います。

  8:0:20:20:4:70    bsdmachine

NetBSD にインストールするマシン(SS20)の MAC アドレスが 8:0:20:20:4:70 で、マシン名が bsdmachine です。これを列挙します。
もちろん、bsdmachine は、以下のように hosts に書かれている必要があります。

  192.168.0.200   bsdmachine

あとは、in.rarpd を起動するだけです。通常は以下のように起動すればよい と思います。

  # in.rarpd -a

しかし、この Ultra1 は NIC が2枚刺さっています。念のため、インタフェ ースを指定してやるなら、以下のように起動させます。

  # in.rarpd hme 1

これは、hme1 にだけ答えるようにする場合の起動方法です。

1.2 tftpd の設定

/etc/inetd.conf(実体は /etc/inet/inetd/conf) の tftp のエントリの先頭 にあるコメントを外します。

  tftp dgram udp  wait root  /usr/sbin/in.tftpd  in.tftpd -s /tftpboot

そして、inetd に SIGHUP を送り、反映させます。

  # kill -HUP inetdのPID

あとは、boot.net を、/tftpboot の下に置きます。 ファイル名が決まっているので、その名前でとれるようにします。

  # cd /tftpboot
  # cp -p /some/where/installation/netboot/boot.net .
  # ln -s boot.net C0A800C8.SUN4M

ここで、C0A800C8.SUN4M という名前にしていますが、. の前はIPアドレス を16進数で表したもの、. の後はアーキテクチャ名になります。IPX など ですと SUN4C になります。

1.3 bootparamd の設定

/etc/bootparams(実体は /etc/inet/bootparams) に以下を追加します。
bootparams というファイルがなければ、/etc に直接作ってもいいと思います し、/etc/inet の下に作ってシンボリックリンクを張ってもいいのでは ないかと思います。

  bsdmachine  root=192.168.0.1:/export/netbsd/sparc/root

root= の後のIPアドレスは NFS サーバを表します。: の後のパスは mount する場所です。ここに NetBSD のファイルシステムとカーネルを展開して おきます。カーネルは netbsd という名前にしておきます。

  # cd /export/netbsd/sparc/root
  # tar xfz /some/where/installation/netboot/rootfs.tgz
  # zcat /some/where/binary/kernel/netbsd.GENERIC.gz > netbsd

1.4 NFS の設定

BSD な UNIX の場合は /etc/exports に書きますが、Solaris2.x では /etc/dfs/dfstab に書きます。例えば以下のエントリを追加します。

  share -F nfs -o rw,anon=0 /export/netbsd/sparc/root

これだと誰からでも読み書きできてしまいますが、内部なので見逃して ください…。
次に、これを反映させます。

  # shareall -F nfs

そして、mountd と nfsd が動作していることを確認してください。動作 していなければ、/etc/init.d/nfs.server を参考にして起動します。

  # /usr/lib/nfs/mountd
  # /usr/lib/nfs/nfsd -a 16

おそらく次回OS起動時からこれらが立ち上がってくるようになると思い ます。それがいやな方は、後で dfstab に追加したエントリをコメント アウトしておきましょう。

2. インストール

2.1 ネットワークブート

SS20 の電源を入れ、RAM のチェックをしている時に STOP + A を押し、 ネットワークからブートさせます。

  ok boot net netbsd

2.2 インストール抜粋

あとは、適当に進めていけばインストールはできると思います。
しかし、1つ問題がありました。この SS20 には HDD が3台(しかも 1GB) つながっています。しかし、言われた通りに進めると、システムディスク しか disklabel を行ってくれません。
幸い、インストーラは install という sh script で書かれていますので、 一旦 Ctrl + C で止めて、手動で設定しました。
3台はそれぞれ sd0, sd1, sd2 という名前でしたので、sd0 に / と swap, /home を割り当て、sd1, sd2 にはそれぞれ /usr と /var を割り当てる ことにしました。
まず disklabel ですが、以下のように起動します。

  # disklabel -e sd1

すると、エディタ(vi)が立ち上がり、以下のような内容になっていました。 (ここらへんは実は記録していなかったので、インストールが終った NetBSD 上で disklabel を起動させました。よって嘘が交じっているかもしれません。 ご了承ください。)

  #        size   offset   fstype   [fsize bsize   cpg]
    c:  2052288        0  unknown                        # (Cyl.  0 - 2035)

c は全体を表します。ここで、/usr をまるっと割り当てますので、以下の ように h を追加しました。

  #        size   offset   fstype   [fsize bsize   cpg]
    c:  2052288        0  unknown                        # (Cyl.  0 - 2035)
    h:  2052288        0   4.2BSD     1024  8192    16   # (Cyl.  0 - 2035)

fsize, bsize および cpg は、すでにあった 4.2BSD のパーティションを そのまま真似ました。あとはセーブして終了させるだけです。
sd2 も同様ですので、手順は割愛します。
install を再度起動し、sd0 の disklabel が終った時点で、以下のように 聞かれます。ここで sd0d と sd1h, sd2h を追加します。 (これもスクリプトを見て復元していますので、嘘が交じっているかもしれ ません。ご了承ください。)

  The following will be used for the root filesystem:
         sd0a    /

  Device name? [RETURN if you already entered all devices] sd0d
  Mount point? /home
  Device name? [RETURN if you already entered all devices] sd1h
  Mount point? /usr
  Device name? [RETURN if you already entered all devices] sd2h
  Mount point? /var
  Ok to configure sd0b as a swap device? [] y

  You have configured the following devices and mount points:
  sd0a   /
  sd0d   /home
  sd1h   /usr
  sd2h   /var
  sd0b     swap
  
  Filesystems will now be created on these devices.  If you made any
  mistakes, you may edit this now.  Edit? [n] n
  Creating filesystems...
  ...あとは newfs のメッセージが続く…

…という感じで、newfs はインストーラがやってくれました。 あとはたぶんわかると思いますので割愛します。:-)

3. 起動

普通はそのまま立ち上がるのだと思うのですが、NetBSD が仰る sd0 と OpenProm の仰る disk とが違っていたようでして、立ち上がってくれ ません。
片っ端から boot device を確かめていくと、disk1 が sd0 でした。 毎回起動時にこんなことをするのはいやなので、設定しておきました。

  ok setenv boot-device disk1

eeprom コマンドもありますので、こちらでも設定できるのかもしれませ ん。(未確認)

4. その他

4.1 基本設定

FreeBSD と同様、/etc/rc.conf でだいたい設定できます。
デフォルトの設定は /etc/defaults/rc.conf ですので、これから変更したい 設定項目を /etc/rc.conf に書きます。
各サービスなどの起動スクリプトは /etc/rc.d 以下にあります。/etc/rc から、 依存関係に従って(rcorder コマンド)順々に呼ばれるようです。
ホスト名やデフォルトゲートウェイは、それぞれ /etc/myname や /etc/mygate に書いておいてもいいですが、rc.conf に書いておくこともできます。
各インタフェースは、/etc/ifconfig.インタフェース名 に ifconfig の 引数を書いておけば、OS 起動時に設定してくれます。
# この辺は /etc/rc.d/network でやってます。
static な経路を設定したい場合は、自分で無理矢理 /etc/rc.d/network を 改竄してしまいました。まず、network を以下のように変更します。

*** network.0   Fri Nov 24 21:44:56 2000
--- network     Sat Aug 18 11:42:54 2001
***************
*** 131,136 ****
--- 131,145 ----
                route add default $defaultroute
        fi
  
+       # added for static route
+       if [ -f /etc/staticroute ]; then
+               (while read args; do
+                       if [ -n "`eval echo '$args'`" ] ; then
+                               route add $args
+                       fi
+               done) < /etc/staticroute
+       fi
+ 
        # Check if each configured interface xxN has an $ifaliases_xxN variable
        # associated, then configure additional IP addresses for that interface.
        # The variable contains a list of "address netmask" pairs, with

そして、/etc/staticroute に経路を書きます。例えば以下のようにします。

  -net 192.168.0.0 192.168.153.254
  -net 192.0.1.0 192.168.153.253

4.2 ip forwarding

このマシンはインタフェースが複数あるのですが、不思議なことに ip forwarding はされない設定になっています。/etc/rc.d にあるスクリプトを見ても、 誰も設定していません。(inet6.ip6.forwarding は network にあります。)

  # sysctl net.inet.ip.forwarding
  net.inet.ip.forwarding = 0

ルータとして動かすなら、手動で 1 に設定するか、何かのファイルで設定 するような仕組みにする必要がありそうです。

4.3 postfix

NetBSD にはデフォルトで postfix が入ってました。
rc.conf に postfix=YES と書いておけば、OS 起動時に postfix が立ち上 がります。(→ 設定方法はこちら)
# /etc/rc.d/postfix start などでも起動します。(他も同様)

4.4 ipfilter など

これもデフォルトで入っています。
/etc/ipf.conf に設定を書いておいて、rc.conf に ipfilter=YES と書いて おけば、OS 起動時に反映されます。 (具体的な設定方法はこちら)
もちろん、ipmon で syslog にログを飛ばせます。rc.conf に ipmon=YES と 書いておけば、OS 起動時に動き出します。
デフォルトだと -sn というオプションがつきます。-s は syslog 経由、-n はホスト名の解決(逆引き)です。変更したい場合は、rc.conf に ipmon_flags で指定します。
# syslog.conf や newsyslog.conf の設定もしておきましょう。

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Sat Aug 18 15:46:18 2001