![initramfs:我可以在哪里确定进入 /sbin 的内容?](https://linux22.com/image/1129919/initramfs%EF%BC%9A%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%93%AA%E9%87%8C%E7%A1%AE%E5%AE%9A%E8%BF%9B%E5%85%A5%20%2Fsbin%20%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
在哪里可以配置哪些二进制文件更新-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