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

LinkStation HD-HLAN(v2)でDebianを試す

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

なお、この文書で扱うのは、buffalo.nas-central.orgのいう「HDHLAN MIPSel (LS2)」です。

はじめに

この間、KURO-BOX/HGが手に入ったので、KURO-BOX/HGでNetBSDを試したりLinkStationで試したりしてきた。

随分と前、故障したLinkStationをもらってきた。PPC版とおもいきや、開けてみるとMIPSel版だった。NetBSD化したかったのだが、NetBSDは公式には移植されていないので、u-boot化とDebian化を行うことにした。

注:なお、記憶と手書きメモをもとに、この文書は作成されたので、勘違い等あるかもしれません、その前提で、読んで下さい。文鎮化する前に、LinkStation改造の基礎知識を、Google大明神のおつげをもとに、つけてから読むとよいと思います。

注:この文書のとおりにいきなりやろうとしないで、何をやっているのか、ざっと読んでから、作業したほうがよいと思います。(失敗が減るでしょう。)

U-Boot化 & Debian化

 方針

原則、LinkStation HD-HLAN v2用のU-Bootを配布されている、shihsungさんという方の『Convert to Lenny』のとおりに進めていく。

上記文書には番号がふってあるので、その番号を参照しつつ、進めていくことにする。

 作業環境の準備 (1.)

原文では、OpenSUSE 11.1 x86_64のVM環境で作業を行っている。自分は、別のノートPC(以下、作業PC)に、Debian jessie i386環境を用意し、そこで作業することにした。

また、原文では、NFSサーバ等も、OpenSUSE上で準備しているが、自分は、別のサーバ(KURO-BOX/HG,NetBSD/sandpoint)環境で、NFSサーバとtftpサーバを用意することにした。

原文では、Sambaもインストールして用意しているが、使わないので、用意しなかった。

IPアドレスは、対外接続できる環境のIPアドレスが作業PCについているが、それとは別に、原文どおりのIPアドレスを別途作業PCにつけた。(つまり、作業PCが192.168.1.100、インストールしようとしているHD-HLANには192.168.1.200。)NFSサーバ兼tftpサーバにも同じサブネットでIPアドレスをつけた。(以下、192.168.1.202とする。)Debian lenny環境では、IPアドレスを複数降った場合、通信に使うソースアドレスが、最初につけたものを使おうとするので、そのIPで外部接続できないのであれば、つける際に、scopeを変更するとよい。以下のような感じ。

% sudo ip addr add 192.168.1.100/24 dev eth0 scope link

 ELDK 4.1 mips-2007-01-21.iso for mips_4KCleのインストール (2.)

公式はどこなのかはわからなかったが、http://ftp.denx.de/pub/eldk/4.1/mips-linux-x86/distribution/ をみて、http://ns.denx.de/pub/eldk/4.1/mips-linux-x86/iso/ から、ダウンロードした。

作業PCへのインストールはほぼ原文どおりに行った。

# mount -o loop mips-2007-01-21.iso /mnt
# cd /mnt
# install -d /opt/eldk/mips-2007-01-21 mips_4KCle
# umount /mnt

原文によれば、インストールが止まることがあるから、その止まったrpmインストールのプロセスを殺して、再実行しろ、とあったが、特に止まること無く、インストールできた。

 インストールするソースコードの準備 (3.)

作者様が用意してくれているバイナリはありがたく使うことにした。よって、以下のソースをGoogle大明神のお力で、取得し、作業PCに用意した。

この他にも別途ある。個々に説明する。

 NFSサーバやtftpサーバの準備 (4.)

先に書いたとおり、既存のサーバを用いたので、原文どおりのIP空間(192.168.1.0/24)のIPをサーバに追加で付けた、くらい。

NetBSDを用いる場合?の注意としては、u-bootのnfsrootは、UDPなので、TCP Onlyにしている人はUDPも許可することがいるのと、IPv4で設定するので、NFSはIPv4を話すようにしないといけない。あとは、アクセス制限を書けている人は、とりあえず、192.168.1.200と192.168.1.100は許可が必要。(自分は、192.168.1.0/24を許可した。/etc/exportsは以下のような感じ。)

