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
이 옵션 이 필요합니다 . 한 번 시도했지만 성공하지 못했습니다. 압축 없이 작동합니다.