はじめに
Yocto Projectではbitbakeを実行するためのDockerコンテナを提供している。
そのコンテナはCROss PlatformS(CROPS)
と呼ばれている。CROPSの詳細はSetting Up to Use CROss PlatformS (CROPS)を参照のこと。
使い方
使い方についてのざっくりな説明はgithubのリポジトリにある。
$ docker run --rm -it -v /home/myuser/mystuff:/workdir crops/poky --workdir=/workdir
/home/myuser/mystruff
を実際の作業場所に置き換えると良い。
HONISTER(3.4.1)をビルドしてみる
作業場所は~/work/yocto/honister
とする。
$ mkdir -p ~/work/yocto/honister && cd ~/work/yocto/honister
ソースの取得
下記のコマンドでpokyのビルド環境をダウンロードする。
$ git clone -b honister git://git.yoctoproject.org/poky.git
CROPSの実行
docker run
する時にコマンドを特に指定しない場合はbash -i
されて、コンテナの中に入ることができる。
$ docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir
一般的には、コンテナの中に入って通常通りのコマンドを実行することになる。
$ source poky/oe-init-build-env $ bitbake core-image-minimal
コンテナ外からの実行
bashでコンテナに入った状態にならないで、bitbakeできる方法は下記のようになる。
$ docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir bash -c "source /workdir/poky/oe-init-build-env && bitbake core-image-minimal"
CROPSの実行を簡単にする
run_crops.sh
などの名前で下記のような内容をシェルスクリプトを作成する。
#!/bin/sh cmd="source /workdir/poky/oe-init-build-env" if [ $# -gt 0 ] ; then cmd="${cmd} && $@" fi docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir bash -c "${cmd}"
実行権限をつけておく。
$ chmod +x ./run_crops.sh
これをPATHの通った場所に格納しておくと下記のように実行できる。
$ run_crops.sh
run_crops.shはpokyディレクトリがある階層で実行する必要がある。
run_crops.shを使ってみる
pokyディレクトリは~/work/yocto/honister
に作成してあるので下記のようにする。
$ cd ~/work/yocto/honister $ run_crops.sh
これでbuildディレクトリが作成されるので、必要に応じてlocal.conf
を編集する。
下記のようにしてbitbakeを実行できる。
$ run_crops.sh bitbake core-image-minimal
古いバージョンのビルド
古いバージョンPokyをビルドする場合、ビルド環境にUbuntu16.04などを使いたい場合がある。 その場合は、下記のようにしてベースのディストリビューションを指定することができる。
$ docker run --rm -it -v $(pwd):/workdir crops/poky:ubuntu-16.04 --workdir=/workdir
これは、CROPSのDockerイメージにタグを打ってあるから。 使用できるベースディストリビューションはdocker hubを参照すると良い。
distro-check.shの方がわかりやすいかもしれない。
下記が2022/01/14時点でサポートしているベースディストリビューションとなる。
distros["centos-7"]="CentOS Linux 7 (Core)" distros["centos-8"]="CentOS Linux 8" distros["debian-9"]="Debian GNU/Linux 9 (stretch)" distros["debian-10"]="Debian GNU/Linux 10 (buster)" distros["debian-11"]="Debian GNU/Linux 11 (bullseye)" distros["fedora-33"]="Fedora 33 (Container Image)" distros["fedora-34"]="Fedora 34 (Container Image)" distros["opensuse-15.2"]="openSUSE Leap 15.2" distros["ubuntu-16.04"]="Ubuntu 16.04" distros["ubuntu-18.04"]="Ubuntu 18.04" distros["ubuntu-20.04"]="Ubuntu 20.04"
まとめ
いまいち、日本語での情報が少ないCROPSについて調査してみた。
CROPSが使えるようになると、Dockerさえ動いていれば基本的にはどんな環境でもbitbakeができるので、Yocto Projectを使用するハードルは下がると思う。 (hostがarmの場合は知らん)
Windows環境でもVMやWSL2を使用するよりは、実行時パフォーマンスやサポート的なところでちょっとはマシになる気がする。