MKOSI How To(一)
这是一系列MKOSI镜像构建器由浅入深的新手教程文本,我们会以一个客制化的Arch Linux发行版为例子,详细讲解MKOSI的使用方法。让我们开始构建镜像吧!
什么是MKOSI?
根据官方的说法,MKOSI是一个“客制化镜像构建器”,虽然话是这么说,但是实际上,MKOSI是一个和systemd生态高度相关的,以及围绕systemd的镜像生态编写的Linux发行版镜像构建器。
之所以这么说,是因为,MKOSI本身就是systemd高度依赖的CI基础设施,MKOSI的核心开发成员本身也是systemd的核心开发成员,MKOSI的Feature开发很大程度上也由systemd的开发进程直接控制,尤其是DDI(Discoverable Disk Image)格式的支持。
如前所述,和大家熟知的OCI镜像构建器不同,MKOSI是围绕DDI格式设计的(虽然确实也支持OCI的产品格式),简单来说,DDI是一类自包含的磁盘镜像,它自身包含了自己的一切元数据和校验信息,而不需要外部文件。
如果抛开这些设计思路和政治问题不谈,从技术本质上说,MKOSI就是各种发行版的包管理器的Wrapper(Debian的apt、Fedora的dnf、Arch的pacman、SUSE的zypper)。
这东西是怎么构建镜像的?
这就需要先讲一些基本知识了。
Linux发行版的本质,是三个部分的组合体:
- 一系列用于设定文件系统基准点的基础文件(Base Files,或称为Base Rootfs)。
- 一组能让系统基本可用(这在现代语境下,通常指的是,可以作为容器根文件系统从
init启动)的核心包集合(Essential Packages)。 - 以及用于执行包安装的包管理器(Package Manager)。
如此说来,构建一个发行版镜像的过程,用最简单的话来说,无非也就是三步:
- 释放出Base Files,构建基本根文件系统框架。
- 调用包管理器,下载发行版的核心包集合,并安装到目标根文件系统中。
- 将根文件系统转换为目标格式(打包为Tar?整理为磁盘镜像?或是直接保持目录形式产出?)。
当然,实际情况要比这复杂一些。
我该怎么安装它呢?
这简单。大部分发行版的包仓库中已经对MKOSI进行了打包,所以你应该可以使用mkosi这个包名称直接安装:
1 | apt install mkosi |
但是,MKOSI目前处于高速迭代的过程中,因此我更建议你去使用Git主线的版本。要安装一个Python应用程序,一个值得推荐的工具是pipx:
1 | pipx install git+https://github.com/systemd/mkosi.git |
就这么简单。