PHP7.3.8をインストールしようとしたらハマった話

# 前提
こんなことをしようとした。

```
composer require facebook/webdriver
```

そしたらそもそもPHPが入っていなかったのでインストールしたら結構ハマったのでメモっとく。
ちなみにこんな感じのOS。

```
$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
```

# 手順

まずは、普通にインストールだ。
こんな感じにとってきて、

```
wget http://jp2.php.net/distributions/php-7.3.8.tar.gz
```
configureしてインストール！

```
'./configure' \
'--prefix=/usr/local/php-7.3.8' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-zip' \
'--with-curl' \
'--with-iconv' \
'--enable-exif' \
'--enable-sockets' \
'--with-gd' \
'--with-openssl' \
'--with-png-dir=/usr/lib' \
'--with-jpeg-dir=/usr/lib' \
'--with-xsl' \
'--with-zlib' \
'--with-pcre-regex=/usr/local/pcre2' \
'--with-pcre-dir=/usr/local/pcre2' \
"$@"
```

さらっとpcre2とかを指定していますが、php7.3.0からはどうやらpcre2が要求されるようになった模様。
まあ、apacheとか動かさないから外のpcreが要るのかどうかちょっと怪しいけど、まあいいや。

で、いざcomposerでインストールしたら、

```
Problem 1
- facebook/webdriver 1.7.1 requires ext-zip * -> the requested PHP extension zip is missing from your system.
- facebook/webdriver 1.7.0 requires ext-zip * -> the requested PHP extension zip is missing from your system.
- Installation request for facebook/webdriver ^1.7 -> satisfiable by facebook/webdriver[1.7.0, 1.7.1].
```

libzipがないよ、って言われた。
「こんなのインストールすればいいじゃーん、簡単簡単」と思ったのが迷子の始まりでした。。。

## yumでいれる

```
yum install libzip-devel
```
結論、こいつはダメ。
yumで入るのは、Ver.0.10系なのですが、そいつを指定してphpをconfigureすると、Ver.0.11以上を入れろと要求されます。
ま、まあ、yumで古いバージョンしか入らないのはいつものこと。
想定の範囲内です。

## ソースから入れる

仕方ないので、ソースからインストールします。
ソースをもってきて、

```
wget https://libzip.org/download/libzip-1.5.2.tar.gz
```

解凍して、直下にあるINSTALL.mdを読んで・・・
oh... cmakeの3系以上を要求なさる。
しかたないので、

```
yum install cmake3
alias cmake=/usr/bin/cmake3
```
そして、cmakeする。

```
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/libzip-1.5.2
```
通らない。。。。
cmakeコマンドが見つかりません。とか抜かす。
ああ、そうですかaliasでは不服でございますか。

```
unalias cmake
ln -s /usr/bin/cmake3 /usr/local/bin/cmake
```
シンボリックリンクにしたら通ったのでmakeしてinstall。
からの、phpのリビルド。

```
'./configure' \
'--prefix=/usr/local/php-7.3.8' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-zip' \
'--with-curl' \
'--with-iconv' \
'--enable-exif' \
'--enable-sockets' \
'--enable-zip' \
'--with-gd' \
'--with-openssl' \
'--with-png-dir=/usr/lib' \
'--with-jpeg-dir=/usr/lib' \
'--with-xsl' \
'--with-zlib' \
'--with-pcre-regex=/usr/local/pcre2' \
'--with-pcre-dir=/usr/local/pcre2' \
'--with-libzip=/usr/local/libzip' \
"$@"
```
こんな感じで、enable-zipとwith-libzip=/usr/local/libzipでインストールしたlinzipの場所を指定。
そしたら、configureが通らない。。。
usefulなlinzipが見つからないのだそうな。
いや、指定したよね？
このオプションが見えないの？？「--with-libzip=/usr/local/libzip」

ぐぐってみたらなんか見つけた。
https://magai.hateblo.jp/entry/2019/01/05/144422

ざっと読むと、「enable-zipするときはwithout-libzipをつけましょう」
？？？？

あ…ありのまま 今　起こった事を話すぜ！
「zipをenableしたと思ったら いつの間にかwithoutしていた」
な…　何を言っているのか　わからねーと思うが　
おれも　何をされたのか　わからなかった…
頭がどうにかなりそうだった…　催眠術だとか超スピードだとか
そんなチャチなもんじゃあ　断じてねえ
もっと恐ろしいものの片鱗を　味わったぜ…

PHPのissueにはなってる模様
https://bugs.php.net/bug.php?id=76483#1529077184

PHP側にもこのように書かれています。
https://github.com/php/php-src/commit/c5df679ca8b1373e3f2a47aeba5b37da74f993de#diff-7748eb3bfdd3bf962553f6f9f2723c45

```
Zip: 
 . Building against the bundled libzip is discouraged, but still possible by
   adding `--without-libzip` to the configuration. 
```

PHP同梱のlibzipを使うのは推奨しません。使いたくばconfigure optionに--without-libzipつけろと。
じゃあ、同梱なんてするなよーーーー！！！
というか、俺は自分でインストールしたlibzipを使ってほしいんじゃ！

enable-zipつけずにインストールしたlibzipを指定してPHPをビルドしてもzipは使えるようにならんし、enbale-zipを付けるとwithout-libzipをつけねばならず同梱したlibzipが使われると。。。。
まあ、後のバージョンで修正されることを期待して、今回はbundleのzipライブラリを使おう。

```
'./configure' \
'--prefix=/usr/local/php-7.3.8' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-zip' \
'--with-curl' \
'--with-iconv' \
'--enable-exif' \
'--enable-sockets' \
'--enable-zip' \
'--with-gd' \
'--with-openssl' \
'--with-png-dir=/usr/lib' \
'--with-jpeg-dir=/usr/lib' \
'--with-xsl' \
'--with-zlib' \
'--with-pcre-regex=/usr/local/pcre2' \
'--with-pcre-dir=/usr/local/pcre2' \
'--without-libzip' \
"$@"
```

これでmakeしてインストールしてphp -iで有効になりました。
当初の、

```
composer require facebook/webdriver
```
こいつも無事通った。


よくよく考えてみれば、あとからpearとかで入れるのが正解な気がしてきた。
まあ、composer使いたかっただけだから今回はこれでいいや。
でも、プロダクトで使うときはどうするんだろね。
もう少しconfigureをごちゃごちゃいじる必要がありそうだね。