我用來編譯 Yocto 的 Docker 環境

最近重新整理一下我用來編譯 Yocto Project 用的 Docker 環境,決定把它拉成獨立的腳本放出,你可以到 coldnew/docker-yocto 找到 。

為什麼要用 Docker 建立環境來編譯呢?在我這幾年使用 Yocto 的經驗,就是它對於 Host Machine 的依賴性太強。 我自己習慣使用 Gentoo Linux 也因為套件比較新,常常遇到 舊版本的 Yocto 在編譯 Host 端工具之類的,因為找到系統端的依賴然後編譯不過,也因此最省麻煩的方式,還是依照 Yocto Project Reference Manual 上面所說的,使用指定的 Linux 發行板。

但是我就是不想用非 Gentoo Linux 外的發行板以及使用虛擬機呀 (笑),所以就用 Docker 建立了自己的環境。

整個專案的說明以及用法請往下看:

專案說明

coldnew/docker-yocto 裡面的檔案結構大致上如下:

. <b>
├── Dockerfile
├── entrypoint.sh
├── Makefile
├── README.md
└── yocto-build.sh <g>

0 directories, 5 files

其中 Dockerfile, entrypoint.sh 以及 Makefile 是我用來建立 docker image 所使用的腳本,產生出來的 docker image 可以在 DockerHub 找到。

yocto-build.sh 則是我用來下載新的 docker image 以及切換到 docker 環境用的腳本。

安裝方式

要使用這套環境,首先需要下載 yocto-build.sh 到電腦的 ~/bin 環境,這邊將其變成 ~/bin/yocto-build 這樣的執行檔案

mkdir -p ~/bin
curl https://raw.githubusercontent.com/coldnew/docker-yocto/master/yocto-build.sh > ~/bin/yocto-build
chmod +x ~/bin/yocto-build

如果你的 ~/bin 沒有在系統的 PATH 變數的話,則需要在你的 ~/.bashrc 加入以下這行,並開新的 shell

export PATH=~/bin:$PATH

這會讓你的系統可以找到 ~/bin 裡面的執行檔。

使用方式

下面就讓我來介紹我這個 repo 的使用方式吧,當然,如果要更完整的說明可以使用以下命令獲得:

coldnew@gentoo ~ $ yocto-build --help

建立 workdir

第一次使用的時候,需要告知 yocto-build 你編譯 Yocto 用的資料夾,以我的範例為例則是 /home/coldnew/poky ,因此要這樣使用

coldnew@gentoo ~ $ yocto-build --workdir /home/coldnew/poky

指定好編譯目錄後,當前的 shell 就會直接切入到 docker 環境並將 /home/coldnew/poky 掛載到 /yocto 去,就像這個樣子

coldnew@8f58141dae3d:/yocto$

這個環境就是符合 Yocto 編譯用的環境,所以可以直接在裡面放心的使用 bitbake。

(在 docker 裡面的 UID 和 GID 會和原來的使用者相同)

除此之外,如果你的 Host 電腦是 Linux,因為 yocto-build.sh 這腳本會自動掛載 /tmp/.X11-unix 到 docker 去,因此也可以透過 bitbake -c devshell 命令呼叫出圖形的終端機出來。

coldnew@8f58141dae3d:/yocto$ bitbake -c devshell busybox

切新的 shell

如果要切新的 shell 進到這個 container,則使用

coldnew@gentoo ~ $ yocto-build --shell

這會建立新的 shell 連接到 container 去

移除 container

如果你編譯完成了,不想要這個 container, 則可以透過以下命令去刪除它

coldnew@gentoo ~ $ yocto-build --rm

更新腳本

如果你需要更新 yocto-build.sh,使用以下命令即可達成

coldnew@gentoo ~ $ yocto-build --upgrade

更新 Docker Image

假設當前編譯 Yocto 用的 Docker Image 出現編譯不過的情況,則可以考慮更新 Docker Image

coldnew@gentoo ~ $ yocto-build --pull

後記

這個腳本理論上是跨平台,甚至是可以在 Mac OSX 下使用,不過之前在 Mac OSX 測試時出現一些 Docker 相關的錯誤,所以目前還只能用於 Linux 端的系統。