Eu li a documentação do curtin e da instalação automática e não consigo entender por que esse script de instalação automática está funcionando no meu laptop de desenvolvimento, mas não na instalação do vbox (versão 7.0.8 no host Ubuntu). A princípio pensei que o problema fosse uma referência a /dev/mmcblk0
(o virtualbox usa /dev/sda
), mas depois de fazer várias configurações diferentes, não acho que esse seja realmente o problema por causa da mensagem de erro que isso gera. O éautoinstall config did not create needed bootloader partition
Minha teoria é que essa instalação automática funciona no laptop porque o laptop é UEFI, mas não no Virtualbox porque não é. Encontrei algumas sugestões em outro lugar sobre como fazer uma instalação automática que funciona para UEFI funcionar no MBR, mas nenhuma que seja capaz de fazer as duas coisas.
Esse é o problema com esse layout de particionamento de instalação automática? Existe alguma solução? Não posso usar os layouts integrados (lvm etc) devido aos requisitos específicos deste projeto. Sei que poderia alterar as configurações do Virtualbox para inicialização EFI, mas este ISO terá que ser instalado em uma ampla variedade de máquinas, algumas das quais podem não suportar EFI.
Aqui está meu layout de particionamento atual, que está funcionando em um laptop com um dispositivo em/dev/mmcblk0
Como esse script precisa ser modificado para funcionar em qualquer sistema? E sim, a partição /boot realmente precisa ser tão grande para esta configuração.
autoinstall:
version: 1
storage:
config:
- ptable: gpt
wipe: superblock-recursive
preserve: false
name: ''
grub_device: false
type: disk
id: disk-mmcblk0
match:
size: largest
- device: disk-mmcblk0
size: 1127219200
wipe: superblock
flag: boot
number: 1
preserve: false
grub_device: true
type: partition
id: partition-0
- fstype: fat32
volume: partition-0
preserve: false
type: format
id: format-0
- device: disk-mmcblk0
size: 5GB
wipe: superblock
number: 2
preserve: false
type: partition
id: partition-1
- fstype: ext4
volume: partition-1
preserve: false
type: format
id: format-1
- device: disk-mmcblk0
size: -1
wipe: superblock
number: 3
preserve: false
type: partition
id: partition-2
- volume: partition-2
key: password
path: /dev/mapper/dm_crypt-0
preserve: false
type: dm_crypt
id: dm_crypt-0
- name: ubuntu-vg
devices:
- dm_crypt-0
preserve: false
type: lvm_volgroup
id: lvm_volgroup-0
- name: ubuntu-lv
volgroup: lvm_volgroup-0
size: -1
wipe: superblock
preserve: false
path: /dev/ubuntu-vg/ubuntu-lv
type: lvm_partition
id: lvm_partition-0
- fstype: btrfs
volume: lvm_partition-0
preserve: false
type: format
id: format-2
- path: /
device: format-2
type: mount
id: mount-2
options: 'noatime,discard,compress=zstd:1'
- path: /boot
device: format-1
type: mount
id: mount-1
- path: /boot/efi
device: format-0
type: mount
id: mount-0
Como @AndrewLowther apontou na resposta , seu comentário aponta para:
Então você tem duas opções:
user-data
com a solução alternativa sugerida por Andrewuser-data
arquivos separados. Um para BIOS e outro para UEFIDescreverei a primeira opção abaixo, que é o que você deseja. Isso significa que funcionará para um computador BIOS ou UEFI.
Em primeiro lugar, o
user-data
arquivo fornecido está faltando#cloud-config
na primeira linha e também naidentity
seção. Ambos são obrigatórios, então os adicionei no exemplo abaixo. Aidentity
seção é definida com um nome de usuárioubuntu
e senha padrãoubuntu
. Além disso, a unidade criptografada é configurada com uma senhaubuntu
. Mude de acordo.Há várias coisas no
user-data
arquivo abaixo que são diferentes das suas.grub_device: true
está definido para o disco em vez degrub_device: false
Uma pequena partição não formatada
flag: bios_grub
é adicionada.Da documentação do curtin sobre
bios_grub
:grub_device: false
é definido para todas as partições, exceto a partição ESP usada por uma instalação UEFI. Para esta partição,grub_device: UEFI
é definido. No momento, este é apenas um espaço reservado e será editado comearly-commands
, conforme descrito a seguir.O uso de
early-commands
nouser-data
arquivo modificará oautoinstall.yaml
arquivo com base no fato de o computador ser UEFI ou BIOS. Isso modificará agrub_device: UEFI
configuração definida acima.Dê uma olhada no seguinte:
O que isso faz é editar o
autoinstall.yaml
arquivo com base em uma condicional. Pelo que entendi, oautoinstall.yaml
arquivo é criado durante a instalação e reside no diretório raiz da Instalação Live. Esta é uma combinação do seuuser-data
arquivo e das perguntas não respondidas/não configuradas da instalação automática padrão que o instalador preenche.Isso verifica se o arquivo
/sys/firmware/efi
existe:if [ -e "/sys/firmware/efi" ]; then
Se for verdade:
Indica que o sistema é UEFI
Substitui
grub_device: UEFI
porgrub_device: true
usarsed
:sed -i -e "s/grub_device: UEFI/grub_device: true/" /autoinstall.yaml
De outra forma:
Indica que o sistema é BIOS
Substitui
grub_device: UEFI
porgrub_device: false
usarsed
:sed -i -e "s/grub_device: UEFI/grub_device: false/" /autoinstall.yaml
E é isso. Após a
early-commands
execução, a instalação continuará.Aqui está o
user-data
arquivo completo:Se você instalar em um computador UEFI e BIOS e depois comparar, notará que o esquema de partição será o mesmo. A instalação UEFI terá uma
bios_grub
partição não utilizada e a instalação do BIOS terá uma partição ESP não utilizada montada em/boot/efi
. O/boot/efi
estará vazio em uma instalação de BIOS e conterá arquivos em uma instalação UEFI.As seguintes instalações foram feitas com ISO: ubuntu-22.04.3-live-server-amd64.iso . Ele foi descompactado com o
user-data
arquivo acima adicionado/nocloud
e depois reembalado.Instalação EFI:
Instalação do BIOS: