DAZ StudioをM1 Macで動かす

DAZ StudioをM1 Macにインストールしましたが、PostgreSQL周りでエラーが出てしまい、動くようにした時の忘備録です。
公式Forumでも現状明確な解決法はないようで、諦める人もいれば、エラーも出ず普通に動く人もいるといった感じでした。
[isapplesiliconready](https://isapplesiliconready.com)を見てもまだ未対応の様子。
無駄な工程もあるかと思いますが、あくまで自分の環境はこれで動いたということで参考までに。。
![スクリーンショット 2022-01-06 18.02.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426502/16a5e05b-7450-6170-4023-e9a59345b27d.png)


## 動作環境  

・MacBookPro macOS12.1(Monterey), M1 Max
・DAZ Studio 4.16

## 解決したいエラー

DAZ Studioを起動すると、「A valid PostgreSQL CMS connection could not be established...」なるエラーが表示されます。
ただローカルファイルを動かすだけなら使えますが、ログインできないのでオンラインで購入したコンテンツが使用できません。

![スクリーンショット 2022-01-04 11.16.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426502/0e611af5-0f7e-bf8e-b368-51a7fa0140b1.png)

## DIMでDAZ Studioをインストールする
最初DAZ StudioはDAZ Central経由でインストールしましたが、最新版のmacには完全に対応していないようで、実際起動中に何度かフリーズして落ちました。
DIM(Daz 3D Install Manager)でのインストールが推奨されているようです。

https://www.daz3d.com/install-manager-info

DIMでは、`DAZ Studio`と`PostgreSQL CMS`の2つをインストールしました。
![スクリーンショット 2022-01-06 16.26.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426502/0f79911e-6dc8-a1c8-20d1-387147de3061.png)

## PostgreSQLの作業用フォルダ変更 

PostgreSQLの作業用フォルダは通常、以下のディレクトリに作成されます。  

```
~/Library/Application Support/DAZ 3D/cms/ContentCluster
```
`PostgreSQL CMS`をインストールするとこの中に設定ファイルやログファイルが保存されるはずですが、Big Sur以降？権限周りの処理が変わったのか、うまくいかないケースがあるようです。自分の場合は、ログファイルも何も保存されず空の状態でした。  
権限の設定を変更してもうまくいかなかったので、デスクトップに`cms`フォルダを作り、DAZ Studio上で「Preferences...」>「CMS Settings」>「Cluster Directory」からパスを新しく作った`cms`フォルダに変更しました。
その後、DIMでもう一度DAZ Studio、PostgreSQLを再インストールで無事ログが生成されるようになりました。  

## 共有メモリの設定変更  

ContentClusterフォルダ内のログファイル(dblog.txt)を確認すると、以下のエラーが出ています。

```:dblog.txt
FATAL:  could not create shared memory segment: Cannot allocate memory
DETAIL:  Failed system call was shmget(key=17237001, size=40, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMALL parameter.  You might need to reconfigure the kernel with larger SHMALL.
	The PostgreSQL documentation contains more information about shared memory configuration.
```

共有メモリが足りていないと思って設定を変更しましたが、後にフォーラムで「macOSの共有メモリには"バグ", "実装上の問題"があり、このエラーはPC再起動で解決する」とのコメントがあったので、まずPC再起動を試して、それで解決しなければ以下の手順を試してみてください。  

まずターミナルで現在の共有メモリ設定を確認すると、メモリ最大値やセグメントの最大値がかなり少ないです。

```
$ sysctl kern.sysv
kern.sysv.shmall: 1024
kern.sysv.shmmax: 4194304
kern.sysv.shmmin: 1
kern.sysv.shmmni: 32
kern.sysv.shmseg: 8
kern.sysv.semmni: 87381
kern.sysv.semmns: 87381
kern.sysv.semmnu: 87381
kern.sysv.semmsl: 87381
kern.sysv.semume: 10
```
以下のコマンドで最大値を増やし、PC再起動してください。

```
$ sudo sysctl kern.sysv.shmmax=536870912
$ sudo sysctl kern.sysv.shmseg=1024
$ sudo sysctl kern.sysv.shmall=131072
```

共有メモリの変更についてはこちらの記事を参考にしました。  

https://hacknote.jp/archives/7949/

## PostgreSQLをhomebrewでインストールしたものに切り替え  
次に、以下のエラーがログファイルに表示されました。

```:dblog.txt
FATAL: Database files are incompatible with server
DETAIL: The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL.
HINT: It looks like you need to recompile or initdb.
```

なんとなく、intelからarmにプロセッサが変わったことによる影響がありそうな気がしており、再コンパイルも大変そうなのでDIMでインストールしたポスグレを諦めて、homebrewでインストールしたものを使ってみることにしました。

まずhomebrewでpostgresqlをインストール

```
$ brew install postgresql
```

`/Applications/DAZ 3D/PostgreSQL CMS`にある`bin`, `include`, `lib`, `share`フォルダを削除し、シンボリックリンクを作って先ほどインストールしたものと中身を置き換えます。（普通に中身丸ごとコピーでいいかもしれないけど）

```
$ ln -s /opt/homebrew/Cellar/postgresql/14.1_1/bin /Applications/DAZ\ 3D/PostgreSQL\ CMS/bin
$ ln -s /opt/homebrew/Cellar/postgresql/14.1_1/include /Applications/DAZ\ 3D/PostgreSQL\ CMS/include
$ ln -s /opt/homebrew/Cellar/postgresql/14.1_1/lib /Applications/DAZ\ 3D/PostgreSQL\ CMS/lib
$ ln -s /opt/homebrew/Cellar/postgresql/14.1_1/share /Applications/DAZ\ 3D/PostgreSQL\ CMS/share
```

Finderで見た時、以下のようになってたらOK
![スクリーンショット 2022-01-06 1.45.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426502/8891b342-7773-b7ad-689d-6f0e6e4ff48e.png)

## データベースの初期化 
この工程はいらないかもしれませんが、一応initdbでContentClusterフォルダの中身を初期化しました。

```
$ initdb --locale=C -E UTF-8 ~/Desktop/cms/ContentCluster/
```

DAZ Studioからもデータベースをリセットしました。
Smart Contentタブを右クリック > 「Content DB Maintenance」> 「Reset Database」にチェック > 「Accept」
![スクリーンショット 2022-01-06 2.45.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426502/59798bfd-47d5-ddce-2fec-d4a70a18d72d.png)

データベースがリセットされましたが、ここでもdblog.txtにエラーが出ました。

```:dblog.txt
FATAL:  pg_hba.conf rejects connection for host "[local]", user "USERNAME", database "postgres", SSL off
```
pg_hba.confを開いてみると、`local`が全て`reject`となっているので、この行の`reject`を`trust`に書き換えます。

```:pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     reject
```

再度DAZ Studioを再起動すると、エラーが消え、無事ログインできました。
![スクリーンショット 2022-01-06 2.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426502/cd74e2b8-a4d4-ec3b-17b3-5d34cfbaac5f.png)

作業の途中で何度もDIMを使って再インストールを試したり、DAZ Studioの再起動を繰り返したので、うまくいかない場合は再インストールや再起動も何度か試してみてください。