
Estou trabalhando em Macs Intel e M1 e executando o Ubuntu Server em VMs VMWare Fusion. Atualmente estou usando o ubuntu-23.10-live-server-amd64.iso e o ubuntu-23.10-live-server-arm64.iso mais recentes. Posso fazer com que tudo funcione conforme necessário para sistemas baseados em Intel, mas ao usar arm64.iso, ele não contém um /boot.catalog
e /boot/grub/i386-pc/eltorito.img
. Portanto, não consigo recriar um ISO inicializável após minhas revisões do grub.cfg.
Reuni informações de várias fontes, começando aqui:https://ubuntu.com/server/docs/install/autoinstall-quickstart, mas não encontrei ou entendi o suficiente para preencher esta última peça do quebra-cabeça da minha plataforma arm64. Além disso, não consegui usar o livefs-edit porque depende de 'losetup', que não está disponível no macOS; entretanto, o xorriso resolveu o problema 100% na Intel e imagino... resolve principalmente nos M1s se eu conseguir resolver o problema da imagem de inicialização.
Para amd64.iso isso funciona:
- Extraia o ISO original
- Crie arquivos de dados do usuário e metadados
- Revise o grub.cfg para adicionar um item de menu de instalação automática
- Reempacote o ISO com o seguinte:
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}
Atualizar Seguindo o conselho de Thomas Schmitt, consultei a proposta e revisei para usar:
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/
O resultado foi:
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.
A única diferença que posso ver ao inspecionar os ISOs extraídos do original, que é inicializável, e do novo, que não é:
E tentar inicializar resulta nisso:
Eu também tentei:
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/
Estou puxando meu cabelo e me agarrando a qualquer coisa. Muito disso eu não entendo completamente, mas posso ver que -c
foi colocado o catálogo de inicialização. Então, para aproximar o novo ISO do original, usei `c '/boot.catalog', o que agora me leva a uma diferença em um arquivo original, que se parece com isto:
Suspeito que haja algo NÃO visível para mim, talvez no MBR real? Apenas especulando sobre coisas com as quais não estou muito familiarizado enquanto procuro mais informações.
Resolvidograças à ajuda de Thomas Shchmitt. As próximas etapas seriam substituir ORIGINAL_EXTRACTED_ISO_DIR por um destino revisado, novos dados do usuário cloud-init, 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
Responder1
obrigado por voar xorriso. :)
/boot/grub/i386-pc/eltorito.img é para PC-BIOS legado x86. Não há utilidade para isso em uma ISO para arm64. O mesmo se aplica ao MBR GRUB2. O material EFI é bastante semelhante para todas as três arquiteturas.
Pedindo ao xorriso uma proposta para recriar o equipamento de boot da 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
A opção -G não é realmente necessária neste caso. É proposto porque existe uma tabela de partições. Seu efeito é anulado pela criação do novo arquivo de partição. A opção -boot-load-size deve ser omitida se houver algum risco de alteração do tamanho da partição EFI.