Silverblue介绍
为什么需要不可变发行版
Fedora Silverblue 是一个不可变(Immutable)的桌面操作系统。它是 Fedora Workstation 的一个变体。
传统的 Linux 系统(如标准的 Fedora、Ubuntu):你可以使用包管理器(如 dnf 或 apt)随时随地安装、卸载、修改系统核心部分的任何文件。这很灵活,但也可能导致问题,比如:
- 系统不稳定:错误的更新或依赖冲突可能破坏系统。
- 更新风险:更新过程中如果中断(如断电),可能导致系统无法启动。
- 系统臃肿:“软件包地狱”,系统用久了会留下各种各-样的配置文件和库,难以清理。
例如一些错误打包的软件包在安装脚本中使用cp命令来安装软件或动态库,这可能会覆盖已有的文件。对于第三方打包的软件包,如果没有审查或者审查有疏忽,就有可能导致系统发生不可逆转的变化。
刚踩过坑的Mounriver Studio(沁恒MCU开发环境)
这节取自是Mounriver Studio 安装包的安装脚本。他会强制覆盖/usr/lib里的动态链接库。直接造成Clash Verge Rev等若干软件无法启动(依赖损坏)。并且无法恢复,因为卸载脚本里只会移除这些文件,并不会恢复原有的文件。
...morecp -P /usr/share/MRS2/beforeinstall/lib* /usr/libldconfigcp /usr/share/MRS2/beforeinstall/50-wch.rules /etc/udev/rules.dcp /usr/share/MRS2/beforeinstall/60-openocd.rules /etc/udev/rules.dudevadm control --reload-rules...more那么如何解决这些问题呢?
答案是不可变(Immutable)
Silverblue 的根文件系统是不可变的,这意味着它在运行时无法被直接修改。这种设计可以极大地提高系统的稳定性和安全性,因为恶意软件或错误操作不会轻易破坏系统。此外,这种不可变性还简化了系统更新的过程。
Silverblue 使用 OSTree 技术进行系统管理,类似于 Git,它将系统作为一个树状结构进行版本控制。这种方式允许用户以原子方式进行系统更新或回滚,可以轻松恢复到之前的状态。
安装
Silverblue安装非常简单,具有和Fedora Workstation相同的GUI安装界面,你可以像安装Fedora一样安装Silverblue。
WARNINGSilverblue的home目录应挂载到/var/home

通过fastfetch 输出系统信息可以看到有一个很不寻常的内容。那就是文件系统的挂载。
Disk (/): 33.23 MiB / 33.23 MiB (100%) - overlay [Read-only]
Disk (/sysroot): 27.71 GiB / 93.13 GiB (30%) - btrfs [Read-only]
Disk (/var/home): 449.98 GiB / 1.74 TiB (25%) - ext4
可以看到Silverblue的文件系统非常奇怪。
根目录结构/系统分区介绍
我们可以使用mount命令来查看我们当前文件系统挂载的情况。
我们筛选出有用的信息进行介绍
- /sysroot:
sysroot是物理硬盘上 Btrfs 文件系统的真正根。他在系统运行时首先被挂载,然后经过一系列操作将内部的目录绑定到/etc,/var。
/dev/mapper/lvm-root on /sysroot type btrfs (ro,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)- / :
/是一个overlay文件系统。他本身不存储任何内容。overlayfs就像一个提供叠放的底片,供其他文件系统挂载。
composefs on / type overlay (ro,relatime,seclabel,lowerdir+=/run/ostree/.private/cfsroot-lower,datadir+=/sysroot/ostree/repo/objects,redirect_dir=on,metacopy=on)- /etc:录被挂载为 可读写 (
rw),可以修改etc内的配置文件进行配置。/etc的修改中的文件会被ostree追踪。当配置随软件包更新时,ostree会像git那样对文件进行合并。
/dev/mapper/lvm-root on /etc type btrfs (rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)- /var 可变的系统数据
/dev/mapper/lvm-root on /var type btrfs (rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)- /var/home 在 Silverblue 中,home目录被挂载到了
/var/home,而/home是一个指向/var/home的符号链接。对操作系统进行回滚(rollback),home目录文件完全不受影响。
/dev/mapper/lvm-home on /var/home type ext4 (rw,relatime,seclabel)软件解决方案
Silverblue根分区不可变,无法使用dnf包管理器。
Flatpak(图形化程序)
Flatpak 是一种通用的 Linux 应用程序打包和分发技术。应用程序被打包在独立的“沙箱”环境中,与核心操作系统完全隔离。
Homebrew(CLI开发工具)
Homebrew是一个广受欢迎的包管理器,在 macOS 上广泛流行,现在也完美支持 Linux。在 Silverblue 上,它成为了管理命令行工具和开发环境的绝佳选择。Homebrew 拥有海量的命令行工具、编程语言和开发库,例如 git, node, python, neovim, htop, ripgrep 等。这些工具通常不适合通过 Flatpak 安装。
Homebrew 的所有操作都在用户空间内完成,完全不触碰不可变的系统根目录。
toolbox容器(大型复杂开发环境)
当我们需要配置大型的开发环境的时候,比如要安装若干libxxx-devel,期间还会有复杂的依赖关系。brew的功能似乎就有点不够用了。
Toolbox 是 Silverblue 官方内置的、用于创建功能齐全的开发环境的核心工具。当你的开发需求超出单个工具的范畴时,Toolbox 就是你的最佳伙伴。
Toolbox 利用 Podman 容器技术,为你创建一个可变的、传统的 Linux 环境。支持Ubuntu,Debian,Fedora多个发行版。这个环境中和标准的操作系统几乎完全一致,可以自由地使用 sudo dnf install 命令
rpm-ostree(最后手段)
rpm-ostree 是 Silverblue 底层的系统管理工具。你可以用它来“叠加(Layer)”传统的 RPM 包到你的系统镜像上。请务必将其视为最后的手段,仅在上述两种方法都无法满足需求时才使用。
rpm-ostree 并非一个传统的包管理器。而是类似于Android的Magisk模块。当你使用 rpm-ostree install 时,它并不是简单地在文件系统中解压文件,而是:
- 获取你当前的系统基础镜像。
- 将你指定的 RPM 包“叠加”在这个基础镜像之上,生成一个全新的、定制化的系统镜像。
- 这个新镜像将在你下次重启后生效。
总结
经过上述四板斧下来几乎没有运行不了的软件包了。 浅浅总结一下:
- Flatpak:用于安装所有图形化应用程序。
- Homebrew / Toolbox:
- Homebrew 用于安装独立的命令行工具。
- Toolbox 用于搭建复杂的开发环境。
- rpm-ostree:仅用于安装必须与系统深度集成的软件包。
踩坑
home目录
VSCode中发现打开的工程中,头文件的路径使用绝对路径进行定义的。当我们分别从左侧的资源管理器中打开,还有从头文件的链接中打开。会发现打开两个标签。

一个标签为${workspaceFolder}目录,一个是~/…。第一次看也一脸懵逼,第一反应是clangd插件索引链接创建的有问题。但是经过一段研究,这是因为VSCode是在/home的软链接中打开的工程。而CMake或bear生成的compileCommands中使用了/var/home作为home目录。
解决方案其实很简单。删除VSCode中的历史记录(因为这些记录是从/home中打开的)。以后打开工程的时候选择在/var/home中打开。
系统文件管理器的标签(右侧的文档,视频,图片等),也应全部删除掉。重新添加/var/home作为路径的标签。

鲁公网安备37011302000501号