Moyazine

日々の学習と生活の記録

zsh-completionsのインストールに躓いた話

問題発生

作業環境を整えるのは基本。

なんか良さそうなリンクも来たし、Fishから乗り換えたのもあって色々と導入しようとしたらいきなり躓いた。

参考

zenn.dev

とりあえずbrewで入れる。

するとこんなメッセージが出てきた。

==> Upgrading zsh-completions
  0.33.0_1 -> 0.34.0 

==> Pouring zsh-completions--0.34.0.all.bottle.tar.gz
==> Caveats
To activate these completions, add the following to your .zshrc:

  if type brew &>/dev/null; then
    FPATH=$(brew --prefix)/share/zsh-completions:$FPATH

    autoload -Uz compinit
    compinit
  fi

You may also need to force rebuild `zcompdump`:

  rm -f ~/.zcompdump; compinit

Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
to load these completions, you may need to run this:

  chmod -R go-w '/usr/local/share/zsh'

メッセージ自体は参考リンクのと同じだけど、自分のMacはIntelなのでそれを加味して設定を変更。

chmod -R go-w '/usr/local/share/zsh'

ただそれでもWarningが消えない。

❯ source ~/.zshrc                     
zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]? y

とりあえずGPTに聞いてみる。

解決

Q1

以下のエラーを解決したい

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

A1

このエラーは、Zshの補完システムが不安全なディレクトリ権限に関連していることを示しています。解決するには、次の手順を実行してください。

  1. エラーメッセージに従ってcompauditを実行し、不安全なディレクトリのリストを取得します。

     compaudit
    
  2. compauditが出力したディレクトリのパーミッションを修正します。次のコマンドは、ディレクトリの所有者とグループを現在のユーザーに変更し、パーミッションを755に設定します。

     sudo chown -R $(whoami) <ディレクトリ名>
     sudo chmod -R 755 <ディレクトリ名>
    

    <ディレクトリ名>compauditの出力から取得したディレクトリ名に置き換えてください。

  3. もし複数のディレクトリがある場合は、上記の手順を繰り返し実行して、すべてのディレクトリのパーミッションを修正します。

  4. 修正が完了したら、新しいターミナルウィンドウを開いて、エラーが解消されたことを確認します。

Q2

sudoってあんま使っちゃいけないと思うんだ。あとwhoamiって何。

A2

sudoは、一時的に管理者(ルート)権限でコマンドを実行するためのコマンドです。確かに、sudoはシステム全体に影響を与える可能性があるため、慎重に使用する必要があります。ただし、上記の手順では、特定のディレクトリの所有者とパーミッションを変更するだけであり、通常は問題が発生しないはずです。

whoamiは、現在ログインしているユーザー名を表示するコマンドです。このコマンドは、sudo chownコマンドでディレクトリの所有者を現在のユーザーに変更するために使用されます。$(whoami)は、コマンドの結果(ユーザー名)を直接コマンドラインに挿入します。

❯ echo $(whoami)  
yamadatakatoshi

なるほどね。

Q3

そもそもcompauditってなに

A3

compauditは、zshシェルの補完システムで使用されるディレクトリとファイルのセキュリティチェックを行うコマンドです。このコマンドは、不正なアクセス権限や所有権が設定されているディレクトリやファイルを検出し、それらが悪意のあるコードによって改ざんされていないか確認するために使用されます。

compauditがエラーを検出すると、zshの補完機能(compinit)が警告メッセージを表示し、補完を続行するか中止するかを選択できます。このような問題が発生した場合、compauditの結果を使用して、不適切なアクセス権限や所有権を持つディレクトリやファイルを修正することが推奨されます。

それを加味して実践

❯ compaudit
There are insecure directories:
/usr/local/share

❯ sudo chown -R $(whoami) /usr/local/share
Password:

yamadatakatoshi😎 ~/Workspace/ReadingNotes/algorithms_explained_and_illustrated on 🌱main x86_64took 4s 
❯ sudo chmod -R 755 /usr/local/share

compauditの設定がzshじゃなくてその1つ上のshareディレクトリだったからか〜なるほど。

❯ source ~/.zshrc

無事に解決。