トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

LinkStation HD-HLANでNetBSDを試す

NetBSD/sandpointをLinkStation HD-HLAN (HD-H160LAN)を使って、実際に試してみた。そのめも。

はじめに

長らく、LinkStationにて、「玄箱でNetBSDを動かす」版(かわうち版)のNetBSD/sandpointを使ってきて、特に困ったことはなく使えていた

しばらく前、KURO-BOX/HGが手に入ったので、NetBSDを入れてみた。問題なく使えるので、LinkStationは廃止することにした。

それより、2年ほどたち、ふと、LinkStationにKURO-BOX/HGと同じようにインストールできるか試したくなった。以下は、その記録である。

方針

本家のインストールの方法のページのとおり、u-boot化する。

Linux環境を残しておけば、シリアルコンソールは使わないようにできそうなので、そうすることにする。

注意

 一般

機種によっては、本家のインストール解説にある情報ではうまくいかないかもしれない。適宜、各種玄箱hackの情報、特に、玄箱そのものの知識(EMモードの変更方法や通常モードへの戻り方、デフォルトのIPアドレス等)、そして、U-Boot化と、他ディストリビューション化(Debian化とか)の情報を調べて、予備知識をつけよう。

# たとえば、rootのパスワードは、KURO-BOX と KURO-BOX/HG とでは違うし、LinkStationは、HDDはそのままではmountできない。

 Genbako kernel collectionさんのサイト移転

Genbako kernel collectionさんのサイトが移転している。現在は http://genbako.vodapone.com/ のようだ。

世のたくさんのWebページ(NetBSD本家のリンクも含む)は古いほうを向いているので、ちうい。

以下の文中のリンクは、全て新しい方に向けてある。

Debian化 & U-Boot化

 Debian化

下準備

Debian化は、HDDを外した後、適当なNetBSD機につないでおこなう。ここでは、NetBSD/i386をインストールしたノートPC(以下、作業機)につないで行うことにした。

HD-HLANののHDDは、そのままでは、mountできない。どうやってmountするかは、LinkStationでNetBSDを試す参照。

e2fsprogsパッケージもコマンドもつかうので、pkgsrcよりインストールしておく。

システムパーティションの拡大とNetBSDパーティションの作成

システムパーティションが小さすぎるので、拡大する。デフォルトは、

 Partition table:
 0: Linux native (sysid 131)
     start 63, size 256977 (125 MB, Cyls 0/1/32-125/32/17)
 1: Linux swap or Prime or Solaris (sysid 130)
     start 257040, size 514080 (251 MB, Cyls 125/32/17-376/33/17)
 2: Linux native (sysid 131)
     start 771120, size 311805585 (152249 MB, Cyls 376/33/17-152625/22/2)
 3: <UNUSED>

だった。これを変更する。

まず、中身をバックアップする。tarでとっておけばよい。disklabelコマンドで、disklabelパーティションを確認したのち、実行する。(サイズとoffsetで確認する。)通常、eパーティションが、MBRパーティションの先頭である。sd1でみえているとすると、

 # mount -t ext2fs /dev/sd1e /mnt
 # cd /mnt
 # tar czf /path/to/linux.tgz *

次に、fdiskを使って、MBRパーティションを変更する。システムパーティション(0)を大きくする。また、NetBSDパーティションを作成する。以下のように変更した。

 Partition table:
 0: Linux native (sysid 131)
     start 63, size 610407 (298 MB, Cyls 0-37), Active
         PBR is not bootable: All bytes are identical (0x00)
 1: Linux swap or Prime or Solaris (sysid 130)
     start 610470, size 514080 (251 MB, Cyls 38-69)
         PBR is not bootable: Bad magic number (0x70a1)
 2: Linux native (sysid 131)
     start 1124550, size 64260 (31 MB, Cyls 70-73)
         PBR is not bootable: Bad magic number (0xfd23)
 3: NetBSD (sysid 169)
     start 1188810, size 76951350 (37574 MB, Cyls 74-4863)
         PBR is not bootable: Bad magic number (0x6336)
 Bootselector disabled.
 First active partition: 0

一度、diskを抜き差しし、"in-core"なdisklabelをアップデートしたあと、ext3でフォーマットする。また、サイズを小さくした、データ領域(2)も同じくフォーマットしておく。disklabelコマンドで、disklabelパーティションを確認したのち、実行する。(サイズとoffsetで確認する。)

 # /usr/pkg/sbin/mke2fs -t ext3 /dev/sd1e
 # /usr/pkg/sbin/mke2fs -t ext3 /dev/sd1g

さきほど、バックアップした中身を展開する。

 # mount -t ext2fs /dev/sd1e /mnt
 # cd /mnt
 # tar xzpf /path/to/linux.tgz

Debian化

Genbako kernel collectionさんの配布物を使うことにする。

