1. don-bu-rakko

    Posted

    don-bu-rakko
Changes in title
+composer で Laravelをダウンロードしようとしたら詰まった話
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,237 @@
+composer を利用して Laravelをインストールしようとしたら盛大に詰まったので、解決方法を記載しておきます。
+
+私の環境とバージョンは下記の通りです。
+
+```bash
+[hoge@hoge ~]# cat /etc/redhat-release
+CentOS Linux release 7.4.1708 (Core)
+[hoge@hoge ~]# php -v
+PHP 7.2.14 (cli) (built: Jan 8 2019 14:05:15) ( NTS )
+Copyright (c) 1997-2018 The PHP Group
+Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
+```
+
+# Composerの導入
+
+ここら辺は公式ドキュメントを参照しつつ、問題なく進んだ。
+https://getcomposer.org/download/
+
+composer-setup.phpを引っ張ってくる
+
+```bash
+php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
+```
+`-r`コマンドはスクリプトタグ`<?..?>`なしにPHPを実行(run)してくれるオプション。
+`copy`関数の定義は`copy([コピー元], [コピー先])`。
+http://php.net/manual/ja/function.copy.php
+
+
+```bash
+php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
+```
+
+`48e3236262b...`というのはcomposer-setup.phpのハッシュ値のようです。これで、ファイルの確からしさを確認しているんですね。
+詳しくはこちらに書いてあります。
+https://composer.github.io/pubkeys.html
+
+あとは、
+
+```bash
+php composer-setup.php
+```
+
+実行したのちに
+
+```bash
+php -r "unlink('composer-setup.php');"
+```
+
+削除したらひと段落です。
+cf) unlink() http://php.net/manual/ja/function.unlink.php
+
+`composer.phar`ファイルが生成されるので、どのユーザーもcomposerを利用できるように場所を移動します。
+
+pharはPHP Archive File の略で、複数の処理を1つのファイルにまとめたもの、だそうです。
+https://www.weblio.jp/content/Phar
+
+```
+mv composer.phar /usr/local/bin/composer
+composer
+```
+
+`composer`コマンドを叩いて、なんか色々出てきたら成功です。
+
+## Laravelをインストールしようとすると...
+
+ここからが長かった。
+
+`composer global require "laravel/installer"`
+を叩いてみる。
+
+すると...
+
+```bash
+[hoge@hoge ~]# sudo composer global require "laravel/installer"
+Changed current directory to /root/.config/composer
+Using version ^2.0 for laravel/installer
+./composer.json has been created
+Loading composer repositories with package information
+Updating dependencies (including require-dev)
+Your requirements could not be resolved to an installable set of packages.
+
+ Problem 1
+ - laravel/installer v2.0.1 requires ext-zip * -> the requested PHP extension zip is missing from your system.
+ - laravel/installer v2.0.0 requires ext-zip * -> the requested PHP extension zip is missing from your system.
+ - Installation request for laravel/installer ^2.0 -> satisfiable by laravel/installer[v2.0.0, v2.0.1].
+
+ To enable extensions, verify that they are enabled in your .ini files:
+ - /etc/php.ini
+ - /etc/php.d/20-bz2.ini
+ - /etc/php.d/20-calendar.ini
+ - /etc/php.d/20-ctype.ini
+ - /etc/php.d/20-curl.ini
+ - /etc/php.d/20-exif.ini
+ - /etc/php.d/20-fileinfo.ini
+ - /etc/php.d/20-ftp.ini
+ - /etc/php.d/20-gettext.ini
+ - /etc/php.d/20-iconv.ini
+ - /etc/php.d/20-json.ini
+ - /etc/php.d/20-mysqlnd.ini
+ - /etc/php.d/20-pdo.ini
+ - /etc/php.d/20-phar.ini
+ - /etc/php.d/20-sockets.ini
+ - /etc/php.d/20-sqlite3.ini
+ - /etc/php.d/20-tokenizer.ini
+ - /etc/php.d/30-mysqli.ini
+ - /etc/php.d/30-pdo_mysql.ini
+ - /etc/php.d/30-pdo_sqlite.ini
+ You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
+
+```
+
+どうやら zip が開けないと言われているようだ。
+確認してみる。
+
+```bash
+[hoge@hoge ~]# php --ri zip
+Extension 'zip' not present.
+```
+...確かにない。
+ちなみに、`--ri`はエクステンションの構成を表示してくれるオプションだ。
+
+## 試行錯誤した結果
+
+私の場合、対応しなければならない問題が3つあった。
+先に入力したコマンドを書いちゃいます。
+
+```bash
+[hoge@hoge ~]# sudo yum install --enablerepo=remi,remi-php72 php-pecl-zip
+```
+
+私はこれでうまく認識されるようになりました。
+
+```bash
+[hoge@hoge ~]# php --ri zip
+
+zip
+
+Zip => enabled
+Zip version => 1.15.4
+Libzip headers version => 1.5.1
+Libzip library version => 1.5.1
+```
+
+以下、必要だったことと詰まったポイント。
+
+### 1. `php-pecl-zip`のインストール
+
+実は、zipファイルを使えるようにしようと`yum install php-zip`を叩いてみたが、エラーが解消されなかったのだ。
+
+情報を探し回った結果、以下のStack Overflowを発見。
+https://stackoverflow.com/questions/46058457/cant-install-laravel-installer-via-composer
+
+>On centos 7 I have used:
+>
+>`yum install php-pecl-zip`
+>because any other solution didn't work for me.
+
+`pecl`を知らなかったのだが、PHP Extention Community Libraryのことで、PHPの拡張ライブラリを提供してくれているサービスらしい。
+https://ja.wikipedia.org/wiki/PECL
+
+なぜ`php-zip`ではダメだったのかの謎が解明していないので少しもやもやする。
+
+
+### 2. `remi`を利用してインストールしなければならない
+
+これが詰まりポイント2つ目。
+私の環境下では`yum install php-pecl zip`だけでは不十分でした。
+
+というのも、以前にCentOSのPHP環境を構築した際に、PHP7.2をインストールしてくるために、`remi`を利用していたのです。だからオプションをつける必要があったみたい。
+
+ここらへん、自分の中でも曖昧だったので、せっかくの機会なので、`remi`について調べておきました。
+
+https://akamist.com/blog/archives/648
+こちらの記事が大変わかりやすいです。
+
+remiとはRemiさんが管理しているリポジトリの1種です。centOSでは`yum`コマンドを利用してインストールを行いますが、`yum`が参照するパッケージのインストール元のことです。
+
+記事にあるように、`yum repolist`コマンドを叩いてみましょう。
+
+```bash
+[hoge@hoge ~]# yum repolist
+読み込んだプラグイン:fastestmirror
+Loading mirror speeds from cached hostfile
+...
+リポジトリー ID リポジトリー名 状態
+base/7/x86_64 CentOS-7 - Base 10,019
+epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,900
+extras/7/x86_64 CentOS-7 - Extras 322
+...
+remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86 3,142
+updates/7/x86_64 CentOS-7 - Updates 1,057
+```
+
+`remi ...` というコマンドを打った覚えのあるひとは、`remi-safe`がいるはずです。
+
+しかし、`yum`はデフォルトではremiリポジトリを参照してくれません。何故ならば、remiリポジトリは
+
+```bash
+yum -y install epel-release
+yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
+```
+
+のコマンドを使って**後から追加された外部のリポジトリ**という扱いになるためです。
+
+なので、
+
+```
+--enablerepo=remi,remi-php72
+```
+
+こいつをオプションとして書き加えてあげる必要があるわけです。repoはリポジトリ(Repository)の略だったんですね!
+
+### 3.`unzip`コマンドのインストール
+
+私はこれでもう一回怒られました笑
+
+```bash
+As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension.
+This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
+Installing 'unzip' may remediate them.
+```
+
+該当する人はこっそり入れておいてあげてください。これはphpとは無関係なので`remi`オプションは不要です。
+
+```bash
+[hoge@hoge ~]# yum install unzip -y
+```
+
+---
+以上でとりあえずLaravelをインストールするまでの"前段階"が終わりました。。。
+(VPSでやろうとするんじゃなかった)
+
+また詰まりポイントが出てきたらシェアしようと思います!
+
+ちなみに、`yum`は
+**Yellowdog Updater Modified**
+の略らしいですよ。