🎉

nix-env -u すると名前衝突の警告がでる

2022/04/06に公開

経緯

nix-env -uすると以下の警告がでる。

warning: name collision in input Nix expressions, skipping '/home/xxx/.nix-defexpr/channels_root/nixpkgs'

結論

nixはrootユーザのチャンネル引き継いでおり、ユーザがnixpkgsチャンネルを自ら追加すると複数の同じprefixのチャンネルが登録されている状態になるため、発生する。
解決方法としてはrootユーザのchannelを削除するのが便利だろう。大半の人が自分しか使わないものであるためである。sudo -iを経由して操作することができるので、上記のエラーではnixpkgsが問題なので、 sudo -i nix-channel --remove nixpkgsすれば改善される。

もうちょっと詳しく

  • macOSで利用する場合nixのマルチユーザモードが利用される
  • マルチユーザモードの場合rootユーザのチャンネルを引き継ぐ
  • その状態は ~/.nix-defexpr/channels_rootに保持される
  • この状態のとき nix-channel --listを実行したときチャンネル一覧には現れない
  • このためchannelを登録していないと勘違いして nix-channel --add してしまうことでこの問題がおきる。
  • ただし、動作してはユーザのチャンネルが優先されると思われるので問題は起きないが警告が出る状態である
  • そのため無視しても問題ないが、rootか自分のchannelを削除するのがよいだろう

nixpkgs以外の名前をつけて運用する方法もあるかもしれません

ここから選べる学び

  • nix-channelは ~/.nix-defexpr/を管理している
  • nix-channelコマンドではrootのchannelの読み取ることはできない
  • nix-channelコマンドをrootで使う場合はloginモードになる sudo -iを利用すると良い

参考リンク

Discussion