web-dev-qa-db-ja.com

initramfsイメージへのファイルの追加-信頼できる?

通常は1つのファイルのみが変更されるさまざまなLinuxディストリビューションからのinitramfsアーカイブの束を変更しています。

Rootユーザーに切り替えずにプロセスを自動化し、initramfsイメージ内のすべてのファイルを抽出して再度パックします。

最初に、gen_init_cpioのファイルのリストを生成しようとしましたなしinitramfsアーカイブのすべてのコンテンツを抽出します。つまり、cpio -tvn initrd.imgの出力を解析します( ls -l出力)スクリプトを使用して、すべての権限を8進数に変更し、出力をgen_init_cpioが望む形式に配置します。

dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1
slink /bin/sh busybox 777 0 0
file /bin/busybox initramfs/busybox 755 0 0

これにはいくつかの置換が含まれ、スクリプトを書くのが難しい場合があるので、より良い方法を見つけて、安全性と移植性がどの程度かについて質問します。

一部のディストリビューションでは、パーツが連結されたinitramfsファイルがあり、カーネルはファイル全体を解析して、1バイト境界にパックされたすべてのパーツを抽出しているため、各パーツを512の倍数に埋める必要はありません。バイト。この「機能」は、アーカイブ内のファイルを変更するときにアーカイブを再作成しないようにするのに役立つと思いました。実際、少なくともDebianCloneZillaについては機能します。

たとえば、Debian 8.2.0の/initinitrd.gzファイルを変更した場合、次のコマンドを使用してinitrd.gzイメージに追加できます。

$ echo ./init | cpio -H newc -o | gzip >> initrd.gz

そのため、initrd.gzには、元のアーカイブとその変更の2つのアーカイブが連結されています。 binwalkの結果を見てみましょう:

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             gzip compressed data, maximum compression, has original file name: "initrd", from Unix, last modified: Tue Sep  1 09:33:08 2015
6299939       0x602123        gzip compressed data, from Unix, last modified: Tue Nov 17 16:06:13 2015

それは完全に動作します。しかし、それは信頼できますか? initfamfsファイルにデータを追加する場合、どのような制限がありますか?元のアーカイブに512バイトの倍数までパディングしないで追加しても安全ですか?この機能はどのカーネルバージョンからサポートされていますか?

7
Emilio Lazo

これは非常に信頼性が高く、initrd、AFAIKをサポートするすべてのカーネルバージョンでサポートされています。これは、cpioが構成されているinitramfsアーカイブの機能です。 cpioは、その入力を抽出し続けます...ファイルが2つのcpioアーカイブであることがわかっている場合がありますが、cpioはそれを単一の入力ストリームとして認識します。

Debianは、この方法(別のcpioをinitramfsに追加する)を使用して、binary-blobファームウェアをインストーラーのinitramfsに追加することを推奨しています。例えば:

DebianInstaller/NetbootFirmware | Debian Wiki

Initramfsは、本質的にはgzipで圧縮されたcpioアーカイブを連結したもので、ramdiskに抽出され、Linuxカーネルによって初期のユーザー空間として使用されます。 Debianインストーラのinitrd.gzは、実際には、インストーラがブート時に必要とするすべてのファイルを含む単一のgzip圧縮されたcpioアーカイブです。別のgzip圧縮されたcpioアーカイブを追加するだけで-欠落しているファームウェアファイルが含まれます-ショーが始まります!

10
cas