[HOME] [研究室] [github] [twitter] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .

NetBSD 配布セットをソースからコンパイルする

特定の箇所だけコンパイルしたいということもあるかもしれませんが、 そういう人は各自努力ということで、宿題としておきましょう。

本節では、 「特定の NetBSD バージョンのソースコードをコンパイルする」 方法について説明します。

目標はバイナリの配布セット(.tgz 形式と ISO 形式)の作成です。 なお、ISO ファイルとは、インストール CD そのものです。

NetBSD のソースコードを準備し、展開して下さい。 各バージョンのソースコードの取り寄せ方、展開の仕方等は、 前節までに説明してあります。 分からない人は、まず前節までを読み返してください。

では、はじめましょう。

NetBSD 5.1.0_PATCH 配布セットをソースからコンパイルする

NetBSD 5.1.0_PATCH を例にとります。

といっても、あまり話すことはなく、 (1) まず、

ftp://ftp.fml.org/pub/NSRG/tips/NetBSD/usr/src/netbsd-build.sh
をダウンロードして下さい。 (2) そして src ディレクトリで
netbsd-build.sh release
netbsd-build.sh iso-image
を実行して下さい。
/var/tmp/build.i386.netbsd-5.1.0_PATCH/release
以下にファイルが出来てますよね? 終りです :-)

ちなみに生成先は

/var/tmp/build.アーキテクチャア.netbsd-バージョン/release
となります。
いくつかの例

/var/tmp/build.i386.netbsd-5.1.0_PATCH/release
/var/tmp/build.i386.netbsd-4.99.73/release
/var/tmp/build.i386.netbsd-5.99.55/release
/var/tmp/build.amd64.netbsd-5.1.0_PATCH/release

作業例

# mkdir /usr/NetBSD-5.1.0_PATCH
# cd    /usr/NetBSD-5.1.0_PATCH
# ftp ftp://ftp.jp.netbsd.org/pub/NetBSD-daily/netbsd-5-1/201104041800Z/source/sets/
	... 略 ...
ftp> mget *
	... 略 ...
ftp> quit
# tar zxf gnusrc.tgz
# tar zxf sharesrc.tgz
# tar zxf src.tgz
# tar zxf syssrc.tgz
# cd usr/src
# ftp ftp://ftp.fml.org/pub/NSRG/tips/NetBSD/usr/src/netbsd-build.sh
	... 略 ...
# sh netbsd-build.sh release
	... 略 ...
# sh netbsd-build.sh iso-image
	... 略 ...

これで、

/var/tmp/build.i386.netbsd-5.1.0_PATCH/release
以下に、.tgz ファイル群と i386cd.iso が作成されているはずです。 以下の場所を見てみて下さい。
/var/tmp/build.i386.netbsd-5.1.0_PATCH/release/i386/binary/sets/
/var/tmp/build.i386.netbsd-5.1.0_PATCH/release/iso

わかってくれたかな? /var/tmp/build.i386.netbsd-5.1.0_PATCH/release は ftp サーバにある /pub/NetBSD/NetBSD-5.1/ 以下に相当するディレクトリなのです。 ここに置かれているものを、任意のバージョンで作れるようになったわけです。

あとは、 i386cd.iso を CD メディアに焼き、 サーバ構築 の作業に入るだけです。

netbsd-build.sh って何だ?

説明しよう!(声:(故)冨沢敬)

しかも最初の方から(うげげ)。あ、でも、なるたけ短く。

/usr/src 以下をよく見てください。 Makefile と build.sh とありますね?

歴史順で説明すると、 まずは make するものでした。 make release すると、上のような配布セットが作られるという具合。

ただし、make するのはターゲットマシンごとに各マシンの担当者( 正確には port ごとの話で、port の責任者が portmaster)のお仕事。 とても大変。

2.0 リリースに向け、 lukem@netbsd.org (Luke Mewborn)は、 このあたりをがっつり再編し、 /usr/src/build.sh というスクリプトが作られました。 [1]

build.sh により、 (1) 「配布しようとしているソース」からツール(例: gcc)を作る、 (2) そのツール(例: gcc)を使い「配布しようとしているソース」をコンパイルする、 [2] ようになりました。 さらに、クロスコンパイルも出来るようになり、 劇速の i386 で全アーキテクチャアを自動生成できるようになり、 portmaster の仕事が爆裂楽になりました、とさ。

だから build.sh に慣れなさいね。お、し、ま、い。

