抽出されたinitrd(x-cpioアーカイブ)をパッケージ化するには?

抽出されたinitrd(x-cpioアーカイブ)をパッケージ化するには?

initrdUbuntu 20.04 ISOをカスタマイズしており、このプロセス中にディレクトリファイル内のファイルを編集する必要があります。casperUbuntu20.04-ISO/casper/initrd

このファイル形式のCPIOアーカイブ(application / x-cpio)を再コンパイルする方法

次のコマンドを使用してコンテンツを解凍できます。

unmkinitramfs initrd .

ただし、再コンパイルできません。どうすればいいですか?

実用的なステップバイステップの答えを見つけるには、ファイルを新しいinitrdディレクトリにコピーして貼り付けて再コンパイルして、新しく作成されたmyinitrdファイルから始めることができることを証明します。

ベストアンサー1

ターゲットデバイス/構成によってinitrdフォーマットが異なる場合があります。以下を使用してフォーマットを確認できます。

binwalk ./initrd

クロスポストによると、initrdに必要な形式はcpio圧縮形式なので、識別は次のようになります。newclzmaこれは単にinitrdを識別する方法を説明するためのものです。:

binwalk initrd

#DECIMAL    HEXADECIMAL     DESCRIPTION
#------------------------------------------
# 0         0x0             LZMA compressed data

cp initrd compressedinit.xz
xz -d compressedinit.xz
binwalk compressedinit

#DECIMAL    HEXADECIMAL     DESCRIPTION
#------------------------------------------
# 0         0x0             ASCII cpio archive...
# 112       0x70            ASCII cpio archive...
# ...

これにより、initrdフォーマットcpioされ圧縮されたnewcファイルを認識できますlzma。梱包/再梱包はinitrd形式によって異なります。binwalkなどを使用すると、xz使用gzipされている形式を検索し、使用された圧縮に基づいて抽出して再生成できる必要があります。

このオプションは、ターゲット形式によって、cpio -H次の形式のいずれかである可能性があるアーカイブ形式を決定します。crc newc odc bin ustar tar

抽出したコンテンツには以下がinitrd含まれます。

~/test$ ls
early  early2  main

次の手順を使用して、開梱して再梱包できます(出典:Super User's品質保証):

# Extract and prepare the working directories
# -------------------------------------------

mkdir /tmp/tmp/
mkdir /tmp/tmp/extracted/
cp initrd /tmp/tmp/
cd /tmp/tmp
unmkinitramfs initrd ./extracted
cd extracted

# Add the first microcode firmware
# --------------------------------

cd early
find . -print0 | cpio --null --create --format=newc > /tmp/tmp/newinitrd

# Add the second microcode firmware
# ---------------------------------

cd ../early2
find kernel -print0 | cpio --null --create --format=newc >> /tmp/tmp/newinitrd

# Add the ram fs file system
# --------------------------

cd ../main
find . | cpio --create --format=newc | xz --format=lzma >> /tmp/tmp/newinitrd

# Verify both initrds 
# -------------------

cd /tmp/tmp
binwalk initrd
binwalk newinitrd

initrdこの方法はあなたの場合に適しており、他の場合は書式設定cpioと圧縮を使用できます。newclzma

cd /extracted/initrd
find . | cpio -o -H newc | xz --format=lzma > ../newinitrd

おすすめ記事