特定の箇所だけコンパイルしたいということもあるかもしれませんが、 そういう人は各自努力ということで、宿題としておきましょう。
本節では、 「特定の NetBSD バージョンのソースコードをコンパイルする」 方法について説明します。
目標はバイナリの配布セット(.tgz 形式と ISO 形式)の作成です。 なお、ISO ファイルとは、インストール CD そのものです。
NetBSD のソースコードを準備し、展開して下さい。 各バージョンのソースコードの取り寄せ方、展開の仕方等は、 前節までに説明してあります。 分からない人は、まず前節までを読み返してください。
では、はじめましょう。
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 メディアに焼き、 サーバ構築 の作業に入るだけです。
説明しよう!(声:(故)冨沢敬)
しかも最初の方から(うげげ)。あ、でも、なるたけ短く。
/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 を使う」の方が王道ですよ? (でも指定方法を忘れちゃうので、よく使うところだけくくりだしてみたんだよん、 だって面倒なんだもん)
まず /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 ===> .
[1] | おかげで fdgw が動かなくなりました ;-) いや、だから仕事しろよ>おれ。 |
[2] | 5.1 を 5.0.2 のツール(cc など)で compilie してはいけない。 5.0.2 で 5.1 のツール一式(cc など)を作り、 5.1 のツール(cc など)で 5.1 を build する。 |
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >