久しぶりにeselect newsしてたまたま気づいたのですが、Gentooで/usr merge for systemd usersのお知らせが12/1にNewsで配信されていました。portage profileのリリースとstage3のtarballも*-merged-usrのついたものが各profile用に配布されるようになっています。

sudo eselect profile list|grep merged-usr
  [8]   default/linux/amd64/17.1/desktop/gnome/systemd/merged-usr (stable)
  [11]  default/linux/amd64/17.1/desktop/plasma/systemd/merged-usr (stable)
  [13]  default/linux/amd64/17.1/desktop/systemd/merged-usr (stable)
  [19]  default/linux/amd64/17.1/no-multilib/systemd/merged-usr (dev)
  [21]  default/linux/amd64/17.1/no-multilib/systemd/selinux/merged-usr (exp)
  [23]  default/linux/amd64/17.1/systemd/merged-usr (stable)
  [25]  default/linux/amd64/17.1/systemd/selinux/merged-usr (exp)
  [28]  default/linux/amd64/17.1/systemd/clang/merged-usr (exp)
  [31]  default/linux/amd64/17.0/x32/systemd/merged-usr (exp)

「/usr mergeって何?」な人はFedoraのUsrMoveの説明Freedesktopの説明を見ればわかると思いますが、Linuxでは歴史的な経緯でシステムのバイナリやライブラリを配置する場所が/{bin,sbin,lib,lib64}/usr/{bin,sbin,lib,lib64}とみたいにふたつに分かれています。昔は、そもそも/usrはユーザーのホームディレクトリがありました。そうでなくなってからも、パーティションを別に分けた時に、/だけマウントできればコマンドが打てるように、よりプリミティブなコマンド(たとえばbusyboxとか...)は/binに、それ以外の通常起動した時にシステムが提供しているコマンドは/usr/binに、みたいなそんな感じの設計意図があったんですね。だけど、今のモダンなLinuxシステム(主にsystemdのことを言ってると言ってもいいですが)ではシステムの起動プロセスをより高度に管理できるようになったり、ストレージが大きいしストレージ管理も高度なので/とそれ以外を別のストレージやパーティションに分ける必要なくなったよね。なのでシンプルにするために統一しちゃおうよ、みたいな話になりました。/直下のこれらのディレクトリはすべて/usrにマージされ、/直下には/usrの当該ディレクトリに対するシンボリックリンクが互換性のために用意されます。

いままで(split-usr)

ls -altr /
合計 80
drwxr-xr-x   2 root root  4096 Oct 16 19:12 media
drwxr-xr-x  13 root root  4096 Oct 21 18:36 usr
drwx------   2 root root 16384 Oct 21 18:36 lost+found
drwxr-xr-x   2 root root  4096 Nov 19 03:38 srv
drwxr-xr-x   9 root root  4096 Nov 19 03:38 var
drwxr-xr-x   3 root root  4096 Nov 19 03:38 mnt
drwxr-xr-x   3 root root  4096 Nov 19 12:37 home
drwxr-xr-x   9 root root  4096 Dec  8 08:49 lib
drwxr-xr-x   6 root root  4096 Dec  8 08:59 lib64
drwxr-xr-x   2 root root  4096 Dec  8 09:01 sbin
drwxr-xr-x   2 root root  4096 Dec  8 09:45 bin
drwxr-xr-x   4 root root  4096 Dec  8 09:49 boot
drwxr-xr-x   3 root root  4096 Dec  8 10:02 opt
drwx------   7 root root  4096 Dec 10 05:14 root
dr-xr-xr-x  13 root root     0 Dec 10 05:16 sys
dr-xr-xr-x 414 root root     0 Dec 10 05:16 proc
drwxr-xr-x  17 root root  3700 Dec 10 05:16 dev
drwxr-xr-x  55 root root  4096 Dec 10 05:16 etc
drwxr-xr-x  22 root root  4096 Dec 10 05:16 ..
drwxr-xr-x  22 root root  4096 Dec 10 05:16 .
drwxr-xr-x  22 root root   520 Dec 10 05:16 run
drwxrwxrwt  10 root root   220 Dec 10 05:16 tmp

これから(merged-usr)

sudo mkdir newroot && cd $_
sudo tar xpf ../stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
ls -ltar
合計 64
lrwxrwxrwx  1 root   root     9 Dec  4 20:25 lib64 -> usr/lib64
lrwxrwxrwx  1 root   root     7 Dec  4 20:25 lib -> usr/lib
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 run
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 sys
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 boot
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 home
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 media
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 mnt
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 opt
drwxr-xr-x  2 root   root  4096 Dec  4 20:25 proc
drwxr-xr-x  9 root   root  4096 Dec  4 20:25 var
lrwxrwxrwx  1 root   root     7 Dec  4 20:25 sbin -> usr/bin
lrwxrwxrwx  1 root   root     7 Dec  4 20:25 bin -> usr/bin
drwxr-xr-x 16 root   root  4096 Dec  4 20:25 .
drwxr-xr-x  3 root   root  4096 Dec  4 20:25 dev
drwxr-xr-x 11 root   root  4096 Dec  4 20:28 usr
drwx------  2 root   root  4096 Dec  4 20:36 root
drwxrwxrwt  2 root   root  4096 Dec  4 20:54 tmp
drwxr-xr-x 36 root   root  4096 Dec  4 20:54 etc
drwxr-xr-x 10 gentoo users 4096 Dec 10 02:50 ..

まぁそこそこ昔の話(Fedora 17なのでこのエントリ書いてる時点では10年前。Ubuntuだといつからなんだろう。こういうdistro界隈全体のスキームに対する大きな方向性の変更を打ち出すのはFedoraであることが多い)で、現在モダンなLinux distroを使ってる人はまず意識することはない話なんじゃないかと思います。Gentooは選択なので、Legacyなsplit-usrを使い続けていることがほとんどで、自分達で独自にmergeする人がいたような感じに見えます。Newsに書いてある通りですが、systemdがsplit-usr環境のサポートを2023年の後半にやめるということで、Gentooでsystemdを使うユーザーはmergedusr環境への移行が必要になりました。まぁでも、GentooはinitにsystemdではなくOpenRCも選択できますからね。自分はsystemdを使っていますが。

独自配布されているバイナリのtarballであったり、portage ebuildでrpm/debを拝借して使うことが時々ある(プリンタドライバとか)Gentooでは、UsrMoveされてないことで、ツールが意図している場所にバイナリがなくて問題を手動で直さないといけないことがたまにあったのですが、オフィシャルにmergedusrな環境が用意されたことで、そういう問題は起きにくくなるかもしれません。 必要なebuildにはsplit-usrというUSE flagが用意されていて、profileの選択によって自動的にスイッチされるようです。merged-usrプロファイルを使っている場合にはこのUSE flagが個別にセットされていても、無視するメッセージがemerge時にログに出力されるようです。

現在Legacy(split-usr)で使ってる人には、ディレクトリをマージするためのsys-apps/merge-usrebuildが提供されています。移行手順は冒頭のNewsに書いてあります。自分はまだやってませんが、たぶん別の用事で再インストールしなおすので、mergeはせずいったんこのままです。