Ubuntu Live ISO をリマスターして grub.cfg を修正し、ローカルの cloud-init ユーザーデータから自動インストールする方法

Ubuntu Live ISO をリマスターして grub.cfg を修正し、ローカルの cloud-init ユーザーデータから自動インストールする方法

私は Intel および M1 Mac で作業しており、VMWare Fusion VM で Ubuntu Server を実行しています。現在、最新の ubuntu-23.10-live-server-amd64.iso と ubuntu-23.10-live-server-arm64.iso を使用しています。Intel ベースのシステムでは必要なすべての操作を実行できますが、arm64.iso を使用する場合、 および が含まれていません/boot.catalog/boot/grub/i386-pc/eltorito.imgそのため、grub.cfg を修正した後、起動可能な ISO を再作成できません。

ここから始めて、さまざまな情報源から少しずつ情報をまとめました。https://ubuntu.com/server/docs/install/autoinstall-quickstartしかし、私の arm64 プラットフォームのパズルの最後のピースを埋めるのに十分な情報を見つけられず、理解もできていません。また、macOS では利用できない 'losetup' に依存しているため、livefs-edit を使用できませんでした。ただし、xorriso は Intel で問題を 100% 解決しました。ブート イメージの問題を解決できれば、M1 でもほぼ解決すると思います。

amd64.iso の場合、これは機能します:

  1. オリジナルのISOを抽出する
  2. ユーザーデータとメタデータファイルを作成する
  3. grub.cfgを修正して自動インストールメニュー項目を追加します
  4. 以下の内容で ISO を再パッケージ化します。
    xorriso -as mkisofs \
    --modification-date='2021101314195100' \
    --grub2-mbr \
    --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:"${ORIGINAL_ISO_PATH}" \
    --protective-msdos-label \
    -partition_cyl_align off \
    -partition_offset 16 \
    --mbr-force-bootable \
    -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b \
    --interval:local_fs:2470124d-2478587d::"${ORIGINAL_ISO_PATH}" \
    -part_like_isohybrid \
    -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
    -c '/boot.catalog' \
    -b '/boot/grub/i386-pc/eltorito.img' \
    -no-emul-boot \
    -boot-load-size 4 \
    -boot-info-table \
    --grub2-boot-info \
    -eltorito-alt-boot -e \
    '--interval:appended_partition_2_start_617531s_size_8464d:all::' \
    -no-emul-boot \
    -boot-load-size 8464 \
    -isohybrid-gpt-basdat \
    -o ubuntu-autoinstall.iso \
    -V 'Ubuntu autoinstall' ${EXTRACTED_ISO_PATH}

アップデート Thomas Schmitt のアドバイスに従って、提案を問い合わせ、次のように修正しました。

xorriso -as mkisofs \
--modification-date='2023101104561500' \
-partition_cyl_align off \
-partition_offset 16 \
-append_partition 2 0xef --interval:local_fs:4615776d-4629311d::"${ORIGINAL_ISO_PATH}" \
-G --interval:local_fs:0s-15s:zero_mbrpt:"${ORIGINAL_ISO_PATH}" \
-iso_mbr_part_type 0xcd \
-c '/boot/boot.cat' \
-e '--interval:appended_partition_2_start_1153944s_size_13536d:all::' \
-no-emul-boot \
-boot-load-size 13536 \
-output ubuntu-autoinstall.iso \
extracted-iso/

結果は次のとおりです。

GNU xorriso 1.5.6 : RockRidge filesystem manipulator, libburnia project.
Drive current: -outdev 'stdio:ubuntu-autoinstall.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 1415g free
Added to ISO image: directory '/'='/extracted-iso'
xorriso : UPDATE :     980 files added in 1 seconds
xorriso : UPDATE :     980 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 32768 bytes from file '--interval:local_fs:0s-15s:zero_mbrpt:ubuntu-23.10-live-server-amd64.iso'
libisofs: NOTE : Automatically adjusted MBR geometry to 1020/159/32
xorriso : UPDATE :  3.18% done
xorriso : UPDATE :  54.15% done
xorriso : UPDATE :  87.88% done
ISO image produced: 1300424 sectors
Written to medium : 1300424 sectors at LBA 0
Writing to 'stdio:ubuntu-autoinstall.iso' completed successfully.

起動可能なオリジナルと起動不可能な新しい両方の抽出された ISO を検査したときにわかる唯一の違いは次のとおりです。 ここに画像の説明を入力してください

起動しようとすると、次の結果になります。 ここに画像の説明を入力してください

私も試しました:

