Я пытаюсь узнать, как работает initramfs и как его можно настроить. Я хотел бы добавить curl к пакетам, доступным в initramfs, и запустить сценарий, который использует curl во время загрузки (что означает, что перед этим необходимо настроить сеть).
как мне это сделать? (Мне нужно, чтобы он работал и при обновлении ядра.)
Вам необходимо отредактировать хуки initramfs. Создайте свой собственный файл так:
$ cat /usr/share/initramfs-tools/hooks/curl
#!/bin/sh -e
PREREQS=""
case $1 in
prereqs) echo "${PREREQS}"; exit 0;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/bin/curl /bin
Перестройте initramfs:
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-3.8.0-4-generic
Убедитесь, что он действительно попал туда:
$ lsinitramfs -l /boot/initrd.img-3.8.0-4-generic | grep curl
-rw-r--r-- 1 root root 385704 Nov 28 18:32 usr/lib/x86_64-linux-gnu/libcurl.so.4
-rwxr-xr-x 1 root root 150344 Nov 28 18:32 bin/curl
Первое, что вам нужно знать, это то, что Ubuntu использует систему под названием Upstart вместо традиционного init. Начальный ramdisk все еще используется, но вы будете реконфигурировать выскочку вместо init.
Во-вторых, вы хотите сделать это полностью в контексте initrd? Если так, это было бы намного сложнее.