Cómo remasterizar un Ubuntu Live ISO para revisar grub.cfg para instalarlo automáticamente desde los datos de usuario de inicio de la nube local

Cómo remasterizar un Ubuntu Live ISO para revisar grub.cfg para instalarlo automáticamente desde los datos de usuario de inicio de la nube local

Estoy trabajando en Mac Intel y M1 y ejecuto Ubuntu Server en máquinas virtuales VMWare Fusion. Actualmente estoy usando las últimas versiones ubuntu-23.10-live-server-amd64.iso y ubuntu-23.10-live-server-arm64.iso. Puedo hacer que todo funcione según sea necesario para los sistemas basados ​​en Intel, pero cuando uso arm64.iso, no contiene un archivo /boot.catalogy /boot/grub/i386-pc/eltorito.img. Por lo tanto, no puedo recrear una ISO de arranque después de mis revisiones de grub.cfg.

He reunido fragmentos de información de varias fuentes, comenzando aquí:https://ubuntu.com/server/docs/install/autoinstall-quickstart, pero no he encontrado ni comprendido lo suficiente para completar esta última pieza del rompecabezas de mi plataforma arm64. Además, no pude usar livefs-edit porque depende de 'losetup', que no está disponible en macOS; sin embargo, xorriso resolvió el problema al 100% en Intel y me imagino... lo resuelve principalmente en los M1 si puedo resolver el problema de la imagen de arranque.

Para amd64.iso esto funciona:

  1. Extraer la ISO original
  2. Crear archivos de datos de usuario y metadatos
  3. Revise grub.cfg para agregar un elemento de menú de instalación automática
  4. Vuelva a empaquetar el ISO con lo siguiente:
    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}

Actualizar Siguiendo el consejo de Thomas Schmitt, consulté la propuesta y la revisé para usarla:

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/

El resultado fue:

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.

La única diferencia que puedo ver al inspeccionar los ISO extraídos tanto del original, que es de arranque, como del nuevo, que no lo es: ingrese la descripción de la imagen aquí

E intentar arrancar da como resultado esto: ingrese la descripción de la imagen aquí

También lo intenté:

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/

Me estoy arrancando el pelo y aferrándome a un clavo ardiendo. Gran parte de esto no lo entiendo completamente, pero puedo ver que -ccolocó el catálogo de arranque. Entonces, para acercar el nuevo ISO al original, usé `c '/boot.catalog', que ahora me lleva a una diferencia en un archivo original, que se ve así: ingrese la descripción de la imagen aquí

Sospecho que hay algo que NO es visible para mí, ¿tal vez en el MBR real? Simplemente estoy especulando sobre cosas con las que no estoy muy familiarizado mientras busco más información.

Resueltogracias a la ayuda de Thomas Shchmitt. Los próximos pasos serían reemplazar ORIGINAL_EXTRACTED_ISO_DIR con un objetivo revisado, nuevos datos de usuario de inicio de nube, grub.cfg, etc.

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

Respuesta1

gracias por volar xorriso. :)

/boot/grub/i386-pc/eltorito.img es para BIOS de PC heredado x86. No sirve de nada en una ISO para arm64. Lo mismo ocurre con el GRUB2 MBR. El material de EFI es bastante similar para las tres arquitecturas.

Pidiendo a xorriso una propuesta para recrear el equipo de arranque de la ISO original:

$ 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

La opción -G no es realmente necesaria en este caso. Se propone porque hay una tabla de particiones. Su efecto se anula mediante la creación de la nueva partición bable. La opción -boot-load-size debe omitirse si existe algún riesgo de que el tamaño de la partición EFI haya cambiado.

información relacionada