2021年1月 Docker-composeでOpneModelicaの開発環境を構築（Mac）


## この記事は？

OpenModelicaのGUI環境を`Macbook`上の`Docker`で動かす方法のまとめです。

@matsubaradaisuke さん公開ありがとうございます。
とても参考になりました。

以下の記事の環境違いとなります。

[Docker-composeでOpneModelicaの開発環境を構築（Mac） - Qiita](https://qiita.com/matsubaradaisuke/items/db7b2281def7d46eb88d)


現時点(2021年1月9日)のmacbookではそのまま動かなかった & X11など素人でよくわからない部分があったので備忘録としてまとめました。


## 私の環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/b2f2ae1a-715b-6471-82c7-992fc9fa5b20.png)

## 事前準備
参考記事に従い `homebrew`で `XQuartz`、`Docker`を入れていきます。

### XQuartz

```sh

# homebrewのアップデート
> brew update-reset && brew update

# XQuartzのインストール
> brew install xquartz

==> Downloading https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.11.dmg
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/32e50e8f1e21542b847041711039fa78d44febfed466f834a9281c44d75c
######################################################################## 100.0%
==> Installing Cask xquartz
==> Running installer for xquartz; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:


fifi
installer: Package name is XQuartz 2.7.11
installer: Installing at base path /
installer: The install was successful.
🍺  xquartz was successfully installed!
```

一旦ログインし直して

```sh
> echo $DISPLAY
/private/tmp/com.apple.launchd.jehSFXMP8l/org.macosforge.xquartz:0
```
何か表示されたらOK



>  `brew cask install xquartz`いろいろ記事を見るとcaskを使う例がありましたが私の環境ではエラーがでました。`brew install xquartz`でインストールできました。


### Docker

ここでも`cask`でエラーがでました。

> `brew cask install docker`ではなく`--cask`オプションを使って`brew install docker --cask`でインストールできました。

```sh
# homebrew アップデート
brew update-reset && brew update
# docker インストール
brew install docker
# docker インストール
brew install docker --cask
```

```sh

> docker --version
Docker version 20.10.2, build 2291f61

> open /Applications/Docker.app
起動できたらOK
```

[Docker Desktop for MacをHomebrewでインストール（Homebrew Caskのエラー解決メモ付き） - Qiita](https://qiita.com/im_miolab/items/65a16637b80ea6245006)



## XQuartzの設定

どうもXQuartzの設定をする必要がある。
X windowが素人なので探りながらだったのだが、
`xhost`により`XQuartz`が立ち上がるみたい


```sh
> xhost
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/abfca489-01c6-1ad6-53f9-dcefc7f4f41e.png)

XQuartzの`環境設定`を開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/dd3ab524-5b36-08a6-e50f-1330bec71be6.png)

`セキュリティ`から`ネットワーククライアントからの接続を許可`にチェックを入れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/aed3faa7-43d3-aefb-9cd8-dc547737f9e2.png)

そして、Dockに入っている`XQuartz`を終了させる.
そして、IPアドレスをしていして`xhost`を立ち上げる

```sh
> xhost +192.168.40.188
```

このあとは、参考記事と同じです。

## OpenModelica

参考記事に従い進める.

[Docker-composeでOpneModelicaの開発環境を構築（Mac） - Qiita](https://qiita.com/matsubaradaisuke/items/db7b2281def7d46eb88d)


以下コマンドを実行していく

```sh
> git clone https://github.com/matsubaraDaisuke/openmodelica-docker-start.git

> cd openmodelica-docker-start

> make IP
networksetup -getinfo Wi-Fi | grep "^IP address:"
IP address: 192.168.40.188

> xhost +192.168.40.188 // e.g. $xhost +192.168.12.1
```

docker-compose.yml


```yml

version: '3'

services:
    openmodelica:
      container_name: openmodelica
      build: ./docker/openmodelica
      #tty: true
      environment:
        - DISPLAY=192.168.40.188:0.0
      volumes:
        - ./om-develop:/home/openmodelica
        - /tmp/.X11-unix:/tmp/.X11-unix

```

dockerのbuild

```sh

> docker-compose up --build

> docker-compose run openmodelica /bin/bash

> docker-compose stop openmodelica
```

コンテナ内にて、`OMEdit`を起動する

```
> OMEdit
```

成功すると以下のようなOMEditが立ち上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/37ee8a39-c27f-d803-7685-e4c6e95c567f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/10772bb1-535a-8f09-ef97-91ba1ae76280.png)



## その他余談

試行錯誤しながら以下の様なやり方を見つけた。
`ネットワーククライアントからの接続を許可`を`有効`にする場合は、`接続を認証`も`有効`にした方が良いとある。


下の設定の場合は、
`docker-compose.yml`に`.Xauthority`の共有を追加することで動く


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62413/dbab2836-5475-2859-d6d4-6977d33af83e.png)


```yml
version: '3'

services:
    openmodelica:
      container_name: openmodelica
      build: ./docker/openmodelica
      #tty: true
      environment:
        - DISPLAY=192.168.40.188:0
      volumes:
        - ./om-develop:/home/openmodelica
        - /tmp/.X11-unix:/tmp/.X11-unix 
        - $HOME/.Xauthority:/root/.Xauthority <- これ追加

```


`xhost`の権限設定は`IP指定`じゃなくてもできそう

```sh
> xhost +local:docker
```

Makefile

```sh
IP:
	networksetup -getinfo Wi-Fi | grep "^IP address:"


build:
	docker-compose up --build

run:
	docker-compose run openmodelica /bin/bash

stop:
	docker-compose stop openmodelica

ls:
	docker container ls
	docker images
```

`DISPLAY`について

`ラップトップ` と `デスクトップ` で、ディスプレイの番号の表示が異なるみたい

- 192.168.40.188:0    <- `ラップトップ`
- 192.168.40.188:0.0  <- `デスクトップ`