Debian 安装程序的 `initrd` 是如何构建的?

Debian 安装程序的 `initrd` 是如何构建的?

我想知道如何生成自定义initrd就像这里) 供安装程序使用。

我用 Google 搜索如何操作,但找到的答案基本上都是插入随机内核模块或预置。不是我在这里追求的是什么(我知道如何解开它,玩弄它然后再次打包它)。

我想知道这不仅仅是为了进行简单的定制。

这是出于好奇(canonical 必须以某种方式生成这些,而无需重新打包现有的 initrd),可以以initrd合理的方式对其进行修改(将其更改为记录到 RS232,为.debs 和.udebs 添加对 main/restricted/universe/multiverse 之外的其他套件的支持,以调查安装程序的运行情况和非运行情况),可以initrd以合理的方式为不同的版本生成自定义的 s。最终可能还会推出initrd包含安装程序以外的其他内容的版本(fx 一些服务器软件)。

答案1

Debian 安装程序的 initrd 是一个普通的根文件系统,被剥离为安装程序所需的组件(即使用udeb不包含文档的软件包)。

常规系统启动使用一个最小的 initrd 来加载几个模块,然后切换到真正的根文件系统,但从内核的角度来看,此时系统已经在运行,切换完全是可选的。

init安装程序从 ramdisk 运行,该 ramdisk 使用 initrd 存档的内容进行初始化。内核的唯一要求是在根目录或下面有一个名为的文件sbin,并且将调用此文件。

例如,您可以使用 创建完整安装debootstrap,使用 创建该安装的存档cpio,然后将其用作 initrd - 因此内核包用于生成小型 initrd 的过程实际上是一种特殊情况。

相关内容