修正されたISOイメージから起動

修正されたISOイメージから起動

ISOファイル、特にDebianインストーラ(debian-11.4.0-i386-netinst.iso)を修正して起動してみました。次のコードはisoファイルの内容を抽出し、新しいisoファイルを再作成します。

mkdir -p tmp_dir

bsdtar -C tmp_dir -xf debian-11.4.0-i386-netinst.iso

genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat \
            -no-emul-boot -boot-load-size 4 -boot-info-table \
            -o new_image.iso tmp_dir

その後、新しいisoファイルをUSBドライブにコピーしました。

sudo dd if=new_image.iso of=/dev/sdg status=progress

これにより、lsblk次の出力が提供されます。

$ lsblk /dev/sdg
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdg    8:96   1 29,4G  0 disk 

しかし、始めることはできません。理由をご存知ですか?

以下は、いくつかの追加情報です。

  • まず、元の画像を使用してUSBスティックを作成すると、USBスティックから起動できます。

sudo dd if=debian-11.4.0-i386-netinst.iso of=/dev/sdg status=progress

その後、lsblk次のような結果が出ます。

$ lsblk /dev/sdg
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdg      8:96   1 29,4G  0 disk 
├─sdg1   8:97   1  471M  0 part 
└─sdg2   8:98   1  1,9M  0 part 

2つのパーティションを見ることができます(新しいイメージにはパーティションがありません)。

  • 第二に、新しいイメージはvmwareで正しく実行されます。標準のコンピュータでは動作しないことがわかりません。

どんなアイデアがありますか?

答え1

起動可能なUSBメディア作成ツールの開発者であるRufusは、次のように書きました。SuperUser.SEへの素晴らしい答えです。問題を引き起こす裏面の複雑さを理解できるように説明します。

を使用すると、genisoimageISOファイルを(物理または仮想)CD / DVDでのみ起動可能にすることができます。

HDDなどのデバイスから起動するには(USBスティックに書き込むときなど)、イメージの先頭にマスターブートレコードが必要で、有効なMBRパーティションテーブルを含める必要があるため、イメージも有効です。ハードディスクイメージとして解釈されます。

これは、この目標を達成するために開発された最初のツールに基づく「isomixed ISOイメージ」とも呼ばれます。 Debian 11 では、xorrisoこれらのイメージファイルを作成することができます。

xorriso -indev debian-11.4.0-i386-netinst.iso -report_el_torito cmdおよび/またはを使用すると、xorriso -indev debian-11.4.0-i386-netinst.iso -boot_image any show_statusxorrisoの画像を確認およびフィードバックするためのオプションで、その画像の起動構造を説明できますxorriso。これが私が得るものです:

$ xorriso -indev debian-11.4.0-i386-netinst.iso -report_el_torito cmd
xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :    1651 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'debian-11.4.0-i386-netinst.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR isohybrid cyl-align-on GPT APM
Media summary: 1 session, 241152 data blocks,  471m data, 1781g free
Volume id    : 'Debian 11.4.0 i386 n'
-volid 'Debian 11.4.0 i386 n'
-volume_date uuid '2022070910381400'
-boot_image isolinux system_area=--interval:imported_iso:0s-15s:zero_mbrpt,zero_gpt,zero_apm:'debian-11.4.0-i386-netinst.iso'
-boot_image any partition_cyl_align=on
-boot_image any partition_offset=0
-boot_image any partition_hd_cyl=64
-boot_image any partition_sec_hd=32
-boot_image any mbr_force_bootable=on
-boot_image any apm_block_size=2048
-boot_image any iso_mbr_part_type=0x00
-boot_image any cat_path='/isolinux/boot.cat'
-boot_image isolinux bin_path='/isolinux/isolinux.bin'
-boot_image any platform_id=0x00
-boot_image any emul_type=no_emulation
-boot_image any load_size=2048
-boot_image any boot_info_table=on
-boot_image any next
-boot_image any efi_path='/boot/grub/efi.img'
-boot_image any platform_id=0xef
-boot_image any emul_type=no_emulation
-boot_image any load_size=2031616
-boot_image isolinux partition_entry=gpt_basdat
-boot_image isolinux partition_entry=apm_hfsplus

そして

$ xorriso -indev debian-11.4.0-i386-netinst.iso -boot_image any show_status
xorriso 1.5.2 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE :    1651 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'debian-11.4.0-i386-netinst.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record  : El Torito , MBR isohybrid cyl-align-on GPT APM
Media summary: 1 session, 241152 data blocks,  471m data, 1781g free
Volume id    : 'Debian 11.4.0 i386 n'
------------------------------------
Status of loaded boot image        :
------------------------------------
Boot record  : El Torito , MBR isohybrid cyl-align-on GPT APM
Boot catalog : '/isolinux/boot.cat'
Boot image   : '/isolinux/isolinux.bin' , boot_info_table=on
Boot image   : '/boot/grub/efi.img' , platform_id=0xEF 
------------------------------------
Boot image settings for next commit:
------------------------------------
-boot_image any discard
-boot_image any bin_path=''
-boot_image any emul_type=no_emulation
-boot_image any platform_id=0x00
-boot_image any boot_info_table=off
-boot_image grub grub2_boot_info=off
-boot_image any load_size=2048
-boot_image any sel_crit=0000000000000000000000000000000000000000
-boot_image any id_string=00000000000000000000000000000000000000000000000000000000
-boot_image isolinux partition_entry=off
-boot_image any appended_part_as=mbr
-boot_image any system_area=''
-boot_image any partition_offset=0
-boot_image any partition_sec_hd=0
-boot_image any partition_hd_cyl=0
-boot_image any partition_cyl_align=auto
-boot_image grub partition_table=off
-boot_image any mbr_force_bootable=off
-boot_image any appended_part_as=mbr
-boot_image any part_like_isohybrid=off
-boot_image any iso_mbr_part_type=default
-boot_image any gpt_disk_guid=random
-boot_image any chrp_boot_part=off
-boot_image any prep_boot_part=''
-boot_image any efi_boot_part=''
-boot_image any hfsplus_serial=0000000000000000
-boot_image any hfsplus_block_size=0
-boot_image any apm_block_size=0
------------------------------------

USBスティックに記録しても、結果のISOイメージを起動可能にするほとんどの「魔法」は-boot_image isolinux system_area=...

それ以降は-boot_image any nextUEFIサポートに関連しており、使用する起動オプションによってはgenisoimage気にしないことがあります。

答え2

特に完全な答えをいただいた@telcoMに感謝します。

私はどんな場合でも(DVD、USBスティック、または...)起動可能なDebianのEFI起動可能なAMD64イメージの作成に成功しませんでした。基本に戻り、次のガイドラインを見つけました。 元の起動デバイスを使用してDebian ISOを再パッケージします。

2023年のISO調整に基づいて、次のプロセスを作成して正常にテストできました。

たとえば、Debian 11.6 AMD64 Stable ISOを修正します。次の3つのDebianパッケージをインストールしたら、/firmwareあなたのDebianコンピュータにあるすべてのファームウェアをそのディレクトリに追加します。/usr/lib/firmwarefirmware-linux firmware-linux-free firmware-linux-nonfree

sudo apt install firmware-linux firmware-linux-free firmware-linux-nonfree

引き続き例を使用してISOを再パッケージしてUSBフラッシュドライブにコピーし、レガシー(MBR)モードとUEFIモードで正常に起動します。画像はDVDで焼くときにも機能します。

ルートディレクトリを作成しますmkiso

mkdir /home/nba/mkiso
cd /home/nba/mkiso
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-11.6.0-amd64-DVD-1.iso

ソースISO抽出:

mkdir deb
sudo apt install xorriso
xorriso -osirrox on -indev deb11.6-nba-amd64.iso -extract / ./deb

