kernel-install
kernel-install(8) 是一个灵活的实用程序,旨在简化系统中 Linux 内核镜像的安装和管理。它具有插件系统,能够与其他实用程序无缝集成。这些插件定义了在安装和管理 Linux 内核镜像期间所需的一系列操作和配置。此类任务的示例包括配置引导加载程序条目、生成 统一内核镜像 (UKI),或为符合 安全启动 (Secure Boot) 而提供内核签名支持。
安装
kernel-install 是 systemd 的一部分并随其一起打包。除非指定了不同的 UKI 生成器(见 #主配置),否则还需要 systemd-ukify 可选依赖项来生成 统一内核镜像。
配置
主配置
主配置文件是 /etc/kernel/install.conf。使用它来配置您想要使用的 布局 (layout),例如:对于传统的分离内核和 initramfs 镜像使用 bls,或者对于 统一内核镜像 使用 uki。
/etc/kernel/install.conf
layout=bls
uki)ukify 将生成 UKI。这可以通过 initrd_generator= 和 uki_generator= 来更改,详见 kernel-install(8)。kernel-install inspect --verbose 来查看关于为什么自动使用某些默认设置的更多信息。内核命令行
内核参数 必须在 /etc/kernel/cmdline 中设置。根据所使用的布局,它们将被嵌入到 UKI 中,或添加到引导加载程序配置中。如果 /etc/kernel/cmdline 不存在,kernel-install 将使用 /usr/lib/kernel/cmdline 或 /proc/cmdline 中的参数;不在 /etc/kernel/cmdline 中设置内核参数可能会导致 kernel-install 使用当前运行内核的参数。
插件
要列出 kernel-install 在安装、升级或删除内核镜像时使用的活动 (active) 插件,可以使用 inspect 参数
# kernel-install inspect
[...]
Plugins: /usr/lib/kernel/install.d/50-depmod.install
/usr/lib/kernel/install.d/50-mkinitcpio.install
/usr/lib/kernel/install.d/50-mkosi.install
/usr/lib/kernel/install.d/60-ukify.install
/usr/lib/kernel/install.d/90-loaderentry.install
/usr/lib/kernel/install.d/90-uki-copy.install
/usr/lib/kernel/install.d/91-sbctl.install
[...]
可用 (Available) 插件位于 /usr/lib/kernel/install.d/ 目录下
ls /usr/lib/kernel/install.d/
50-depmod.install 50-mkinitcpio.install 50-mkosi.install 60-ukify.install 90-loaderentry.install 90-uki-copy.install 91-sbctl.install
/etc/kernel/install.d/ 中同名文件将覆盖默认文件。
例如,要禁用默认的 sbctl 插件(该插件会自动为安全启动签署新的 UKI)
# ln -sf /dev/null /etc/kernel/install.d/91-sbctl.install
您也可以编写自己的 kernel-install 插件,并将它们放置在 /etc/kernel/install.d/ 中。
统一内核镜像 (UKI)
用法
手动设置
要从 /usr/lib/modules 手动安装内核,请使用以下 add 命令
# kernel-install add A.B.C-name /usr/lib/modules/A.B.C-name/vmlinuz
kernel-install add-all 可以在一次运行中添加所有已安装的内核。要手动删除内核,请使用 remove 命令
# kernel-install remove A.B.C-name
自动设置
要在安装或更新内核软件包时自动触发 kernel-install 及其所有活动插件,您可以安装 pacman-hook-kernel-installAUR。
# ln -s /dev/null /etc/pacman.d/hooks/60-mkinitcpio-remove.hook # ln -s /dev/null /etc/pacman.d/hooks/90-mkinitcpio-install.hook
要恢复,只需删除上述创建的符号链接即可。