MKOSI-How-To(四)

构建Disk镜像的进阶配置

控制分区

MKOSI使用systemd-repart创建磁盘镜像并对其进行分区,它内置的分区格式通常情况下就够用了,但是如果你希望自定义分区(比如单独分一个/home)也是可以的,你只需要创建一个mkosi.repart/目录,然后在其中保存systemd-repart的分区配置。举例来说,MKOSI内置的配置可以这样理解:

mkosi.repart/00-esp.conf

1
2
3
4
5
6
7
[Partition]
Type=esp
Format=vfat
CopyFiles=/boot:/
CopyFiles=/efi:/
SizeMinBytes=512M
SizeMaxBytes=512M

mkosi.repart/10-root.conf

1
2
3
4
5
[Partition]
Type=root
Format=文件系统
CopyFiles=/
Minimize=guess

你可以添加一个:

mkosi.repart/15-home.conf

1
2
3
4
5
[Partition]
Type=home
Format=ext4
CopyFiles=/home
Minimize=guess

使用UKI

UKI(Unified Kernel Image)是一种systemd主推的新内核格式和引导方式。

默认情况下,MKOSI不会自动将内核转换为UKI,这一行为可以通过UnifiedKernelImage=unsigned配置:

1
2
[Content]
UnifiedKernelImage=unsigned

默认情况下,MKOSI会使用systemd-boot进行引导,但是UKI是可以直接用作UEFI PE程序进行引导的,你可以通过Bootloader=uki使用这一模式,这样就可以摆脱对systemd-boot的依赖,但代价是你将无法再利用systemd-boot在启动时动态配置内核命令行参数或是选择多个版本

1
2
3
[Content]
Bootloader=uki
UnifiedKernelImage=unsigned

安全启动

安全启动的配置比较复杂,默认情况下,MKOSI会帮你打理好一切,你只需要设置:

1
2
[Validation]
SecureBoot=yes

然后,执行这条命令创建你的安全启动签名:

1
mkosi genkey

内核模块添加

在构建磁盘镜像时,MKOSI自动构建一个Initrd供其引导使用,在这个过程中,MKOSI会根据内置的一个列表在Initrd内包含一系列内核模块。通常情况下,这是够用的,但是如果你的场景需要更多内核模块,可以通过KernelInitrdModules=添加:

1
2
3
4
[Content]
KernelInitrdModules=
default # 包含默认的列表
ata/ # 所有ATA驱动

或者,如果你想使用自己提供的Initrd,也可以进行设置:

1
2
[Content]
Initrds=xxx