なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz
家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn fakeroot worker to run ... というエラーメッセージが出て終わってしまう。
そもそもLinux MintはpetalinuxがサポートしているLinuxディストリビューションではないのだが、更新前のバージョン21.3ではビルド出来ていた。
ただし、XilinxのAnswerを見るとサポートディストリビューションのSUSEでも同様のエラーが出る事例があるようだ。
ネットを検索してみたが対処法は見つからなかった。 とは言え、Mintのバージョンを21.3に戻すのも嫌なので Virtualboxに仮想マシンを作ってそれにLinux Mint 21.3とpetalinuxとpetalinuxのsstate-cacheを入れて動かしてみた。
インストールは問題なく出来たのだが、ビルドに非常に時間がかかる。以前 21.3 でビルドしていた頃は10〜20分位でビルド出来た気がするが仮想マシンだと1時間近くかかった。
他に方法がないかネットで調べたところDockerを使う方法があることを知り、やってみた。
PetaLinux 2020.2のDockerイメージを作成するというブログの記事を参考にさせて頂いた。
有り難いことに、ブログの作者が必要なファイル一式をGitHubで公開されているので早速cloneして中身を見てみた。
DockerのコンテナにUbuntu 18.4のライブラリとpetalinux自体もインストールするようだ。
しかし、私の場合、XilinxのVitis, Vivado, Petalinuxは複数のバージョンを/usr/local/eda/Xilinx/というディレクトリにインストールしており必要に応じて使用するバージョンを選べるようにしている。できればこの運用スタイルは変えたくない。かと言ってそれらのバージョンをDockerのコンテナ内で再インストールするのも面倒だ。また、ビルド出来ないのはOSのライブラリの問題であってpetalinux自体が原因ではない筈なのでpetalinuxは既にインストールしてあるバイナリを使いたい。
ダウンロードしたファイルのrun_base.shを見ると、Dockerは--volumeオプションでホストOS側のディレクトリをコンテナ内のディレクトリにマッピング出来るようなのでこの機能を使用して/usr/local/eda/Xilinx/をコンテナ内の/usr/local/eda/Xilinxにマッピングすることにした。同様に私が普段開発作業するディレクトリ等も--volumeでマッピングすることにした。
ということで、Dockerfileとbuild.shとfiles/entrypoit.shを以下のように変更した。
Dockerfileでは.vimrcは現在の自分の設定を使いたかったのでそれをインストールするようにした。
また、bashのプロンプトにdocker文字列を入れるためにPS1の設定を.bashrcに書いた。
この時点ではこれらのファイルのownerはroot.rootになるので、entrypoint.sh内でchownでownerを変更している。
このやり方の場合、build.shで作成したコンテナをそのまま使用できる。オリジナルのようにbaseコンテナとpetalinuxが入ったコンテナを作る必要は無い。 dockerの起動スクリプトは以下のようにした。 これをplnx.shという名前にして~/bin/に入れて使用する。