AlphaStation 800 5/333

$Id: asv800.html,v 1.7 2004/01/17 06:05:19 aamine Exp $

購入: 2003-07-10

 

スペック

CPU Alpha 21164A-2 (EV56) 333MHz
L2 cache 2MB
メモリ EDO 384MB (registered ECC 3.3V DIMM 64MBx4 + 32MBx4)
SCSI controler Qlogic ISP 1040B (UltraWide SCSI)
RAID controler Mylex DAC960PU (UltraWide SCSI, 3 channels)
HDD Seagate ST34371WC (UltraWide SCSI, 4.1GB)
HDD Quantum ATRAS II (UltraWide SCSI, 4.1GB)
CD-ROM Toshiba XM-5701TA
ネットワーク DEC DE500-AA (DS21140A)
ビデオアダプタ S3 Trio 32/64
拡張スロット 64bit PCI × 1, 32bit PCI × 3, EISA × 3
その他の I/O シリアル × 3、パラレル × 1、外部 SCSI

またしてもメモリがレアもの。 まあ専用品よりマシだけど。 容量も 128MB じゃ足りないので最低 512MB くらいは積みたいところ。

そして何と言っても今回の目玉はハードウェア RAID。 RAID いいよねー。

ペデスタル匡体

 

AlphaServer と言えばペデスタル。 紺色の匡体と相俟って強烈な萌え度です。

ちなみに ASv800 の HDD マウンタはちと特殊だ。 他の AlphaServer 群は SBB という箱みたいなやつを使うのだけど、 なぜか ASv800 だけは専用品を使う。

中身

意外なほどスッキリとしたデザインが特徴。 普通のマシンで最もゴチャゴチャの原因となるドライブ群 (のケーブル) が匡体前面に整頓されているため、 メインボードまわりは異様にきれいだ。

CPU はドーターボードに載っており、 直にハンダ付けされているので変更は不可能。

奥に見えてるのがメモリスロットで、スロットは全 8 本。 下の 4 本がバンク 0、上の 4 本がバンク 1。 使用モジュールは registered ECC の 3.3V EDO DIMM で 最大 2GB までだったかな。

CPU ボードの下にちょっとだけ見えてるのが RAID ボード。 それから全然見えないけども RAID 板の上には PCI に DE500 がささっており、 メモリスロットの右上あたりにはオンボードの Qlogic ISP1040B がある。

OS

OS は諸般の事情から NetBSD に決定。 Alpha にももう慣れてきたからたいしたことはなかろう―――

と思ったのが甘かった。全く甘かった。全然甘かった。 ごく短い Alpha 歴ではあるが、 AlphaServer 800 のインストールは 史上最悪のハマりまくりコースに突入したのであった。

はまった点

と、終わってから並べて書いてみるとたいしたことはなさそうだが、 「メモリの刺しかたが間違ってた」 「RAID の設定がわからない」 「インストーラが RAID ディスクを見付けられない」 のコンボはかなり激烈に効いた。 この三つが重なると、何がおかしいのかさっぱりわからないのだ。 しかも「CD-ROM が使えない」「Linux が落ちる」の二点から、 ついついハードウェア不良を疑いたくなる。 とどめに「シリアルが普通じゃない」ことからシリアルコンソールが使えず、 つまりコピー&ペーストが使えないので、型番などを目で確認するしかない。 これも非常にストレスがたまる原因であった。

以上の点をまとめておくことにする。

ASv800 のシリアル

ASv800 のシリアルは普通の RS232C ではない。 DEC MMJ (通称「きしめん」) というディファレンシャル形式のシリアルラインを使っている。 こいつはコネクタの形状も電気的にも互換性はない。 パソコンの RS232-C コネクタにつなぐには、 hp から MMJ / RS232C 変換コードを買う必要がある。 http://www.compaq.co.jp/service/c-express/catalogs/network/netcable.html の ED-H8571-J がそれっぽい。

メモリモジュール

ASv800 ではメモリは 4 枚一組で刺す。 スロットは 8 本あって、上側 4 本がバンク 1、下側 4 本がバンク 0 である。 そしてメモリの多いほうをバンク 0 に刺さないといけない。 従って、片方のバンクにしかメモリを刺さないときは、 「下」側の 4 本に刺さないといけない。 普通は上下逆だろう……とボヤいても後の祭りである。 マニュアルはちゃんと読みましょう。

で、まずこれではまった。 なんで買った状態で上側にだけ刺さってますか? 間違いなく店では確認してないんだなこれは。

しかも最悪なのが、メモリの刺しかたを間違っていると RAID でエラーが出るのだ。こんなふうに。

