Ubuntu 26.
Ubuntu 26.04 LTSのsudo/coreutils事情
第902回の
sudoコマンドは説明するまでもなく、UbuntuのCLIにおいて、特権へと昇格するために必要なコマンドです。26.sudo.」
$ update-alternatives --display sudo sudo - 自動モード 最適なリンクのバージョンは '/usr/lib/cargo/bin/sudo' です リンクは現在 /usr/lib/cargo/bin/sudo を指しています リンク sudo は /usr/bin/sudo です /usr/bin/sudo.ws - 優先度 40 /usr/lib/cargo/bin/sudo - 優先度 50
基本的にRust版のsudoをそのまま使っていれば良いはずです。もしどうしてもオリジナルのsudoへと戻したい場合は、一時的にsudo.コマンドを実行するか、次のコマンドで切り替えてください。
$ sudo update-alternatives --set sudo /usr/bin/sudo.ws
coreutilsについてはsudoと比べるとより複雑です。もしかするとそもそも
従来のcoreutils
簡単に言うと
Ubuntu 26.
- 従来のcoreutils
(gnu-coreutils) の提供するコマンドにはすべて 「gnu」 のプレフィックスが付く名前に変更 (例:cpがgnucpになるなど) - Rust版のcoreutils
(rust-coreutils) は、 /usr/以下にコマンドがインストールされるlib/ cargo/ bin/ coreutils/ /usr/などのコマンドファイルパスは、上記のいずれかへのシンボリックリンクになるbin/ cp
これにより、システムとしてはGNU版とRust版の両方をインストールしつつ、必要に応じて使い分けられるようになっています[3]。
たとえばmkdirコマンドの場合は次のようになっています。
24.04ではただのバイナリファイル: 24.04$ ls -lh $(command -v mkdir) -rwxr-xr-x 1 root root 75K Jan 23 13:30 /usr/bin/mkdir 26.04ではシンボリックリンクになっている: 26.04$ ls -lh $(command -v mkdir) lrwxrwxrwx 1 root root 32 Mar 31 01:50 /usr/bin/mkdir -> ../lib/cargo/bin/coreutils/mkdir 26.04$ ls -lhL $(command -v mkdir) -rwxr-xr-x 115 root root 11M Apr 16 21:41 /usr/bin/mkdir
ただしすべてがRust版に置き換わったわけではありません。次にあげるコマンドはいくつかの事情によりGNU版のままとなりました。
$ find /usr/bin /usr/sbin -type l | xargs ls -l | grep '\-> gnu' lrwxrwxrwx 1 root root 5 Mar 31 01:50 /usr/bin/cp -> gnucp lrwxrwxrwx 1 root root 5 Mar 31 01:50 /usr/bin/df -> gnudf lrwxrwxrwx 1 root root 5 Mar 31 01:50 /usr/bin/mv -> gnumv lrwxrwxrwx 1 root root 5 Mar 31 01:50 /usr/bin/rm -> gnurm lrwxrwxrwx 1 root root 7 Mar 31 01:50 /usr/bin/true -> gnutrue
GNU版のままとなっているコマンドも2026年10月リリース予定のUbuntu 26.
実装を勝手に変えられると困るんだけど!
coreutilsに存在するコマンド類は、さまざまなスクリプトやソフトウェアから呼び出されるものです。Ubuntuのリポジトリにあるパッケージでなく、世界中のユーザーが作成したスクリプトからも呼び出される可能性もあります。Rust版のcoreutilsが、GNU版のそれと完全に互換性を維持していれば問題ありません。しかしながら実際には挙動に大小問わず様々な違いが存在します。意図しない不具合によって差異が生じてしまうこともあるでしょう。
そこでUbuntuでは、次のようなフェーズで幅広いテストを募ってきました。
- 2025年4月に、24.
04および25. 04で誰でもすぐにRust版coreutilsを使えるようにし、テストを募集した - 2025年10月にリリースされたUbuntu 25.
10から、Rust版coreutilsを標準で採用し、26. 04に向けて各自の環境で試すよう依頼した
その結果としてUbuntuのシステムレベルではほぼ問題ないように作り込んできました。不具合報告の状況から、26.
しかしながら、取りこぼしもあるかもしれません。さらに、残念なことに
残念なことに移行の開始から1年で、網羅的に動作確認できたとは言い難いのも事実です[5]。さらに
幸いLTSでは
たとえばユーザーがテスト環境でUbuntu 26.
- Rust版の挙動に合わせて作り込む
- 不具合として報告し、積極的に修正作業に参加する
- GNU版を使うように作り込む
(gnuFOOのコマンドを使うようにする) - Ubuntu 24.
04 LTSを使い続ける - すべてのcoreutilsコマンドをGNU版に切り替える
Ubuntu的なおすすめは案1か案2です。ただしそれができれば苦労はしません。そもそも問題とは、発覚しない限り認識できないのですから、移行したあとしばらくたってから気づくことも多々あります。第902回でも紹介したように、小さなスクリプトだけであれば案3のようなスクリプト自体をGNU版にしてしまう手もあります。
一番現実的なのは案4です。正直な話、coreutilsの変更によって容易ならざる影響を受けるようなシステムのうち、果たしてどれくらいのシステムが
どうしてもUbuntu 26.
GNU coreutilsに戻したい!
Ubuntu 26.
まずは26.
- coreutils
- 従来のcoreutilsのパッケージ名。26.
04ではcoreutils-from-uutilsもしくはcoreutils-from-gnuに依存するただのメタパッケージになった - coreutils-from-uutils
- Rust版のcoreutils一式へのシンボリックリンクを提供するパッケージ。coreutils-from-gnuとは同時にインストールできない
- coreutils-from-gnu
- GNU版のcoreutils一式へのシンボリックリンクを提供するパッケージ。coreutils-from-uutilsとは同時にインストールできない
- rust-coreutils
- Rust版のcoreutilsを提供するパッケージ。コマンドは
「`/usr/ lib/ cargo/ bin/ coreutils/`」 にインストールされる - gnu-coreutils
- GNU版のcoreutilsを提供するパッケージ。コマンドは
「`/usr/{bin,sbin}/`」 にインストールされる
rust-coreutilsとgnu-coreutilsは同時にインストールできるのですが、coreutils-from-uutilsとcoreutils-from-gnuはどちらか片方しかインストールできません。そのためシンボリックリンクの状態は一意に決まるのです。
よってGNU版に切り戻すには
$ sudo apt install coreutils-from-gnu coreutils-from-uutils- --allow-remove-essential Installing: coreutils-from-gnu REMOVING: coreutils-from-uutils WARNING: The following essential packages will be removed. This should NOT be done unless you know exactly what you are doing! coreutils-from-uutils Summary: Upgrading: 0, Installing: 1, Removing: 1, Not Upgrading: 0 Download size: 6902 B Freed space: 1024 B Continue? [Y/n]
coreutils-from-uutilsパッケージはUbuntuにとって必須パッケージ扱いであり、これを削除するには--allow-remove-essential」
無事にインストールできたら、Rust版にリンクされているファイルを探してみましょう。次のようにsudoコマンド系だけになるはずです。
$ find /usr/bin /usr/sbin -type l | xargs ls -l | grep '\-> .*cargo' lrwxrwxrwx 1 root root 19 Mar 11 13:27 /usr/bin/su-rs -> ../lib/cargo/bin/su lrwxrwxrwx 1 root root 21 Mar 11 13:27 /usr/bin/sudo-rs -> ../lib/cargo/bin/sudo lrwxrwxrwx 1 root root 21 Mar 11 13:27 /usr/bin/sudoedit-rs -> ../lib/cargo/bin/sudo lrwxrwxrwx 1 root root 23 Mar 11 13:27 /usr/bin/visudo-rs -> ../lib/cargo/bin/visudo
これで24.
ただし一点だけ注意が必要です。build-essentialパッケージをインストールしている環境では、GNU版coreutilsに切り替えられません。build-essentialは本来パッケージのビルド環境を構築するためのメタパッケージとして提供されていました。build-essentialがRust版coreutilsに依存しているのは、パッケージビルドサーバー上でのビルドを確実にRust版coreutils環境で行うためです。当初は一時的な対応だったのですが、検討した結果としてこのままRust版coreutilsに依存し続けることとなりました。
もしお手軽にコンパイル環境を容易するためにbuild-essentialをインストールするだけであれば、build-essentialパッケージを削除してから上記手順を実行してください。
問題はcuda-toolkitをはじめとする様々な開発系ツールが、その依存関係の結果としてbuild-essentialパッケージを必要としていることです。そのような環境では、coreutils-from-uutilsを削除できず、Rust版coreutilsを使い続ける必要があります。
なんでLTSでこんな大きな変更をしたの?
ここからは単なる背景の説明です。あえて26.
おそらく他にも政治的・
ポイントはRustで書き換えた理由です。C言語に対するメモリ安全性や並行処理の作りやすさなどRustの利点をあげているものの、Sylvestre自身は
FOSDEMの発表の中では、GNU coreutilsで使っているテストツールのスコアがあがってきたことや、MicrosoftのVisual Studio CodeでもRust版coreutilsが採用されたことなどから、すでにプロダクションで使われているとも紹介しています。
2025年の3月には、CanonicalのJon Seagerが
採用する理由として
Ubuntu 25.
ちなみにリリース後には、26.
いずれにせよUbuntu 26.
さらにUbuntuのRust化は継続される予定です。直近ではChronyの代わりにntpd-rsを採用する話が浮上しています。この前Chronyに移行したばかりなのに
uutilsプロジェクトでも現在、procpsやutil-linuxなどLinuxなら普通に入っている各種コマンド群のRust版を提供しようとしています。もしかしたらUbuntuも、あと数年で