Debian 使用其他配置文件生成自定义initramfs映像

Debian 使用其他配置文件生成自定义initramfs映像,debian,initrd,initramfs,Debian,Initrd,Initramfs,我想为Debian Stretch创建一个initramfs映像,其中包括附加的配置文件,比如/etc/a.conf 在运行mkinitramfs-o initrd.img之前,我必须做什么才能使映像包含这样的文件?您想要修改initrd/initramfs的工具被调用。你可以在网上找到很多关于这个的教程,现在你知道该找什么了。下面是一个简单的例子: mkdir initrd-tmp cd initrd-tmp lzma -dc -S .lz /mnt/casper/initrd.lz | cp

我想为Debian Stretch创建一个initramfs映像,其中包括附加的配置文件,比如/etc/a.conf


在运行mkinitramfs-o initrd.img之前,我必须做什么才能使映像包含这样的文件?

您想要修改initrd/initramfs的工具被调用。你可以在网上找到很多关于这个的教程,现在你知道该找什么了。下面是一个简单的例子:

mkdir initrd-tmp
cd initrd-tmp
lzma -dc -S .lz /mnt/casper/initrd.lz | cpio -id
完成后:

find . | cpio --quiet --dereference -o -H newc | lzma -7 > ~/new-initrd.lz
资料来源:

请注意,cpio归档文件的一个有趣特性是,您可以简单地附加到它们,以后的文件可能会覆盖以前的文件,这可能是因为它们作为磁带归档文件系统的传统。因此,如果您不想实际解包整个归档文件,特别是因为它可能需要root用户来创建/proc之类的路径,那么您可以简单地将自定义文件附加到其中。见:


您想要修改initrd/initramfs的工具被调用。你可以在网上找到很多关于这个的教程,现在你知道该找什么了。下面是一个简单的例子:

mkdir initrd-tmp
cd initrd-tmp
lzma -dc -S .lz /mnt/casper/initrd.lz | cpio -id
完成后:

find . | cpio --quiet --dereference -o -H newc | lzma -7 > ~/new-initrd.lz
资料来源:

请注意,cpio归档文件的一个有趣特性是,您可以简单地附加到它们,以后的文件可能会覆盖以前的文件,这可能是因为它们作为磁带归档文件系统的传统。因此,如果您不想实际解包整个归档文件,特别是因为它可能需要root用户来创建/proc之类的路径,那么您可以简单地将自定义文件附加到其中。见:


我选择使用initramfs钩子来实现这一点,因为这样可以确保如果我正确理解更改也会在未来的内核升级中持续。钩子采用脚本/etc/initramfs tools/hooks/copy_等形式,如下所示:

#!/bin/sh -e

if [ "$1" = "prereqs" ]; then exit 0; fi
. /usr/share/initramfs-tools/hook-functions

cp /etc/a.conf $DESTDIR/etc/a.conf

我选择使用initramfs钩子来实现这一点,因为这样可以确保如果我正确理解更改也会在未来的内核升级中持续。钩子采用脚本/etc/initramfs tools/hooks/copy_等形式,如下所示:

#!/bin/sh -e

if [ "$1" = "prereqs" ]; then exit 0; fi
. /usr/share/initramfs-tools/hook-functions

cp /etc/a.conf $DESTDIR/etc/a.conf

因此,如果我理解正确,那么您在这里所做的不是从头开始构建新的initramfs映像,而是解压现有映像,只将/etc/a.conf添加到解压版本中,然后再次打包。对吗?@rookie099是的,没错。这个答案更倾向于定制安装/实时环境,这往往是一次性的,或者在生成定制安装程序的任何CI过程中实现。如果您需要持续的定制,那么可以使用mkinitramfs钩子。因此,如果我正确理解,您在这里所做的不是从头开始构建新的initramfs映像,而可能是使用mkinitramfs钩子添加/etc/a.conf,而是解包现有映像,仅将/etc/a.conf添加到解包版本,然后再次打包。对吗?@rookie099是的,没错。这个答案更倾向于定制安装/实时环境,这往往是一次性的,或者在生成定制安装程序的任何CI过程中实现。如果需要进行定制,那么可以使用mkinitramfs钩子。