UbuntuにPHPインストールで格闘した話

先日のanyenv導入後、PHPをいれたかったのでphpenvも入れることにしたのですが…
なかなか長い戦いになりました(遠い目)

※注意点
結論を先に言いますと、PHPのインストール自体はできたのですが、Ubuntuのaptコマンド使いました…。
なので、ここから先はphpenvでの導入の参考にはなりませんし、非常に長くなったのであしからず。

自分がPHPをインストールするまでの戦いの履歴が以下のとおりです。

PHPをインストールする #

anyenv→phpenvでインストール #

1.phpenvインストール

$ anyenv install phpenv

2.ログインシェルで各種profile再読み込み

$ exec $SHELL -l

3.インストールできるPHPのバージョンの確認

$ phpenv install -l

4.指定したバージョンのPHPをインストール

$ phpenv install (バージョン)

この時、依存ライブラリも一緒にビルドをしてくれるのですが…以下のようなエラーが。

configure: WARNING: unrecognized options: --with-mcrypt
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: none, min: 204, excluded: ).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: libxml2 not found. Please check your libxml2 installation.

調べていくと、ビルドに必要な拡張ライブラリを入れておき、ビルドの際にそれらを使ってくれるようパスを指定したりしていけば、おおよそ解決する模様。
しかし、表示されたエラーに沿って対応していっても、なかなかビルドが通ってくれず。configureオプションでビルドの設定ができるのはわかったんですが、具体的なことはイマイチわからずで次の方法へ。

phpenvをいれるところまではスムーズだったんですけどねー。

※ちなみにビルドに成功した場合は、以下のコマンドでバージョンを選択できるようです。

5.バージョン切り替え

  • システム全体で適用
    $ phpenv global (バージョン)
    
  • 一部プロジェクトで適用
    $ phpenv local (バージョン)
    

6.インストールされているバージョン確認(選択されているバージョンに*がついている)

$ phpenv versions

brewでインストール #

brewで各バージョンをインストールし、phpenvとリンクで繋ぐことで管理できないかなと考えてみました。

1.インストールできるバージョンの確認

$ brew search php@

表示されるphp@5.6 php7.0 php@7.1 php@7.2が対応バージョンです。

※2018/03/31まではPHPのフォーミュラとしてhomebrew/phpがあり、 php56php56-*(バージョンに応じた拡張) のような形式だったのですが、homebrew/coreに統合された関係で上記のような形式になったようです。(拡張は組み込み式に変更)
参考:homebrew/php が死んでた

2.指定したバージョンのPHPをインストール

$ brew install php@(バージョン)

依存パッケージも一緒にインストールしてくれますが…

ncurses, util-linux, apr, libbsd, expat, apr-util, brotli, gdbm, readline, sqlite, bzip2, python@2, libxml2, c-ares, libev, libevent, jansson, boost, jemalloc, nghttp2, pcre, httpd, aspell, curl, freetds, libpng, freetype, gettext, libffi, glib, icu4c, jpeg, libpq, libtool, libzip, mhash, mcrypt, unixodbc, libtiff, webp

こんな感じでたくさん入ります。
こんなにあるんや…とか、なんかpythonまで入ってるんやけどとか思いつつも、順調にインストールが進んでいたのでいけるかと思いきや、最後のPHPのビルドでまたもやエラーに。
こんなにたくさん依存パッケージインストールしといて最後にコケるんかーい。

configure: error: Cannot find sys/sdt.h which is required for DTrace support

エラーメッセージを頼りに調べていくと、どうやらopensslに関するエラーの模様。

Please do not report this issue to Homebrew/brew or Homebrew/core. which support macOS only.

ちなみにエラーメッセージのあとにはこんなメッセージが。
「macOSしかサポートしてないから、不具合等の報告は送らないで」ということでしょうか。

ダメもとでopensslの新しいバージョンのものを入れてみたり、パスを確認してみたりするも、うまくいかず…。

この時点で結構な時間を使っていたので、「PHPのビルドがうまくいかなくてキレそう」とつぶやいたところ、先輩から助け舟が。しかし、残念ながらそれもむなしい結果になってしまいました…。

phpbrewでインストール #

今度は、以前業務で使ったことがあるphpbrewで挑戦してみることにしました。
phpbrewphpenvphp-buildを一つにしたようなもので、こちらでもバージョン管理ができます。
業務で使っていたときはbrewでインストールしていましたが、前述のとおりhomebrew/phpが使えなくなったため、curlコマンドでインストールすることに。

GitHub:phpbrew/phpbrew
※環境に応じた事前に必要なものが記載されているので、先に入れておくといいかも

基本的に公式の案内に沿って進めました。

1.インストール

$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew

2.権限変更

$ chmod +x phpbrew

3.格納場所を変更

$ sudo mv phpbrew /usr/local/bin/phpbrew

4.bash scriptを初期化

$ phpbrew init

ここでまたもや問題が。
bash scriptを初期化しようとしたところ、phpbrewコマンドが使えない状態でした。

php-cliをいれれば良いとのことで、brewでインストールしたところphpbrewコマンドが使えるようになりました。

以下続きます。

5.以下を.bashrcに追記

$ source ~/.phpbrew/bashrc

6.インストールできるバージョン確認

$ phpbrew known

7.指定したバージョンのPHPをインストール

$ phpbrew install (バージョン) (バリアントオプション)

※phpbrewではバリアントという概念があります。
拡張ライブラリをより扱いやすくしたものといった感じでしょうか。(phpbrew - GitHubを参考)

はい、やってきましたビルドの時間。
いいかげんビルド成功してほしいという願いもむなしく…やっぱりコケました。
う~ん、PHPに嫌われてるのかなぁと思ってみたり。

※ビルド成功時には以下のコマンドでバージョン選択できます
8.バージョン切り替え

  • システム全体で適用
    $ phpbrew switch php-(バージョン)
    
  • 一部プロジェクトで適用
    $ phpbrew use php-(バージョン)
    

9.インストールされているバージョン確認(選択されているバージョンに*がついている)

$ phpbrew list

aptでインストール #

これまでの戦いでヘロヘロになっていた自分は、バージョン管理をあきらめてaptコマンドでインストールすることにしました…。

参考 UbuntuにPHP7の環境をつくる
ほぼこちらの方の記事のとおりに進めました。

1.リポジトリ追加

$ sudo add-apt-repository ppa:ondrej/php

2.aptのアップデート

$ sudo apt update

3.インストール

$ sudo spt install php(バージョン) (拡張ライブラリ)

例 $ sudo apt install php7.2 php7.2-common php7.2-cli php7.2-fpm php7.2-mysql php7.2-dev php7.2-mbstring php7.2-zip
※必要に応じてライブラリ追加

4.バージョン確認

$ php -v
PHP 7.2.5-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: May  5 2018 04:59:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
 with Zend OPcache v7.2.5-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

こんな感じで表示されたらOKです。やっとPHP使えるようになりました…。それもaptだと拍子抜けするくらいあっさり終わって、いままで使った時間なんやったんや…。

バージョン情報を見てみると、もしやUbuntu用のPHPだったりするんでしょうか。


いやはや、とても長い道のりでした(苦笑) Ubuntuに慣れている方だったらこんなことしないんだろうなぁと思いつつ、まぁ無事にPHP使えるようになって良かったです。

参考リンクまとめ #