【免费下载链接】ucore
An OCI base image of Fedora CoreOS with batteries included
uCore 是一个"自带电池"的 Fedora CoreOS OCI 镜像。在开启 SecureBoot 的 UEFI 主机上,想要加载 NVIDIA 或 ZFS 内核模块,必须先将 uCore 提供的签名公钥导入为 MOK(Machine-Owner Key)。本文手把手讲清 MOK 签名密钥导入全流程,帮你安全解锁 NVIDIA 驱动与 ZFS 文件系统。
为什么 SecureBoot 下 NVIDIA / ZFS 模块无法加载?
先搞懂两个概念,才能理解 uCore 的解决思路 🧠:
- UEFI SecureBoot:UEFI 固件只允许加载"已签名"的启动组件与内核模块,来保护系统不被恶意驱动篡改。
- MOK(Machine-Owner Key):SecureBoot 之外允许用户额外注册的"机器所有者密钥"。第三方内核模块(如 NVIDIA、ZFS)无法直接获得主板厂商信任,就必须通过 MOK 机制"自证清白"。
uCore 在构建stable-nvidia、stable-zfs等镜像时,通过 akmods 机制为当前内核预编译并签名了对应的内核模块(kmods)。也就是说:
模块本身是签名过的,只是它的签名公钥还没被你的 UEFI 信任 —— 差的就是 MOK 导入这一步 🔑
uCore 镜像已经内置了公钥证书/etc/pki/akmods/certs/akmods-ublue.der,并提供fwupd-efi包(内含mokutil工具)来完成导入。相关配置可见 ucore/packages.json 与 ucore/install-ucore-minimal.sh(其中ublue-os-signingRPM 就是签名体系的一部分)。
先选对镜像:uCore Tag 矩阵速览
MOK 导入只在带内核模块的镜像上才有意义。uCore 构建 4 类镜像,通过 Tag 组合出不同能力:
| 镜像 | 常见 Tag | 说明 | |-|-|-| |fedora-coreos|stable-nvidia、stable-zfs、stable-nvidia-zfs| 原版 FCOS + 内核模块 | |ucore-minimal|stable、testing、stable-nvidia、stable-zfs| 轻量容器宿主机 | |ucore|stable-nvidia-zfs等 | 面向裸机 / NAS 存储场景 | |ucore-hci|stable-nvidia等 | 叠加 libvirt 虚拟化能力 |
完整 Tag 矩阵见 README.md。如果你用的是不含-nvidia/-zfs后缀的普通stable标签,则无需阅读本文的 MOK 步骤。
MOK 签名密钥导入:最快 3 步配置方法
整个流程只有"导入 → 重启 → 确认"三步,一次导入,长期有效 ✅
第 1 步:运行 mokutil 导入公钥
sudo mokutil --import /etc/pki/akmods/certs/akmods-ublue.der系统会要求你设置一个密码(两次输入)。这个密码不是 UEFI 密码,而是你在重启后进入 MOK 管理界面确认身份时使用的校验密码。
第 2 步:重启进入 MOK Management 界面
sudo systemctl reboot重启后,启动菜单会多出一个MOK Management选项 —— 直接选择它回车(不是选择原来的系统启动项)。
第 3 步:在 MOK 管理界面注册密钥
- 选择Enroll Key From File(从文件注册密钥);
- 在列表中选中刚导入的
akmods-ublue.der证书; - 输入第 1 步设置的密码;
- 看到Key Enrollment Status: success后,选择Continue,系统正常启动。
官方文档对这一步的原始说明见 README.md 的 "SecureBoot w/ kmods" 章节。
验证 NVIDIA 内核模块是否生效
如果你的镜像带-nvidia标签,NVIDIA 驱动、CUDA 基础库和 nvidia-container-toolkit 均已预装(见 ucore/install-ucore-minimal.sh)。导入 MOK 后按以下方式验证:
# 手动加载驱动(MOK 生效后此命令应成功) sudo modprobe nvidia # 确认模块已加载 lsmod | grep nvidia看到输出后,运行nvidia-smi应能列出你的 GPU 与 CUDA 信息。MOK 生效后,后续系统更新(rpm-ostree 升级)会自动为新内核重建 akmods 模块,无需再次导入密钥。
💡 说明:
-nvidia镜像不安装桌面图形服务,它是面向 CUDA 计算 / 容器 GPU 加速(nvdec、nvenc、nvidia-container-toolkit)的,详见 README.md。
验证 ZFS 内核模块是否生效
带-zfs标签的镜像同样在 MOK 导入后即可加载 ZFS 驱动(构建脚本见 ucore/install-ucore-minimal.sh):
# 加载 ZFS 模块 sudo modprobe zfs # 确认加载成功 lsmod | grep zfs💡让 ZFS 开机自动加载:根据 OpenZFS 官方建议,创建配置文件即可:
echo zfs | sudo tee /etc/modules-load.d/zfs.conf⚠️ 注意:ZFS 挂载点与不可变根文件系统
CoreOS 的根文件系统/在运行时是不可变的,无法直接创建默认挂载目录/tank,会报Operation not permitted。解决办法是创建 zpool 时显式指定挂载点:
# 正确姿势:指定 -m 挂载点 zpool create -m /var/tank tank /dev/sdb如果忘了指定,可用zfs set mountpoint=/var/tank tank修正。更多细节见 README.md。
常见问题(FAQ)
Q1:重启后启动菜单没有 MOK Management 选项?确认 UEFI 模式下 SecureBoot 处于开启状态(BIOS 中查看);若你的机型启动菜单被系统占用,可尝试Ctrl+Alt+F2等厂商快捷键进入 UEFI 设置界面手动找到 MOK Management。
Q2:密码忘了怎么办?用sudo mokutil --reset重置 MOK 密码,然后重新执行mokutil --import即可。
Q3:一定要开 SecureBoot 吗?不是。不开 SecureBoot 时模块可直接加载,无需 MOK 步骤。但保留 SecureBoot + MOK 是更安全的选择,uCore 默认就随镜像提供签名公钥(见 README.md)。
Q4:升级系统后 NVIDIA/ZFS 模块还会失效吗?不会。模块由 akmods 随内核版本自动重建,且始终使用同一把签名密钥,MOK 一次注册即可覆盖所有后续更新。
关键文件导航
| 文件 | 作用 | |-|-| | README.md | SecureBoot w/ kmods 官方说明 | | ucore/packages.json |fwupd-efi(提供 mokutil) | | ucore/install-ucore-minimal.sh | ZFS / NVIDIA 模块安装逻辑 | | ucore/Containerfile | akmods 预编译模块来源 | | examples/ucore-autorebase.butane | 自动 rebase 安装模板 |
总结:SecureBoot 与 GPU/ZFS 模块不再冲突——找到/etc/pki/akmods/certs/akmods-ublue.der,一条mokutil --import命令,重启后在 MOK Management 中注册密钥,NVIDIA 与 ZFS 内核模块即可在受保护的 UEFI 环境下顺利加载。这就是 uCore "batteries included" 理念的体现:签名、工具、驱动,全都给你备好了 🔐
【免费下载链接】ucore
An OCI base image of Fedora CoreOS with batteries included
相关推荐
如何在隔离网络环境下高效部署服务器管理平台:专业级离线解决方案
如何在隔离网络环境下高效部署服务器管理平台:专业级离线解决方案 你是否正在为完全隔离的内网服务器管理而烦恼?面对金融、政务等高安全要求场景,如何在无网络环境下搭
运维后端OpenZFS 从根文件系统引导(ZFS-on-root)实战指南:zfs-dracut 模块与内核命令行参数全解析
OpenZFS 从根文件系统引导(ZFS on root)实战指南:zfs dracut 模块与内核命令行参数全解析 导读 :本文基于 OpenZFS 仓库中的
操作系统nodejs-learning-guide:Node.js crypto 模块实战笔记——摘要、HMAC、加解密、数字签名与密钥交换全解
nodejs learning guide:Node.js crypto 模块实战笔记——摘要、HMAC、加解密、数字签名与密钥交换全解 导读 crypto 是
文档教程后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考