前提
こんなことをしようとした。
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をごちゃごちゃいじる必要がありそうだね。