セキュリティ機能の影響で、Macでのphp-mecabのインストールに手間取った

スポンサーリンク

結論としては、手間取った原因はSystem Integrity Protectionというセキュリティ機能の影響だったので、解除したらすんなりインストールできた。(解除を試す場合は自己責任で。)

まずは環境確認

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G65

$ php -v
PHP 7.1.16 (cli) (built: Mar 31 2018 02:59:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

$ xcodebuild -version
Xcode 10.0
Build version 10A255

$ mecab --version
mecab of 0.996

$ which php-config
/usr/bin/php-config

$ which mecab-config
/usr/local/bin/mecab-config

次にphp-mecabのビルドとインストール

$ wget https://github.com/rsky/php-mecab/archive/v0.6.0.tar.gz
$ tar xvzf v0.6.0.tar.gz
$ cd ./php-mecab-0.6.0/mecab
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
$ make
$ sudo make install

sudo make installで問題発生。謎なメッセージで途方にくれる。

Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20160303/
cp: /usr/lib/php/extensions/no-debug-non-zts-20160303/#INST@734#: Permission denied
make: *** [install-modules] Error 1

仕方なくMakefileを読むと、mecab.soをコピーしてるだけなのになぜか失敗。
ルート権限付きで手動でコピーしてみても何故か失敗。。。

調べてみると、Mac OS X 10.11 El Capitanから、SIP(System Integrity Protection)という機能が搭載されていて、ルート権限があっても書き込めないフォルダがあるとのこと。

他のサイトを参考にSIPを解除。

MacでOperation not permittedが出た時の対処法

Macを再起動し,command + Rを押し続けてリカバリーモードにする
上のバーから,ターミナルより, コマンドを打ち込む
$ csrutil status
状態がenabledになっていると思う <- これが元凶
設定を変更し,再起動する
$ csrutil disable
$ reboot

解除後にsudo make installを再度実行したら無事インストールできた。
迷ったけど、インストール後にSIPは再度有効化しておいた。