前提
筆者の PC のスペック。
- OS: macOS Sierra
- ユーザーアカウント: 以下の2つ
- 管理者 (以下 admin) ※ root とは別物
- 通常使用 (以下 myuser)
- Homebrew: Yosemite 時代にインストールした(と記憶している)ものを使い続けてます
Homebrew 使用時だけ、通常使用アカウントのターミナルから sudo -uadmin brew
などとして使用していました。
悩み事
Sierra にアップグレードして久しいある日、 brew install
しようとしたら以下のエラーが発生しました。
$ sudo -uadmin brew install bar
Error: Permission denied - /Users/myuser/Library
エラー文でググっても有力な情報が見つからなかったので formulae をメモって再インストール。
note-formulae
brew list > ~/Desktop/formulae.txt
reinstall
sudo -uadmin ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
sudo -uadmin ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
(※最新のインストールコマンドは公式を参照)
アンインストールはうまくいったっぽいのですが、(再)インストール時に以下のようなエラーが出て失敗してしまいました。
warning: unable to access '/Users/myuser/.config/git/attributes': Permission denied
原因
ググって出てきた情報を改めてじっくり眺めていたら、以下の記事が参考になりました。
どうやら sudo
するときに環境変数 $HOME
が元のユーザーのままだったのがいけなかったらしいです。
sudo
するときに $HOME
の定義が元のままだと、 admin ユーザーの権限で myuser のホームディレクトリを参照しちゃうってことですね。
$ echo 'echo $HOME' | sudo -uadmin bash
/Users/myuser
解決方法
なんとかする方法ないかと man sudo
して 'HOME' を検索…っと、ありました!
(以下 man 8 sudo
から引用)
- -H, --set-home
- Request that the security policy set the HOME environment variable to the home directory specified by the target user's password database entry. Depending on the policy, this may be the default behavior.
つまりはこういうこと
$ echo 'echo $HOME' | sudo -uadmin bash
/Users/myuser
$ echo 'echo $HOME' | sudo -H -uadmin bash
/Users/admin
というわけで brew するとき以下のようにしたらちゃんと動きました。
install
sudo -H -uadmin ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
(※最新のインストールコマンドは公式を参照)
use
sudo -H -uadmin brew doctor