USL-5P用のNetBSDをsource codeからcompileする方法を説明します。
自分で作るのは面倒くさいという人は、 download.komoto.orgに 作成済みのbinary setsを置いてあるので、この頁は飛ばしてしまって構いませ ん。
まず最初に、NetBSDのsource codeを取ってきましょう。 Ring ServerのNetBSD-4.0などからdownloadできます。 xsrc.tgz以外のgnusrc.tgz、sharesrc.tgz、src.tgz、syssrc.tgzをdownloadし て、以下のように展開します。また、最新のsecurity updateを取り込むために、 untarしたあとは"cvs update"を行いましょう。
% mkdir -p ~/netbsd-4.0 % cd ~/netbsd-4.0 % for f in somewhere/*.tgz; do tar xfvz $f; done ... % cvs update ... %
続いて、kernel設定です。 ~/netbsd-4.0/usr/src/sys/arch/landisk/conf/USL-5PをGENERICにmvします。 また、好みに応じて、GENERIC.inを書き換えましょう。 必要最小限の構成がお好みの場合、GENERIC.inの ような感じで設定します。
% cd ~/netbsd-4.0/usr/src/sys/arch/landisk/conf % mv USL-5P GENERIC % vi GENERIC.in ...
user-landの設定を、~/netbsd-4.0/usr/src/mk.confに書きます。 CPUFLAGSやMK***などの環境変数はは好みに応じて好みに応じて設定してくだ さい。~/netbsd-4.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-4.0/usr/src
% export MAKECONF=~/netbsd-4.0/usr/src/mk.conf
% ./build.sh -m landisk -T ~/netbsd-4.0/usr -U release
===> build.sh command: ./build.sh -m landisk -T /home/someone/netbsd-4.0/usr -U release
===> build.sh started: Sat Nov 11 10:29:59 JST 2006
===> No /home/someone/netbsd-4.0/usr/bin/nbmake, needs building.
===> Bootstrapping nbmake...
...
===> Successful make release
===> build.sh started: Sat Nov 11 10:29:59 JST 2006
===> build.sh ended: Sat Nov 11 13:36:30 JST 2006
===> Summary of results:
build.sh command: ./build.sh -m landisk -T /home/someone/netbsd-4.0/usr -U release
build.sh started: Sat Nov 11 10:29:59 JST 2006
No /home/someone/netbsd-4.0/usr/bin/nbmake, needs building.
Bootstrapping nbmake
MACHINE: landisk
MACHINE_ARCH: sh3el
TOOLDIR path: /home/someone/netbsd-4.0/usr
DESTDIR path: /home/someone/netbsd-4.0/usr/src/destdir.landisk
RELEASEDIR path: /home/someone/netbsd-4.0/usr/src/releasedir
Created /home/km/netbsd-4.0/usr/bin/nbmake
makewrapper: /home/someone/netbsd-4.0/usr/bin/nbmake-landisk
Updated /home/someone/netbsd-4.0/usr/bin/nbmake-landisk
Successful make release
build.sh started: Sat Nov 11 10:29:59 JST 2006
build.sh ended: Sat Nov 11 13:36:30 JST 2006
===> .
%
~/netbsd-4.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できる ことを確認してください。