LoginSignup
0
0

More than 3 years have passed since last update.

複数ユーザーで使うMacのzplug loadで"insecure directories..."エラーが出ないようにする

Last updated at Posted at 2020-10-05

概要

zshでcompinitした際に、下記のようなエラーが出ることがあります

# compinit
zsh compinit: insecure directories and files, run compaudit for list.
Ignore insecure directories and files and continue [y] or abort compinit [n]?

これは検索すると、compauditで出てくるディレクトリのオーナーやパーミッションを設定し直すことで解消できる、といった例を多く見かけます。

シングルユーザーの場合はこれで問題ないのですが、同じシステムを複数ユーザーで使っている場合は
誰か一人しかディレクトリのオーナーになれないので、毎回yを入力するか、chownをする必要があります。

※chownをする方法はこちらでも紹介されていました。

※そもそもcompinit -uとすれば無視することもできますが、 zplugを使っている場合はこれがラップされているので修正が困難です。

Macの場合 /usr/local/share/zsh/ がこの問題として上がる例が多いみたいです。
このディレクトリはHomebrewで入れたパッケージの補完スクリプトなどが入る場所ですね。

今回は、chownせずに、補完を効かせつつこのエラーを出なくする方法を紹介します。

今の結論

zplug loadの前に↓をやる

rsync -a /usr/local/share/zsh/ ~/.zsh # sync auto completion scripts
fpath=("${(@)fpath:#/usr/local/share/zsh/site-functions}") # remove from $fpath
fpath=($fpath ~/.zsh)

何をやっているか

/usr/local/share/zsh/~/.zshにコピー

rsync -a /usr/local/share/zsh/ ~/.zsh

毎回rsyncしてるのは、Homebrewで新しいパッケージ入れた後でも反映できるようにするためです
重くなる懸念があれば、一度だけcp -R /usr/local/share/zsh/ ~/.zshとしたり、rehashみたいなaliasにしてもいいかもしれません。

fpathの更新

デフォルトでzshのモジュールとして読み込まれるパスは$fpathに一覧が入っています。

# echo $fpath
/usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.7.1/functions ...

なので

fpath=("${(@)fpath:#/usr/local/share/zsh/site-functions}") # remove from $fpath
fpath=(~/.zsh $fpath)

として、/usr/local/share/zsh/site-functions$fpathから削除し、rsyncした~/.zshを追加しています。

ひとまずこれで、複数ユーザーでもHomebrewで入れたパッケージの補完を効かせつつ insecure directories... エラーが出ないようになりました。

参考

https://qiita.com/suin/items/7b49abadc387801e8d6f
https://stackoverflow.com/questions/3435355/remove-entry-from-array

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0