ChromebookでOpenFOAMを動かしたい

「ChromebookでシミュレーションソフトのOpenFOAMを使いたいので教えてほしい！」という依頼を受けたため、自分でいろいろ試しつつ手ほどきした記録です。
教えた相手があまりコンピュータに慣れていないということだったので、エンジニアらしくない(?)表現もありますが、ご了承ください。~~(そもそも自分が本質理解をしていない...)~~

この記事では「とりあえず動く」ことを目標にしていきたいと思います。

##条件

####機器
Chromebook3100 2-in-1 

皆さんお察しの通り、教育用Chromebookです。

####Linux
```
$ uname -a
Linux penguin 5.4.131-16049-gc688e114d34e #1 SMP PREEMPT Thu Sep 9 20:21:35 PDT 2021 x86_64 GNU/Linux
$ cat /etc/debian_version
10.10
```
####OpenFOAM
OpenFOAMは現在「[openfoam.com](openfoam.com)」と「[openfoam.org](openfoam.org)」から入手できます。2つは若干バージョン表記が異なり、

|openfoam.com     |openfoam.org|
|:---------------:|:----------:|
|OpenFOAM-v〇〇〇〇|OpenFOAM〇   |
(〇内は任意の数字)

というような表記になっています。

今回使用したのは「OpenFOAM-v2106」、つまり「.com」の方から入手したものになります。「.com」の方が使える機能が多いのだとか。


#準備
###Linux環境

Chromebookの［設定］アプリを開いて｢Linux開発環境｣という項目で「オンにする」を選択し、指示に従って進めます。
セットアップが完了してターミナル(黒いやつ)が表示されたら、

```bash:bash
sudo apt-get update
sudo apt-get upgrade
```
と実行します。

もしupdateの際に`Repository 'http://deb.debian.org/debian buster InRelease' changed its 'Version' value from 'ooo' to 'xxx'`などというエラーが出たら、

```bash:bash
sudo apt-get update --allow-release-change
```
と実行してからもう一度試すと上手くいくようです。


#方法１　〜ソースからビルド〜
####結果：私の環境では失敗
こちらの記事を参考に準備を進めようとしました。

https://note.com/chemeng2020/n/n640fdb56b507

とても分かりやすく書かれていたので「楽勝やんか！」と思っていたのですが、この方法だとソースを持ってきてコンパイルをする(PCが行う処理が多くなってしまう)ので、今回使用したPCでは`./Allwmake`を実行した所で

```bash
g++: fatal error: killed signal terminated program cc1plus
```
となってしまい、無理矢理進めて使おうとしても多くの機能が使えない状態でした。

メモリが十分あるのであればこの方法でまず問題なさそうですね。上記のサイトがとても分かりやすいのでぜひ参考にしてください。

#方法2　〜Dockerを使う〜
####結果：私の環境では成功、依頼主の環境では失敗(後述)

###Docker
今セットアップしたLinuxの上に、「Docker」というモノを入れていきます。

https://www.docker.com/

しっかり順を追ってセットアップしても良いのですが、

```bash:bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
```
私の様な面倒くさがりのためにたった二行でインストールできる方法を用意してくれています。
あまり推奨されていないようですが、まあ今回は個人利用だったので...(ﾎﾞｿｯ)

しっかりインストールする場合は

```bash:bash
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
 "deb [arch=$(dpkg --print-architecture)　signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get install docker-ce docker-ce-cli containerd.io
```
このようになるようです。詳しくは公式ドキュメント↓を参照してください。

https://docs.docker.com/engine/install/debian/


###OpenFOAM
いよいよ本丸、OpenFOAMを準備していきます。

```bash:bash
sudo wget https://develop.openfoam.com/packaging/containers/-/raw/main/openfoam-docker -O /usr/local/bin/openfoam-docker
sudo chmod +x /usr/local/bin/openfoam-docker
```
`https://develop.openfoam.com〜`からダウンロードしてきて、実行権限を与えるだけです。

ここで動かしてみましょう。

```bash:bash
sudo systemctl start docker
sudo openfoam-docker -default
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1691660/e754c417-928c-c704-3377-37b6ae3856dc.png)
このようになれば成功です！
実際に演算をしてみましょう。

```bash:bash
cp -r $FOAM_TUTORIALS/multiphase/compressibleMultiphaseInterFoam/lam![Screenshot 2021-10-10 03.05.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1691660/855dac9f-2e83-5805-d162-047b63e6304f.png)
inar/damBreak4phase ./ 
cd damBreak4phase
./Allrun
```
と実行し、

```
Restore 0/ from 0.orig/
Running blockMesh on /root/damBreak4phase
Running setFields on /root/damBreak4phase
Running compressibleMultiphaseInterFoam on /root/damBreak4phase
```
と順に出力され、再び入力ができるようになったら(きっと)しっかり機能していると思います🎉🐧

###*しかし！*
方法2の冒頭でも申し上げたとおり、この方法では失敗することもあります。
それは、アーキテクチャが「arm」系の端末を使用している場合です。
アーキテクチャは、

```bash:bash
uname -m
```
と実行すると確認できます。
このコマンドの実行結果が「x86_64」等であれば大丈夫なのですが、「arm」系だとDockerImageが対応していないため、この方法では厳しそうです...


#最後に
arm系アーキテクチャで、かつメモリが十分でない場合には使えない、という結果になってしまいました...。
良い方法があればご教授願いたいです。


#1/9 追記

こんな記事を見つけました。

https://qiita.com/wancom/items/b2a54956b3ea97676d53

この記事の通りに設定したらarm系アーキテクチャ上でもamd系にしか対応していないOpenFOAMのDockerImageも動くのでは?! と思い、早速持っているラズパイで試してみたら、問題なく動きました。
実際にChromebookで動作確認をしたわけではないので確信は持てませんが、QEMU×binfmt_misc
は希望の光と成り得るのではないでしょうか。

ただDockerってストレージ難民には苦しいんですよね。自分のChromebookのストレージは全体で32GB、そのうちLinuxコンテナで使えるのは約13GBしかないので(絶望的)。　こまめにお掃除します。