いつかのために

自作サイトができるまで、メモ置き場として使っているブログ

composerの移動先を間違えたときの話

ローカル開発環境のVagrant+VirtualBoxで作ったCentOS
/var/www/html/配下にLaravelを入れようとして格闘したのでメモします。
結論から言うと、
composer.phar/usr/local/bin/composerに名前変更
mv composer.phar /usr/local/bin/composer
するのではなく、
mv composer.phar /usr/local/bin/composer/composer.phar と、composerディレクトリをつくってその配下に移動してしまったこと が原因です。


以下、調査方法です。
cd \var\www\html
laravel new laravel

Crafting application...
PHP Warning:  file_put_contents(/var/www/html/laravel_591a618f398466590af59573919f776f.zip): failed to open stream: Permission denied in /home/vagrant/.config/composer/vendor/laravel/installer/src/NewCommand.php on line 133
PHP Warning:  ZipArchive::extractTo(): Permission denied in /home/vagrant/.config/composer/vendor/laravel/installer/src/NewCommand.php on line 151
PHP Warning:  ZipArchive::close(): Invalid or uninitialized Zip object in /home/vagrant/.config/composer/vendor/laravel/installer/src/NewCommand.php on line 153
You should verify that the "storage" and "bootstrap/cache" directories are writable.

In Process.php line 334:
                                    
  The provided cwd does not exist.  
                                    

new [--dev] [--force] [--] [<name>]

composer周りでエラーが出た模様?
とりあえず権限を確認しました。
pwd

/var/www

ll

ll
total 8
drwxr-xr-x. 2 root    root    4096 Jun 27 13:49 cgi-bin
drwxr-xr-x. 2 root root 4096 Jun 27 13:49 html

chown vagrant:vagrant html

chown: changing ownership of ‘html’: Operation not permitted

権限変更の権限がないと出たのでsudoを使います。
sudo chown vagrant:vagrant html
ll

total 8
drwxr-xr-x. 2 root    root    4096 Jun 27 13:49 cgi-bin
drwxr-xr-x. 2 vagrant vagrant 4096 Jun 27 13:49 html

改めてLaravelを入れようと思います。
cd html/
laravel new laravel

Crafting application...
sh: composer: command not found
Application ready! Build something amazing.

ls

laravel

入ったは入ったけど、composerコマンドがないといわれてる…?

pwd

/usr/local/bin/composer

php composer.phar -V

Composer version 1.8.0 2018-12-03 10:31:16

それなら、直接php composer.pharをたたいてやれ!と(Laravel用のファイルはあとで移動しようと思ってました)
php composer.phar global create-project --prefer-dist laravel/laravel laravel "5.7.*"

Changed current directory to /home/vagrant/.config/composer
The "https://repo.packagist.org/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
Failed to enable crypto
failed to open stream: operation failed
https://repo.packagist.org could not be fully loaded, package information was loaded from the local cache and may be out of date

                                                                                                            
  [Composer\Downloader\TransportException]                                                                  
  The "https://packagist.org/p/laravel/laravel%243bc08c6b87557c6612c4ffd6e23bd5099550031af06600dc0e757449c  
  cbea91d.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:     
  error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed                         
  Failed to enable crypto                                                                                   
  failed to open stream: operation failed                                                                   
                                                                                                            

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]

composer global create-projectコマンドを使うためには、OpenSSLが必要っぽい…?ですね。
ローカル環境にはちょっと難しく見えたのでここで断念。
このあたりで、冒頭でcomposerの移動先を間違えたことに気が付きました…。


composer周りのミスに気が付いたところで、改めてlaravelコマンドを実行してみましょう。
laravel new laravel/

-bash: laravel: command not found

laravel コマンドがないといわれてます……ナンデ。
echo $PATH

/home/vagrant/.config/composer/vender/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin

ll /home/vagrant/.config/composer/vendor/bin/

total 0
lrwxrwxrwx. 1 vagrant vagrant 28 Dec 16 15:33 laravel -> ../laravel/installer/laravel

パスも間違いなく通ってるように見えるのですが…。
今回は細かい原因追及をやめ、直叩きで実行できないか確認してみます。
/home/vagrant/.config/composer/vendor/bin/laravel -V

Laravel Installer 2.0.1

直叩きならうまくいってますね。今回はこちらでいきます。
cd /var/www/html/ /home/vagrant/.config/composer/vendor/bin/laravel new laravel

Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 86 installs, 0 updates, 0 removals
~略~
Application ready! Build something amazing.

ls

laravel

ようやく…ようやくできました…。

本番環境ではblogディレクトリでLaravelを入れてしまったので、開発環境で作ってるものがリリースされる時に修正しようと思います。