Featured image of post DEC AXPvme230で遊ぶ #6 NetBSDをネットワークブートする

DEC AXPvme230で遊ぶ #6 NetBSDをネットワークブートする

前回でBreakout moduleのエラーも無くなり足回りが安定になりました。今回はネットワークを接続し、いよいよOSのネットワークブートを試してみます。

ターゲットOSの選定

Alpha CPUをサポートしているOSは以下のものがあります。

  • Tru64 UNIX(旧名:Digital UNIX / DEC OSF/1)
  • OpenVMS(VMS)
  • Windows NT (3.51 / 4.0)
  • Linux
  • NetBSD / FreeBSD / OpenBSD

やはりいろいろ試すにはオープンなOSが良さそうです。その中でもNetBSDは移植性が良いと聞いています。まずはNetBSDをターゲットOSとしました。

AUIポートにMAUを接続する

まずはAXPvmeのAUIポートに問題がないかを確認します。
AUIポートに10BASE-TのMAU(Medium Attachment Unit)を接続し、ネットワークに接続したところMAUのLINKが点灯しました。

AUIポートにMAUを接続

実際にパケットの送受信ができているかをSRMで確認したところ、TX/RXのパケット数がカウントされているようです。

AUIポートは正常に動作していると確認できました。

実験用ネットワークの構築

実験用ネットワークとしてスイッチを1つ準備して、新たにサブネットを作成しました。 このネットワークにはDHCP/TFTP/NFSサーバが動いているUbuntuデスクトップとAXPvme230だけを接続しています。

/etc/hosts

192.168.99.1     ubuntu      # Ubuntu 22.04 LTS Desktop (Bootp, TFTP, NFS)
192.168.99.10    axpvme      # AXPvme230 (NetBSD)

UbuntuデスクトップにLANポートが1つしかなかったので、USB3.0にLANアダプタを接続しスイッチに接続しました。

実験用ネットワークのスイッチ

DHCP/TFTPサーバの構築

ネットワークブートを行うためにはBOOTPまたはDHCPサーバーとTFTPサーバが必要です。
今回はDnsmasqを使用し、設定ファイルは以下のようにしました。

/etc/dnsmasq.conf

interface=enx6084bd485c85
bind-interfaces
port=0
dhcp-range=192.168.99.10,192.168.99.50,255.255.255.0
dhcp-host=00:00:f8:25:76:fc,192.168.99.10
dhcp-boot=netboot
dhcp-option=17,/export/client/root
enable-tftp
tftp-root=/srv/tftp

TFTPサーバーのルートにNetBSD公式サイトからダウンロードしたnetbootを置きます。

$ ls -l /srv/tftp
total 64
-rw-r--r-- 1 root root 61952 Jun 22 11:00 netboot

次にdnsmasqを起動します。

sudo systemctl start dnsmasq
sudo systemctl status dnsmasq

これでAXPvme230はDHCPでIPを割り当ててもらい、その後TFTPサーバにあるnetbootを読み込んでネットワークブートができるはずです。

NFSサーバの設定

netbootはNFSサーバーにあるカーネルファイルを読み込んでNetBSDが起動します。
NFSサーバーは当初はQNAPを使おうと思ったのですが、QNAPもLANポートが1つしかなかったので、Ubuntu DesktopにNFSサーバーを設定しました。 NFSサーバの設定は/export/clientディレクトリをNFSでアクセスできるようにしました。

/etc/exports

/export/client 192.168.99.0/24(rw,sync,no_root_squash,insecure,no_subtree_check)

ファイルシステムの作成

NetBSDのファイルシステムをNFSサーバのexportディレクトリに準備する必要があります。 NetBSD/alphaのバイナリセットにあるbase.tgz、etc.tgz、kern-GENERIC.tgz をダウンロードして/export/client/rootに展開します。

sudo mkdir /export/client/
sudo mkdir /export/client/root
tar -xvzpf base.tgz -C /export/client/root
tar -xvzpf etc.tgz -C /export/client/root
tar -xvzpf kern-GENERIC.tgz -C /export/client/root
sudo mkdir /export/client/root/kern
sudo mkdir /export/client/root/swap
sudo dd if=/dev/zero of=/export/client/swap bs=4k count=4k
sudo mv /export/client/root/usr /export/client/usr

展開したファイルシステムはデバイスファイルが空の状態なので、VirtualBoxにインストールしたNetBSDからこのNFSサーバーにmountして、MAKEDEVを実行することでデバイスファイルを作成しておきます。

cd /dev
/bin/sh MAKEDEV all

ファイルシステムが完成するとこのようなディレクトリになります。ルートディレクトリにあるnetbsdがカーネルファイルです。

$ ls -l /export/client
total 16396
drwxr-xr-x  2 root root     4096 Jun 22 16:56 home
drwxr-xr-x 18 root root     4096 Jun 22 20:46 root
-rw-r--r--  1 root root 16777216 Jun 22 16:34 swap
drwxr-xr-x 11 root root     4096 Dec 16  2024 usr
$ ls -l /export/client/root
total 29000
drwxr-xr-x  2 root root     4096 Dec 16  2024 altroot
drwxr-xr-x  2 root root     4096 Dec 16  2024 bin
drwxr-xr-x  9 root root    36864 Jun 22 16:49 dev
drwxr-xr-x 30 root root     4096 Jun 22 16:42 etc
drwxr-xr-x  2 root root     4096 Jun 22 16:33 kern
drwxr-xr-x  3 root root     4096 Dec 16  2024 lib
drwxr-xr-x  3 root root     4096 Dec 16  2024 libdata
drwxr-xr-x  5 root root     4096 Dec 16  2024 libexec
drwxr-xr-x  2 root root     4096 Dec 16  2024 mnt
-rwxr-xr-x  1 root root 14805376 Dec 16  2024 netbsd
drwxr-xr-x  2 root root     4096 Dec 16  2024 rescue
drwxr-xr-x  2 root root     4096 Jun 22 16:33 root
drwxr-xr-x  2 root root     4096 Dec 16  2024 sbin
drwxr-xr-x  2 root root     4096 Dec 16  2024 stand
drwxr-xr-x  2 root root     4096 Jun 22 16:34 swap
drwxrwxrwt  2 root root     4096 Dec 16  2024 tmp
drwxr-xr-x 24 root root     4096 Dec 16  2024 var

他にもクライアント側の設定も必要になりますが、まずはカーネルを起動するところまで試したいのでここまでにしておきます。

ネットワークブートの実行

いよいよネットワークブートを実行します。SRMから以下のように入力します。

>>> boot ewa0

順調にネットワークブートが進んでいきます。

ネットワークブート中

しかし、カーネルが起動した途端に停止してしまいました。

カーネルが起動しない

メッセージをよく見ると、AXPvme 64はサポートされていないと表示されています。

NetBSDの公式サイトのドキュメントをよくみたところAXPvmeは未サポートであることがわかりました。 さすがにAXPvmeは一般的な機種ではないからでしょう。

まとめ

今回はネットワークブートの環境構築およびNetBSD/Alphaのnetbootの動作確認ができました。
カーネルも起動はしたもののそのままでは動かずAXPvme用のポーティングが必要のようです。
Alpha CPUは64bit RISCプロセッサであり、これまで経験してきたm68kやV53とは桁違いに複雑です。
しかし、すでにNetBSD/Alphaでは多数のAlpha CPU搭載機種がサポートされていますので、これらの情報を参考にしてAXPvmeへのポーティングにチャレンジしてみます。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。