dpkg-architecture(1) パッケージのビルドに用いられたアーキテクチャの設定と判別

書式

dpkg-architecture [option...] [command]

説明

dpkg-architecture は、パッケージのビルドに用いられたビルドおよびホストのアーキテクチャを判別する機能を提供する。

ビルドアーキテクチャは、常に dpkg(1) を呼び出すことで判別される。コマンドラインから設定することはできない。

ホストのアーキテクチャは -a もしくは -t オプションにより指定することができる。デフォルトは、外部プログラムの gcc(1) を呼び出して判別するが、CC や gcc が利用できない場合は、ビルドのアーキテクチャと同じ値が設定される。-a-t オプションは、いずれかを指定すればよく、他方はその値に応じたデフォルト値に設定される。dpkg-architecture は、他方に対してデフォルト値に合致しない値が設定されると警告を発するため、実用上も、いずれか片方のみを指定することが好ましい。

コマンド

-l
環境変数の値を 1 行に 1 つずつ、VARIABLE=value 形式で表示する。これは、デフォルトの動作である。
-edebian-architecture
アーキテクチャとの合致性を比較する。デフォルトでは、debian-architecture が現在のホストの Debian アーキテクチャと比較される。このオプションでは、アーキテクチャワイルドカードは展開されない。コマンドは、アーキテクチャが合致すると 0 を、合致しないと 1 を戻り値として返却する。
-iarchitecture-wildcard
アーキテクチャワイルドカードとして architecture-wildcard を展開し、現在の Debian アーキテクチャと比較することにより、アーキテクチャの同一性を確認する。コマンドは、アーキテクチャが合致すると 0 を、合致しないと 1 を戻り値として返却する。
-qvariable-name
指定した単一の変数の値を表示する。
-s
変数をエクスポートするコマンドを出力する。これは、eval を用いて環境変数を設定する際に使用することができる。
-u
-s と同様は逆に、すべての変数を未設定にするコマンドを表示する。
-c command
すべての変数が指定された値に設定された環境で、command を実行する。
-L
有効なアーキテクチャ名の一覧を表示する。
-?, --help
利用方法を表示して終了する。
--version
バージョン情報を表示して終了する。

オプション

-adebian-architecture
Debian アーキテクチャを設定する。
-tgnu-system-type
GNU システムタイプを設定する。
-f
スクリプトが使用する (例えば dpkg-architecture が使用する) 環境変数と同じ名前の環境変数が既に存在していた場合、この強制フラグを設定していない限り、既存の値がそのまま残される。このオプションにより、dpkg-architecture の呼び出し後に、別のスクリプト (例えば dpkg-buildpackage(1)) が実行される際に、変数の値を上書きすることが可能となる。

用語

ビルド (build) マシン
パッケージのビルドが実行されるマシン
ホスト (host) マシン
パッケージのビルドの対象となるマシン
Debian アーキテクチャ
Debian のアーキテクチャを示す文字列で、FTP アーカイブ内のバイナリツリーを指定する。例: i386, sparc, hurd-i386 。
アーキテクチャワイルドカード
アーキテクチャワイルドカードは、アーキテクチャ文字列のある部分に関して実際に存在している任意のアーキテクチャ文字列にマッチする特別なアーキテクチャ文字列である。一般的には、 <kernel>-<cpu> という形式をとる。例: linux-any, any-i386, hurd-any 。
GNU システムタイプ
ダッシュで区切られた 2 つの部分、CPU とシステム名からなるアーキテクチャを識別する文字列。例: i386-linux-gnu, sparc-linux-gnu, i386-gnu, x86_64-netbsd 。

変数