waiting for dra.0.0.12.0 to poll....
waiting for dra.0.0.12.0 to poll....
waiting for dra.0.0.12.0 to poll....
waiting for dra.0.0.12.0 to poll....
waiting for dra.0.0.12.0 to poll....

で最後に「ディスクがおかしい」というエラーメッセージが出る。 これには本当に参った。

Qlogic 1040 の設定

ASv800 はオンボードで Qlogic ISP 1040B が付いてくる。 こいつの細かいパラメータは ARC から動かすユーティリティを使って設定できる。 ftp://ftp.digital.com/pub/DEC/Alpha/firmware/archive/utility/ にある eeromcfg がそれだ。 これを FAT なフロッピーにコピーしておき、 ARC を起動 (SRM から arc と打つ)。でもって "Run Maintainance Program" だかなんだかを使ってプログラム名 「A:\eeromcfg」を指定すればよい。

おれが買った ASv800 は (当然) 中古で、 かなり SCSI のパラメータをいじった形跡があった。 そこで load default とかなんとかで全部まっさらに初期化することにした。

ちなみにデフォルトを Ultra SCSI か Fast SCSI にできるのだが、 RAID ボードが別に入っているとどうせ HDD は Qlogic の下にはないわけだから、 Fast SCSI をデフォルトにしておけばいいようである。

RAID の設定

ハードウェアの RAID アレイにインストールするときは、 まず最初にハードウェア RAID の設定をしなければならない。

と簡単に書いているが、こんな単純なことがわかるまでに何時間かかったことか。 でもって、どうやって設定するかが肝である。 結論から言うと、Mylex の RAID ボードに対しては rcu (RAID Configuration Utility) というユーティリティを使う。 これは StorageWorks というソフト群の一部であるらしい。

rcu は ftp://ftp.digital.com/pub/DEC/Alpha/firmware/v6.5/swxcrmgr/ に置いてある。ra200rcu.exe が本体だ。 リリースノートその他もいっしょに置いてあるので見とくこと。 そこにあるファイルはどれもかなり重要である。

rcu は ARC プログラムなので、FAT なフロッピーから起動する。 ファームウェアを ARC に切り替え、 "Run Maintainance Program" だかなんだかを使ってプログラム名 「A:\ra200rcu」を指定すればよい。

rcu 自体はメニュー形式の小さいプログラムなので勘でさわっていけば なんとかなるだろう。思い出しつつ簡単にまとめておくと以下のようになる。 まず既存のディスクグループを壊し (cancel)、 新しいディスクグループを作り、(create) 編成し (arrange)、 論理ディスクを作り (create logical disk)、初期化する (initialize)。 全ディスクを同時に初期化するのがかなりかっこいい。

で、最後まで終わったらハードの電源スイッチを切ってリセットする。 そうすると SRM からはこんな風に論理ディスクが見えるようになる。

>>>show dev
dka400.4.0.5.0        DKA400   TOSHIBA CD-ROM XM-5701TA  0557
dra0.0.0.12.0         DRA0              2 Member RAID 1
dva0.0.0.1000.0       DVA0
mka500.5.0.5.0        MKA500                      TLZ10  02ab
ewa0.0.0.11.0         EWA0
pka0.7.0.5.0          PKA0                SCSI Bus ID 7  5.57

これは SRM からは普通のデバイスと同じに扱えるので、 boot dra0 などとしたりできる。

NetBSD の手動インストール

そしてやっと OS のインストールにかかれるわけだ。 インストールするのは NetBSD 1.6.1 である。

しかし 2003-07-15 現在、NetBSD/Alpha のインストーラは ハードウェア RAID ドライブを見付けてくれない (ちなみに FreeBSD/Alpha でも同じ)。 よってインストーラには頼らず自分でインストールする必要がある。 以下、その手順を説明する。 大雑把に以下のような手順を踏む。

NetBSD の手動インストールに関しては以下のページを参考にした。

デバイスファイルの用意

まずは RAID ディスクのためのデバイスファイルを作る。 デバイスナンバーの情報がいろいろ錯綜しているのだけども、 他の NetBSD/Alpha を見た結果、 ブロックデバイスが ld0 で 17,n、 キャラクタデバイスが rld0 で 59,n だとわかった。

# cd /dev
# mknod ld0a b 17 0
# mknod ld0b b 17 1
# mknod ld0c b 17 2
# mknod ld0d b 17 3
# mknod ld0e b 17 4
# mknod ld0f b 17 5
# mknod ld0g b 17 6
# mknod ld0h b 17 7
# mknod rld0a c 59 0
# mknod rld0b c 59 1
# mknod rld0c c 59 2
# mknod rld0d c 59 3
# mknod rld0e c 59 4
# mknod rld0f c 59 5
# mknod rld0g c 59 6
# mknod rld0h c 59 7

ディスクラベルを作る