p.s. あ、そうそう、 netbsd-build.sh は、 さらに build.sh を wrap するだけのスクリプトです。 作業ディレクトリの指定、 作業先の DISK サイズは十分か?など、 最低限のおまけ処理だけをしています。 だから「build.sh を使う」の方が王道ですよ? (でも指定方法を忘れちゃうので、よく使うところだけくくりだしてみたんだよん、 だって面倒なんだもん)

netbsd-build.sh 実行例

まず /var/tmp/build-5.1.0_PATCH/tools 以下に、 ツール群を作るところから始まります。 最初は make (nbmake) です。 そして gcc が…などと続き、 ユーザランドを作成し、 カーネルを作ります。 作業途中のものは /var/tmp/build-5.1.0_PATCH/obj 完成したものが /var/tmp/build-5.1.0_PATCH/dest に置かれています。 最終的に .tgz 形式のアーカイブを作り、そのチェックサムを取ります。 これらの生成物が /var/tmp/build-5.1.0_PATCH/release/i386/binary/sets 以下に置かれます。


===> build.sh command: build.sh -M /var/tmp/build-5.1.0_PATCH/obj -T /var/tmp/build-5.1.0_PATCH/tools -D /var/tmp/build-5.1.0_PATCH/dest -R /var/tmp/build-5.1.0_PATCH/release release
===> build.sh started: Thu Aug 25 11:39:26 JST 2011
===> NetBSD version:   5.1.0_PATCH
===> MACHINE:          i386
===> MACHINE_ARCH:     i386
===> Build platform:   NetBSD 5.1 i386
===> HOST_SH:          /bin/sh
===> No /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake, needs building.
===> Bootstrapping nbmake
checking for sh... /bin/sh

	... snip ...

config.status: creating buildmake.sh
cc  -O -DDEFSHELL_CUSTOM="/bin/sh" -DHAVE_SETENV=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1 -DHAVE_VSNPRINTF=1  -c /usr/src/tools/make/../../usr.bin/make/arch.c

	... snip ...

#    objdir  /var/tmp/build-5.1.0_PATCH/obj/usr/src/tools
===> TOOLDIR path:     /var/tmp/build-5.1.0_PATCH/tools
===> DESTDIR path:     /var/tmp/build-5.1.0_PATCH/dest
===> RELEASEDIR path:  /var/tmp/build-5.1.0_PATCH/release
===> Created /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake
===> makewrapper:      /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake-i386
===> Updated /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake-i386
distribution ===> .
build ===> .	(with: NOPOSTINSTALL=1)
Build started at: Thu Aug 25 11:39:36 JST 2011
check-tools ===> .
cleandir ===> .
cleandir ===> tools

	... snip ...

for i in MD5 SHA512; do  mv /var/tmp/build-5.1.0_PATCH/release/i386/binary/sets/$i.tmp /var/tmp/build-5.1.0_PATCH/release/i386/binary/sets/$i;  done
make release started at:  Thu Aug 25 11:39:36 JST 2011
make release finished at: Thu Aug 25 15:01:37 JST 2011
===> Successful make release
===> build.sh ended:   Thu Aug 25 15:01:37 JST 2011
===> Summary of results:
	 build.sh command: build.sh -M /var/tmp/build-5.1.0_PATCH/obj -T /var/tmp/build-5.1.0_PATCH/tools -D /var/tmp/build-5.1.0_PATCH/dest -R /var/tmp/build-5.1.0_PATCH/release release
	 build.sh started: Thu Aug 25 11:39:26 JST 2011
	 NetBSD version:   5.1.0_PATCH
	 MACHINE:          i386
	 MACHINE_ARCH:     i386
	 Build platform:   NetBSD 5.1 i386
	 HOST_SH:          /bin/sh
	 No /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake, needs building.
	 Bootstrapping nbmake
	 TOOLDIR path:     /var/tmp/build-5.1.0_PATCH/tools
	 DESTDIR path:     /var/tmp/build-5.1.0_PATCH/dest
	 RELEASEDIR path:  /var/tmp/build-5.1.0_PATCH/release
	 Created /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake
	 makewrapper:      /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake-i386
	 Updated /var/tmp/build-5.1.0_PATCH/tools/bin/nbmake-i386
	 Successful make release
	 build.sh ended:   Thu Aug 25 15:01:37 JST 2011
===> .

Notes

[1]

おかげで fdgw が動かなくなりました ;-) いや、だから仕事しろよ>おれ。

[2]

5.1 を 5.0.2 のツール(cc など)で compilie してはいけない。

5.0.2 で 5.1 のツール一式(cc など)を作り、 5.1 のツール(cc など)で 5.1 を build する。

[HOME] [研究室] [github] [twitter] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .
Copyright (C) 1993-2018 Ken'ichi Fukamachi mail:< fukachan at fml.org >