dpkg-architecture により設定される変数を以下に示す。
DEB_BUILD_ARCH
ビルドマシンの Debian アーキテクチャ
DEB_BUILD_ARCH_OS
ビルドマシンの Debian システム名
DEB_BUILD_ARCH_CPU
ビルドマシンの Debian CPU 名
DEB_BUILD_ARCH_BITS
ビルドマシンのポインタサイズ (ビット単位)
DEB_BUILD_ARCH_ENDIAN
ビルドマシンのエンディアン (little / big)
DEB_BUILD_GNU_CPU
DEB_BUILD_GNU_TYPECPU の部分
DEB_BUILD_GNU_SYSTEM
DEB_BUILD_GNU_TYPE のシステムの部分
DEB_BUILD_GNU_TYPE
ビルドマシンの GNU システムタイプ
DEB_BUILD_MULTIARCH
ビルドマシンの GNU システムタイプ、ファイルシステムのパスに使用するよう整形済。
DEB_HOST_ARCH
ホストマシンの Debian アーキテクチャ
DEB_HOST_ARCH_OS
ホストマシンの Debian システム名
DEB_HOST_ARCH_CPU
ホストマシンの Debian CPU 名
DEB_HOST_ARCH_BITS
ホストマシンのポインタサイズ (ビット単位)
DEB_HOST_ARCH_ENDIAN
ホストマシンのエンディアン (little / big)
DEB_HOST_GNU_CPU
DEB_HOST_GNU_TYPECPU 部分
DEB_HOST_GNU_SYSTEM
DEB_HOST_GNU_TYPE のシステム部分
DEB_HOST_GNU_TYPE
ホストマシンの GNU システムタイプ
DEB_HOST_MULTIARCH
ホストマシンの GNU システムタイプ、ファイルシステムのパスに使用するよう整形済。

DEBIAN/RULES

dpkg-architecture によって設定された環境変数は、make 変数 (make のドキュメントを参照のこと) としてdebian/rules に渡される。しかし、スクリプトが手動で実行される場合を考慮すると、上記の点に依存すべきではない。dpkg-architecture の -q オプションを用いて、常に初期化を行うようにすべきである。パッケージのクロスコンパイルのサポートの改善方法を示す例を幾つか提示する:

GNU システムタイプを取得し、それを ./configure に引き渡す:

DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
[...]
configure --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)

特定のアーキテクチャに特化した処理を行う:

DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)
ifeq ($(DEB_HOST_ARCH),alpha)
  [...]
endif

ただし、CPU か OS タイプのみをチェックしたい場合は、DEB_HOST_ARCH_CPU や DEB_HOST_ARCH_OS 変数を使用する。

dpkg-architecture が提供可能なすべての変数を適切に設定する目的で、外部の Makefile スニペットに依存することも可能である:

include /usr/share/dpkg/architecture.mk
ifeq ($(DEB_HOST_ARCH),alpha)
  [...]
endif

いかなる場合も、パッケージのビルド中にアーキテクチャ情報を取得する目的で、dpkg --print-architecture を使用すべきではない。

後方互換性

/usr/share/dpkg/architecture.mk Makefile スニペットは、dpkg-dev 1.16.1 以降で提供されている。

DEB_*_ARCH_BITS と DEB_*_ARCH_ENDIAN 変数は、dpkg-dev 1.15.4 から導入された。そのため、これらを debian/rules で使用する時は、build-dependency として、dpkg-dev (>= 1.15.4) が必要となる。

DEB_HOST_ARCH_CPU と DEB_HOST_ARCH_OS 変数は、dpkg-dev 1.13.2 から導入された。

-e および -i オプションは、比較的新しいバージョンの dpkg-architecture (dpkg 1.13.13 以降) にのみ存在する。

dpkg-buildpackage-a オプションを認識して、これをdpkg-architecture に引き渡す。以下に実行例を幾つか示す:
CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
eval `dpkg-architecture -u`

あるアーキテクチャが現在のアーキテクチャと同一かどうかのチェック:

dpkg-architecture -elinux-alpha
dpkg-architecture -amips -elinux-mips

現在のアーキテクチャ、もしくは -a で提供されたアーキテクチャが Linux かどうかのチェック:

dpkg-architecture -ilinux-any
dpkg-architecture -ai386 -ilinux-any

ファイル

dpkg-architecture が動作するためには、以下のファイルが存在している必要がある。ファイルの位置は、環境変数 DPKG_DATADIR を設定することで、実行時に変更することができる。
/usr/share/dpkg/cputable
認識される CPU 名と、GNU 名へのマッピングテーブル
/usr/share/dpkg/ostable
認識される OS 名と、GNU 名へのマッピングテーブル
/usr/share/dpkg/triplettable
Debian アーキテクチャの文字列 (triplets) と Debian アーキテクチャ名とのマッピング

翻訳者

高橋 基信 <[email protected]>. 喜瀬 浩 <[email protected]>. 関戸 幸一 <[email protected]>. 鍋谷 栄展 <[email protected]>. 倉澤 望 <[email protected]>. 石川 睦 <[email protected]>. 鵜飼 文敏 <[email protected]>. 中野 武雄 <[email protected]>.

翻訳校正

Debian JP Documentation ML <[email protected]>.