initramfs:我可以在哪里确定进入 /sbin 的内容?

initramfs:我可以在哪里确定进入 /sbin 的内容?

在哪里可以配置哪些二进制文件更新-initramfs复制到/sbininitrd 映像内的目录?

我一直在 /etc/initramfs-tools 和 /usr/lib/initramfs-tools 下寻找,但在任何地方都找不到二进制文件列表

# grep -ri sbin /etc/initramfs-tools
# grep -ri sbin /usr/lib/initramfs-tools
#

答案1

您必须使用 中的条目/usr/share/initramfs-tools/hooks。当您输入 时,将执行这些文件update-initramfs。创建您自己的钩子脚本或删除脚本。

另一个文件夹是/etc/initramfs-tools/hook

man initramfs-tools

   Hooks can be found in two places: /usr/share/initramfs-tools/hooks  and
   /etc/initramfs-tools/hooks.  They are executed during generation of the
   initramfs-image and are responsible for  including  all  the  necessary
   components  in the image itself. No guarantees are made as to the order
   in which the different scripts are  executed  unless  the  prereqs  are
   setup in the script.

注意,钩子脚本是包的一部分,例如。包在中kmod创建文件。kmod/usr/share/initramfs-tools/hooks


示例脚本

#!/bin/sh -e
# Copy the compatibility symlinks until initramfs-tools will be converted
# to use the kmod program.

if [ "$1" = "prereqs" ]; then exit 0; fi

. /usr/share/initramfs-tools/hook-functions

copy_exec /bin/kmod
cp -a /sbin/modprobe /sbin/rmmod $DESTDIR/sbin/

mkdir -p $DESTDIR/lib/modprobe.d/
if [ "$(echo /lib/modprobe.d/*)" != "/lib/modprobe.d/*" ]; then
  cp -a /lib/modprobe.d/* $DESTDIR/lib/modprobe.d/
fi

正如你所见,钩子脚本将所有文件复制/lib/modprobe.d/initramfs/lib/modprobe.d/

cp -a /lib/modprobe.d/* $DESTDIR/lib/modprobe.d/

modprobe进入initramfs/sbin

cp -a /sbin/modprobe /sbin/rmmod $DESTDIR/sbin/

initrd.img一个文件即可拥有foo

cd 
mkdir initrd
cd initrd
touch foo   # an example file
find . | cpio -o -H newc > ../initrd.img
cd ..
gzip initrd.img
cp initrd.img.gz initrd.img

检查您的initrd.img

cd
mkdir initrd_out
cd initrd_out
cpio -i < ../initrd.img

ls应该看到一个文件

% ls
foo

相关内容