
initrd
Ubuntu 20.04 ISOをカスタマイズしており、このプロセス中にディレクトリファイル内のファイルを編集する必要があります。casper
Ubuntu20.04-ISO/casper/initrd
このファイル形式のCPIOアーカイブ(application / x-cpio)を再コンパイルする方法


次のコマンドを使用してコンテンツを解凍できます。
unmkinitramfs initrd .
ただし、再コンパイルできません。どうすればいいですか?
実用的なステップバイステップの答えを見つけるには、ファイルを新しいinitrd
ディレクトリにコピーして貼り付けて再コンパイルして、新しく作成されたmyinitrd
ファイルから始めることができることを証明します。
答え1
ターゲットデバイス/構成によってinitrd
フォーマットが異なる場合があります。以下を使用してフォーマットを確認できます。
binwalk ./initrd
クロスポストによると、initrdに必要な形式はcpio
圧縮形式なので、識別は次のようになります。newc
lzma
これは単に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
と圧縮を使用できます。newc
lzma
cd /extracted/initrd
find . | cpio -o -H newc | xz --format=lzma > ../newinitrd
答え2
これは、syslinux 4.06(ライブブート)用のxz initramfsを再パッケージするために使用したものです。
#!/bin/bash
find . 2>/dev/null | cpio --create --format='newc' > ../initrfs.img.cpio
xz --check=crc32 --lzma2=,dict=2048kiB ../initrfs.img.cpio
mv ../initrfs.img.cpio.xz ../initrfs.img
答え3
cpio:オプションには引数が必要です - 'H'
-H newc
このオプションが必要です。一度試しましたが成功しませんでした。圧縮なしで動作します。