C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

Arch Linux 環境で cargo が言うことを聞かなくなったメモ

症状

  • 数日ぶり程度に使用した Arch Linux 環境の rust 処理系で
  • cargo+nightly を受け付けてくれなくなって困った ( -Z したかった )
  • rustup toolchain では stable, nightly が installed 状態

原因

  • rust は rustup を per user で導入して使っていた"はず"だったのに
  • /sbin/cargo が実行されていた ( which cargo で判明 )
  • /sbin/cargo は stable

なぜ /sbin/cargo が環境に "いつのまにか" install されてしまったのか考えると、この数日の間に実験的に yay で rust 製のツールをシステムへ install した事を思い出しました。 yay での install ではビルドツールチェインも芋蔓し、途中の選択肢によってはビルドツールチェインはビルド後に remove できたりするのですが、おそらく yay で rust 製のツールをシステム導入した際にビルドツールチェインの remove を選択ミスしたためシステムパッケージ版の rust が導入された状態になってしまい、意図しない cargo = /sbin/cargo~/.cargo/bin/cargo よりパスが優先される状態に陥っていたのだろうと思います。

解決

  • yay または pacman で rust パッケージを削除 ( per user で導入している rustup には影響しません )

おまけ: Arch Linux ゆえ

同様の症状の状態は Ubuntu など他の GNU/Linux 環境でも発生させる事はできますが、 AUR と yay のようにユーザーの環境でソースコードからビルドするタイプのパッケージ管理システムを常用していない限り、"意図せず"に発症する事は無いと思います。Gentoo で emerge している場合は似た状況がうっかり発生する事もあるのかも。