
initramfs がどのように機能し、どのように構成できるかを学ぼうとしています。 initramfs で使用可能なパッケージに curl を追加し、起動時に curl を使用するスクリプトを実行したいと考えています (つまり、その前にネットワークを設定する必要があります)。
どうすればいいですか? (カーネルをアップグレードするときにも機能する必要があります。)
答え1
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
答え2
まず知っておきたいのは、Ubuntu では従来の init ではなく Upstart というシステムが使用されていることです。初期の ramdisk は引き続き使用されますが、init ではなく upstart を再設定することになります。
次に、これを完全に initrd のコンテキスト内で実行したいですか? そうであれば、これははるかに複雑になります。