Ubuntu 20.04 で Composer を使ったパッケージのインストールではまったお話
いつものように Composer を使ってパッケージをインストールしたはずなのに、なぜかサーバエラー。ログを確認すると
PHP Warning: require(/var/www/test/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php): Failed to open stream: Permission denied in /var/www/test/vendor/composer/autoload_real.php on line 78
PHP Fatal error: Uncaught Error: Failed opening required '/var/www/test/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php' (include_path='.:/usr/share/php') in /var/www/test/vendor/composer/autoload_real.php:78
というように、パーミッション周りのエラーが出ていました。では、ということでパーミッションを確認すると
-rw-rw-r-- 1 test test 7237 Nov 3 14:55 /var/www/test/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php
というように、一見パーミッションには問題がないように見えます。ここでさんざん悩んだのですが、この問題、Composer と Ubuntu 20.04 の p7zip-full パッケージに含まれている 7z コマンドの問題のようで、Composer パッケージの解凍に 7z を使うと、パーミッションが正しく設定されないようです(Composer の関連 Issue)。
確かに、このファイルが含まれているディレクトリのパーミッションを確認すると
drwx------ 3 test test 4096 Nov 3 14:55 ./
drwxrwxr-x 30 test test 4096 Jan 12 00:27 ../
-rw-rw-r-- 1 test test 8784 Nov 3 14:55 bootstrap80.php
-rw-rw-r-- 1 test test 7237 Nov 3 14:55 bootstrap.php
-rw-rw-r-- 1 test test 1056 Nov 3 14:55 composer.json
-rw-rw-r-- 1 test test 1065 Nov 3 14:55 LICENSE
-rw-rw-r-- 1 test test 29149 Nov 3 14:55 Mbstring.php
-rw-rw-r-- 1 test test 370 Nov 3 14:55 README.md
drwx------ 3 test test 4096 Nov 3 14:55 Resources/
というように、ディレクトリについてインストールしたユーザー以外に何の権限も与えられていません(700)。
パッケージインストール時のログをよく見ると
Unzipping using 7z 16.02 may result in incorrect file permissions. Install 7z 21.01+ or unzip to ensure you get correct permissions.
と書いてあるのですが、インストール自体はエラーも出ずに終了しますし、PHP のエラーログだけではなかなか気づきませんよね。。
対応方法としては、unzip パッケージをインストールすることです。unzip パッケージインストール後に composer install
すると
drwxrwxr-x 3 test test 4096 Nov 3 14:55 ./
drwxrwxr-x 30 test test 4096 Jan 12 01:04 ../
-rw-rw-r-- 1 test test 8784 Nov 3 14:55 bootstrap80.php
-rw-rw-r-- 1 test test 7237 Nov 3 14:55 bootstrap.php
-rw-rw-r-- 1 test test 1056 Nov 3 14:55 composer.json
-rw-rw-r-- 1 test test 1065 Nov 3 14:55 LICENSE
-rw-rw-r-- 1 test test 29149 Nov 3 14:55 Mbstring.php
-rw-rw-r-- 1 test test 370 Nov 3 14:55 README.md
drwxrwxr-x 3 test test 4096 Nov 3 14:55 Resources/
というように、正しくパーミッションが設定されていることがわかります。
ディスカッション
コメント一覧
まだ、コメントがありません