OS X Mavericks (10.9) で開発環境を構築していたMacBookを、macOS Sierra (10.12) でクリーンインストールする必要に迫られた。
当時と比べ、PHPのバージョン管理はphpbrewなど乱立している感じだが、メンテされているものが少ない。
やはり、php-buildを使うことにした。
.
当時参考にしたのは以下の記事で、そのまま使えるものも多いため、今回もこれを参考に進めた。
PHPerがMacbookAirを買ったら直ぐにすること 2012
http://qiita.com/suin/items/26162a4ebcbbb351b879
Java SEのインストール
http://www.oracle.com/technetwork/java/javase/downloads/index.html
JDK Download をクリックしてOSに合ったものをダウンロード。
インストール後、java -version で確認。
XQuartzのインストール
https://www.xquartz.org
あとあと、PHP のビルド時に必要なライブラリ libpng を入れてくれるので、インストールしておく。(これを入れず brew install libpng したのをリンクしてPHPをビルドしようとしたら何故か上手く行かなかったので)
Xcodeのインストール
AppStoreから最新版(現時点8.3.2)をインストール。5GBくらいあるので時間が掛かる。
Xcode Command Line Toolsのインストール
Xcodeインストール後、起動、メニュー「Open Developer Tool」>
More Developer Tools > Apple Developer のサイトへ行き、
バージョンに合った Command Line Tools (.dmg) をダウンロードしてインストール。
https://stangler.blogspot.jp/2017/02/macos-sierra-xcode-command-line-tools_14.html
ホームディレクトリを確認する
ホームディレクトリとは /Users/[ユーザ名] のディレクトリのこと。Finder で「家」の形のアイコンが付いているフォルダ。自分のユーザ名は whoami コマンドで確認できる。ターミナルでは cd とだけ打ち込むとホームディレクトリに移動する、cd $HOME でも同じ。
.bash_profile / .bashrc を作る
.bash_profile と .bashrc は環境変数などを設定するファイル。.bash_profile はログイン時に一度だけ実行され、.bashrc はターミナルウィンドウを開くたびに実行される。
使い方は人それぞれだが、ここでは主に .bashrc に記述していくことにした。
もうちょっとちゃんとした使い分けは「本当に正しい .bashrc と .bash_profile の使ひ分け」を参照。
ホームディレクトリに .bash_profile と .bashrc を作る
cd touch .bash_profile touch .bashrc
この2つのファイルは、先頭に .(ドット)がついており隠しファイルなのでFinderを開いても見えない。ターミナルで ls すると見える。
vi ~/.bash_profile
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
Homebrewのインストール
Homebrew は Mac 用のパッケージ (Formula) 管理ツールで、Apple が用意してくれていない便利なものを色々入れることができる。Linux でいう yum コマンドのようなもの。大抵のものは brew search すれば見つかる。
まずインストール場所を決める。
Homebrew は従来では /usr/local/ などにインストールされていたが、Sierra (とEl Capitan) からは /usr/ といったシステム的に重要な場所の書き込みが制限されているらしく、それならばと、ホームディレクトリに brew の専用フォルダを作ってインストールすることにした。
開発関係のフォルダとしてホームに dev フォルダを作り、その下に brew フォルダを作る。(ずっと使うことになるため覚えやすい場所に決める)
まず dev フォルダを作る。
mkdir -p /Users/[ユーザ名]/dev
Tips : /Users/[ユーザ名] は $HOME と短く書くこともできる。
dev フォルダに移動
cd $HOME/dev
いざ、brew フォルダを作って、Homebrew をインストール
mkdir brew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C brew
.
終わったら、brew doctor と打ち込んで試してみる。
prefix がデフォルトでないというメッセージが出るが気にしない。任意の場所に作っているので当然。
.bashrc に brew で、これからインストールする用のパスを通しておく
vi ~/.bashrc
export PATH=${HOME}/dev/brew/bin:$PATH export HOMEBREW_CACHE=${HOME}/dev/brew/cache
Homebrew で今後インストールされるパッケージ類のコマンドは、${HOME}/dev/brew/bin 下、つまり* /Users/[ユーザー名]/dev/brew/bin* にインストールされる。ので、パスを通しておく。
.bashrc を保存し終わったら、ターミナルウィンドウを開き直す。
brew のパッケージインストールを試す
ひとまずテストに、何かと使える wget コマンドを brew で入れてみる。
brew install wget
試してみる(www.yahoo.co.jp のソースがダウンロードされ表示される)
wget http://www.yahoo.co.jp
これは余談だが、パッケージの実体は、/Users/[ユーザ名]/dev/brew/Cellar に置かれ、wget コマンドは、/Users/[ユーザ名]/dev/brew/brew/bin に置かれる。
/Users/[ユーザ名]/dev/brew/brew/bin/wget にシンボリックリンクが作られ、/Users/[ユーザ名]/dev/brew/Cellar/wget/[インストールされたバージョン]/bin/wget にリンクされている。そして前もって、.bashrc でパスを通しているので、wget が直接コマンドとして機能するようになる。Macのエイリアスが二重になっている感じ。
なぜこんな回りくどいことになっているのかというと、もしリンクを張っていなければ
/Users/[ユーザ名]/dev/brew/Cellar/wget/[インストールされたバージョン]/bin/wget http://www.yahoo.co.jp
と、wget を使うたびに長いパスを入れなくてはいけない。
brew で Apache 2.2 をインストール
tap に追加して、httpd を探す
brew tap Homebrew/dupes brew search httpd
2.2 をインストール
brew install httpd22
サイトのドキュメントルートを決める
従来の /Users/[ユーザ名]/Sites にしたいが、Sierra は Sites フォルダが用意されていなかった。
普通にフォルダを作ればOK。
mkdir -p $HOME/Sites
Sites が「サイト」じゃないのが気になったら、Sites ディレクトリ上で、touch .localized する。
Apacheで最低限の設定をする(書き換えが必要な箇所のみ)
vi $HOME/dev/brew/etc/apache2/2.2/httpd.conf
<Directory> の AllowOverride None / Order deny,allow / Deny from all はコメントアウトする。
Listen 80 ServerName localhost:80 User daemon -> User [自分のアカウント名] Group daemon -> Group staff DocumentRoot "/Users/[ユーザ名]/Sites" <Directory /> Options FollowSymLinks AllowOverride All </Directory> <IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
起動・再起動・停止を試す
sudo apachectl start sudo apachectl restart sudo apachectl stop
上手くいかない時、apacheのエラーログを見る。
tail $HOME/dev/brew/var/log/apache2/error_log
SSLのエラーが出ていたら、SSLのオプションを切ってもいい。
ホスト名に追加
sudo vi /etc/hosts
127.0.0.1 localhost [ローカルホスト名]
※ローカルホスト名:システム環境設定>共有>コンピュータ名(編集ボタンを押す)で設定しているもの
Mime.types にPHPを追加
vi $HOME/dev/brew/etc/apache2/2.2/mime.types
application/x-httpd-php php
設定しないと、PHPスクリプトが実行されない。
brew で MySQL 5.5 をインストール
今回は 5.5 を使いたかったので探して入れる。
brew search mysql brew install mysql@5.5
MySQL で最低限の設定をする
vi $HOME/dev/brew/etc/my.cnf
MySQLのパスを通す
vi ~/.bashrc
export PATH=${HOME}/dev/brew/opt/mysql@5.5/bin:$PATH
MySQL データディレクトリの権限設定
sudo chown -R _mysql:_mysql $HOME/dev/brew/var/mysql
起動・再起動・停止を試す
sudo mysql.server start sudo mysql.server restart sudo mysql.server stop
エラー ERROR! The server quit without updating PID file
上記の、データディレクトリの権限設定ができていない。
brew で php-build / php-version などの、PHPのビルド準備をする
php-build をインストール
バージョンを指定してPHPをビルドするもの。
新しめのバージョンのPHPをインストールできるように、–HEADをつけて最新のものを取ってくる。
brew install --HEAD homebrew/php/php-build
php-build を実行するときの、ビルドしたPHPのインストール場所を作っておく(PHPの実体が置かれる場所)
mkdir -p $HOME/dev/brew/php/versions
php-version をインストール
php-buildでバージョン毎に入れたPHPを切り替えるもの。
brew install homebrew/php/php-version
php-version のパスを通す
ここでは、PHP 5.6.30 を入れるつもりなので、デフォルトでは 5.6.30 が起動するようにしておく。(適宜、書き換えると良い)
vi ~/.bashrc
export PHP_VERSIONS=${HOME}/dev/brew/php/versions [ -f $(brew --prefix php-version)/php-version.sh ] && source $(brew --prefix php-version)/php-version.sh && php-version 5.6.30 >/dev/null
PHPのビルドに必要と思われるパッケージ群をインストール
brew install re2c brew install libjpeg brew install libmcrypt Brew install openssl Brew install libxml2
ここで本来は libpng を入れる必要があるのだが、XQuartzが入れてくれているので大丈夫なはず。
bisonも入れておく
PHPに対応したバージョンが入っていないと、php-build 実行時に「configure: WARNING: bison versions supported for regeneration of the Zend/PHP parsers: 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7 (found: 2.3).」のようなエラーが起きる。
brew search bison
2.7は対応してるので、これを使う
brew install bison@2.7
パスを通す
vi ~/.bashrc
export PATH=${HOME}/dev/brew/opt/bison@2.7/bin:$PATH
PHP 5.6 系を php-build でインストール
ようやく準備が整ったので、PHPをバージョン指定して入れていく。
php-build のバージョン毎のビルド設定ファイルは、$HOME/dev/brew/share/php-build/definitions/ に置かれている。今回は、5.6.30 を入れたいので、以下を開く。
vi $HOME/dev/brew/share/php-build/definitions/5.6.30
configure_option -R "--with-mysql" "mysqlnd" configure_option "--with-apxs2" "/Users/[ユーザ名]/dev/brew/bin/apxs" configure_option "--enable-phpdbg" configure_option "--with-jpeg-dir" "$(brew --prefix libjpeg)" configure_option "--with-mcrypt" "$(brew --prefix libmcrypt)" configure_option "--with-openssl" "$(brew --prefix openssl)" configure_option "--with-libxml-dir" "$(brew --prefix libxml2)" install_package "https://secure.php.net/distributions/php-5.6.30.tar.bz2" install_xdebug "2.5.2" enable_builtin_opcache
最終的にはこのような感じになった。以下、変更した箇所について。
libphp5.so を生成させるため
configure_option "--with-apxs2" "/Users/[ユーザ名]/dev/brew/bin/apxs"
PHP5.6からのデバッガを入れてみたいので
configure_option "--enable-phpdbg"
ビルドに必要なライブラリのディレクトリを個別に指定。
configure_option "--with-jpeg-dir" "$(brew --prefix libjpeg)" configure_option "--with-mcrypt" "$(brew --prefix libmcrypt)" configure_option "--with-openssl" "$(brew --prefix openssl)" configure_option "--with-libxml-dir" "$(brew --prefix libxml2)"
install_package はPHPのダウンロード元でURLが古いと見つからない場合があるので適宜書き換える。install_xdebug は開いたときのバージョンのままで問題ないはず。
また php-build は 0.11.0 より pear 及び pyrus のサポートを終了 (Removed pear and pyrus support)している。よって、install_pyrus は使えないので書かない。pear が必要な場合は、公式から別途入れることになる。
保存したら、ビルドを実行
先ほど作った保存先の $HOME/dev/brew/php/versions/ 以下にインストールさせる。
php-build 5.6.30 $HOME/dev/brew/php/versions/5.6.30
しばらく待つ。
終わったら、PHP 5.6.30 用に作られた libphp5.so (apacheが使う)を、5.6.30 の個別フォルダに退避しておく。
(退避しておいて、apache で使うPHPのバージョン毎に差し替えられるようにする)
cp $HOME/dev/brew/opt/httpd22/libexec/libphp5.so $HOME/dev/brew/php/versions/5.6.30/libphp5.so
php-versionで切り替えてみる
php-version 5.6.30
php -v PHP 5.6.30 (cli) (built: ビルド日時) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.5.2, Copyright (c) 2002-2017, by Derick Rethans
こんな感じに表示されたらOK。
なお、php-version はターミナル上で実行される php のバージョンを切り替えるものなので、Apache で使う php のバージョンは次の手順で切り替える。
ApacheのPHPバージョン切替シェルスクリプトを作る
スクリプトは http://qiita.com/suin/items/26162a4ebcbbb351b879#apacheのphpモジュール切り替え用シェルスクリプトを作る を拝借する。
ホームディレクトリに自作シェルスクリプトを置くためのフォルダ /dev/bin を作る
mkdir -p $HOME/dev/bin
パスを通す。
vi ~/.bashrc
export PATH=${HOME}/dev/bin:$PATH
シェルスクリプト作成、内容を書き込んで保存
touch apache-php-version chmod +x apache-php-version
apache-php-version用の環境変数を設定
apacheとphp(homebrewでインストールした各バージョン)のパスを通す。(libphp5.soのコピー元とコピー先を指定)
vi ~/.bashrc
export APACHE_PATH=${HOME}/dev/brew/opt/httpd22 export PHP_PATH=${HOME}/dev/brew/php/versions
試してみる(Apache を php 5.6.30 で起動する)
apache-php-version 5.6.30
最終的な .bashrc はこんな感じになった
vi ~/.bashrc
export PATH=${HOME}/dev/bin:$PATH export PATH=${HOME}/dev/brew/bin:$PATH export HOMEBREW_CACHE=${HOME}/dev/brew/cache export PHP_VERSIONS=${HOME}/dev/brew/php/versions [ -f $(brew --prefix php-version)/php-version.sh ] && source $(brew --prefix php-version)/php-version.sh && php-version 5.6.30 >/dev/null export PATH=${HOME}/dev/brew/opt/openssl/bin:$PATH export PATH=${HOME}/dev/brew/opt/mysql@5.5/bin:$PATH export PATH=${HOME}/dev/brew/opt/bison@2.7/bin:$PATH export APACHE_PATH=${HOME}/dev/brew/opt/httpd22 export PHP_PATH=${HOME}/dev/brew/php/versions
おわりに
今だとVagrantとか使って仮想環境つくるのが当然みたいな雰囲気なんですが、従来のやり方も必要だろうと備忘録としてまとめてみました。
(突然、MavericksからSierraへすっ飛びでクリーンインストールからPHP環境構築するハメになり困ったので)
それはそれとして、疲れました。ふぅ。
抜けがあるような気がしないでもないので、また今度訂正します
0 件のコメント :
コメントを投稿