または

sudo apt install bsdtar
bsdtar -C ./deb -xf debian-11.6.0-amd64-DVD-1.iso

ファイル/ファームウェアを追加します。 ISOイメージにファームウェアを追加したいです。

sudo apt install firmware-linux firmware-linux-free firmware-linux-nonfree

mkdir -p /home/nba/mkiso/fw
cp -rf /usr/lib/firmware /home/nba/mkiso/fw/

ソースISOからxorrisoビルドコマンドを抽出します。

cat deb/.disk/mkisofs


xorriso -as mkisofs -r -checksum_algorithm_iso sha256,sha512 -V 'Debian 11.6.0 amd64 1' -o /srv/cdbuilder.debian.org/dst/deb-cd/out/3bullseyeamd64/debian-11.6.0-amd64-DVD-1.iso -checksum-list /srv/cdbuilder.debian.org/src/deb-cd/tmp/3bullseyeamd64/bullseye/checksum-check -jigdo-checksum-algorithm md5 -jigdo-force-checksum /pool/ -jigdo-min-file-size 1024 -jigdo-exclude 'README*' -jigdo-exclude /doc/ -jigdo-exclude /md5sum.txt -jigdo-exclude /.disk/ -jigdo-exclude /pics/ -jigdo-exclude 'Release*' -jigdo-exclude 'Packages*' -jigdo-exclude 'Sources*' -jigdo-jigdo /srv/cdbuilder.debian.org/dst/deb-cd/out/3bullseyeamd64/debian-11.6.0-amd64-DVD-1.jigdo -jigdo-template /srv/cdbuilder.debian.org/dst/deb-cd/out/3bullseyeamd64/debian-11.6.0-amd64-DVD-1.template -jigdo-map Debian=/srv/cdbuilder.debian.org/src/ftp/debian/ -jigdo-exclude boot1 -J -joliet-long -cache-inodes -isohybrid-mbr syslinux/usr/lib/ISOLINUX/isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus boot1 CD1

xorrisoビルドコマンドを修正する(-jidgoオプション+関連チェックサムを削除...):

xorriso -as mkisofs -r -V 'deb11.6-nba-amd64' -o ./deb11.6-nba-amd64.iso -J -joliet-long -cache-inodes -isohybrid-mbr ./isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus deb fw

ソースISOから最初の432バイトを抽出してMBRを生成します。

cd /home/nba/mkiso
dd if=debian-11.6.0-amd64-DVD-1.iso of=isohdpfx.bin bs=1 count=432 

新しいISOビルド(ISOに追加deb/fw/firmware

xorriso -as mkisofs -r -V 'deb11.6-nba-amd64' -o ./deb11.6-nba-amd64.iso -J -joliet-long -cache-inodes -isohybrid-mbr ./isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus deb fw

新しく作成されたISOを抽出して確認します。

mkdir /home/nba/mkiso/deb2
cd /home/nba/mkiso/
xorriso -osirrox on -indev deb11.6-nba-amd64.iso -extract / deb2

次の場所にファームウェアがあることを確認してください/home/nba/mkiso/deb2/firmware

ls /home/nba/mkiso/deb2/firmware

テストブート:xorriso -report_system_areaソースISOと新しいISOのオプションを使用して比較します。

xorriso -indev debian-11.6.0-amd64-DVD-1.iso -report_system_area as_mkisofs
xorriso -indev deb11.6-nba-amd64.iso -report_system_area as_mkisofs

次の行があることを確認してください。

-isohybrid-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt,zero_apm:'deb11.6-nba-amd64.iso'

そしてライン:

-eltorito-alt-boot
-e '/boot/grub/efi.img'
-no-emul-boot

USBフラッシュドライブにコピーして起動しようとします。

sudo dd if=deb11.6-nba-amd64.iso of=/dev/sda bs=256M status=progress

ボタンを押すと再起動します!

関連情報