USL-5P用のNetBSDをsource codeからcompileする方法を説明します。
自分で作るのは面倒くさいという人は、 download.hanabusa.netに 作成済みのbinary setsを置いてあるので、この頁は飛ばしてしまって構いませ ん。
まず最初に、NetBSDのsource codeを取ってきましょう。 Ring ServerのNetBSD-5.0などからdownloadできます。 xsrc.tgz以外のgnusrc.tgz、sharesrc.tgz、src.tgz、syssrc.tgzをdownloadし て、以下のように展開します。また、最新のsecurity updateを取り込むために、 untarしたあとは"cvs update"を行いましょう。
% mkdir -p ~/netbsd-5.0 % cd ~/netbsd-5.0 % for f in somewhere/*.tgz; do tar xfvz $f; done ... % cvs update -dP ... %
続いて、kernel設定です。好みに応じて、GENERICを書き換えましょう。 必要最小限の構成がお好みの場合、GENERICのよ うな感じで設定します。
% cd ~/netbsd-5.0/usr/src/sys/arch/landisk/conf % vi GENERIC ...
user-landの設定を、~/netbsd-5.0/usr/src/mk.confに書きます。 CPUFLAGSやMK***などの環境変数はは好みに応じて好みに応じて設定してくだ さい。~/netbsd-5.0/usr/src/share/mk/bsd.README に設定方法が書かれています。
以下の例では、CompactFlashに載せるために、使わない機能(IPv6等)は "no"にしてなるべく容量が小さくなるようにしています。また、処 理速度が要求される暗号化やgccについては速度優先になるように "-O3"を指定してcompileしています。
mk.confの例
MKMANZ = yes MKPROFILE = no USE_HESIOD = no USE_INET6 = no USE_KERBEROS = no USE_SKEY = no USE_YP = no STRIPFLAG = -s CPUFLAGS = -m4-nofpu COPTS = -O2 COPTS.libbz2 = -O3 COPTS.libz = -O3 COPTS.libcrypto = -O3 COPTS.libssl = -O3 COPTS.libcpp = -O3 COPTS.cpp = -O3 COPTS.gcc = -O3 COPTS.libfrontend = -O3 COPTS.libbackend = -O3 -Wno-error COPTS.g++ = -O3 COPTS.cc1 = -O3 COPTS.cc1plus = -O3
ここまで用意できたら、あとは"build.sh"を走らせるだけです。環 境変数 MAKECONF に、mk.confの場所を指定してあげましょう。
% cd ~/netbsd-5.0/usr/src % export MAKECONF=~/netbsd-5.0/usr/src/mk.conf % ./build.sh -m landisk -T ~/netbsd-5.0/usr -U release ===> build.sh command: ./build.sh -m landisk -T ~/netbsd-5.0/usr -U release releasekernel=USL-5P ===> build.sh started: Sun Apr 26 22:57:19 JST 2009 ===> NetBSD version: 5.0 ===> MACHINE: landisk ===> MACHINE_ARCH: sh3el ===> Build platform: Linux 2.6.27.18-kiwi x86_64 ===> HOST_SH: /usr/bin/sh ===> No ~/netbsd-5.0/usr/bin/nbmake, needs building. ===> Bootstrapping nbmake ... make release started at: Sun Apr 26 22:58:03 JST 2009 make release finished at: Mon Apr 27 00:48:10 JST 2009 ===> Successful make release ===> build.sh ended: Mon Apr 27 00:48:12 JST 2009 ===> Summary of results: build.sh command: ./build.sh -m landisk -T ~/netbsd-5.0/usr -U release releasekernel=USL-5P build.sh started: Sun Apr 26 22:57:19 JST 2009 NetBSD version: 5.0 MACHINE: landisk MACHINE_ARCH: sh3el Build platform: Linux 2.6.27.18-kiwi x86_64 HOST_SH: /usr/bin/sh No ~/netbsd-5.0/usr/bin/nbmake, needs building. Bootstrapping nbmake TOOLDIR path: ~/netbsd-5.0/usr DESTDIR path: ~/netbsd-5.0/usr/src/destdir.landisk RELEASEDIR path: ~/netbsd-5.0/usr/src/releasedir Created ~/netbsd-5.0/usr/bin/nbmake makewrapper: ~/netbsd-5.0/usr/bin/nbmake-landisk Updated ~/netbsd-5.0/usr/bin/nbmake-landisk Successful make release build.sh ended: Mon Apr 27 00:48:12 JST 2009 ===> . %
~/netbsd-5.0/usr/src/releasedir/landisk/binary/sets以下にbase.tgzや etc.tgz等ができているはずです。Core2Duo 2GHzで2時間ぐらいかかりました。
Big endianの機械でCross-compileした場合は、*.dbが壊れていることがありま す。どうも、big-endianなhostとlittle-endianなtarget(もしくはその逆)で cross-compileするとだめなようです。NetBSD/sh3はlittle-endianですので、 big-endianなmacppc、mipsebなどでbuild.shすると壊れたものができます(私は PowerPC mac でcross-compileしてハマりました)。i386などのlittle-endianで 作っていれば大丈夫です。
*.dbが壊れていて一番困るのは、/etc/pwd.dbが壊れているためにpassword認証 ができず、rootですらloginできないことです。loginできないと直しようもな いので、最初の起動時にsingle user modeで起動するようにして回避します。
Single user modeで起動するため、install時に/etc/rc.confの中を "rc_configured=NO" にしておきます。そうすると、最初に起動する ときに"Multiuser boot aborted."な状態で止まるはずです。
/etc/rc.conf is not configured. Multiuser boot aborted. Enter pathname of shell or RETURN for /bin/sh: Terminal type? [unknown] vt100 Terminal type is vt100. We recommend creating a non-root account and using su(1) for root access. #
この状態ではfilesystemが読み取り専用になっているので、まずは書き込み可 能になるようにmountし直します。
# mount -o rw / #
壊れているものは/etc/pwd.db, /etc/spwd.db, /usr/share/misc/termcap.db, /usr/share/man/whatis.db, /usr/share/misc/vgrindefs.dbの5つのようです。 以下のように作りなおします。
# pwd_mkdb /etc/master.passwd # cap_mkdb /usr/share/misc/termcap # /usr/libexec/makewhatis #
最後に、/etc/rc.confの中の"rc_configured"をYESに書き換えて single user modeは完了です。
# vi /etc/rc.conf ... # exit
exitすると、multi user modeで起動します。しばらく待っていると、 "login:"という表示がでますので、rootでloginできる ことを確認してください。