Windows 8.1 + Cygwin + Vagrant で CentOS 7.0 に PHP 7 をインストールする

CentOS 7.0 の VagrantBox 落とすところからそれに PHP 7 入れるまでをやってみる。
打ったコマンドと出会ったエラーぜんぶ書く。
といっても標準の PHP 5 を 7 にするための rpm コマンド実行時に cURL まわりで詰まったくらいだった。

# 環境
- Windows 8.1
- Cygwin 2.6.0
- VirtualBox 5.0.28
- Vagrant 1.8.1

# やりたいこと
とりあえず CentOS 7.0 を入れて PHP 7 を使えるようにする。
お遊び開発用。

# やったこと
## VagrantBox をダウンロード → 起動する
[A list of base boxes for Vagrant - Vagrantbox.es](http://www.vagrantbox.es/)

test って名前で作る。add 時の URL は上記サイトからコピー。
box 落とせたら```vagrant up```で起動。ssh で入る。

```
$ vagrant box add test https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
$ vagrant init test
$ vagrant up
$ vagrant ssh
[vagrant@localhost ~]$
```

試しにファイル一覧を見てみる。

```
[vagrant@localhost ~]$ ll
insgesamt 24
-rwxr-xr-x 1 vagrant vagrant 450 16. Jul 2015  base.sh
-rwxr-xr-x 1 vagrant vagrant 118 16. Jul 2015  cleanup.sh
```

この```insgesamt```って何？

## Vagrant の言語設定を英語にする
と思ったらドイツ語らしい。そういえば```vagrant up```のときにうわーって出てきてたメッセージにもウムラウトついてた。
言語設定を英語に直して再起動。

```
[vagrant@localhost ~]$ sudo localectl set-locale LANG=en_US.utf8
[vagrant@localhost ~]$ exit
$ vagrant reload
$ vagrant ssh
[vagrant@localhost ~]$ ll
total 24
-rwxr-xr-x 1 vagrant vagrant 450 16. Jul 2015  base.sh
-rwxr-xr-x 1 vagrant vagrant 118 16. Jul 2015  cleanup.sh
```

なったっぽい。

## PHP 入れてみる
ここから全部```vagrant ssh```で入ってからやる。
見づらいのでプロンプトの```[vagrant@localhost ~]$```をはしょって単に```$```と表記。

CentOS に PHP 入れる、的なのでぐぐって最初にひっかかる方法をまずやる。

```
$ sudo yum install php php-mbstring
```

途中で```Is this ok [y/d/N]:```と聞かれたら```y```でエンターキーぽち。
データ量の確認らしい。以後ぜんぶイエスマン。

終わったらちゃんと入ったか確認。

```
$ php -v
PHP 5.4.16 (cli) (built: Aug 11 2016 21:24:59)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
```

5 が入ってた。7 がいい。

## PHP 7 の yum リポジトリを追加する
この記事にしたがってやり直し。
[CentOS7にPHP7をyumでインストールする - Qiita](http://qiita.com/inakadegaebal/items/b57cf10339978d638305)

CentOS が最初から持ってるインストーラーが PHP 5 だから外から PHP 7 用のを落としてくる、みたいなイメージなのか？
そのために Remi というのが必要で、そのために EPEL というのが必要？

とにかく叩く。

```
$ sudo yum install epel-release
```

EPEL なるものは無事に入ったらしい。が、

```
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
curl: (56) Recv failure: Connection reset by peer
error: skipping http://rpms.famillecollet.com/enterprise/remi-release-7.rpm - transfer failed
```

Remi は何やら失敗したっぽい。接続切れてる？ peer って誰。
とりあえずこれとたたかう。

## curl: (56) Recv failure: Connection reset by peer とたたかう
cURL はコマンドからいんたねっとにリクエスト送るやつ。そいつがうごいてない。
一緒にいた友人に調べてもらったところ、Vagrant 自体のいんたねっと通信に問題は無さそうとのこと。
でも cURL が何かに失敗している……。

### 11/17 追記：cURL の入れ直した（？）らできた（？）
本記事執筆当時やんややって結局できたんですけど（後述）、何やら余計なことやってたみたいで。
原因よくわかんないままながら cURL 入れ直したらできた。
参考記事こちら。
[How to install curl 7.37.0 with CentOS 6.5 - Qiita](http://qiita.com/maangie/items/4af8b813ed9ddce4a0db)

```
$ sudo wget https://curl.haxx.se/download/curl-7.51.0.tar.gz
$ sudo tar -xzf curl-7.51.0.tar.gz
$ cd curl-7.51.0
$ sudo ./configure --enable-libcurl-option
$ sudo make
$ sudo make install
```

続きは「PHP 7 の yum リポジトリを追加する（再）」
画面右の目次からどうぞ。

### 以下、古いの

ぐぐってたらあたったこのエントリがそれっぽいかも、と思って試す。
[【PHP】cURLをインストールして有効化する手順 | Step On Board](http://www.lesstep.jp/step_on_board/php/650/)

通信方式みたいな話らしい。
rpm コマンドを実行したとき、いまだと cURL は NSS というのを使うけど、それを OpenSSL というのを使うようにしてあげる？
（11/8 追記：これ関係ないらしい。何がほんとの原因だったかは追って調べます＞＜）

#### OpenSSL のインストール
URL はここから。（ファイル名を右クリックでリンク先アドレスコピー）
[/source/index.html](https://www.openssl.org/source/)

```
$ sudo wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
$ sudo tar -xzf openssl-1.0.2j.tar.gz
$ cd openssl-1.0.2j
$ sudo ./config --prefix=/usr/local/openssl shared zlib
$ sudo make
$ sudo make install
```

#### cURL の再インストール
URL はここから。
[cURL - Download](https://curl.haxx.se/download.html)

```
$ cd /usr/local/src/
$ sudo yum install libssh2-devel
$ sudo wget https://curl.haxx.se/download/curl-7.51.0.tar.gz
$ sudo tar -xzf curl-7.51.0.tar.gz
$ cd curl-7.51.0
$ sudo ./configure --prefix=/usr/local --with-ssl=/usr/local/openssl --with-libssh2
```

とりあえず全部打ったけど config だけ書き換えればインストールし直さなくてもいいのかも。

## PHP 7 の yum リポジトリを追加する（再）
ルートディレクトリに戻って再開。

```
$ cd /
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

Remi もなんとかなったっぽい。
いざ PHP 7 を……

```
$ sudo yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd
Complete!
$ php -v
PHP 7.0.12 (cli) (built: Oct 13 2016 18:02:31) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
```

できたー！

## 補足：上記 cURL 問題
### cURL を使わずに rpm リポジトリを追加する（やってない）
今回やらなかったけどメモ。
上で騒いだ件、打ちたかったこのコマンド↓

```
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

でそもそも何をしたかったかというと、rpm 形式のファイルをいんたねっとに探しに行って云々したかった。
で cURL が切れるから探しに行けなかった。

cURL にこだわらなくてもファイルが手に入ればいいのでは。
ホスト PC のブラウザで上記 URL にアクセスすると確かに remi-release-7.rpm が手に入る。
そやつを CentOS に移して云々すればいいんじゃないかという説。

### 参考になりそう
- [初心者の頃に知っておきたかった rpm と yum の違いと使い分け - 彼女からは、おいちゃんと呼ばれています](http://blog.inouetakuya.info/entry/20111006/1317900802)
- [【パッケージ】Linuxの「パッケージ」と「yum」と「rpm」について勉強したのでまとめてみた。 - Qiita](http://qiita.com/sksmnagisa/items/05a6f8a707010b8bea56)
- [cURLライブラリにてSSL証明がNSSになってしまう問題の回避方法 - Qiita](http://qiita.com/hirohiro77/items/73321e2c483a3d68f98d)


# おわり
まあひとまずできたので今日のところはこれでおっけー。

すごくどうでもいいことだけど本記事は下記エントリを意識してたりする。
今回の作業時間は2時間30分くらいでした。
[JavaScriptでバグが消えるまで - ジンジャー研究室](http://jinjor-labo.hatenablog.com/entry/2014/02/10/022617)