/tftpboot -maproot=root -alldirs -network 192.168.1.0 -mask 255.255.255.0

 環境変数の設定 (5.)

% export ARCH=mips
% export PATH=/opt/eldk/mips-2007-01-21/usr/bin:$PATH
% export CROSS_COMPILE=mips_4KCle-

sudoを使ったり、su -したり、一般ユーザだったりと、したとき、この環境変数が消えてしまうことがある。作業PC上での作業前には、必ず入っていることを確認すること。(下記の作業手順内には、暗黙の了解として、その都度書かれていない。)

 utelnetdのビルド (6.)

しなかった。『Convert to Lenny』のページ下部にある、作者様提供のutelnetdを使用した。

 HD-HLANのファームウェアに、utelnetdをインストールして動作するようにする (7.,8.)

しなかった。手順としては、以下のように行った。

まず、単純に、最新のファームをインストールした。インストール方法は、HDDは故障しており使えなかったので、手元の使っていない、3.5インチPATAのHDDを内容を消去して、接続した。

あとは、標準のアップデータで、インストール作業をするだけ。1回目は失敗するが、インストールは成功している(はず)。心配な人は、もう一度行うと、行えることがあるので、2回目をやっておこう。(自分も2回行った。)2回目は成功して、3回目はできなくなるはず。

次に、NASを電源停止して、コンセントから抜き、HDDをはずす。ここで、fix_ext2_magicの出番となる。fix_ext2_magicは、作者様の説明書にあるとおり、「LinkStation (HD-LAN、HD-HLAN、HD-HGLAN) のディスクを Linux でマウントできるようにファイルシステムのマジックナンバーを修正するプログラム」である。これをかけないと、内容を変更することはできない。これをかけて、マウントできるようにすれば、ファームウェアのアーカイブをごにょらなくても、いいことになる。

fix_ext2_magicはオリジナルサイトにはなく、buffalo.nas-central.orgのアーカイブからダウンロードできる。自分は、昔、オリジナルサイトからダウンロードした、tar ballを使用した。

NetBSD上で作業できるので、(今回、メモ取り用等に用いている、普段使いの)NetBSD/amd64環境のノートPC上で作業した。なお、fix_ext2_magicは、pkgsrc-wip-jpにあるので、使ってもいいと思う。

NetBSD/amd64用のfix_ext2_magicパッケージがほしい人は fix_ext2_magic-1.1.tgz からダウンロードできる。

以下、作業例。

% sudo dd if=/dev/rsd0e of=linux_fist_partition.dd bs=64k

何かあった時のバックアップ。

% sudo fix_ext2_magic /dev/sd0e
Block group   0: magic number = 0xef54
Block group   1: magic number = 0xef54
Block group   3: magic number = 0xef54
Block group   5: magic number = 0xef54
Block group   7: magic number = 0xef54
Block group   9: magic number = 0xef54
Block group  25: magic number = 0xef54
Block group  27: magic number = 0xef54

マジックナンバーの確認。変更の必要あり。

% sudo fix_ext2_magic --fix /dev/sd0e
Block group   0: magic number = 0xef54 -> 0xef53 (fixed)
Block group   1: magic number = 0xef54 -> 0xef53 (fixed)
Block group   3: magic number = 0xef54 -> 0xef53 (fixed)
Block group   5: magic number = 0xef54 -> 0xef53 (fixed)
Block group   7: magic number = 0xef54 -> 0xef53 (fixed)
Block group   9: magic number = 0xef54 -> 0xef53 (fixed)
Block group  25: magic number = 0xef54 -> 0xef53 (fixed)
Block group  27: magic number = 0xef54 -> 0xef53 (fixed)

マジックナンバーを変更した。

% sudo fsck_ext2fs -f /dev/sd0e
** /dev/rsd0e
** File system is already clean
** Last Mounted on
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
SUMMARY INFORMATIONS WRONG FOR CG #0
SALVAGE? [yn] y

BLK(S) MISSING IN BIT MAPS #0
SALVAGE? [yn] y

SUMMARY INFORMATIONS WRONG FOR CG #1
SALVAGE? [yn] y

BLK(S) MISSING IN BIT MAPS #1
SALVAGE? [yn] y

SUPERBLK SUMMARY INFORMATION BAD
SALVAGE? [yn] y

