cRIO(RealTimeLinux) C/C++ SDKをDockerで動かす
cRIO(RealTime Linux)用C/C++SDKをDockerで動かす
前回の投稿「 cRIO(RealTimeLinux)用のC/C++クロスコンパイル環境をUbuntu上に作る - 取るに足らないブログ 」では、UbuntuにcRIO(RealTIme Linux)のC/C++ SDKをインストールする話でしたが、 今回は、さらにDockerにC/C++SDKをインストールして、ビルドする環境を作ってみます。
インターネットに接続できてDockerがインストールしてあるPCがあれば、 DockerfileからSDKの入ったコンテナーイメージがすぐに作れます。
LabVIEW開発をメインでやっている人が一時的にC/C++ビルドできる環境を用意したい
といった場合は、Dockerでビルドできる環境を作ったほうが楽かもしれない、という話。
実際、Dockerfileは数行だしコピペで作って、Docker buildすれば、あら不思議、30分もかからずに
ビルドできる環境が手に入る。いらなくなれば作成したイメージを消せばよい。
C/C++ SDK ダウンロード
ひとまず、必要なのは、cRIO(RealTime Linux)用C/C++SDKです。
以下のページがからダウンロードしてください。
GNU C & C++コンパイルツールx64 のダウンロード - NI
DockerfileとSDKインストーラ
適当なフォルダを作成して、以下のDockerfileと、ダウンロードしたSDKのファイルを配置します。
Dockerfile
From ubuntu:20.04 RUN apt-get update && apt-get install -y \ python3 \ cmake \ ninja-build RUN cd /tmp; mkdir sdkdir; COPY oecore-x86_64-core2-64-toolchain-6.0.sh /tmp/sdkdir RUN chmod +x /tmp/sdkdir/oecore-x86_64-core2-64-toolchain-6.0.sh \ && /tmp/sdkdir/oecore-x86_64-core2-64-toolchain-6.0.sh RUN rm -rf /tmp/sdkdir
Docker イメージビルド
DockerfileとSDKインストーラのあるフォルダに移動
Dockerビルドコマンドを実行
$ docker build -t <tagname>:<version> .
baseは、Ubuntu20.04(64bit)にした。
インストーラをコンテナー側にコピーした後にインストールするのが無駄な気がするが うまい方法が見つからなかったので、ひとまずこのまま。
作成したDocker イメージの確認
$ docker images
Dockerのイメージサイズが3G超えている。
Ubuntu自体は72Mなので、SDK、その他もろもろの方がでかそう。
Docker コンテナを実行
ホームディクトリにソースを配置するフォルダを作成(以下の例ではworkとした)
ソースをそのフォルダにコピーして、Dockerコンテナーを動かす。
$ docker run -it --rm -v $PWD:/work <tagname>:<version> /bin/bash
docker では --it /bin/bashとすれば、コンテナ側の端末を開いた状態になるので、
そこで、CMakeやninjaを使ってビルドする、という形になる。
-v で、ソース、プロジェクトのあるフォルダをDockerコンテナ側に割り当てます。
ソースの編集・ビルド
ソースの編集などは、LinuxとかWindowsのVisualStudioCodeなど、ホスト側で使い慣れたもので編集、 ビルドは、Dockerコンテナーの端末から実行する、形になります。
サンプルソース
サンプルソースはこちら