ユーザーとしてinitrdを解凍、修正、パッケージ化します。

ユーザーとしてinitrdを解凍、修正、パッケージ化します。

initrdユーザーとしてイメージを書き換えるのに問題があります。最初に元の画像を「圧縮解除」しようとすると、次のようになりますinitrd

cpio -idm < initrd-base 
cpio: dev/tty8: Cannot mknod: Operation not permitted
cpio: dev/tty3: Cannot mknod: Operation not permitted
cpio: dev/zero: Cannot mknod: Operation not permitted
cpio: dev/loop0: Cannot mknod: Operation not permitted
cpio: dev/loop4: Cannot mknod: Operation not permitted
cpio: dev/loop7: Cannot mknod: Operation not permitted
cpio: dev/loop5: Cannot mknod: Operation not permitted
cpio: dev/loop2: Cannot mknod: Operation not permitted
cpio: dev/tty9: Cannot mknod: Operation not permitted
cpio: dev/tty4: Cannot mknod: Operation not permitted
cpio: dev/null: Cannot mknod: Operation not permitted
cpio: dev/loop6: Cannot mknod: Operation not permitted
cpio: dev/loop1: Cannot mknod: Operation not permitted
cpio: dev/console: Cannot mknod: Operation not permitted
cpio: dev/loop3: Cannot mknod: Operation not permitted
cpio: dev/tty1: Cannot mknod: Operation not permitted
133336 blocks

これらの警告をどのように削除できますか?

第二 - ファイルの所有権を処理する方法がわからない。解凍すると、すべてが現在のユーザーの所有者であるようです。

initrd再梱包後はどうなりますか?標準アクセス権を変更したくありません。

ベストアンサー1

cpioを使用しているので、実際にファイルシステムの初期化、一つでもない初期化プログラム。 initrd は cpio アーカイブではなくファイルシステムイメージとして保存されます。 initrdとinitramfsはLinuxブートプロセスで同様の役割を果たし、実際のルートファイルシステムの前に利用可能ないくつかのファイルを提供します(実際のルートファイルシステムをマウントするために使用されます)。しかし、内部的にはかなり異なって扱われます。これとは何の関係もありません。 Initrdはより古いもので、initramfsを好むのでやや使用されていません。多くのビルドシステムinitrdがinitramfsに切り替えた場合でも、このファイル名を使用します。

ルートイメージには通常、特定の権限を必要とするデバイスノードとファイルが含まれます。このcpioコマンドは、ファイルシステムに存在するファイルからのみアーカイブを生成できます。ルートに属するデバイスノードまたはファイルを作成するには、root権限が必要です。カーネルソースコードには、ファイルシステムにすべてのファイルを生成せずにinitramfsを生成するためのツールusr/gen_init_cpioとラッパースクリプトが含まれているscripts/gen_initramfs_list.shため、許可なくinitramfsを生成できます。これらのプログラムはカーネルソースツリーの下に文書化されています。Documentation/filesystems/ramfs-rootfs-initramfs.txtそしてDocumentation/early-userspace/README

ramfs-rootfs-initramfs.txt「initramfsを埋める」セクションでは、initramfsを構築する一般的な方法について説明します。生成するパスのリスト、そのタイプ(ディレクトリ、一般、デバイスノードなど)、権限、およびその他の属性を含むテキストファイルを作成します。一般ファイルの場合は、コンテンツを含むローカルファイルの名前を指定できます。その後、このファイルを実行してくださいusr/gen_init_cpio。カーネルをビルドするときにこのオプションをファイル名に設定すると、そのファイルをCONFIG_INITRAMFS_SOURCE呼び出してinitramfsが生成されます。usr/gen_init_cpio

initramfs イメージが既に存在し、それを変更するには、cpio -tvリストを使用し、イメージに基づいて ramfs 記述ファイルを再構築します。可能であれば、元のカーネルソースから initramfs 記述ファイルを取得し、ジョブを保存します。ディレクトリ内の一般ファイルの内容のみを抽出します。その後、汎用ファイルとramfs記述ファイルを修正し、最後に実行してusr/gen_init_cpio新しいinitramfsを作成します。

おすすめ記事