build.sh for USL-5P

USL-5P用のNetBSDをsource codeからcompileする方法を説明します。

自分で作るのは面倒くさいという人は、 download.hanabusa.netに 作成済みのbinary setsを置いてあるので、この頁は飛ばしてしまって構いませ ん。

netbsd-5.0/sourceを取得

まず最初に、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設定

続いて、kernel設定です。好みに応じて、GENERICを書き換えましょう。 必要最小限の構成がお好みの場合、GENERICのよ うな感じで設定します。

% cd ~/netbsd-5.0/usr/src/sys/arch/landisk/conf
% vi GENERIC
...

mk.confの用意

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

ここまで用意できたら、あとは"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の場合の注意

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での起動

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できる ことを確認してください。


ご意見、ご感想は、花房 真広 <webmaster@hanabusa.net>まで。メールする前にtop pageの注意書を読んでください。