3226 files, 121163 used, 259516 free

***** FILE SYSTEM WAS MODIFIED *****

一応、fsckをかけておく。

NASにHDDを戻し、電源を接続しておく。

 U-Bootとncbのビルド (9.)

Convert to Lenny』のページ下部にある、u-bootを使えばよい、と思っていたのだが、netcatによる接続の際に用いられるncbというコマンドがない。ゆえに、ビルドせざるをえないことになった。

作業PC上でのビルドは、ほぼ原文どおりで問題なかった。

% tar xjf u-boot-2009.06.tgz
% cd u-boot-2009.06
% patch -p1 -b < /path/to/u-boot-2009.06-hdhlan.patch
% make distclean
% make hdhlan_config
% make

できた、u-boot-hdhlan.bin と u-boot-hdhlan.elf は、tftpサーバに上げておく。(/tftpboot直下に置く。)

肝心のncbコマンドは、 u-boot-2009.06/tools 以下にあるので、作業用PCに取り出しておく。自分は、~/bin にインストールした。

 作業用PCにncコマンドを作成 (10.)

ほぼ原文どおりで問題なかった。netcatコマンドは、オリジナル版前提なので、インストールしておくこと。(Debian jessieの場合だと、netcat-traditionalパッケージをインストールしておけばよい。)

