🕌

wslでパーミッション変更ができない

2022/12/30に公開

TL;DR

  • wslでpostgresが動かなかった原因は、そもそもwsl側でchmodが正常に動かない場合があったため(chmodの実行に失敗しているのにエラーもでないので、権限変更失敗に気付かなかった)

いきさつ

  • wsl(ディストリビューションはUbuntu-20.04)でDevBox環境を作成したところ、インストールしたpostgresが正常に動作しなかった(パーミッションエラーが出る。chmodを実行しても同じエラーが出続けた)
  • 別のディストリビューション(nixOS)で試すとパーミッションエラーは解決した(chmodの実行で解決した)
  • 当初DevBoxに入ったときの不具合なのかな・・・と思ったが、そもそもubuntu側ではchmodが効いていないことに気付き、原因や回避方法を調査した。

wslでパーミッション変更ができない

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