🍺

MacにHomebrewでPostgreSQLをインストールしてハマった件

2023/03/22に公開

MacBook Airに Homebrewで PostgreSQLをインストールしたのですが、PostgreSQLがうまく起動できませんでした。

環境は、
macOS 12.6.2
Homebrew 4.0.6
PostgreSQL@11(11.19)

% brew install postgresql@11

で、Warningが2つ出ていて、

Warning: The post-install step did not complete successfully
You can try again using:
  brew postinstall icu4c
Warning: The post-install step did not complete successfully
You can try again using:
  brew postinstall postgresql@11

で、指示の通りbrew postinstall icu4cbrew postinstall postgresql@11を実行するも、同じWarningが出て終わり。
この状況でサービスを立ち上げようとしてみると、

% brew services start postgresql@11
==> Successfully started `postgresql@11` (label: homebrew.mxcl.postgresql@11)

となっていても

% brew services list
Name          Status     User          File
postgresql@11 error  512 ************* ~/Library/LaunchAgents/homebrew.mxcl.postgresql@11.plist

とエラーが出てしまう。
どうしていいか全く見当がつかなくて、だいぶ手間取ったのですが、原因は/tmpへの書き込みができないことのようでした。

% ls -l /tmp
lrwxr-xr-x@ 1 root  wheel  11 12  2 17:43 /tmp -> private/tmp

で、/tmp/private/tmpへのシンボリックリンクなので、実体の/private/tmpのpermissionを変更します。
現在のパーミッションは以下の通り

% ls -l /private/   
total 0
drwxr-xr-x  81 root  wheel  2592  3 19 21:18 etc
drwxr-xr-x   2 root  wheel    64 12  2 17:43 tftpboot
drwxr-xr-x   8 root  wheel   256  3 19 21:26 tmp
drwxr-xr-x  34 root  wheel  1088  3 19 21:18 var

/private/tmpのpermissionはrwxr-xr-xとなっていて、これだとroot以外の一般ユーザーは書き込みできないので、インストール時に書き込みしようとするとエラーになるのは当然。ちなみに、sudo brew postinstall postgresql@11を実行しようとすると、危険なのでできませんと怒られてしまう。
それに/usr配下以外のディレクトリの所有者をrootから他のユーザーに変更したくはない。
いろいろ調べていたら、スティッキービットを使うのがベストかなと考えました。スティッキービットがディレクトリに対して設定されていると、そのディレクトリ内は全ユーザーがファイルを作成できるけれども、他人がファイル名の変更や削除をできない。所有者とrootユーザのみが名前の変更と削除を行えます。
tmpフォルダの性質から言ってもこの方が理にかなっていると思われますし、本来そうなっていなければいけないようです。では、なぜ今はそうなっていなかったかは謎になってしまうのですが・・・
スティッキービットを設定するためには、rwxr-xr-xrwxrwxrwtに変更します。というわけで、

% sudo chmod 1777 /private/tmp

を実行すると、

% ls -ld /private/tmp
drwxrwxrwt  10 root  wheel  320  3 21 23:47 /private/tmp

スティッキービットが設定されました。
この後、brew postinstall icu4cbrew postinstall postgresql@11を実行して無事成功。
PostgreSQLのサービスも無事起動しました

% brew services list
Name          Status  User          File
postgresql@11 started ************* ~/Library/LaunchAgents/homebrew.mxcl.postgresql@11.plist

参考にしたサイト
https://hituzi-ando.hatenablog.com/entry/2020/01/24/065731
https://tex2e.github.io/blog/linux/tmp-directory-permission

Discussion