現象
zshにログインした時に、以下のようなエラー(警告?)が出る
zsh compinit: insecure files, run compaudit for list.
Ignore insecure files and continue [y] or abort compinit [n]?
原因
パーミッション周りが悪いらしい。
compinit は、セキュリティ上の問題から、補完に関連するファイルで所有者の違うものを見つけるとそれを読み込まないらしい。
そのあたりについてはググれば GitHub や StackOverflow のページがいくらでも見つかるだろう。
解決
zsh-users GitHub 上の issue につけられているコメント で分かる通り、権限と所有者を変更すればかんたんに解決する。Macの場合は以下のようになる。
-
compaudit
を実行すると、問題のあるディレクトリが表示される - 表示された各ディレクトリに対して
sudo chown -R root:staff target_directory
を実行する - 同様に
sudo chmod -R 755 target_directory
を実行する
または、以下のコマンドでも解決する場合があるらしい。
$ compaudit | xargs g-w
反応や別のページを見る限り、多くの場合はこれで解消するらしいのだが、私はこれだけでは解決しなかった。
compaudit
で表示されたディレクトリを調べると、 /usr/local/share/zsh/site-functions/
以下にあるファイルがシンボリックリンクになっており、 -R
オプションによる再帰的な適用が効かなかったようである。
そのため、以下のようにして解決した。
for i in $(compaudit | xargs readlink -f)
do
sudo chown root:staff $i
sudo chmod 755 $i
done
※実際には手作業で行ったが、同等の効果が得られるはずである。
まとめ
compinit が権限周りで吐くエラーを解消した。
同じようにシンボリックリンクが問題を起こしている場合のページが軽く調べた中には見つからなかったため、記録として残しておく。