xorriso -as mkisofs \
--modification-date='2023101104561500' \
-partition_cyl_align off \
-partition_offset 16 \
-append_partition 2 0xef --interval:local_fs:4615776d-4629311d::"${ORIGINAL_ISO_PATH}" \
-iso_mbr_part_type 0xcd \
-c '/boot/boot.cat' \
-e '--interval:appended_partition_2_start_1153944s_size_13536d:all::' \
-no-emul-boot \
-output ubuntu-autoinstall.iso \
extracted-iso/

私は髪の毛を引っ張り、藁にもすがる思いです。このうちの大半は完全には理解していませんが、-cブート カタログが配置されていることはわかります。そこで、新しい ISO を元のファイルに近づけるために、`c '/boot.catalog' を使用しました。これで、元のファイルとの違いが 1 つ見つかりました。これは次のようになります。 ここに画像の説明を入力してください

実際の MBR の中に、私には見えない何かがあるのではないかと思います。より多くの情報を探しながら、あまり詳しくない事柄について推測しているだけです。

解決済みThomas Shchmitt の助力に感謝します。次のステップは、ORIGINAL_EXTRACTED_ISO_DIR を修正されたターゲット、新しい cloud-init ユーザーデータ、grub.cfg などに置き換えることです。

case "$ARCHITECTURE" in
    "m1")
        echo "Running on M1 Mac."
        xorriso -as mkisofs \
        --modification-date='2023081005071100' \
        -partition_cyl_align off \
        -partition_offset 16 \
        -append_partition 2 0xef --interval:local_fs:4030464d-4042271d::"${ORIGINAL_ISO_FILE}" \
        -G --interval:local_fs:0s-15s:zero_mbrpt:"${ORIGINAL_ISO_FILE}" \
        -iso_mbr_part_type 0xcd \
        -c '/boot/boot.cat' \
        -e '--interval:appended_partition_2_start_1007616s_size_11808d:all::' \
        -no-emul-boot \
        -boot-load-size 11808 \
        -output ${AUTOINSTALL_ISO_FILE} \
        ${ORIGINAL_EXTRACTED_ISO_DIR}/
        ;;
    "intel")
        echo "Running on Intel Mac."
        xorriso -as mkisofs \
        --modification-date='2023081005062500' \
        --grub2-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:"${ORIGINAL_ISO_FILE}" \
        --protective-msdos-label \
        -partition_cyl_align off \
        -partition_offset 16 \
        --mbr-force-bootable \
        -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b --interval:local_fs:4156048d-4166115d::"${ORIGINAL_ISO_FILE}" \
        -appended_part_as_gpt \
        -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
        -c '/boot.catalog' \
        -b '/boot/grub/i386-pc/eltorito.img' \
        -no-emul-boot \
        -boot-load-size 4 \
        -boot-info-table \
        --grub2-boot-info \
        -eltorito-alt-boot \
        -e '--interval:appended_partition_2_start_1039012s_size_10068d:all::' \
        -no-emul-boot \
        -boot-load-size 10068 \
        -output ${AUTOINSTALL_ISO_FILE} \
        ${ORIGINAL_EXTRACTED_ISO_DIR}/
        ;;
    *)
        echo "Unsupported architecture: $ARCHITECTURE"
        exit 1
        ;;
esac

答え1

xorriso を飛ばしてくれてありがとう。:)

/boot/grub/i386-pc/eltorito.img は x86 レガシー PC-BIOS 用です。arm64 の ISO では役に立ちません。GRUB2 MBR についても同様です。EFI の内容は 3 つのアーキテクチャすべてで非常に似ています。

xorriso に、元の ISO のブート デバイスを再作成するための提案を依頼します。

$ xorriso -indev ubuntu-23.10-live-server-arm64.iso -report_el_torito as_mkisofs
...
-V 'Ubuntu-Server 23.10 arm64'
--modification-date='2023101104561500'
-partition_cyl_align off
-partition_offset 16
-append_partition 2 0xef --interval:local_fs:4615776d-4629311d::'ubuntu-23.10-live-server-arm64.iso'
-G --interval:local_fs:0s-15s:zero_mbrpt:'ubuntu-23.10-live-server-arm64.iso'
-iso_mbr_part_type 0xcd
-c '/boot/boot.cat'
-e '--interval:appended_partition_2_start_1153944s_size_13536d:all::'
-no-emul-boot
-boot-load-size 13536

この場合、オプション -G は実際には必要ありません。パーティション テーブルが存在するため、このオプションが提案されています。このオプションの効果は、新しいパーティション テーブルの作成によって上書きされます。EFI パーティションのサイズが変更されるリスクがある場合は、オプション -boot-load-size を省略する必要があります。

関連情報