我的个性化 Fedora Silverblue 设置
Source: Dev.to
请提供您希望翻译的完整文本内容,我将按照要求保留源链接、Markdown 格式以及代码块和 URL,只翻译正文部分。谢谢!
为什么选择 Fedora Silverblue?
- 不可变基础 – 核心系统不会被破坏,使调试变得简单。
- 原子更新 – 整个系统一次性更新。
- 分层方法 – 你添加的所有内容都位于基础之上,这样可以在不留下残留(甚至配置文件)的情况下重新开始。
- “不可破坏” – 一个即使是你妈妈或奶奶也不小心会弄坏的系统。
目录
- 启用透明磁盘压缩
- 使用安全的 DNS 解析器
- 启用 BBR(更好的拥塞控制)
- 启用
ptrace_scope = 1 - 更改默认的 ZRAM 配置
- 为非自由编解码器启用 RPM Fusion
- 移除不需要的 Flatpak 应用并禁用仓库
- 从基础镜像中剥离未使用的包
- 启用系统自动更新
启用透明磁盘压缩
Btrfs 支持即时压缩,但默认 是关闭的。
我使用 zstd 等级 1(CPU 占用最低,压缩比尚可)。
# Show current kernel boot arguments (avoid duplicates)
rpm-ostree kargs
# Append the compression flag
sudo rpm-ostree kargs --append="rootflags=subvol=root,compress=zstd:1"
# Reboot for the change to take effect
sudo reboot
注意: 该命令仅压缩 新 数据。要压缩已有数据:
sudo btrfs filesystem defragment -r -v -f -czstd /var
更多细节请参见我的 compression write‑up。
使用安全的 DNS 解析器
我更倾向于使用带有恶意软件过滤的 Cloudflare DNS。
| IPv4 | IPv6 |
|---|---|
1.1.1.21.0.0.2 | 2606:4700:4700::11122606:4700:4700::1002 |
步骤
# Disable systemd‑resolved sockets and service
sudo systemctl disable --now systemd-resolved-monitor.socket \
systemd-resolved-varlink.socket systemd-resolved
# Remove the autogenerated resolv.conf
sudo rm -f /etc/resolv.conf
# Tell NetworkManager to use dnsmasq
sudo nano /etc/NetworkManager/NetworkManager.conf
添加(或编辑)[main] 部分:
[main]
dns=dnsmasq
# Restart NetworkManager
sudo systemctl restart NetworkManager
现在 NetworkManager 将把 DNS 查询转发到您在 /etc/NetworkManager/dnsmasq.d/(或通过 GUI)中配置的 DNS 服务器。
更多细节请参见我的 DNS 指南。
启用 BBR – 更佳的网络拥塞控制
验证模块是否已加载
lsmod | grep bbr
如果没有返回任何内容,加载模块:
echo "tcp_bbr" | sudo tee /etc/modules-load.d/bbr.conf
sudo reboot
配置 sysctl
sudo nano /etc/sysctl.conf
添加以下行:
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# 立即应用(或重启)
sudo sysctl -p
# 验证
sysctl net.ipv4.tcp_congestion_control
启用 ptrace_scope = 1
需要在基于 Chromium 的浏览器中实现完整的沙箱(Ubuntu、Arch、openSUSE 默认已启用)。
cat /proc/sys/kernel/yama/ptrace_scope
如果输出为 0,请启用它:
# 复制默认配置并编辑
sudo cp /usr/lib/sysctl.d/10-default-yama-scope.conf /etc/sysctl.d/
sudo nano /etc/sysctl.d/10-default-yama-scope.conf
将最后一行改为:
kernel.yama.ptrace_scope = 1
sudo sysctl -p /etc/sysctl.d/10-default-yama-scope.conf
sudo reboot
更多背景信息请参阅我的 ptrace_scope write‑up。
更改默认 ZRAM 配置
Fedora 已经默认启用了 ZRAM,但默认大小比较保守。我将其设置为 1.5 × RAM 并给予较高的 swap 优先级。
# 创建用于覆盖规则的目录
sudo mkdir -p /etc/systemd/zram-generator.conf.d
# 创建自定义配置
sudo nano /etc/systemd/zram-generator.conf.d/zram-generator.conf
粘贴:
[zram0]
zram-size = ram * 1.5
compression-algorithm = zstd
swap-priority = 100
额外的 sysctl 调整以应对内存压力
sudo nano /etc/sysctl.conf
添加:
vm.page-cluster = 0
vm.swappiness = 180
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
sudo sysctl -p
sudo reboot
这些数值参考了 Pop!_OS 的 “压缩 swap in RAM” 优化。
启用 RPM Fusion 非自由编解码器
许多媒体文件(例如 MP3、H.264)需要来自 RPM Fusion 的编解码器。
# 免费仓库
sudo rpm-ostree install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
# 非免费仓库(包含专有编解码器)
sudo rpm-ostree install \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
重启后,你就可以安装诸如 ffmpeg、gstreamer1-plugin-openh264 等软件包。
删除不需要的 Flatpak 应用并禁用仓库
我更倾向于使用大多数软件的本地 RPM 包。
# List installed Flatpaks
flatpak list
# Remove each unwanted app, e.g.
flatpak uninstall org.gnome.Todo
# Disable the Flathub remote (if you don’t want any Flatpaks)
flatpak remote-delete flathub
从基础镜像中剔除未使用的包
Fedora Silverblue 提供了相当精简的基础镜像,但你仍然可以裁剪掉不需要的部分。
# Example: remove the default GNOME games
rpm-ostree override remove gnome-2048 gnome-robots gnome-taquin
将包名替换为你认为不必要的任何包。
启用系统自动更新
Silverblue 已经通过 systemd.timer 支持自动更新。要启用它:
sudo systemctl enable --now rpm-ostreed-automatic.timer
您可以使用以下命令检查状态:
systemctl status rpm-ostreed-automatic.timer
结束语
Fedora Silverblue 的不可变设计为我提供了坚如磐石的基础。通过微调压缩、DNS、网络、内存管理和编解码支持,我获得了一台快速、安全且已准备好媒体播放的工作站,我的奶奶也弄不坏。
随意复制上述任何代码片段,针对你的硬件进行适配,尽情享受不可变操作系统的简洁吧!
所有命令已在 Fedora Silverblue 38 上测试(截至 2025 年 12 月)。
RPM Fusion 在您的系统上
请参阅官方 RPM Fusion 文档,了解 OSTree 系统的使用方法,点击此处。
通过 GNOME Software 安装应用
您可以通过 GNOME Software GUI 安装应用(见上面的截图)。如有需要,您可以从 Flathub 重新安装这些应用。
注意: Fedora 的 Flatpak 实现与 Fedora 本机 RPM 包具有相同的专有‑编解码器限制。如果您不需要它,可以将其移除,因为它没有额外的好处。
从基础不可变镜像中移除软件包
如果您想移除基础镜像中自带的应用程序(例如 Firefox),请运行:
sudo rpm-ostree override remove firefox firefox-langpacks
然后重启系统。
您可以使用以下命令检查镜像状态:
rpm-ostree status
此命令有助于识别大多数问题或与使用相同镜像的其他系统之间的功能等价性差异。
向系统层添加软件包
要叠加额外的软件包,请使用 rpm-ostree install。例如,安装 distrobox:
sudo rpm-ostree install distrobox
仅在必要时以此方式安装软件包。
自动软件更新
在 GNOME Software 中启用“自动软件更新” 并不会 自动更新系统,官方文档也未提及自动更新。
启用自动更新(stage 策略)
-
编辑
/etc/rpm-ostreed.conf:sudo nano /etc/rpm-ostreed.conf将(或添加)该行改为:
AutomaticUpdatePolicy=stage -
重新加载守护进程:
sudo rpm-ostree reload -
启用并启动定时器:
sudo systemctl enable rpm-ostreed-automatic.timer --now -
验证状态:
rpm-ostree status你应该会看到类似如下内容:
AutomaticUpdates: stage; rpm-ostreed-automatic.timer: last run 3h 4min ago
封面照片由 Alexandru Acea 在 Unsplash 提供