Skip to content

yum/aptリポジトリのマルチアーキテクチャ対応

This content is a draft and will not be included in production builds.

1つのspecファイルから複数のアーキテクチャでビルドしたい場合、切り替えができないので BuildArch を定義してはいけない。代わりに、rpmbuild—target オプションでビルド時に指定する。

Terminal window
rpmbuild --define 'buildarch <arch>' --target <arch>

ビルドしたRPMパッケージは、アーキテクチャごとのディレクトリに入れておき、それぞれをcreaterepoでリポジトリにする。

Terminal window
$ ls repo
aarch64
x86_64
$ createrepo repo/x86_64
$ createrepo repo/aarch64

controlファイルのArchitectureanyとしておき、ビルド時にdebuildコマンドへ -a オプションを渡す。

Terminal window
debuild -a $arch

次に、リポジトリのconf/distributionsファイルを開いて、Architecturesにスペース区切りで必要なアーキテクチャを追加する。

Architectures: amd64
Architectures: amd64 arm64

あとはこれまで通りrepreproを実行するだけで、1つのリポジトリに複数のアーキテクチャを含められる。

Terminal window
reprepro -b repo *.deb

このリポジトリを利用する側では、必要なアーキテクチャをカンマ区切りで記述する。

/etc/apt/source.list.d/xxx.list
deb [arch=amd64,arm64] https://example.com/repo

amd64アーキテクチャのDebianでarm64ビルドする

Section titled “amd64アーキテクチャのDebianでarm64ビルドする”

amd64環境でarm64にCのソースコードをビルドする場合、crossbuild-essential-arm64をインストールする必要がある。Goでcgoを利用する場合も条件は同じ。

Terminal window
sudo apt-get update
sudo pat-get install -y rpm file devscripts crossbuild-essential-arm64