Amazon WorkSpacesでFreeCAD 0.19 + FEM_FrontISTRを動かす①

# 1. 背景

Amazon WorkSpacesはクラウド上で利用できるデスクトップ環境であり，利用者に依存せず同じ環境を提供できることから，授業や講習でも有用なものです．CAEの分野でも，CADソフトによる造形から構造解析までのデモンストレーションを行うものとして利用価値があります．

しかしながら，Amazon WorkSpacesの「無料利用枠の対象」であるWindowsは，デフォルトでは，オープンソースのCADであるFreeCADのバージョン0.17以前しか利用できません．オープンソースのソルバであるFrontISTRをFreeCADから利用可能にしたアドオンが昨年リリース[^1]されましたが，こちらはFreeCAD 0.19で導入可能なため，対応していないという問題がありました．

この記事①では，Amazon WorkSpacesの新規立ち上げから解決策の実施までを紹介します．次いで②では，WorkSpaces上でのFEM_FrontISTR利用例と利用上の注意を見ていきます．

次の記事↓
(準備中)

---

# 2. 用語のざっくりとした説明

- [Amazon WorkSpaces](https://aws.amazon.com/jp/workspaces/): AWS (Amazon Web Services)の提供する仮想デスクトップ環境
- [FreeCAD](https://www.freecadweb.org/?lang=ja): オープンソースのCADソフト．フリーのCAD
- [FEM_FrontISTR](https://gitlab.com/FrontISTR-Commons/FEM_FrontISTR): オープンソースの構造解析ソルバ [FrontISTR](https://www.frontistr.com/) をFreeCADのアドオン化したもの．FreeCAD上でモデリング〜解析〜可視化を行える．

---

# 3. Amazon WorkSpacesの新規作成

AWSのアカウント作成まではできているとして，新規にWorkSpacesを作成する過程を順に見ていきます．

1. AWS マネジメントコンソールの「WorkSpaces」へ行き，左上の「WorkSpacesを起動」を押します．
![1_launch-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/7a8c38f1-9d54-6c2e-1210-bef9e1816cf7.png)
1. 利用するディレクトリを選択します．新規作成 or 目的のものを選択し，次へ進みます．
![1_launch-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/e1222ac8-9d89-045f-6cd5-894d1f277804.png)
1. 利用するユーザーを追加します．「ユーザー名」「名」「姓」「Eメール」を入力し，「ユーザーの作成」を押します．
![1_launch-2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/333d8031-c03b-4889-feaf-12f182fd7bc5.png)
作成されると画面下部に反映されますので，確認の上，次へ進みます．
![1_launch-2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/74a00f28-cc6f-7323-b6bd-6fe55fdadb9d.png)
1. 利用するバンドル(マシンのタイプやOS)を選択します．今回は「無料利用枠の対象」である「Standard with Windows 10 (Server 2019 based)，日本語」としました．画面下部の割り当てを確認し，次へ進みます．
![1_launch-3-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/e15c1e84-0615-1f75-e858-040f796cc29a.png)
![1_launch-3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/9728edb9-f4c5-1c77-a8c8-cafd42395f76.png)
1. 設定の確認です．知らぬ間の課金を避けるため，「AutoStop」を選択します．画面下部のタグは任意です．
![1_launch-4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/fabd571a-058e-3e6f-c873-869e362cc295.png)
![1_launch-4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/d09b4691-ca6d-46fa-c1cc-ec52f4e68ca8.png)
1. WorkSpacesの最終確認です．設定事項に誤りがないことを確かめ，「WorkSpacesの起動」を押します．
![1_launch-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/5e615f21-a590-168d-e827-0e01d6cdfa18.png)
1. 新たに作成したものが一覧画面に反映されます．ステータスが「PENDING」のうちは準備中で利用できません．
![1_launch-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/89e95b8c-eac2-b714-9ded-65479d228168.png)
1. 数十分(公式では20分，それより短いことも長いことも)経つと，ステータスが「STOPPED」に変化し，利用可能になります．次項のはじめに示すメールの到着でこの準備完了を知ります．
![1_launch-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/7907399c-45b8-6318-14b0-95956d263814.png)

---

# 4. Amazon WorkSpacesの立ち上げ

利用可能になったWorkSpacesを立ち上げる過程を順に見ていきます．

1. 利用可能のお知らせは，ユーザー追加の際に入力したEメール宛に届きます．
![2_signin-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/f35e8ddd-7bb5-1cd6-3d5a-052d2bd2f13b.png)
1. メールの「1」のリンクにアクセスし，パスワードを設定します．
![2_signin-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/1c1d12fb-5a2e-65b3-71dd-2cb8fb9fda53.png)
1. パスワード設定が完了すると，クライアントのダウンロード画面に自動で遷移します．適切なものを選択し，自身の環境にインストールしてください．
![2_signin-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/dd065e41-bde8-bc66-3d5b-15fdf1546b01.png)
1. クライアントを立ち上げ，メールの「2」に記載された登録コードを入力して次へ進みます．
![2_signin-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/458779a4-b50e-fa31-fac7-53bc734e25cc.png)
1. ユーザー名と先程設定したパスワードを入力し，次へ進みます．
![2_signin-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/97773042-81f0-6ead-15a4-7330d816a339.png)
1. 入力情報に問題がなければ，起動の準備に入ります．
![2_signin-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/16449b77-5697-d430-3927-0c73deb0a43c.png)
1. しばらく待つと，Windows環境が立ち上がります．失敗した場合は，入力をやり直したり，マネジメントコンソールから再起動を試みたりします．
![2_signin-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/e2715e25-c5f7-b97e-f096-1519633dfee3.png)

---

# 5. FreeCAD 0.19をとりあえず入れる

冒頭の文章より，ここまでの手順で作成したWindows環境ではFreeCAD 0.19を利用できないことは明らかですが，一度インストール〜起動をやってみましょう．

1. ブラウザ[^5]でFreeCADの[ダウンロードページ](https://www.freecadweb.org/downloads.php?lang=ja)にアクセスし，Windows版のインストーラを取得します．
![3_freecad-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/36581653-f6b8-fcf8-623e-2b7107b77401.png)
1. 特別な設定はせずインストールを進めます．
![3_freecad-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/d11c613d-5a44-3559-ad0c-eb5cb84bda9c.png)
1. 起動してみます．やはりローディング画面のみ表示されて落ちてしまいます．
![3_freecad-3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/06252870-04e1-bf83-89c4-7670d359c41e.gif)

---

# 6. 問題の解決へ

立ち上がらない問題の原因究明〜解決の過程を記録として残します．最終的な結論だけ知りたいという方は，次項 [7](https://qiita.com/chikasuiro/items/b61a4c2a1da3d148d332#7-freecad-019%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B) へ進んでください．

「amazon workspaces freecad 0.19」で検索すると，仮想環境で利用できないという似たような事例がFreeCAD Forum[^6-1]で見つかりました．曰く，GPUが搭載されていないことが立ちがらない原因のようです．このスレッドの一番下，投稿者による解決策として示されていたのは

- Mesa3Dの`opengl32.dll`[^6-2] (dllの形で配布されているもの)を`bin`フォルダ(=アプリケーションのあるところ)に入れる
- Stack Overflowに解説あり

という内容でした．そこで，リンクされたStack Overflow[^6-3]を確認すると，トップ回答の内容は

- LLVM + Mesa3Dをビルドし，`opengl32.dll`を作成する
→`C:\Windows\System32\opengl32.dll`を置き換える
- アプリケーションと同じフォルダに入れても動かない

というものでした．FreeCAD Forumの投稿者は自身でFreeCADをビルドしたのに対し，今はインストーラで入れたものを使いたいという違いがあります．しかし，Stack Overflowの方にしたがってビルドから行うのは面倒です．また，dllの置き場にも食い違いがあります．ひとまず試していくしかない...ということで以下のような作業を実験として行いました．

1. dllがアプリケーションと同じところにあれば良い？と考え，`C:\Windows\System32\opengl32.dll`をFreeCADのexeがあるところにコピーしました．
→何も変わりませんでした．後で気付きましたが，Stack Overflowの方で`C:\...`のものを「置き換え」(replace)と書かれているのに，「1. ビルドしたものか，2. `C:\...`のものを利用」と，このときは勘違いしていました．
1. Stack Overflowを信用し`C:\...`のdllを置き換えるものの，ビルドは面倒なので配布されているMesa3Dのdllを利用することにしました．`opengl32.dll`なので32 bit用をダウンロードし，`C:\Windows\System32\opengl32.dll`を置換しました．このとき，Stack Overflowの次点の回答も参照し，`C:\Windows\SysWOW64\opengl32.dll`も置換しました．
→FreeCADがローディング画面さえ出ずにエラーで落ちてしまいました．
1. dllの名称は**32**であるものの，OSは64 bitなので64 bit用が必要ということに気付き，改めて64 bit用Mesa3Dの`opengl32.dll`をダウンロードしました．上と同様に`System32`と`SysWOW64`内に配置しました．
→無事起動しました！

---

# 7. FreeCAD 0.19を使えるようにする

解決策の結論を簡単に述べます．

1. [Mesa3D](https://fdossena.com/?p=mesa/index.frag) 64 bitの`opengl32.dll`を入手する
1. Windowsにはじめから存在する`opengl32.dll`を置き換える

という2つの作業を行います．以下では，必要なファイルのダウンロード〜既存のファイルのセキュリティ変更・置換までの過程を順に見ていきます．

1. Mesa3Dの[ダウンロードページ](https://fdossena.com/?p=mesa/index.frag)にアクセスし，64 bit用を入手します．
![4_mod-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/2cb73eb1-fea9-dd9c-15f1-4a44c5b27e41.png)
1. Mesa3Dは7z形式で圧縮されているため，解凍用に[7-Zip](https://sevenzip.osdn.jp/)も導入します．
![4_mod-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/6b079757-fb46-839a-dafa-441bdba3dab1.png)
1. 7zを右クリック，「7-Zip」 > 「ここに展開」を選択し，解凍します．`opengl32.dll`と`README.txt`の2ファイルが得られます．
![4_mod-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/8f319b41-44fd-e20f-faea-f024615ece5b.png)
1. WorkSpacesでは，ユーザー環境はDドライブに存在します．エクスプローラー上部のバーに`C:\`と入力し，Cドライブにアクセスします．
![4_mod-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/197d2a81-e0d7-35e2-a0d4-b8847e08a7b5.png)
1. `C:\Windows\System32`の様子です．この`opengl32.dll`を置き換えます．
![4_mod-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/31ab8f85-0943-08d7-9eb6-06887e358e57.png)
1. WorkSpacesを利用するユーザーは管理者扱いであるものの，置き換えようとすると拒否されてしまいます．`C:\...`のdllのアクセス許可を変更することで対処します．
![4_mod-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/5a2fb638-3d73-e44b-8689-e87f5ebb986a.png)
1. `C:\Windows\System32\opengl32.dll`を右クリックし，プロパティを開きます．プロパティの「セキュリティ」タブの下部，「詳細設定」へ進みます．**ここからの作業はシステムの一部を改変するものですので，自己責任で行ってください**．
![4_mod-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/a9611ab6-f596-6677-aa0b-06144669c726.png)
1. 所有者が「TrustedInstaller」となっているので，これを変更します．
![4_mod-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/22672590-318a-735f-b441-e4895e3af289.png)
1. フィールドに自身のユーザー名(WorkSpaces作成時に設定したもの)を入力し，「名前の確認」を行います．入力した文字列を含むユーザーが複数存在する場合(例: user01，user02など)は，適切なものを選択してください．
![4_mod-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/c27d04dc-e21d-9701-b5fc-021c0bc349c6.png)
1. 所有者が変更されたことを確認し，「適用」を押します．
![4_mod-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/dded1c68-54b2-5fb1-c826-4001978ad0a6.png)
1. 今度はプロパティの「セキュリティ」タブより，「編集」(アクセス許可の変更)へ進みます．図のような画面が表示されるので，上のユーザーなど一覧から「Users」を選択し，「フルコントロール」にチェックを入れてください(どうせ置換してしまうのでフルコントロールで良いです)．すると，拒否されることなく，入手したMesa3Dの`opengl32.dll`で置き換えられます．~~一連の操作を`C:\Windows\SysWOW64\opengl32.dll`に対しても行ってください．~~
(2022.3.31修正: 再検証したところ，`SysWOW64`内のファイルは置換しなくても良いことが判明しました．)
![4_mod-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/be45fffc-491f-bed7-a31a-aa5f7391b77c.png)
1. Mesa3Dのdllが`System32`~~，`SysWOW64`~~ に配置された後，改めてFreeCAD 0.19を起動します．期待通り画面が表示されました．
![4_mod-12.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408280/0141c377-49ba-b0a0-3750-f4be1c76ba55.gif)

---

次の記事②↓では，FEM_FrontISTRアドオンを入れた上で実際にFreeCADを使っていきます．
(準備中)

[^1]: https://twitter.com/FrontISTR_/status/1385620772123668486?s=20&t=cUZxtej4PJZJfWadxSp8ew
[^5]: IE 11とFirefoxがあります．
[^6-1]: https://forum.freecadweb.org/viewtopic.php?t=42264
[^6-2]: https://fdossena.com/?p=mesa/index.frag
[^6-3]: https://stackoverflow.com/questions/48433641/does-azure-allow-app-need-opengl-any-way-to-go-around