🕌
wslでパーミッション変更ができない
TL;DR
- wslでpostgresが動かなかった原因は、そもそもwsl側でchmodが正常に動かない場合があったため(chmodの実行に失敗しているのにエラーもでないので、権限変更失敗に気付かなかった)
いきさつ
- wsl(ディストリビューションはUbuntu-20.04)でDevBox環境を作成したところ、インストールしたpostgresが正常に動作しなかった(パーミッションエラーが出る。chmodを実行しても同じエラーが出続けた)
- 別のディストリビューション(nixOS)で試すとパーミッションエラーは解決した(chmodの実行で解決した)
- 当初DevBoxに入ったときの不具合なのかな・・・と思ったが、そもそもubuntu側ではchmodが効いていないことに気付き、原因や回避方法を調査した。
wslでパーミッション変更ができない
- 原因はこちら
https://it-afi.com/wsl/wsl2-でchmodが効かない/ - ubuntu独自の事象なのかは不明
- 自分は「/etc/wsl.conf」を手順通りに書き換えて回避した
DevBoxでpostgresのinitdbが実行できない
-
下記の流れでした
作業ディレクトリに移動mkdir postgres cd postgres mkdir v01 cd v01
postgresをインストール
devbox init devbox add postgresql
実行結果は以下
Installing nix packages. This may take a while... done. postgresql NOTES: To initialize the database run `initdb`. Services: * postgresql Use `devbox services start|stop [service]` to interact with services This plugin creates the following helper files: This plugin sets the following environment variables: * PGDATA=/mnt/c/Users/admin/nix/postgres/v01/.devbox/virtenv/postgresql/data To show this information, run `devbox info postgresql` postgresql (postgresql-14.6) is now installed.
devboxに入る
devbox shell
dbを初期化しようとすると、以下のエラーが・・・
The files belonging to this database system will be owned by user "[username]".This user must also own the server process. initdb: error: invalid locale settings; check LANG and LC_* environment variables
正解はこちら
initdb --encoding=UTF8 --no-locale
先に進むも違うエラーが・・・
FATAL: data directory "/mnt/c/Users/XXXXX/postgres/v01/.devbox/virtenv/postgresql/data" has invalid permissions DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750). child process exited with exit code 1
上記フォルダの権限をchmodで変えてみるも、パーミッションは一向に変わらず、パーミッションエラーが回避できない状況でした。
-
回避について
なお前述記事の「/etc/wsl.conf」の追加で、chmodを有効にした後に上記フォルダの権限を700に書き換えると、先に進むことができた。
なお、initdb後も「/run/postgresql/」でパーミッションエラーが発生する。
オーナーを変えるか、ローカルの開発環境であればchmod -R 777 で凌ぐかする。https://beb.ninja/post/postgres-local/
FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock": No such file or directory
回避は下記で・・・initdb --encoding=UTF8 --no-locale exit sudo mkdir /run/postgresql sudo chmod -R 777 /run/postgresql devbox services start devbox shell createdb testdb psql testdb
Discussion