iTunesの中途半端なローカライズが嫌という愚痴記事を以前書いた「iTunes 12もやっぱりジャンル名を勝手に日本語にする。勝手にローカライズ問題は続く – 或る阿呆の記」。Localizable.stringsをEnglishのものに上書きすることで対応していたのだが、High Sierraだとエラーが出るらしい。多分SIPのせい。その対応。
やりたいこと
iTunesの中途半端な日本語化が嫌なので、Localizable.stringsを英語版に書き換えることでUI含め全部英語にしちゃう。
症状
下記の手順でLocalizable.stringsを書き換えようとすると…
$ cd /Applications/iTunes.app/Contents/Resources/Japanese.lproj
$ sudo mv Localizable.strings Localizable.strings.bak
$ sudo cp -a ../English.lproj/Localizable.strings .
sudo mvでoperation not permittedだと怒られる。
環境
- iMac 2017
- macOS High Sierra 10.13.1
- iTunes: 12.7.1.14
一方、Mac mini 2012をEl CapitanからHigh Sierraにアップグレードしたものでは、この症状は起きなかった。
原因と対応
多分SIP(System Integrity Protected)のせい。SIPとは/bin、/sbin、/usr、/System下は管理者権限でも変更不可というもの。
「How to turn off Rootless (SIP, or System Integrity Protection) in Mac OS X - Macworld UK」によると多くの/ApplicationにあるプリインアプリもSIPの影響を受けるとのこと。該当部分を引用。
The protected directories are: /System, /bin, /sbin, /usr (but not /usr/local). The symbolic links from /etc, /tmp, and /var to /private/etc, /private/tmp, and /private/varare also protected, although the target directories are not themselves protected. Most preinstalled Apple applications in /Applications are also protected.
実際に影響を受けるもののリストは、/System/Library/Sandbox/rootless.confを見ればよい。

対象に入っている
iTunesが保護の対象になっていることがわかる。
ということで、この日本語問題の手っ取り早い(?)対応策としては、iTunesをアップデートしないことSIPを一時的に解除して、その間に上記の書き換えを行うこと。
解除方法は、以下。
- SIPの解除
- 電源を落とす
- Cmd + Rを押しながら起動→リカバリモードで立ち上がる
- ユーティリティ→ターミナルでターミナルを起動
- csrutil disable
- reboot
- 普通に再起動すると、SIPが解除されているので、記事の書き換え手順を実行
- 元に戻す
- 電源を落とす
- Cmd + Rを押しながら起動→リカバリモードで立ち上がる
- ユーティリティ→ターミナルでターミナルを起動
- csrutil enable
- reboot
以上です。面倒くさい。
参考
コメント