展開する。

 # cd /mnt
 # tar xzpf /path/to/debian-sarge-2.6.17.3-kuroBOX-20060702.tgz

展開後、/mnt/etc/apt/sources.listの変更を行う。(sargeはずいぶん昔にサポートが打ちきられており、アーカイブサイトにしかない。)

 deb http://archive.debian.org/debian/ sarge main contrib
 deb http://archive.debian.org/debian/ sarge-proposed-updates main contrib

/mnt/etc/securettyに一行追加する。(rootでログインできるようにする。)

pts/0

カーネル変更を行う。kernelimage-2.6.25.20-kuroBOX.tgzを使う。(もっとも、HD-HLANはこのままでは、このカーネルを使うことはできない。このカーネルはU-Boot化後に使われる。)

 # cd /mnt/boot
 # tar xzpf /path/to/kernelimage-2.6.25.20-kuroBOX.tgz
 # chown root:root System.map .config vmlinux.bin uImage

modules-2.6.25.20-kuroBOX.tgzも展開しておく。

 # cd /mnt/lib/modules
 # tar xzpf /path/to/modules-2.6.25.20-kuroBOX.tgz

同様に、あとで使うので、http://genbako.vodapone.com/u-boot_loader/から、U-Boot化されたファームウェアをダウンロードし、適当なところに保存しておく。(今回は、/mnt/home直下に保存した。)

全てが終わったら、diskを取り外し、HD-HLANに取り付け、Linuxを立ち上げる。192.168.0.100にtelnetでログインできるはずである。(userid:password = root:root。)

 U-Boot化

Genbako kernel collectionさんに引き続きお世話になる。

U-Boot化されたkernelimage

http://www.genbako.com/uImage/ からダウンロードしようとすると思うが、2.6.25.20はない。実は、kernelimage-2.6.25.20-kuroBOX.tgzの中にすでに入っていたのだ。よって、もうインストールは終わっているはず。

 # ls -l /boot/uImage
 -rw-r--r--  1 root root 1438991 May  3  2010 uImage

よって、別途ダウンロードする必要はない。ただし、シンボリックリンクをつくらないと、U-Bootでbootしないので、それだけはつくる必要がある。

 # cd /boot
 # ln -s uImage vmlinux.UBoot 

U-Bootの書き込み

注意書きをちゃんと読むこと。

適当なところにダウンロードできたら、md5sumでMD5の値をとって、ダウンロード時に壊れなかったかどうかを確認する。.md5のファイルも一緒にダウンロードして、同じdirに保存しておいて、

 # md5sum -c u-boot-hg.flash.md5

とするのが簡単。

次に、いよいよ書き込み。(これを失敗すると、でかい文鎮ができる。)

KURO-BOX/HGでは、EMモードで書き込みを行ったが、HD-HLANは、それができないので、通常のモードで書き込みを行う。

 # cat u-boot-hd.flash.bin > /dev/fl2

しましょう。(ddを使うと死にます。たぶん。)

これで、readme.txtのとおり、netcat(= nc)で待ち受けておけば、u-bootのコンソールがリモートからとれるようになったはず。(ちなみに、NetBSDの場合、netcatは pkgsrcの net/netcat にあるので、インストールしておく。Linuxの各ディストリビューションの場合は、オリジナルのnetcat(= OpenBSD版netcatではない)をインストールしないと、readme.txtどおりのコマンドラインオプションでは動かない。)

HD-HLAHの電源をいったん落とす。

 # shutdown -h now

再度起動して、待ち受けていたnetcatにu-bootのコンソールが出ているかどうかを確認する。

 % nc -v -v -n -u -s 192.168.11.149 -p 6666 192.168.11.150 6666                                             ~
 (UNKNOWN) [192.168.11.150] 6666 (?) open
 
 U-Boot 1.1.4 LiSt 2.1.0 (Sep 21 2006 - 00:22:56) LinkStation / KuroBox
 stdin :   nc
 stdout:   nc
 stderr:   nc
 IDE:   Bus 0: .OK
   Device 0: Model: TOSHIBA MK4018GAS Firm: Q1.02 A Ser#: Z2J12381A
             Type: Hard Disk
             Capacity: 38154.3 MB = 37.2 GB (78140160 x 512)
 Boot in 01 seconds ('s' to stop)...
 Loading 0:1:boot/vmlinux.UBoot
 
 1438991 bytes read
 ## Booting image at 00800000 ...
    Image Name:   Linux-2.6.25.20-kurobox
    Image Type:   PowerPC Linux Kernel Image (gzip compressed)
    Data Size:    1438927 Bytes =  1.4 MB
    Load Address: 00000000
    Entry Point:  00000000
    Verifying Checksum ... OK
    Uncompressing Kernel Image ... OK

telnetでログインし、depmod -aを実行しておくこと。(さらに、apt-get update; apt-get upgradeしておくといいかもしれない。)

問題ないようであれば、shutdownする。

