BUILD(7) | FreeBSD Miscellaneous Information Manual | BUILD(7) |
名称
build — どのようにシステムを構築するかの情報解説
FreeBSD システムとそのアプリケーションのためのソースは、3 つの異なったディレクトリ、通常 /usr/src, /usr/doc と /usr/ports に含まれています。これらのディレクトリは、 csup(1), svn(1) または portsnap(8) で更新されるまで、最初に空であるか、または存在しないかもしれません。ディレクトリ /usr/src は、システムを役に立つ状態に再建する必要があるものとして大まかに定義されている、“基本システム”のソースを含んでいます。ディレクトリ /usr/doc は、マニュアルページを除いて、システム文書のためのソースを含んでいます。ディレクトリ /usr/ports は、サードパーティのアプリケーションを構築して、インストールするための一貫したインタフェースを提供するツリーを含んでいます。 port 構築プロセスに関する詳細については、 ports(7) を参照してください。そのディレクトリにあるものを構築して、インストールするために、それぞれこれらのディレクトリで、 make(1) コマンドを使用します。それらのディレクトリの任意のディレクトリまたはサブディレクトリで make(1) コマンドを発行することは、そのディレクトリのすべてのサブディレクトリで同じコマンドを発行するのと同じ効果があります。指定されてるターゲットがなければ、そのディレクトリのものが、単に構築されます。
ソースツリーは、読み込み専用であることが認められています。 make(1) で説明されるように、オブジェクトは、環境変数 MAKEOBJDIRPREFIX によって指定された個別のオブジェクトディレクトリ階層構造に、または変数 MAKEOBJDIRPREFIX が設定されないなら、 /usr/obj の下で、通常、構築されます。与えられたソースディレクトリについて、正規のオブジェクトディレクトリは、 make(1) 変数 MAKEOBJDIRPREFIX が設定されるなら、 ${MAKEOBJDIRPREFIX}${.CURDIR}、またはこの変数が設定されていないなら、 /usr/obj${.CURDIR} となります。クロス構築は、下記の buildworld ターゲットのために文書で説明されているようにオブジェクトディレクトリを設定します。
構築は、下記の 環境変数 セクションで説明された make(1) 変数を定義し、 make.conf(5) に文書化された変数によって制御されます。
次ののリストは、構築システムによってサポートされたターゲットのための名前と動作を規定しています:
- clean
- 構築プロセスの間に作成されたすべてのファイルを削除します。
- cleandepend
-
以前の“
make depend
”ステップによって生成されたファイル ${.OBJDIR}/${DEPENDFILE} 削除します。 - cleandir
-
存在しているなら、正規のオブジェクトディレクトリを削除するか、または行わないなら、“
make clean cleandepend
”と同等な動作を実行します。それが存在しているなら、このターゲットは、 ${.CURDIR} で obj リンクを取り外します。“
make cleandir
”を二度を実行することは賢明です: 最初の実行は、正規のオブジェクトディレクトリを削除し、2 番目のものは、 ${.CURDIR} をクリアします。 - depend
- ファイル ${.OBJDIR}/${DEPENDFILE} の構築の依存のリストを生成します。
- install
- 変数 DESTDIR で指定されたインストールディレクトリの階層構造の適切な位置に構築の結果をインストールします。
- obj
- カレントディレクトリに関連した正規のオブジェクトディレクトリを作成します。
- objlink
- ${.CURDIR} の正規のオブジェクトディレクトリにシンボリックリンクを作成します。
- tags
- make(1) の変数 CTAGS で指定されたプログラムを使用して、tag ファイルを生成します。 build (構築) システムは、 ctags(1) と GNU Global をサポートしています。
ディレクトリ /usr/src の下の、他のサポートされたターゲットは、次の通りです:
- buildenv
-
システムをクロス構築するために、環境変数が設定されている状態で、対話的なシェルを起動します。ターゲットのアーキテクチャは、
make(1) 変数
TARGET_ARCH と
TARGET で指定される必要があります。
このターゲットは、コンパイラ、リンカ、アセンブラ、ヘッダとライブラリを含む完全なクロスツールチェーン (cross-toolchain) が構築された後のみ、役にたちます。下記の toolchain ターゲットを参照してください。
- buildworld
- カーネル以外のすべてのものを構築し、 etc と release ディレクトリ内のファイルを設定します。使用される実際の構築位置の接頭辞は、ネイティブの構築のためには、 ${MAKEOBJDIRPREFIX}${.CURDIR} で、クロス構築と変数 CROSS_BUILD_TESTING が設定されたネイティブの構築のためには、 ${MAKEOBJDIRPREFIX}/${TARGET}${.CURDIR} です。
- cleanworld
- 前の buildworld ステップで構築されたターゲットのクリーンアップを試みます。
- distributeworld
- 前の buildworld ステップでコンパイルされたすべてを配布します。ファイルは、 make(1) 変数 DISTDIR によって指定されたディレクトリの階層構造に置かれます。このターゲットは、リリースを構築している間に使用されます。 release(7) を参照してください。
- packageworld
- DISTDIR に結果を置いて、 distributeworld の結果をアーカイブします。このターゲットは、リリースを構築している間に使用されます。 release(7) を参照してください。
- installworld
-
前の
buildworld ステップで構築されたものすべてを
make(1) 変数
DESTDIR で指されたディレクトリの階層構造にインストールします。
NFS ファイルシステムにインストールして、 -j オプションをつけて make(1) を実行しているなら、 rpc.lockd(8) がクライアントとサーバの両方で実行していることを確認してください。ブート時にどのように開始させるかについては、 rc.conf(5) を参照してください。
- toolchain
- システムの残りを構築するために必要な構築ツールチェーン (toolchain) を作成します。クロスアーキテクチャの構築のために、このステップは、クロスツールチェーン (cross-toolchain) を作成します。
- universe
- 各アーキテクチャについて、 LINT を含むそのアーキテクチャに関してすべてのカーネルに対して buildworld に続いて buildkernel を実行します。このコマンドは、長い時間かかります。
- update
- make.conf(5) で設定されるように更新されたされたソースを取得します。
- targets
- world と kernel ターゲットのためにサポートされた TARGET / TARGET_ARCH のペアのリストを印刷します。
- tinderbox
- universe と同じターゲットを実行します。さらに、終了時にすべての失敗したターゲットの概要を印刷し、 1 つでも失敗していれば、エラーで終了します。
- toolchains
- build システムによってサポートされる各アーキテクチャに対して build toolchain を作成します。
/usr/src のカーネルの特有の構築ターゲットは、次の通りです:
- buildkernel
- カーネルとカーネルモジュールを再構築します。
- installkernel
- カーネルとカーネルモジュールをディレクトリ ${DESTDIR}/boot/kernel にインストールし、現在実行しているカーネルがそれに含まれているなら、存在しているディレクトリを kernel.old に名前を変更します。 ${DESTDIR} の下のターゲットディレクトリは、 INSTKERNNAME と KODIR make(1) 変数を使用して変更できます。
- distributekernel
- ディレクトリ ${DISTDIR}/kernel/boot/kernel にカーネルをインストールします。このターゲットは、リリースを構築している間に使用されます。 release(7) を参照してください。
- packagekernel
- DISTDIR に結果を置いて、 distributekernel の結果をアーカイブします。このターゲットは、リリースを構築している間に使用されます。 release(7) を参照してください。
- kernel
- buildkernel に続いて installkernel を行うのと同等です。
- kernel-toolchain
- カーネルのコンパイルに必要なツールを再構築します。最初に buildworld を行わなかったなら、これを使用します。
- reinstallkernel
- ターゲットディレクトリの内容を上書きして、カーネルとカーネルモジュールを再インストールします。 installkernel ターゲットと同様に、 make(1) 変数 INSTKERNNAME を使用してターゲットディレクトリを指定することができます。
変数 DESTDIR によって指示されるインストール先ディレクトリをクリーンアップするための便利なターゲットは、次の通りです:
- check-old
- システム中の古いファイルとディレクトリのリストを印刷 (表示) します。
- delete-old
-
不要になったベースシステムのファイルとディレクトリを対話形式に削除します。
-DBATCH_DELETE_OLD_FILES
がコマンドラインで指定されるとき、削除操作は、非対話形式に行われます。変数 DESTDIR, TARGET_ARCH と TARGET は、“make installworld
”で設定されるべきです。 - delete-old-libs
-
不要になったベースシステムライブラリを対話形式に削除します。このターゲットは、サードパーティのソフトウェアがこれらのライブラリを使用しない場合にだけ使用されるべきです。
-DBATCH_DELETE_OLD_FILES
がコマンドラインで指定されるとき、削除操作は、非対話形式に行われます。変数 DESTDIR, TARGET_ARCH と TARGET は、“make installworld
”で設定されるべきです。
環境変数
すべての構築に影響する変数は、次の通りです:- DEBUG_FLAGS
- /usr/src 下のすべてのユーザランドのバイナリを構築するために使用される 1 組ののデバッグフラグを定義します。 DEBUG_FLAGS が定義されるとき、 install と installworld ターゲットは、デバッグ情報がインストールされたバイナリで保持し続けるように、ストリップしないで現在の MAKEOBJDIRPREFIX からバイナリをインストールします。
- DESTDIR
- 構築されたオブジェクトがインストールされるディレクトリの階層構造の接頭辞。設定されていないなら、 DESTDIR は、空の文字列をデフォルトとします。
- MAKEOBJDIRPREFIX
- 構築オブジェクトのツリーのディレクトリ名のための接頭辞を定義します。定義されないなら、 /usr/obj をデフォルトとします。この変数は、 /etc/make.conf またはコマンドラインを通して設定されるのではなく、環境変数でのみ設定されべきです。
- NO_WERROR
- 定義されるなら、makefile がその他を警告したとしても、コンパイラの警告によって構築を停止しません。
- WITH_CTF
- 定義されるなら、構築プロセスは、構築オブジェクトで DTrace CTF 変換ツールを実行します。
さらに、 /usr/src の構築は、次の make(1) 変数によって影響されます:
- KERNCONF
- 様々なカーネル make ターゲットを構築してインストールするカーネルを上書きします。デフォルトは、 GENERIC です。
- KERNFAST
- 設定されるなら、構築するターゲット buildkernel は、 NO_KERNELCLEAN, NO_KERNELCONFIG, NO_KERNELDEPEND と NO_KERNELOBJ の設定をデフォルトとします。 1 以外の値に設定されると、 KERNCONF は、 KERNFAST の値に設定されます。
- LOCAL_DIRS
- 設定されるなら、この変数は、ソースツリーのルート (根) に相対的な、構築するための追加ディレクトリのリストを提供します。
- PORTS_MODULES
-
buildkernel と
installkernel 処理の一部として、構築されインストールされるべきカーネルモジュールがある port のリスト。
make PORTS_MODULES=emulators/kqemu-kmod kernel
- SUBDIR_OVERRIDE
-
サブディレクトリのデフォルトリストを上書きし、この変数で指定されたサブディレクトリのみを構築します。この変数は、デバッグで構築に失敗したとき、役に立ちます。
make some-target SUBDIR_OVERRIDE=foo/bar
- TARGET
-
ターゲットのハードウェアプラットホーム。これは、“
uname
-m”の出力に類似しています。ターゲットアーキテクチャをクロス構築するために必要な変数です。例えば、 PC98 マシンのためのクロス構築は、
TARGET_ARCH=
i386
と TARGET=pc98
を必要とします。設定されていないなら、 TARGET は、現在のハードウェアプラットフォームをデフォルトとします。 - TARGET_ARCH
- ターゲットとなるマシンプロセッサアーキテクチャ。この環境変数は、“ uname -p”に類似しています。異なるアーキテクチャのためにクロス構築するには、この環境変数を設定してください。設定されないなら、 TARGET_ARCH は、現在のマシンアーキテクチャをデフォルトとし、また、 TARGET が設定されていないなら、その場合、そのプラットフォームのために適切な値をデフォルトとします。通常、 TARGET を設定する必要があるだけです。
また、ディレクトリ /usr/src 下での構築は、 make(1) の -D オプションを使用して、1 つ以上の次のシンボルを定義することによって、影響されます:
- NO_CLEANDIR
- 設定されるなら、オブジェクトツリーの部分をクリーンにする構築ターゲットは、“make cleandir”の代わりに“make clean”と同等なものを使用します。
- NO_CLEAN
- 設定されるなら、オブジェクトツリーのファイルは、全くクリーンとなりません。 NO_CLEAN を設定することは、 NO_KERNELCLEAN の意味を含むので、 NO_CLEAN が設定されるとき、カーネルオブジェクトは、何もクリーンされません。
- NO_CTF
- 設定されるなら、構築プロセスは、オブジェクトの構築で、 DTrace CTF 変換ツールを実行しません。
- NO_SHARE
- 設定されるなら、構築は、 /usr/src/share サブディレクトリの中に降下しません (すなわち、マニュアルページ、ローカルデータファイル、タイムゾーンデータファイル、と他の /usr/src/share ファイルは、それらのソースから再構築されません)。
- NO_KERNELCLEAN
- 設定されるなら、構築プロセスは、 buildkernel ターゲットの一部として“make clean”を実行しません。
- NO_KERNELCONFIG
- 設定されるなら、構築プロセスは、 buildkernel ターゲットの一部として config(8) を実行しません。
- NO_KERNELDEPEND
- 設定されるなら、構築プロセスは、 buildkernel ターゲットの一部として“make depend”を実行しません。
- NO_KERNELOBJ
- 設定されるなら、構築プロセスは、 buildkernel ターゲットの一部として“make obj”を実行しません。
- NO_DOCUPDATE
- 設定されるなら、更新プロセスは、“make update”ターゲットの一部として FreeBSD 文書のソースを更新しません。
- NO_PORTSUPDATE
- 設定されるなら、更新プロセスは、“make update”ターゲットの一部として Ports ツリーを更新しません。
- NO_WWWUPDATE
- 設定されるなら、更新プロセスは、“make update”ターゲットの一部として www ツリーを更新しません。
ディレクトリ /usr/doc の下の構築は、次の make(1) 変数によって影響されます:
- DOC_LANG
- 設定されているなら、その内容として指定された言語のサブディレクトリに文書を構築すること禁止します。デフォルトの動作は、すべての言語のために文書を構築することです。
universe ターゲットを使用する構築は、次の make(1) 変数に影響されます:
- JFLAG
- world と kernel を構築するために使用される、それぞれの make(1) 呼び出しに、この変数の値を渡します。連続的に各アーキテクチャを構築する間に、単一のアーキテクチャの構築で複数のジョブを有効にするために、これを使用することができます。
- MAKE_JUST_KERNELS
- それぞれサポートされたアーキテクチャのためにカーネルのみを構築します。
- MAKE_JUST_WORLDS
- それぞれサポートされたアーキテクチャのために world のみを構築します。
- UNIVERSE_TARGET
- world と 1 つ以上のカーネルを構築するデフォルトアクションの代わりにそれぞれサポートされたアーキテクチャのために指定された make(1) ターゲットを実行します。
関連ファイル
- /usr/doc/Makefile
- /usr/doc/share/mk/doc.project.mk
- /usr/ports/Mk/bsd.port.mk
- /usr/ports/Mk/bsd.sites.mk
- /usr/share/examples/etc/make.conf
- /usr/src/Makefile
- /usr/src/Makefile.inc1
使用例
最新のソースから利用者のシステムを更新する“承認された”方法については、 src/UPDATING の COMMON ITEMS のセクションを参照してください。i386 ホスト上で sparc64 アーキテクチャのためのシステムをクロス構築するために次のコマンドのシーケンスを使用することできます:
cd /usr/src make TARGET=sparc64 buildworld make TARGET=sparc64 DESTDIR=/clients/sparc64 installworld
関連項目
cc(1), csup(1), install(1), make(1), svn(1), make.conf(5), src.conf(5), ports(7), release(7), config(8), mergemaster(8), portsnap(8), reboot(8), shutdown(8)作者
<mwm@mired.org>.October 10, 2012 | FreeBSD |