我觉得不要太纠结原则这个东西。哪个方案能解决问题就用哪个方案,都能解决就选择最方便自己的。
如果通过 layering 更方便,就选择 layering ,没必要为了原则就非得避免更加方便的做法。
曾经我也想避免所有 layering ,全利用 distrobox 解决问题。
比如把 git 、zsh 、tmux 之类的包全装 distrobox 里,使所有开发环境能共享工具链,结果发现 tcpdump 、nvtop 之类的包需要装在 rootful 的容器下才能用。
等全部迁移到 rootrul 容器里之后,又发现启动容器得输入密码才能打开。
于是又同时使用两个容器:rootful 容器和非 root 的,只把必要的工具装 rootful 容器里,其他装非 root 的容器。
后来一通折腾下来发现,我还得想办法把带 systemd-service 的包也给迁移出来。
结果最终发现,与其为了一些原则而避免 layering ,反而带来更多麻烦。所以我现在如果 layering 方便就直接 layering 了。
layering 的缺点也有,比如安装后需要重启(虽然可以通过 apply-alive 缓解这个问题)。在安装新的包时,所有 layering 的包都会再被重新安装一遍,因此 layering 越多,每次安装速度也会越慢。
目前也有人提出利用 sysext 来安装一些包,从而避免每次更新都得重启:
https://travier.github.io/fedora-sysexts/我个人觉得 atomic desktop 还在发展中。包括 rpm-ostree 也在向 bootc 方向迁移。
因此各种方案都有,也不一定成熟。
最终会在哪种方案上稳定下来也还不确定,所以别纠结太多哪种方案了,选择自己方便的来吧。