再度パーティションを切り直す(オプション)

U-Boot化できれば、Debian環境に用はない。よって、先頭のext2領域をもっと小さく(数MB程度)にして、再度パーティションを切り直してもよい。

ただし、最近は、HDDの容量も大きいので、今回は行わなかった。

NetBSD化

ここから先は、KURO-BOX/HGでNetBSDを試すとやり方は同じである。ざっとおさらいすると、

  1. NetBSD/i386のカスタムカーネルを作成し、それを使って作業PCを(再)起動する。
  2. NetBSD/i386 -currentのdisklabelコマンドを用意する。
  3. 作業PC上でKURO-BOX/HGのディスクのMBRパーティションをいじって、NetBSDのMBRパーティションを作成する。
  4. 作業PC上でKURO-BOX/HGのディスクにディスクラベルを書く。
  5. 作業PC上でKURO-BOX/HGのディスク(のNetBSDでつかうところ)をフォーマットする。
    • -B (byte-order)オプションを使って、ビックエンディアンにする。
  6. 作業PC上でKURO-BOX/HGのディスク(のNetBSDでつかうところ)をマウントし、NetBSD/sandpointをインストールする。
  7. 作業PC上でKURO-BOX/HGのディスク(のNetBSDでつかうところ)をマウントし、NetBSD/sandpointの初期設定をする。
  8. 作業PC上でKURO-BOX/HGのディスクのディスクラベルがNetBSD/sandpointで扱えるように、NetBSD/i386 -currentのdisklabelで書き直す。
    • -B (byte-order)オプションを使って、ビックエンディアンにする。
  9. KURO-BOX/HGにディスクを取り付け、Linux側をいったん起動し、altbootをLinux側の/boot/altboot.binに置く。
  10. NetBSDが起動できるか試す。問題なければ、常時起動するようにする。

である。ほとんどコピペになるので、割愛。(自分が何をしようとしているか、確認しながら作業しましょう。単純なコピペをやっていると、わけがわからなくなるはず。文鎮ができるかもしれない。)

なお、手元で試している限りでは、NetBSD 7.0 Releaseのaltboot.binではうまくbootできないようだ。NetBSD 6のものだとなんの問題もなく動く。NetBSD 6.1.5のaltboot.binは、http://ftp.NetBSD.org/pub/NetBSD/NetBSD-6.1.5/sandpoint/installation/ にあります。

めも

変更前の、U-Bootのprintenvの出力。

 => printenv
 printenv
 bootargs=root=/dev/hda1
 bootcmd=run bootcmd1
 nfsboot=bootp;run nfsargs;bootm
 bootdelay=10
 baudrate=57600
 autoload=no
 stdin=nc
 stdout=nc
 stderr=nc
 ipaddr=192.168.11.150
 netmask=255.255.255.0
 serverip=192.168.11.149
 ncip=192.168.11.149
 netretry=no
 nc=setenv stdin nc;setenv stdout nc;setenv stderr nc
 ser=setenv stdin serial;setenv stdout serial;setenv stderr serial
 ldaddr=800000
 hdpart=0:1
 hdfile=boot/vmlinux.UBoot
 hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile}
 boothd=setenv bootargs root=/dev/hda1;bootm ${ldaddr}
 hdboot=run hdload boothd
 flboot=setenv bootargs root=/dev/hda1;bootm ffc00000
 emboot=setenv bootargs root=/dev/ram0;bootm ffc00000
 nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
 bootretry=30
 bootcmd1=run hdboot;run flboot
 bootcmd2=run flboot
 bootcmd3=run emboot
 writeng=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4e474e47 1;cp.b 800000 fff70000 4
 writeok=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4f4b4f4b 1;cp.b 800000 fff70000 4
 ubpart=0:3
 ubfile=share/u-boot/u-boot-hd.flash.bin
 ubload=echo Loading ${ubpart}:${ubfile};ext2load ide ${ubpart} ${ldaddr} ${ubfile}
 ubsaddr=fff00000
 ubeaddr=fff2ffff
 ubflash=protect off ${ubsaddr} ${ubeaddr};era ${ubsaddr} ${ubeaddr};cp.b ${ldaddr} ${ubsaddr} ${filesize};cmp.b ${ldaddr} ${ubsaddr} ${filesize}
 upgrade=run ubload ubflash
 ethact=COMET#0
 
 Environment size: 1474/65532 bytes
 

苦労したところ

KURO-BOX/HGでNetBSDを試すと同じだったので、さほど苦労はしていない、かな。しいていえば、最後、altboot.binをつかって、起動させるところで、読み込みには成功するものの、そのあとうんともすんとも言わなくなり、半日をつぶした。結局、altboot.binがなぜか、コピーした際に壊れてしまっているのがわかったので、再度、コピーしなおしたら、うまく動いた、くらい。

りんくしゅ

あれこれ参考になります。

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2016年02月03日 00時15分12秒