systemd v258 删掉 cgroup v1 与 System V 运行级,升级前先过一遍这些检查
v258 的 NEWS 里,「Incompatible changes」一节比往常长。下面按条目走一遍,每条给出对应的检查动作。
cgroup v1 支持被完全移除
legacy 与 hybrid 层级都不再支持,系统启动和 systemd-nspawn 容器初始化时总是挂载 cgroup v2 unified 层级。仍依赖 cgroup v1 挂载点的容器运行时、监控 agent、内核参数都需要先迁走。
检查:
mount | grep cgroup
cat /proc/cmdline
确认没有组件依赖 cgroup v1 的 controller 挂载点,也没有残留的强制 legacy 层级的内核参数。
最低内核基线升到 5.4
最低支持 v5.4(2019 年发布),推荐版本为 v5.7。
uname -r
tty/pts 设备节点默认权限改为 0600
原来默认 0620,改成 0600,原因是终端可能被其他用户写入。效果上等于默认 mesg n。要恢复旧行为,用 meson 构建选项 -Dtty-mode=0620。
检查依赖 wall、write 广播的脚本和监控 agent,它们在默认权限下会失败。
System V 风格状态控制被删除
/dev/initctl设备节点移除initctl、runlevel、telinit命令移除- 通过 init 命令切换状态(例如
init 3)不再支持 runlevel[0-6].target单元移除- runlevel 概念取消,运行级切换不再记录到 utmp/wtmp
grep -rnE '(^|[^a-z])(initctl|telinit)([^a-z]|$)' /etc /usr/local 2>/dev/null
grep -rnw runlevel /etc/systemd /usr/local 2>/dev/null
脚本、Ansible playbook、监控探针、CI 里的相关调用改用 systemctl isolate。
/forcefsck 与 /fastboot 不再生效
systemd-fsck 不再读取传统的 /forcefsck、/fastboot 文件,改用内核命令行 fsck.mode= 或新的 fsck.mode credential。systemd-quotacheck 同理,改用 quotacheck.mode= 内核命令行选项或对应的 credential。
检查 rc.local、fstab 相关脚本、镜像构建流程里 touch /forcefsck 一类的动作。
resolved 与 importd 只保留 OpenSSL
systemd-resolved 和 systemd-importd 移除了 GnuTLS 与 libgcrypt 密码学后端,OpenSSL 是唯一支持的后端。构建时依赖旧后端的 meson 选项需要一并清理。
新增能力
PrivateUsers=新增identity与full:identity请求只对前 65536 个 UID/GID 做恒等映射的 user namespace,full映射整个 32 位 UID 范围ProtectHostname=新增private:类似yes,但允许单元内的进程修改主机名(限定在该单元的 UTS namespace 内).slice单元新增ConcurrencySoftMax=与ConcurrencyHardMax=,用于基础的工作负载并发控制- home areas:在
/home/user/Areas下按子目录维护相互隔离的登录环境 - 新工具 systemd-factory-reset,配合 systemd-repart 的
--factory-reset=yes完成包括 TPM 密钥在内的整体重置 /etc/hostname中的?字符会被替换为从 machine-id 哈希出的 nibble,用于生成带动态部分的主机名sd-json与sd-varlink进入 libsystemd 公共接口;sd-bus 新增sd_bus_pending_method_calls();systemctl reload现在支持重新加载 confext 镜像
同一批改动里还有:.socket 单元支持 MPTCP 协议、新增 fstab 选项 x-systemd.wants=(生成 Wants= 依赖)、journalctl --follow 在收到 SIGTERM/SIGINT 或写入管道断开时以成功状态退出、关机后期重新启用内核对 Ctrl-Alt-Delete 的处理。
v259 的移除预警
- System V service 脚本已废弃,将在 v259 移除
- 传统
/run/lock/目录废弃,v259 移除,改用RuntimeDirectory=/$RUNTIME_DIRECTORY或$XDG_RUNTIME_DIR - 通过 libiptc 的传统 iptables 支持将在 v259 移除,systemd-networkd 与 systemd-nspawn 届时只保留 nftables 后端
- v259 计划提升的依赖基线:Linux kernel >= 5.10(推荐 >= 5.14)、glibc >= 2.34、libxcrypt >= 4.4.0、util-linux >= 2.37、elfutils >= 0.177、openssl >= 3.0.0、cryptsetup >= 2.4.0、libfido2 >= 1.5.0、libseccomp >= 2.4.0、python >= 3.9.0
另有一条构建期约束:systemd-stub v258 在构建 UKI 时需要 ukify v257.9 或 v258 及以上(修复了嵌入大于 512 字节 .sbat section 的问题)。