はじめに
alternativesでjavaの設定をしているときにfailed to read link
が出力されて、コマンドの削除も上書きもできなくなったことがあったので、その対処法を書き残しておきます。
原因
alternatives --install
でコマンドを登録するときに、存在しないディレクトリをリンク先に設定してしまった場合に発生するようです。
sh-4.4# alternatives --install /HOGE/java java /usr/lib/jvm/jre-17/bin/java 100
failed to link /HOGE/java -> /etc/alternatives/java: No such file or directory
一度存在しないリンク先で登録してしまうと、--remove
オプションで削除しようとしても、--install
オプションで正しいパスの設定で上書きしようとしても発生してしまいます。
# 削除
sh-4.4# alternatives --remove java /usr/lib/jvm/jre-17/bin/java
failed to read link /HOGE/java: No such file or directory
# 正しいパスで上書き
sh-4.4# alternatives --install /usr/bin/java java /usr/lib/jvm/jre-17/bin/java 100
failed to read link /HOGE/java: No such file or directory
the primary link for java must be /HOGE/java
対処法
/var/lib/alternatives
(administrativeディレクトリ)に存在する、間違えて登録したリンク名のファイルを削除します。削除すると再びコマンドを登録できるようになります。
sh-4.4# ls
java python python3
sh-4.4# rm java
sh-4.4# alternatives --install /usr/bin/java java /usr/lib/jvm/jre-17/bin/java 100
おわりに
最初からパスを間違えないで設定していれば...と思いました。