三 文章首页 实时留言 网络邻居 开往 虫洞
返回

不可变发行版 Fedora Silverblue 的体验记录

也许是一个非常稳定的发行版
2026-02-21 21:53:47
分类: Linux

在尝试了很多 Linux 发行版,发现都有一个问题就是会随着时间变化导致系统越来越难以管理,装的包越来越多,依赖越来越复杂。会影响系统稳定性(像什么桌面错误和崩溃、软件包依赖冲突、各种奇奇怪怪的小问题等)偶尔需要大动干戈去修复,总结就是越用越乱。

我听说了一些不可变只读系统,像 NixOS ,能通过写 nix 配置的形式去管理系统。但不是很习惯那种用法。而且系统目录不是我熟悉的 FHS(类 Unix 系统中目录和文件的组织结构).

这时我把目光转向了一个 Fedora 的不可变分支 Silverblue。

这是我熟悉的红帽系发行版,虽然 FHS 也有一些改动,但不会有像 NixOS 那样的巨大改变。同时我还能使用熟悉的 rpm 包。不过,这个发行版依然有许多我比较陌生的地方。

关于根目录的改变


Fedora Silverblue 的 / 大部分重要目录默认只读,基本只有 /etc//var/ 以及 /tmp/ /run/ /mnt/ 是可读写的。home 目录被移到 /var/home/ 下面,/home/ 将被软链接到那里。

而 /etc/ 和 /var/ 这两目录主要是:系统配置(存放主机级配置文件如 fstab、sshd_config、hosts),和可变数据(日志、缓存、容器数据、用户数据、运行时状态)

/tmp/ :临时文件存放,/run/:进程运行数据,/mnt/:挂载设备的地方

虽然系统是不可变,但依然可以通过一个 rpm-ostree 命令来管理包,就是每次变更需重启生效。安装上的包都会在原有系统上「叠一个层」,叠层会打破系统的不可变性,也就是说长期用仍可能导致依赖问题。

不过它有一个特点就是可回退到某一覆盖层的系统状态,也就是:回滚。

关于 ostree,这种有点类似 "Git 管理" ?可以 pull commit checkout 等。rpm-ostree 在每次安装包都会进行一次提交部署,将系统做成一个可引导镜像,使用 rpm-ostree status 可以查看一些信息(每个部署镜像所叠层的包、还有提交信息)。

使用原则


那么既然限制那么多,如果装软件岂不是很麻烦,还得重启一遍?此时就需要用到 Flatpak、Podman、Docker 这些家伙了。

我用的方案是 Distrobox + Flatpak + Toolbox

所有 GUi 程序尽可能使用 Flatpak(如果没有就 Distrobox),命令行程序就跑 Podman / Docker,而 Distrobox 和 Toolbox 默认是调用 podman,并且会更好上手,一般我是交替使用。比如 Distrobox 安装 GUI 程序的话支持生成 .desktop 文件,并且配置好了 GPU 加速(性能损耗几乎没有),且可以轻松设置权限,可以给容器指定单独的 home 目录避免污染宿主的 home。

而 Toolbox 我很少使用,因为它不支持给容器单独设置 home 目录,可能会污染宿主环境。

用容器跑各种发行版的容器,也可以满足生态需求。就是经常需要配置一些环境变量,或者端口转发(如果要跑服务的话)。

Flatpak 的权限管理


Flatpak 的容器推荐使用 Flatseal 这个软件去管理权限,GUI 会比较方便点。

关于代理软件


我使用的 v2raya 似乎支持容器部署,而且提供红帽系安装方式,我很快的解决了这个问题。

Flatpak Linux QQ 剪贴板和宿主不同步问题


由于默认使用 wayland 启动,因为兼容性差导致了一些问题,可以修改为 x11 启动,像 flatpak 版本可修改它的权限,关闭 : --socket=wayland 权限

并加入环境变量:

XDG_SESSION_TYPE=x11  com.qq.QQ

中文输入法


Gnome 桌面默认的输入法太难用?rpm-ostree search fcitx 去找找包吧,然后使用 rpm-ostree install 包 由于是重要的组件,该叠层就叠。

后续使用问题将持续记录....

目前对 Fedora Silverblue 的感受总结:尽量不叠层、容器隔离、权限按需开,那么这将是一个非常稳定、安全的发行版。