Laravel Sailでは、Ubuntuを使用します。
Ubuntuには、rootユーザーという管理者ユーザーと、一般ユーザーが存在します。
管理者ユーザーの状態でWSLをインストールした場合には、Ubuntuのデフォルトユーザーはrootユーザーとなります。
この状態でLaravel Sailのプロジェクトを作成すると、次のようなエラーがでてきます。
こちらについて、原因と対策をご紹介します。
Ubuntu Permission Denied エラーの原因
エラーは、プロジェクトのファイルやディレクトリがrootユーザーによって作成されるため、Laravel Sailがアクセスできないために起こります。
Laravel Sailは通常のユーザー権限で実行されるため、rootユーザーが所有するファイルやディレクトリにアクセスできない場合があるのです。
Ubuntu Permission Denied エラーの対策
この問題を解決するには、以下の手順を実行して一般ユーザーを使用してWSLを設定し、プロジェクトのファイル権限を適切に管理することが必要です。
新規ユーザーの作成
もし一般ユーザーがない場合は、まずは新規ユーザーを作成しましょう。
Ubuntuを起動します。
Ubuntuで一般ユーザーを作成するには、下記コマンドを実行します。
sudo adduser 新規ユーザー名
ユーザーを作成すると、パスワードを聞かれます。パスワードを入力します。
その後、作成したユーザー用のパスワードを聞かれるので、パスワードを設定します。
すると、ユーザーのフルネーム等をいれる画面となります。特に必要なければ、すべてEnterキーを押していきます。最後に「Y」を押します。

これで新規ユーザーを作成できました。
新規ユーザーをDockerグループに追加
引き続き、作成したユーザーをDockerグループに追加します。
次のコマンドを実行します。
sudo usermod -aG docker 新規ユーザー名
これでDockerグループに追加できます。
おまけ:新規ユーザーをDocker以外のグループにも加えたい場合
もしすでにデフォルトの既存ユーザーがいる場合、かつ新規ユーザーを既存ユーザーが所属しているグループすべてに加えたい場合には、次のようにします。
既存のデフォルトユーザーのグループをチェックします。
既存ユーザーのグループを確認するには、下記を実行します、
sudo groups 既存ユーザー名
わたしは「jun」という既存ユーザー名でUbuntuを使っています。上記コマンドを実行すると、次のような画面になります。

新しく作ったユーザーも同じグループに所属させたい場合には、次のコマンドを実行します。
sudo usermod -aG グループ名1,グループ名2,グループ名3 新規ユーザー名
グループ名は「,]で区切るようにしましょう。
コマンド実行後に、下記を実行して、新規ユーザーにグループが追加されたかチェックします。
sudo groups 新規ユーザー名
実際にコマンドを入力した結果は、下記のとおりです。

ユーザーログアウト
一度「exit」を実行して、ユーザーのログアウトをします。
PowerShell上でWSLユーザーを新規ユーザーに変更
PowerShell・Ubuntuを立ち上げなおしておきます。
ubuntuユーザーを新規ユーザーに変更します。
ubuntu config --default-user 新規ユーザー名
Docker Integrationをしなおすといった画面がでるので、【Restart the WSL integration】を押します。

Ubuntuがクローズします。Dockerが再起動します。
再度Ubuntuを立ち上げ、下記コマンドで、新規ユーザーとしてログインをしておきます。
su ユーザー名
パスワードを聞かれるので、設定した新規ユーザー用のパスワードを入力します。

なお、現在のユーザーを確認するにはUbuntu上で下記を実行します。
echo $USER
Laravel Sailプロジェクト作成
これで準備が整いました。
Ubuntu上でLaravel Sailプロジェクトを作成します。
curl -s https://laravel.build/test1-test | bash
プロジェクトが作成されればOKです。
まだPermission Deniedと出る場合
ですがまだPermission Deniedと出た場合、プロジェクト内で下記をお試しください。
ls -l
ファイル・ディレクトリの所有者と権限が表示されます。所有者が「root」になっていた場合には所有者を変更します。
まず、rootユーザーとしてシェルに入ります。
sail root-shell
次に下記を実行します。
現在のディレクトリ(.)およびそのサブディレクトリとファイルの所有者を sail ユーザーと sail グループに変更します。
chown sail:sail . -R
ルートシェルを終了します。
exit
さいごに
エラー解消できたら嬉しいです。
Laravel Sailの使い方については、下記もご覧ください。



コメント