[Sy] 作業メモ 〜MacのHomebrewとPHPまわりの環境整備〜
Mac で久々に PHP のプロジェクトを扱うことになったので、PHP まわりの環境整えようとした時の作業メモ。( phpenv は使わずに Homebrew から直接 PHP をインストールしています)
※このエントリーは、ぼくがどのように考えて作業したのかを残したものです。途中まわり道をしていたり、間違ったことをしてることもあるのでご注意ください。
とりあえず Homebrew を update
しばらく Homebrew を放置してたから update してみよう。
$ brew update
・
・
・
==> Deleted Formulae
php@5.6 ✔ cctools gradle@2.14 maven@3.0 pyexiv2
php@7.0 ✔ cctools-headers gv maven@3.1 rock
apple-gcc42 ffmbc kibana@4.4 nethack4 ruby@2.2
aptly-completion gnome-doc-utils ld64 pldebugger
え?PHPのパッケージ(フォーミュラ)が削除されてる・・・
ちょっと調べよう。
PHPの状態を確認
まず今インストール済みの PHP のパッケージを検索。
$ brew list | grep php
php@5.6
php@7.0
5.6と7.0があった。記憶の片隅にphp56
というパッケージの名前が変わってphp@5.6
になったりとかあった気がするけど、その時どうしたか細かく覚えてない。
とりあえず今有効なのは、7.0 だったはず。。。
$ php -version
PHP 7.0.31 (cli) (built: Jul 19 2018 23:41:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.31, Copyright (c) 1999-2017, by Zend Technologies
うん、合ってた。パスはどこ見てるのかな?
$ which php
/usr/local/opt/php@7.0/bin/php
あれ? Homebrew って /usr/local/Cellar/
配下にインストールするんじゃなかったっけ?シンボリックリンクかな?
$ ls -l | grep php
lrwxr-xr-x 1 utano320 admin 26 5 3 2018 php56 -> ../Cellar/php@5.6/5.6.32_8
lrwxr-xr-x 1 utano320 admin 24 5 10 2018 php@5.6 -> ../Cellar/php@5.6/5.6.36
lrwxr-xr-x 1 utano320 admin 24 8 5 11:03 php@7.0 -> ../Cellar/php@7.0/7.0.31
なるほどなるほど。php56
ってのが残ってて気持ち悪いなぁ。
ひとまず現状は把握できた。
PHP7.3をインストールする
で、php@5.6
と php@7.0
が消えるわけだから、他のパッケージを入れる必要が出てくるのかな?何があるんだろう?
$ brew search php@7
==> Formulae
php@7.1 php@7.2 php@7.3
単純に古いバージョンは消していこうという方針なのかな?(元から?)
てことは php@7.3
を入れるとかになるのかな?
まずは 5.6 を削除してみよう。brew upgrade
コマンドでいいのかな? Deleted Formulae
になったパッケージの反映ってやったことなかったな。
$ brew upgrade php@5.6
Updating Homebrew...
Error: php@5.6 5.6.36 already installed
あ、こうじゃないのね。
んーググってみてもそれらしい方法は見つからない。
普通にバージョンを上げたいときと同じような手順でやってみるか。
まずは php@7.3
をインストールしてみよう。
$ brew install php@7.3
・
・
・
==> Installing php
==> Downloading https://homebrew.bintray.com/bottles/php-7.3.1.mojave.bottle.tar.gz
######################################################################## 100.0%
==> Pouring php-7.3.1.mojave.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink sbin/php-fpm
/usr/local/sbin is not writable.
You can try again using:
brew link php
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set php_ini /usr/local/etc/php/7.3/php.ini system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set php_dir /usr/local/share/pear system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set doc_dir /usr/local/share/pear/doc system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set ext_dir /usr/local/lib/php/pecl/20180731 system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set bin_dir /usr/local/opt/php/bin system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set data_dir /usr/local/share/pear/data system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set cfg_dir /usr/local/share/pear/cfg system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set www_dir /usr/local/share/pear/htdocs system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set man_dir /usr/local/share/man system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set test_dir /usr/local/share/pear/test system
==> /usr/local/Cellar/php/7.3.1/bin/pear config-set php_bin /usr/local/opt/php/bin/php system
==> /usr/local/Cellar/php/7.3.1/bin/pear update-channels
==> Caveats
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.3/
To have launchd start php now and restart at login:
brew services start php
Or, if you don't want/need a background service you can just run:
php-fpm
==> Summary
🍺 /usr/local/Cellar/php/7.3.1: 521 files, 76.4MB
・
・
・
一応インストールはできたみたいだけど、エラー出た。この部分。
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink sbin/php-fpm
/usr/local/sbin is not writable.
なになに、 brew link
で失敗してる。 /usr/local/sbin
がないからっぽい。
調べてみるとたしかにない。
$ ls -al /usr/local/ | grep sbin
(出力なし)
うん、実は知ってた。brew doctor
してみたら警告出てた。エラーじゃないから大丈夫だろって思ってた。ごめんなさい。
Homebrewの状態確認
改めて・・・
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: The following directories do not exist:
/usr/local/sbin
You should create these directories and change their ownership to your account.
sudo mkdir -p /usr/local/sbin
sudo chown -R $(whoami) /usr/local/sbin
Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.
Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
/Users/utano320/.pyenv/shims/python3.5m-config
/Users/utano320/.pyenv/shims/python2-config
/Users/utano320/.pyenv/shims/icu-config
/Users/utano320/.pyenv/shims/libpng16-config
/Users/utano320/.pyenv/shims/python3.6m-config
/Users/utano320/.pyenv/shims/python2.7-config
/Users/utano320/.pyenv/shims/python3.5-config
/Users/utano320/.pyenv/shims/python-config
/Users/utano320/.pyenv/shims/python3-config
/Users/utano320/.pyenv/shims/ncursesw6-config
/Users/utano320/.pyenv/shims/pcre-config
/Users/utano320/.pyenv/shims/python3.6-config
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
php
Warning: Broken symlinks were found. Remove them with `brew cleanup`:
/usr/local/bin/docker-credential-osxkeychain.backup
/usr/local/bin/hyperkit.backup
/usr/local/bin/notary.backup
/usr/local/bin/vpnkit.backup
/usr/local/etc/bash_completion.d/_brew_services
/usr/local/opt/php56
Warning: Some installed formulae are missing dependencies.
You should `brew install` the missing dependencies:
brew install ncurses
Run `brew missing` for more details.
冒頭に「警告は心配しなくていいよ、無視していいよ」って書いてあるんだけどなぁ。。。まぁいいやおとなしく対応していこう。
ついでに全部警告消したい。
まずはこれから。今回問題になったやつだな。
Warning: The following directories do not exist:
/usr/local/sbin
You should create these directories and change their ownership to your account.
sudo mkdir -p /usr/local/sbin
sudo chown -R $(whoami) /usr/local/sbin
親切にコマンド書いてあるのでそのとおりやってみよう。/usr/local/sbin
を作って、自分をオーナーにする。
$ sudo mkdir -p /usr/local/sbin
$ sudo chown -R $(whoami) /usr/local/sbin
$ ls -al /usr/local | grep sbin
drwxr-xr-x 2 utano320 wheel 64 1 11 11:15 sbin
できた。警告も1つ消えた。
次はこれ。
Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.
Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
/Users/utano320/.pyenv/shims/python3.5m-config
/Users/utano320/.pyenv/shims/python2-config
/Users/utano320/.pyenv/shims/icu-config
/Users/utano320/.pyenv/shims/libpng16-config
/Users/utano320/.pyenv/shims/python3.6m-config
/Users/utano320/.pyenv/shims/python2.7-config
/Users/utano320/.pyenv/shims/python3.5-config
/Users/utano320/.pyenv/shims/python-config
/Users/utano320/.pyenv/shims/python3-config
/Users/utano320/.pyenv/shims/ncursesw6-config
/Users/utano320/.pyenv/shims/pcre-config
/Users/utano320/.pyenv/shims/python3.6-config
ここを参考に対応
⇒ 【Homebrew】brew doctorのWarning対処方法 (その3) + envコマンドについて - TASK NOTES$ echo 'alias brew="env PATH=${PATH/\/Users\/utano320\/.pyenv\/shims:/} brew"'
消えた。
次はこれ。
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
php
ちょっと先ほどのPHPのインストールにコケたやつに付随してるかもしれないので、一旦パス。次へ。
Warning: Broken symlinks were found. Remove them with `brew cleanup`:
/usr/local/bin/docker-credential-osxkeychain.backup
/usr/local/bin/hyperkit.backup
/usr/local/bin/notary.backup
/usr/local/bin/vpnkit.backup
/usr/local/etc/bash_completion.d/_brew_services
/usr/local/opt/php56
シンボリックリンクが壊れてるやつ。brew cleanup
すれば良いみたいなのでやってみる。
$ brew cleanup
・
・
・
Pruned 6 symbolic links and 25 directories from /usr/local
==> This operation has freed approximately 765.8MB of disk space.
警告消えた。そしてめっちゃディスク空いたw
次はこれ。
Warning: Some installed formulae are missing dependencies.
You should `brew install` the missing dependencies:
brew install ncurses
依存してるパッケージがうまく入ってないみたい。インストールする。
$ brew install ncurses
・
・
・
🍺 /usr/local/Cellar/ncurses/6.1: 3,869 files, 8.3MB
消えた。
ここでPHP7.3を一応再インストールしてみる。
$ brew install php@7.3
Updating Homebrew...
Warning: php 7.3.1 is already installed, it's just not linked
You can use `brew link php` to link this version.
あ、やっぱりインストールはできてるのね。シンプルに brew link php
でさっきの警告も一緒に解決できそう。
$ brew link php
Linking /usr/local/Cellar/php/7.3.1... 24 symlinks created
これで全部警告消えたかな?
$ brew doctor
Warning: Homebrew's sbin was not found in your PATH but you have installed
formulae that put executables in /usr/local/sbin.
Consider setting the PATH for example like so
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc
お、新しいの出てきた。 /usr/local/sbin
をPATHの先頭に入れないといけない様子。
.zshrc
に追記しよう。先程追記したalias brew=...
の前に入れる必要がある。
$ vim ~/.zshrc
(.zshrc)
・
・
・
export PATH="/usr/local/sbin:$PATH" <--追記
alias brew="env PATH=${PATH/\/Users\/utano320\/.pyenv\/shims:/} brew"
ようやく brew doctor
で警告でなくなった。
PHP7.0を見てる・・・
しかしまだPHPは終わってなさそう。
$ php --version
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
Referenced from: /usr/local/opt/php@7.0/bin/php
Reason: image not found
zsh: abort php --version
なんかphp@7.0
からライブラリの読み込みに失敗してる。というか7.0まだ見てるやん。
$ which php
/usr/local/opt/php@7.0/bin/php
うーん、一度5.6と7.0と7.3すべてアンインストールしちゃおう。
$ brew remove php@5.6
Uninstalling /usr/local/Cellar/php@5.6/5.6.36... (499 files, 63.9MB)
$ brew remove php@7.0
Uninstalling /usr/local/Cellar/php@7.0/7.0.31... (503 files, 65.6MB)
$ brew remove php@7.3
Uninstalling /usr/local/Cellar/php/7.3.1... (522 files, 76.4MB)
MacのデフォルトのPHPを見るようになった。
$ php --version
PHP 7.1.19 (cli) (built: Aug 17 2018 20:10:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
$ which php
/usr/bin/php
Homebrewも問題ない。
$ brew doctor
Your system is ready to brew.
改めてphp@7.3をインストール
$ brew install php@7.3
・
・
・
🍺 /usr/local/Cellar/php/7.3.1: 521 files, 76.4MB
==> Caveats
・
・
・
To have launchd start php now and restart at login:
brew services start php
Or, if you don't want/need a background service you can just run:
php-fpm
エラーもなく無事インストールできた。動作確認してみる。
$ php --version
PHP 7.3.1 (cli) (built: Jan 10 2019 13:15:37) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.1, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.1, Copyright (c) 1999-2018, by Zend Technologies
うん、7.3になってる。
インタラクティブシェルも問題ない。
$ php -a
Interactive shell
php > $a = 3;
php > $b = 2;
php > echo $a + $b;
5
php > exit
nginx と php-fpm の状態をチェック
$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 67 root 6u IPv4 0x7b0258cff04cba53 0t0 TCP *:http (LISTEN)
nginx 211 nobody 6u IPv4 0x7b0258cff04cba53 0t0 TCP *:http (LISTEN)
Google 372 utano320 185u IPv4 0x7b0258cffada6753 0t0 TCP localhost:55120->localhost:http (CLOSE_WAIT)
$ sudo lsof -i:9000
(出力なし)
nginx は起動してる、 php-fpm は起動してない。
php@7.3
インストール時に出てたメッセージを参考に php-fpm を起動。
$ brew services start php
==> Successfully started `php` (label: homebrew.mxcl.php)
起動したっぽい。再確認。
$ sudo lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 44712 utano320 8u IPv4 0x7b0258d001c753d3 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 44716 utano320 9u IPv4 0x7b0258d001c753d3 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 44717 utano320 9u IPv4 0x7b0258d001c753d3 0t0 TCP localhost:cslistener (LISTEN)
PHP(ついでにHomebrew)の環境がきれいになりましたー。