#!/bin/sh
[ $# = 1 ]||{ echo "Usage: $0 target-ip" >&2; exit 1; }
######stty -icanon -echo intr ^T
stty intr ^T
/path/to/bin/ncb &
netcat -v -v -n -u $1 6666
######stty icanon echo intr ^C
stty intr ^C
pkill ncb
kill 0

上記シェルスクリプトを~/binに作成した。

sttyの設定は、入れているとechoがたくさん返ってきたりして、使えなかったので、コメントアウトしてある。あと、みてのとおり、ncで接続中は、Control+Cでは、切り離せない。Control+Tになる。(ので、screenやtmuxを使っている人は、ご用心。)

上記ncコマンドを終了しても、ncbコマンドが生きていると、次のncを動かすとき、動作がおかしくなるので、ncコマンド終了後、ncbコマンドが生きていたら、殺すこと。[1]

 U-BootのNASへの書き込みと検証 (11.)

原文の注意書きにあるように、コマンドは繰り返してはならない。つまり、タイプミスしないよう、何度も確認して行うこと。文鎮になる可能性が高い。

まず、作業PCに192.168.1.100が付いていることを確認する。(自分の場合は、NFSサーバ兼tftpサーバが同サブネットにいたので、双方で、pingができるかどうかの確認等で、疎通確認した。)

NASを起動する。IPアドレスを192.168.1.200をつける。ftpが動作するようにして置く。(普通にまだLinkStationなので、Webからいじれる。)

あとはだいたい原文通りに作業PCから作業できる。

% telnet 192.168.1.200
# cd /mnt/share
# dd if=/dev/mtd0 of=mtd0 bs=1k
# exit
% ftp 192.168.1.200
cd share
put /path/to/u-boot-hdhlan.bin
get mtd0
quit
% telnet 192.168.1.200
cd /mnt/share
eraseall /dev/mtd0
dd if=u-boot-hdhlan.bin of=/dev/mtd0 bs=1k
ls -l u-boot-hdhlan.bin
dd if=/dev/mtd0 of=verify bs=<u-boot-hdhlan.bin size> count=1
exit
% ftp 192.168.1.200
cd share
get verify
exit
% diff /tftpboot/u-boot-hdhlan.bin verify          diffは2回目は失敗する。1回だけで確認すること。
% cmp -b -l /tftpboot/u-boot-hdhlan.bin verify     cmpは2回めは失敗する。1回だけで確認すること。

 U-BootのNASへの書込後のテスト (12.)

電源ボタンを押して、NASの電源を落とす。

まず、作業PCに192.168.1.100が付いていることを確認する。(自分の場合は、NFSサーバ兼tftpサーバが同サブネットにいたので、双方で、pingができるかどうかの確認等で、疎通確認した。)

あとは、原文どおりである。

% cd ~/bin
% ./nc 192.168.1.200

作業PCから、上記のコマンド入力後、NASの電源を投入する。しばし待つと、"HD-HLAN#"のプロンプトが出てくる。出てきたら、U-Boot化に成功した。おめでとう。

そもそも、何も出てこない人は、ネットワークの設定が正しいかどうかを調べよう。作業PCは192.168.1.100のIPアドレスが降られていて、192.168.1.0/24にあるホストに対し、pingが届くかどうかでまずは判断できると思う。

 Linux-2.6.30.4 kernelのビルド (13.)

しなかった。『Convert to Lenny』のページ下部にある、作者様提供のkernelを使用した。ちなみに、vmlinux-2.6.30.5-0.1-hdhlan.ubootを選択した。

カーネルは、tftpサーバの/tftpboot直下に、vmlinux-2.6.30.5-0.1.uboot という名前で置くこと。

 Busybox-1.14.2のビルド (14.)

はじめに

Busyboxは作者様の提供がないで、自分で作業PC上でビルドするしか無い。

これが思ったより大変だった。

下に示すパッチのような変更を行ったあとは、ほぼ原文どおりにビルドできる。

%cd busybox-1.14.2
<下に示すパッチのような変更を行う>
% make defconfig
% make menuconfig
 <"Busybox Setting->Build Options->static library"を選択する>
 <"Miscellaneous Utilities->ionice"を選択しない>

NFSサーバ兼tftpサーバから、/tftpbootをNFSで出して、mountして、そこにインストールする。

% sudo mkdir /tftpboot
% mount -t nfs 192.168.1.202:/tftpboot /tftpboot
% make CONFIG_PREFIX=/tftpboot/busybox install

パーミッションの変更

% sudo chown root.root /tftpboot/busybox/bin/busybox
% sudo chmod u+s,g+s /tftpboot/busybox/bin/busybox

make defconfigが通らない

をヒントに、変更を行った。(詳細は後述)

GNU makeが新しくて、makeが通らない

Makefile:1274: *** mixed implicit and normal rules: deprecated syntax
/home/isihara/hd-hlan_mipsel/busybox-1.14.2/./Makefile:1274: *** mixed implicit and normal rules: deprecated syntax

をヒントに、変更を行った。(詳細は後述)

上記変更内容

以下のパッチbusybox-1.14.2.patchを参照のこと。

--- ./miscutils/time.c.orig	2018-02-11 02:50:45.518296832 +0900
+++ ./miscutils/time.c	2018-02-11 02:56:36.201888142 +0900
@@ -10,6 +10,7 @@
 */
 
 #include "libbb.h"
+#include <sys/resource.h>
 
 /* Information on the resources used by a child process.  */
 typedef struct {
--- ./init/init.c.orig	2009-06-22 07:32:00.000000000 +0900
+++ ./init/init.c	2018-02-11 03:43:17.182675045 +0900
@@ -859,7 +859,7 @@
 
 	/* Make sure there is enough memory to do something useful. */
 	if (ENABLE_SWAPONOFF) {
-		struct sysinfo info;
+		struct bb_sysinfo info;
 
 		if (sysinfo(&info) == 0
 		 && (info.mem_unit ? : 1) * (long long)info.totalram < 1024*1024
--- ./procps/free.c.orig	2009-06-22 07:32:00.000000000 +0900
+++ ./procps/free.c	2018-02-11 04:51:19.731350457 +0900
@@ -10,11 +10,12 @@
 /* getopt not needed */
 
 #include "libbb.h"
+#include <sys/resource.h>
 
 int free_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int free_main(int argc, char **argv)
 {
-	struct sysinfo info;
+	struct bb_sysinfo info;
 	sysinfo(&info);
 
 	/* Kernels prior to 2.4.x will return info.mem_unit==0, so cope... */
--- ./procps/uptime.c.orig	2009-06-22 07:32:00.000000000 +0900
+++ ./procps/uptime.c	2018-02-11 03:42:48.419036653 +0900
@@ -16,6 +16,7 @@
 /* getopt not needed */
 
 #include "libbb.h"
+#include <sys/resource.h>
 
 #ifndef FSHIFT
 # define FSHIFT 16              /* nr of bits of precision */
@@ -29,7 +30,7 @@
 int uptime_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
 {
 	int updays, uphours, upminutes;
-	struct sysinfo info;
+	struct bb_sysinfo info;
 	struct tm *current_time;
 	time_t current_secs;
 
--- ./shell/ash.c.orig	2009-06-22 07:46:43.000000000 +0900
+++ ./shell/ash.c	2018-02-11 03:23:49.249357955 +0900
@@ -47,6 +47,7 @@
 #include "busybox.h" /* for applet_names */
 //TODO: pull in some .h and find out do we have SINGLE_APPLET_MAIN?
 //#include "applet_tables.h" doesn't work
+#include <sys/resource.h>
 #include <paths.h>
 #include <setjmp.h>
 #include <fnmatch.h>
--- ./loginutils/passwd.c.orig	2018-02-11 02:46:18.749650568 +0900
+++ ./loginutils/passwd.c	2018-02-11 02:46:05.485817317 +0900
@@ -4,6 +4,7 @@
  */
 #include "libbb.h"
 #include <syslog.h>
+#include <sys/resource.h>
 
 static void nuke_str(char *str)
 {
--- ./runit/chpst.c.orig	2018-02-11 03:21:05.251419688 +0900
+++ ./runit/chpst.c	2018-02-11 03:20:44.007686758 +0900
@@ -29,6 +29,7 @@
 /* Dependencies on runit_lib.c removed */
 
 #include "libbb.h"
+#include <sys/resource.h>
 #include <dirent.h>
 
 /*
--- ./Makefile.orig	2018-02-11 02:18:16.806795453 +0900
+++ ./Makefile	2018-02-11 02:27:18.035991281 +0900
@@ -419,7 +419,11 @@
 -include $(srctree)/arch/$(ARCH)/Makefile
 export KBUILD_DEFCONFIG
 
-config %config: scripts_basic outputmakefile FORCE
+config: scripts_basic outputmakefile FORCE
+	$(Q)mkdir -p include
+	$(Q)$(MAKE) $(build)=scripts/kconfig $@
+	$(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
+%config: scripts_basic outputmakefile FORCE
 	$(Q)mkdir -p include
 	$(Q)$(MAKE) $(build)=scripts/kconfig $@
 	$(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
@@ -1267,7 +1271,10 @@
 	$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
 
 # Modules
-/ %/: prepare scripts FORCE
+/: prepare scripts FORCE
+	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
+	$(build)=$(build-dir)
+%/: prepare scripts FORCE
 	$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
 	$(build)=$(build-dir)
 %.ko: prepare scripts FORCE
--- ./include/libbb.h.orig	2018-02-11 03:06:37.802325000 +0900
+++ ./include/libbb.h	2018-02-11 03:35:05.808852450 +0900
@@ -89,7 +89,7 @@
 char *dirname(char *path);
 /* Include our own copy of struct sysinfo to avoid binary compatibility
  * problems with Linux 2.4, which changed things.  Grumble, grumble. */
-struct sysinfo {
+struct bb_sysinfo {
 	long uptime;			/* Seconds since boot */
 	unsigned long loads[3];		/* 1, 5, and 15 minute load averages */
 	unsigned long totalram;		/* Total usable main memory size */
@@ -105,7 +105,7 @@
 	unsigned int mem_unit;		/* Memory unit size in bytes */
 	char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding: libc5 uses this.. */
 };
-int sysinfo(struct sysinfo* info);
+int sysinfo(struct bb_sysinfo* info);
 
 
 /* Make all declarations hidden (-fvisibility flag only affects definitions) */
--- ./networking/ip.c.orig	2009-06-22 07:40:29.000000000 +0900
+++ ./networking/ip.c	2018-02-11 02:57:09.093474639 +0900
@@ -14,6 +14,7 @@
  */
 
 #include "libbb.h"
+#include <sys/resource.h>
 
 #include "libiproute/utils.h"
 #include "libiproute/ip_common.h"
--- ./networking/inetd.c.orig	2009-06-22 07:40:29.000000000 +0900
+++ ./networking/inetd.c	2018-02-11 02:56:56.289635605 +0900
@@ -158,6 +158,7 @@
 #include <sys/un.h>
 
 #include "libbb.h"
+#include <sys/resource.h>
 
 #if ENABLE_FEATURE_INETD_RPC
 #include <rpc/rpc.h>

(これで正しいのかほんとはよくわからない。でも、動作はしている。)

 e2fsprogs-1.41.6のビルド (15.)

しなかった。『Convert to Lenny』のページ下部にある、作者様提供のmke2fsとtune2fsを使用した。

両方とも、/tftpboot/busybox/sbin 直下に、mke2fsとtune2fsという名前で置くこと。

 Busybox root FSのセットアップ (16.)

ほぼ原文のとおり作業PC上で作業できる。

# cd /tftpboot/busybox
# mkdir -p dev etc lib proc sys tmp usr var mnt
# mkdir -p usr/bin usr/sbin usr/lib
# mkdir -p etc/init.d
# chmod a+wt tmp
# mknod -m 0600 dev/console c 5 1
# vi etc/profile
       PATH=/sbin:/bin:/usr/sbin:/usr/bin
       export PATH
# vi etc/inittab
       ::sysinit:/etc/init.d/rcS
       ttyS0::respawn:-/bin/sh
# vi etc/init.d/rcS
       #!/bin/sh
       /bin/busybox mount -t proc proc /proc
       mount -n -o remount,rw /dev/root /
       mount -t sysfs sysfs /sys
       mount -t tmpfs tmpfs /dev
       echo /sbin/mdev > /proc/sys/kernel/hotplug
       mkdir /dev/pts
       mount -t devpts devpts /dev/pts
       mdev -s
       mount -t tmpfs tmpfs /var
       for d in lib lock log run tmp; do mkdir -p /var/$d; done
       chmod a+wt /var/tmp
       telnetd -l /bin/sh
# chmod +x etc/init.d/rcS

 Busybox initrdのビルド (17.)

しなかった。オプショナルであると書かれていたし、必要なファイルは、『Convert to Lenny』のページ下部にある、作者様提供のinitrdを使用した。

 debootstrapをつかって、Lennyのインストールを始める (18.)

ここで、困ったことがおきた。192.168.1.0/24のネットワークは外部接続できない。選択肢としては、

  • できるようにする
  • 外部接続できるネットワーク(この文書では、10.0.8.0/24)に変更する

考えた結果、192.168.1.0/24のネットワークを捨てて、元からある外部接続用ネットワークに切り替えることにした。必要な作業は、以下の通り。

  • まず、NASのU-Bootの設定を変更し、IPアドレスを変える。
    • serveripを、NFS兼tftpサーバの外部接続できるネットワークのIP(この文書では、10.0.8.202)に変更する。
    • ipaddrを、外部接続できるネットワークのIP(この文書では、10.0.8.206)に変更する。
      • 変更した瞬間、ncの接続が切れるので、作業サーバのIP変更後(あるいは追加後)、ncで再接続して、saveenvすること。
  • 作業サーバに、外部接続できるネットワークのIP(この文書では、10.0.8.16)を追加する。
  • NFSサーバ兼tftpサーバは、最初から、外部接続できるネットワークのIPがついている(この文書では、10.0.8.202)ので、確認のみ。

pingを打ってみて、接続を確認する。

接続が確認できたら、作業再開である。

/tftpboot/busybox/usr/sbin/debootstrapコマンドはシェルスクリプトである。まず、DEF_MIRRORを以下のように変更する。

DEF_MIRROR="http://archive.debian.org/debian-archive/debian"

作業自体は、ほぼ原文のとおり作業PCで作業できる。

# cd /tftpboot/busybox
# ar p /path/to/debootstrap_1.0.26+squeeze1_all.deb  data.tar.gz | tar xz
# DEBOOTSTRAP_DIR=usr/share/debootstrap usr/sbin/debootstrap --foreign --arch mipsel lenny lenny

正常に終了すれば、/tftpboot/busybox/lenny ができているはずである。

debootstrapのやり直しは、上記のlennyディレクトリを消すだけで、やり直しができる。

 Linux-2.6.30.5 with Busybox-1.14.2 root FS over NFSでNASを起動する (19.)

NASにncで接続し、以下のコマンドを入力する。

tftp 81000000 10.0.8.202:vmlinux-2.6.30.5-0.1.uboot
set bootargs root=/dev/nfs nfsroot=10.0.8.202:/tftpboot/busybox ip=10.0.8.206:10.0.8.202:10.0.8.1:255.255.255.0:lenny:eth0:none netconsole=6666@10.0.8.206/,@10.0.8.16/

10.0.8.1はデフォルトゲートウェイである。

あとは、bootしよう。

bootm

 Lennyのインストールを最後まで (20.)

無事、NASがnfsrootで起動できていれば、あとは作業PCから、telnetでつないで、NASで作業することになる。

作業自体は、ほぼ原文のとおりで問題ない。

最初にMBRパーティションをいじるところで、NetBSDパーティションを作っておくと(NetBSDがインストールできるようになった時に)楽なので、作ってある。あと、この作業で、NASに接続しているHDDの内容が全て消える。万一、データ等が入っている場合は、退避しておくこと。

/dev/rtc0のコピーは、していないと、起動の途中で、止まるようになるので、事前の対策である。

% telnet 10.0.8.206
# dd if=/dev/zero of=/dev/sda count=1
# fdisk /dev/sda
       n    p    1    <ENTR>    +4096M
       n    p    2    <ENTR>    +512M    t    2    82
       n    p    3    <ENTR>    +4096M
       n    p    4    <ENTR>    <ENTR>   t    2    a9
       w
# touch /etc/mtab
# mke2fs -j /dev/sda1
# mke2fs -j /dev/sda3
# tune2fs -c0 -i0 /dev/sda1
# tune2fs -c0 -i0 /dev/sda3
# mkswap /dev/sda2
# swapon /dev/sda2
# mount /dev/sda1 /mnt
# mkdir /mnt/home
# mount /dev/sda3 /mnt/home
# cp -a /lenny/* /mnt
# cp -a /dev/rtc0 /mnt/dev

上記で準備ができた。HDD側のセットアップをchrootして行う。

# LANG=C chroot /mnt /bin/bash
# debootstrap/debootstrap --second-stage

 Lennyの設定とアップデート (21.)

debootstap後のOSの設定作業等

引き続き、telnetでNASに接続しての作業である。chrootしたままになっているはずである。

作業自体は、ほぼ原文のとおりで問題ない。

変更点は以下のとおり。

  • dpkg-reconfigure tzdataは、動かすと止まってしまうので、Lenny化が完了してから、行う。
  • aptitude install localesとdpkg-reconfigure localesも動かすと止まってしまうので、Lenny化が完了してから、行う。
  • tasksel install standardも動かすと止まってしまうので、Lenny化が完了してから、行う。
  • avr-evtdは自前で用意しないといけない。(後述)
# vi /etc/fstab
       /dev/sda1    /    ext3    defaults    0    1
       /dev/sda3    /home    ext3    rw,nosuid,nodev    0    2
       /dev/sda2    none    swap    sw    0    0
       proc    /proc    proc    defaults    0    0
       sysfs    /sys    sysfs    defaults    0    0
       devpts    /dev/pts    devpts    mode=0620,gid=5    0    0
# mount /proc
# mount /sys
# mount /dev/pts
# vi /etc/default/rcS
       UTC=no
# vi /etc/network/interfaces
       auto lo
       iface lo inet loopback
       auto eth0
       iface eth0 inet static
           address 10.0.8.206
           network 10.0.8.0
           netmask 255.255.255.0
           broadcast 10.0.8.255
           gateway 10.0.8.1
# vi /etc/resolv.conf
       nameserver xxx.xxx.xxx.xxx
       nameserver yyy.yyy.yyy.yyy
# echo hogehoge > /etc/hostname
# vi /etc/hosts
       127.0.0.1    localhost hogehoge
# vi /etc/apt/sources.list
       deb http://archive.debian.org/debian/ lenny main contrib non-free
       deb-src http://archive.debian.org/debian/ lenny main contrib non-free
       #deb-src http://mirrors.kernel.org/debian sid main
# vi /etc/apt/preferences
       Package: *
       Pin: release a=stable
       Pin-Priority: 990
# mkdir /lib/modules/$(uname -r)
# touch /lib/modules/$(uname -r)/modules.dep
# apt-get update
# apt-get dist-upgrade
# apt-get install ssh udev ntp
# aptitude clean
# date MMDDhhmmYYYY
# hwclock -w
# vi /etc/inittab
       #1:2345:respawn:/sbin/getty 38400 tty1
       #2:23:respawn:/sbin/getty 38400 tty2
       #3:23:respawn:/sbin/getty 38400 tty3
       #4:23:respawn:/sbin/getty 38400 tty4
       #5:23:respawn:/sbin/getty 38400 tty5
       #6:23:respawn:/sbin/getty 38400 tty6
           NOTE: Comment out the above lines to prevent respawning getty repeated on non-existent virtual terminals.

ここまで、終わったら、必要なユーザ登録を行うこと。パスワードもつけること。(rootにも忘れずに。)

avr-evtdのインストール

avr-evtdが、lennyで提供されていないため、sidのソースパッケージから、debuildすることにする。

まず、ビルドに必要な環境をインストールする。chrootしたままの環境でよい。

# apt-get install build-essential
# apt-get install devscripts

後者が大量のdebをインストールするため時間がかかるので注意。

https://packages.debian.org/ja/source/sid/avr-evtdより、avr-evtdのソースパッケージをとってくる。(3つとも。)適当な作業dirに置く。(自分は /var/tmp に置いた。)

ビルドする。

# dpkg-source -x avr-evtd_1.7.7-2.dsc
# cd avr-evtd-1.7.7
# debuild -uc -us -b

一つ上のdir(ここでは、/var/tmp)にdebができていれば、それをインストールする。

# cd ..
# ls
# dpkg -i avr-evtd_1.7.7-2_mipsel.deb

必要な設定を行う。

# vi /etc/defaults/avr-evtd
       DEBUG=OFF
# vi /etc/init.d/avr-evtd
       daemonoptions="-d /dev/ttyS0"
           上の方に追加すること。

reboot

rebootする。

# for f in nfs-common ssh portmap atd exim4 cron ntp; do /etc/init.d/$f stop; done
# umount /proc/fs/nfsd
# umount /proc
# umount /sys
# umount /dev/pts
# exit
% sudo sync
% sudo umount /mnt/home
% sudo umount /mnt
% sudo reboot

 Lennyのインストールとカーネルの確認 (22.)

作業PCから、ncでNASに接続して、作業する。

# tftp 81000000 10.0.8.202:vmlinux-2.6.30.5-0.1.uboot
# set bootargs root=/dev/sda1 ip=10.0.8.206 netconsole=6666@10.0.8.206/,@10.0.8.16/
# bootm

無事、HDD側から起動していれば、作業PCからsshで接続できるはずである。

% ssh root@10.0.8.206
# mount 10.0.8.202:/tftpboot /mnt
# cp -a /mnt/vmlinux-2.6.30.5-0.1.uboot /mnt/initrd-busybox-1.14.2.uboot /boot
# cd /boot
# ln -sf vmlinux-2.6.30.5-0.1.uboot vmlinux.uboot

問題なければ、再起動する。

# reboot

 NASを自動起動するようにし、ncに何も出ないようにする (22.)

注:(22.)なのは間違いではない。(原文がそうなっている。)

作業PCから、ncでNASに接続して、作業する。自動起動の設定だけ行った。

# set bootargs root=/dev/sda1
# set bootcmd ext2load ide 0:1 81000000 /boot/vmlinux.uboot\; bootm
# saveenv
# reset

自動起動してきたら、sshでNASに接続し、debootstrapの残り作業を行うとよい。

% ssh root@10.0.8.206
# dpkg-reconfigure tzdata
# aptitude install locales
# dpkg-reconfigure locales
# tasksel install standard

localesについては、以下のとおり。

  • en_US.UTF-8を有効にする。
  • ja_JP.UTF-8も有効にすると、メッセージが日本語になる。(デフォルトは、en_US.UTF-8にしておくこと。)

 NASの自動起動とncに何も出ないようにしたのを、再度ncにメッセージが出るようにしたい (23.)

(今回はncに何も出ないようにしていないので、割愛。)

  • [1]ncbコマンドを殺すために、trapを使うよう改良すれば、ncbコマンドはほぼ生き残らないようにできる(はず)ので、やってみて下さい。

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

最終更新時間:2018年02月24日 00時38分07秒