UbuntuにPHPインストールで格闘した話
開発関連技術
開発環境, PHP
先日の anyenv 導入後、PHP をいれたかったのでphpenv
も入れることにしたのですが…
なかなか長い戦いになりました(遠い目)
※注意点
結論を先に言いますと、PHP のインストール自体はできたのですが、Ubuntu の apt コマンド使いました…。
なので、ここから先はphpenv
での導入の参考にはなりませんし、非常に長くなったのであしからず。
自分が PHP をインストールするまでの戦いの履歴が以下のとおりです。
PHP をインストールする#
anyenv → phpenv でインストール#
- phpenv インストール
anyenv install phpenv
- ログインシェルで各種 profile 再読み込み
exec $SHELL -l
- インストールできる PHP のバージョンの確認
phpenv install -l
- 指定したバージョンの 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 をいれるところまではスムーズだったんですけどねー。
※ちなみにビルドに成功した場合は、以下のコマンドでバージョンを選択できるようです。
- バージョン切り替え
- システム全体で適用
phpenv global (バージョン)
- 一部プロジェクトで適用
phpenv local (バージョン)
- インストールされているバージョン確認(選択されているバージョンに
*
がついている)
phpenv versions
brew でインストール#
brew で各バージョンをインストールし、phpenv とリンクさせて繋ぐことで管理できないかなと考えてみました。
- インストールできるバージョンの確認
brew search php@
表示されるphp@5.6
php7.0
php@7.1
php@7.2
が対応バージョンです。
※2018/03/31まではPHPのフォーミュラとしてhomebrew/php
があり。
php56
とphp56-*
(バージョンに応じた拡張) のような形式だったのですが、homebrew/core
に統合された関係で上記のような形式になった模様。(拡張は組み込み式に変更)
- 指定したバージョンの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
で挑戦してみることにしました。
phpbrew
はphpenv
とphp-build
を1つにしたようなもので、こちらでもバージョン管理ができます。
業務で使っていたときはbrewでインストールしていましたが、前述のとおりhomebrew/php
が使えなくなったため、curl コマンドでインストールすることに。
※環境に応じた事前に必要なものが記載されているので、先に入れておくといいかも
基本的に公式の案内に沿って進めました。
- インストール
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
- 権限変更
chmod +x phpbrew
- 格納場所を変更
sudo mv phpbrew /usr/local/bin/phpbrew
- bash script を初期化
phpbrew init
ここでまたもや問題が。
bash script を初期化しようとしたところ、phpbrew
コマンドが使えない状態でした。
php-cli
をいれれば良いとのことで、brew でインストールしたところphpbrew
コマンドが使えるようになりました。
以下続きます。
- 以下を .bashrc に追記
source ~/.phpbrew/bashrc
- インストールできるバージョン確認
phpbrew known
- 指定したバージョンの PHP をインストール
phpbrew install (バージョン) (バリアントオプション)
※phpbrew ではバリアント
という概念があります。
拡張ライブラリをより扱いやすくしたものといった感じでしょうか。
はい、やってきましたビルドの時間。
いいかげんビルド成功してほしいという願いもむなしく…やっぱりコケました。
う~ん、PHP に嫌われてるのかなぁと思ってみたり。
※ビルド成功時には以下のコマンドでバージョン選択できます。
- バージョン切り替え
- システム全体で適用
phpbrew switch php-(バージョン)
- 一部プロジェクトで適用
phpbrew use php-(バージョン)
- インストールされているバージョン確認(選択されているバージョンに
*
がついている)
phpbrew list
apt でインストール#
これまでの戦いでヘロヘロになっていた自分は、バージョン管理をあきらめてapt
コマンドでインストールすることにしました…。
ほぼこちらの方の記事のとおりに進めました。
- リポジトリ追加
sudo add-apt-repository ppa:ondrej/php
- apt のアップデート
sudo apt update
- インストール
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
- バージョン確認
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 使えるようになって良かったです。