軽量コンテナsystemd-nspawnによるOpenFOAM-v1912導入
目的と趣旨
OpenFOAM-v1912をXubuntu20.04上に導入します。
今回はXubuntuに採用されているシステム管理デーモンsystemd配下の、systemd-nspawnを使用してUbuntu18.04コンテナを作成し、OpenFOAMのインストールを試みます。
ParaViewは ホスト側(Xubuntu20.04)のXサーバに接続して描画できないか挑戦してみました。
なぜsystemd-nspawn?
- 動作が軽い。
- ホスト/コンテナ両方でsystemd-networkdが起動していると、自動でホスト-コンテナ通信を確立してくれる。
- Xubuntuにはsystemdが標準でインストールされているので、セットアップが楽。
- OpenFOAMのコンパイルにしか使わないライブラリとか諸々をホスト側から隔離しておきたい。
- ミスってもコンテナごと消し飛ばせばOK!
- 将来的にはAnsibleなどのサーバー自動設定ツールでゴニョゴニョできるかも...?
なぜDockerを使わない?
今回の環境
- Macbook Pro Early 2015(2 cores/4 threads, RAM 8GB)
- Xubuntu 20.04 (USB3.0-SSDから起動)
導入したいもの
- OpenFOAM-v1912
- ParaView v5.6.3 (OpenFOAM-v1912 に付属)
注意
- 筆者のための作業履歴 兼 備忘録です。手順は最適化されていません。
- root権限で作業する場面が多々あります。コマンドの動作可否、結果について筆者は何ら保証しません。
- 本記事通りに作業しても、OpenFOAM等が動作する保証もありません。
- 特にParaview周りは鬼門だと思います。
作業
コンテナ作成
まずはsystemd-nspawnのためのコンテナを作成します。
UbuntuはDebian系なのでdebootstrapで環境構築が可能です。
### systemd-nspawnに必要なソフトウェアをインストール sudo apt install systemd-container sudo apt install debootstrap ### コンテナのルートディレクトリを作成 ### Ubuntu18.04を導入する。 mkdir container && cd container mkdir Ubuntu1804 sudo debootstrap --arch=amd64 bionic Ubuntu1804 http://archive.ubuntu.com/ubuntu ### コンテナを起動してrootパスワードを設定し、ユーザー(user_nameは任意の文字列)を作成する。 ### user_nameをsudoerに任命し終了する。 sudo systemd-nspawn -D ~/container/Ubuntu1804 passwd adduser user_name gpasswd -a user_name sudo ### ここまでできたら、ctrl + ] x3回でコンテナにkillシグナルを送り、終了する。
X11の整備
コンテナを起動して x window system環境を整えます。
### bオプションを付けてコンテナを起動する。 ### bind-roオプションでコンテナ内のX11アプリケーションをホストの画面に出力させる。(ソケット通信) ### 先程作成したユーザー名とパスワードでログインする。 sudo systemd-nspawn -b -D ~/container/Ubuntu1804 --bind-ro /tmp/.X11-unix:/tmp/.X11-unix ### ダウンローダとテキストエディタをインストール sudo apt install wget vim ### X11アプリケーションをホストの画面に出力させる。 ### DISPLAY変数が設定されていないので、.profileに追記する。 vim ~/.profile '''~/.profile (前略) export DISPLAY=:0.0 ''' ### x window systemを整備する。 sudo apt install x11-utils x11-apps ### 設定がうまく行っているかxeyesでテストしてみる。 ### 表示されないときはホスト側に戻り、xauth, xhostコマンドでlocalhostからの接続を許可する。 xeyes
目玉が表示されればグラフィック周りはひとまず大丈夫です。
OpenFOAM-v1912の導入の前準備
### リポジトリが"http://archive.ubuntu.com/ubuntu bionic main"しか登録されていない。 ### /etc/apt/sources.list を開いて適宜追加する(要root権限)。今回は以下の様に追加した。 sudoedit /etc/apt/sources.list ''' sources.list deb http://archive.ubuntu.com/ubuntu bionic main universe deb http://archive.ubuntu.com/ubuntu bionic-security main universe deb http://archive.ubuntu.com/ubuntu bionic-updates main universe deb-src http://archive.ubuntu.com/ubuntu bionic main universe deb-src http://archive.ubuntu.com/ubuntu bionic-security main universe deb-src http://archive.ubuntu.com/ubuntu bionic-updates main universe ''' ### OpenFOAMソースファイルとThird Partyライブラリ群のダウンロード&解凍する。 mkdir ~/OpenFOAM && cd ~/OpenFOAM wget https://sourceforge.net/projects/openfoam/files/v1912/OpenFOAM-v1912.tgz wget https://sourceforge.net/projects/openfoam/files/v1912/ThirdParty-v1912.tgz tar -xzf OpenFOAM-v1912.tgz && tar -xzf ThirdParty-v1912.tgz ### コンパイルに必要なライブラリやツールをインストールする。 ### (参考) https://openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-v1806/Ubuntu sudo apt install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev sudo apt install libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev sudo apt install qt5-default libqt5x11extras5-dev libqt5help5 qtdeclarative5-dev qttools5-dev sudo apt install libqtwebkit-dev freeglut3-dev libqt5opengl5-dev texinfo sudo apt install libscotch-dev libcgal-dev python python-dev
apt install でxxxxx is not foundエラーが出るときは /etc/apt/sources.listを再確認してください。
"http://jp.archive.ubuntu.com/ubuntu/"の方がDL速いかもしれません。
OpenFOAMをコンパイル
ようやくコンパイルです。コア数の指定を忘れずに...(1敗)
### OpenFOAMをコンパイル source ~/OpenFOAM/OpenFOAM-v1912/etc/bashrc foam ./Allwmake > log.Allwmake 2>&1 & ### マシンのCPUコア数とRAMに余力がある方は、jオプションによる並列処理も可能です。 ### ./Allwmake -j 8 > log.Allwmake 2>&1 &
tail +F log.Allwmake
で進行状況を確認できます。
1スレッドコンパイルで最大メモリ使用量は約2.5 GBでした。
ParaViewのコンパイル準備
気持ちが先走ってOpenFOAMを既にコンパイルしてしまいました。
本来はParaViewのコンパイルが先のようです。
cd ~/OpenFOAM/ThirdParty-v1912 ### ubuntu18.04の/bin/shはdashのシンボリックリンクになっており、 ### そのままではmakeParaViewがうまく動作しない。 ### 修正方法は以下の通り(shebangの変更か/bin/shのリンク修正のどちらかで対応する。) ### makeParaView1行目を#/bin/bashに変更する。 vim makeParaView '''$WM_THIRD_PARTY_DIR/makeParaView #!/bin/bash (後略) ''' ### /bin/shのシンボリックリンクをdashからbashに変更 ### 選択肢はNoを選ぶ。 sudo dpkg-reconfigure dash
ようやくParaViewコンパイル
### 勝手にマルチスレッド処理してくれるようです。 ./makeParaView > log.makePV 2>&1 & less +F log.makePV
ParaViewプラグインのコンパイル
### ParaviewをOpenFOAMより後にコンパイルしたせいかPVReader系がうまく動かない。 ### エラー文に従って対処する。 cd $WM_PROJECT_DIR/applications/utilities/postProcessing/graphics/PVReaders ./Allwclean ./Allwmake wmRefresh
On-Screen Mesa化
openGL周りのエラーに嫌気が差していたので、この際mesaに頼ることにしました。
結果的にParaViewが動くようになりましたが、他のホスト環境(AMD、NVIDIA GPU)でどうなるかは不明です。
(あとはレンダリングの負荷がどうなるか...)
### (参考) https://openfoamwiki.net/index.php/Installation/On-Screen_Mesa/Ubuntu#Ubuntu_18.04 sudo apt install mesa-utils libglu1-mesa-dev scons llvm-dev python-pip libyaml-dev pip install prettytable Mako pyaml dateutils --upgrade sudo apt build-dep mesa cd $WM_THIRD_PARTY_DIR sudo apt source mesa ### mesaソースディレクトリのオーナーがrootになっていたので、 ### ログイン中のユーザーに所有権を移した。(user_name, group_nameは自分のコンテナ環境に合わせて変更する。) cd mesa-19.2.8 && sudo chown -hR user_name:group_name . scons build=release texture_float=yes libgl-xlib > log.makeMesa 2>&1 cp -vr build/linux-x86_64/gallium/targets/libgl-xlib/* $ParaView_DIR/lib/
ここはノートラブルでした。
ダメな場合はlog.makeMesaの末尾を読んで対処してください。
動作チェック
適当にチュートリアルを実行して、完走するか確かめてみてください。
mkdir ~/Documents/openFoam/ && cd ~/Documents/openFoam/ tut cp -r ./incompressible/simpleFoam/pitzDaily ~/Documents/openFoam/ cd - cd pitzDaily blockMesh > log.blockMesh 2>&1 simpleFoam > log.simpleFoam 2>&1 paraFoam
筆者の環境では、OpenFOAM/ParaViewどちらも問題なく動きました。
追々、decomposeParやsnappyHexMeshの動作チェックもしていきたいです。