以前に他の OS で使われていた HDD をそのまま使うと変なトラブルに あったりすることがあるらしい。用心のためにディスク先頭を確実に クリアしておくことにする。

# dd if=/dev/zero of=/dev/rld0c bs=1m count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.282 secs (3718354 bytes/sec)
# 

rld0c がディスク全体を表すので、 これでディスク先頭の 1 MB をゼロクリアできる。

続いてディスクラベル (i386 で言うパーティションテーブル) を作りなおす。

# disklabel -i -I ld0
ld0: no disk label
partition>

と、プロンプトを出してくる。 「?」をたたくとヘルプが出るのでそれを見たり、 前述のページを見たりしながらパーティションを切る。

今回はとりあえず c を全体に割り当て、 通常パーティションは a のみ、 b をスワップにした。 4GB ならこんなもんだろう。

ファイルシステムを作る

# newfs /dev/rld0a

スワップ領域は初期化しなくていいのかな? いいらしい。

ブートローダをインストール

ここは Alpha なので全然話が違う。 ソースコードとかを見た結果、次のようにするらしい。 参考にしたページと引数の順番がおもいきり逆だった。

# installboot -v /dev/rld0c /usr/mdec/bootxx_ffs

SRM はファイルシステムを理解できないので、 一次ブートローダをディスクの先頭にインストールしないといけない。 つまり rld0c でなければならない。

さらにルートファイルシステムをマウントして 二次ブートローダをインストール。

# mount /dev/ld0a /mnt
# cp /usr/mdec/boot /mnt/boot

ネットワークの初期化

今回は FTP インストールをやるので、 まずネットワークを設定しなければならない。 このへんは余裕だな。

# ifconfig tlp0 192.168.1.41/24 up
# route add default 192.168.1.1
# echo 'nameserver 218.219.144.1' > /etc/resolv.conf

バイナリセットのインストール

まずバイナリを FTP 経由で入手する。

# cd /mnt
# mkdir sets; cd sets
# ftp core.ring.gr.jp
.....
# cd ..
# for i in sets/*.tgz; do tar zxpf $i; done
# rm -rf sets

残り

ここまで来ればもうほとんど終わったも同然だ。 まずデバイスファイルを作り、

# cd /mnt/dev
# ./MAKEDEV all

fstab を作り、

# cat > fstab
/dev/ld0a	/	ffs	rw	1 1
/dev/ld0b	none	swap	sw	0 0
/kern		/kern	kernfs	rw	0 0
^D

シャットダウン、リブート。

# cd /
# umount /mnt
# reboot

……うわ、dva0 (フロッピー) からリブートしやがった。 Ctrl-C で止めてやりなおし。

>>>boot dra0

うーむ、ブートは成功したが、ルートファイルシステムを聞かれてしまった。 SRM から渡された RAID 0 12 0 0 をデバイスファイルに変換できてない模様。 カーネルをリコンパイルすればいいのかなあ。 まあとりあえずは手動で打ちこむのでいいとしよう。

OS の設定

あとは NetBSD 一般の話が通用する。

まあこの後は人によるだろうけども、 おれの場合はまず真っ先に sshd を動かし、リモートから入りなおす。 続いて sudo, zsh, autoconf, automake をパッケージで入れ、 GNU ls と ruby をコンパイルする。 あとは CVS で自作のスクリプトなんかをチェックアウトすれば環境は完成。 実にお手軽な人である。

カーネルコンパイル

残る懸念はルートデバイスを自動検出してくれないことだ。 これはカーネルコンパイルのときに ld0a を決め打ちにしてしまうことで解決する。 コンパイルの手順は NetBSD のドキュメントでも見てもらうとして、 AlphaServer 800 用の設定だけ置いておく。

一点ひっかかったのが apecs の項目。 apecs ドライバを削ってしまうと、最後の最後で

ld -N -Ttext fffffc0000300000 -e __transfer -G 4 -S -o netbsd ${SYSTEM_OBJ} vers.o
dec_1000a.o: In function `dec_1000a_cons_init':
dec_1000a.o(.text+0x170): undefined reference to `apecs_configuration'
dec_1000a.o(.text+0x180): undefined reference to `apecs_init'
dec_1000a.o(.text+0x184): undefined reference to `apecs_init'
*** Error code 1

Stop.
make: stopped in /usr/src/sys/arch/alpha/compile/ASV800

と、なってしまう。

apecs というのは EV4 のメインロジックチップのドライバで、 AlphaServer 800 には存在しない。しかし NetBSD では AlphaServer 800 は AlphaServer 1000 と同じ扱いなので、 AlphaServer 1000 に存在する可能性のあるデバイスのドライバは AlphaServer 800 用のカーネルでも用意しなければならないのである。