build.sh for USL-5P

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

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

netbsd-4.0/srcを取得

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

続いて、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
...

mk.confの用意

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

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

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


ご意見、ご感想は、小本 真広 <m.komoto@nifty.ne.jp>まで。メールする前にtop pageの注意書を読んでください。