Personalize uma VM VirtualBox Ubuntu 20.04

Oct 17 2020

Eu preciso produzir VMs VirtualBox personalizadas (enviadas como .ova) para o ensino: um é um servidor Ubuntu com interface de terminal e LAMP, o outro tem um Ubuntu de desktop mínimo com apenas aplicativos selecionados disponíveis. Preciso que eles sejam leves porque os alunos os usam para redes e a qualidade de seus computadores BYOD varia.

No passado (18.04LTS), eu costumava baixar um .iso mínimo e proceder de forma incremental. Agora isso não é mais possível, uma vez que apenas os .iso completos estão disponíveis (por exemplohttps://cdimage.ubuntu.com/lubuntu/releases/20.04.1/release/lubuntu-20.04.1-desktop-amd64.iso) por 20.04. Não quero prosseguir de forma decrescente, pois o resultado não é ideal, incerto e demorado.

Eu naveguei na Web, mas (bastante surpreendentemente) sem encontrar uma solução para isso. Suspeito que perdi algo relevante, então pergunto aqui antes de dedicar um tempo para descobrir a água fervente.

Obrigado pela ajuda!

Respostas

MastroGeppetto Oct 19 2020 at 16:51

Uma solução usando imagens em nuvem

Meu problema é a criação de um Ubuntu VirtualBox VM personalizado começando de um mínimo. O resultado deve consistir em uma VM em execução em uma instalação local do VirtualBox (não na nuvem).

Essa tarefa era executada anteriormente usando a instalação mínima mini.iso. Mas esta imagem de disco agora é um legado, embora ainda não oficialmente disponível.

Eu queria uma solução bem documentada e de longo prazo, possivelmente baseada em lançamentos oficiais. Navegando na Internet encontrei várias sugestões, mas não uma solução completa. Abaixo está um guia passo a passo baseado em tais sugestões.

A solução pode explicar porque o baseado em "mini.iso" será descartado. Na verdade, o novo é mais rápido de executar e retorna uma VM que provavelmente está melhor configurada para uso em um ambiente VirtualBox. Além disso, o processo pode ser totalmente automatizado (verhttps://gist.github.com/atoato88/5840807 ou https://gist.github.com/smoser/6066204), enquanto o antigo requer uma instalação manual demorando muito.

A solução parte de uma imagem de nuvem, conforme sugerido em um dos posts sobre o assunto (https://askubuntu.com/questions/1264128/how-to-do-a-minimal-install-of-20-04)

Eu dividi o processo, que é projetado para uma máquina Linux, em etapas:

  • instale a imagem da nuvem
  • configurar a VM
  • configurar a imagem da nuvem
  • definir credenciais de usuário
  • prepare-se para personalização

Também dou algumas sugestões não testadas para seu uso em um ambiente Windows.

Instale a imagem da nuvem

As imagens da nuvem estão disponíveis em várias fontes. Este guia se aplica àqueles no site oficial do Ubuntu, que oferece vários sabores. Selecionei o 20.04 no formato OVA, que é fácil de usar no VirtualBox (https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.ova) Editando o URL, você encontra outros formatos e o repositório.

Baixe a imagem e crie a VM usando Arquivo -> Importar aplicativo virtual na GUI do VirtualBox, sem iniciá-lo. Pode ser conveniente alterar o nome na descrição (clique duas vezes na linha de descrição) por um mais simples, como '' minimal-focal ''.

Configure a VM

Networking

Na configuração de rede da Máquina Virtual, configure o adaptador de rede como "NAT" e (na caixa "Avançado") redirecione a porta do host 2222 (ou o que você quiser) para 22. Desta forma, sua VM será conectada a a Internet e acessível através de ssh.

Armazenamento

Na configuração de armazenamento da VM:

  • Remova o driver de disquete inútil
  • Crie uma nova unidade de DVD e deixe-a vazia

Configure a imagem da nuvem

Crie uma imagem .iso contendo os arquivos que o cloud-init usará quando a VM for inicializada. Em um local conveniente, crie os dois arquivos YAML a seguir:

  • meta-dados:

     instance-id: desktop
     local-hostname: vb-desktop
    
  • dados do usuário:

     #cloud-config
     users:
       - name: user
         sudo: ['ALL=(ALL) NOPASSWD:ALL']
         shell: /bin/bash
    

Aqui você tem a opção de configurar dois detalhes na VM: o nome do host (aqui o valor '' vb-desktop '' para o campo '' local-hostname '' no arquivo de metadados) e o nome de usuário (aqui o ' valor 'user' 'para o campo' 'nome' 'no arquivo de dados do usuário). Verifica ahttps://cloudinit.readthedocs.io/en/latest/topics/format.html para mais detalhes.

Em seguida, crie o arquivo .iso (por exemplo, ciconf.iso) com o comando

 $ cloud-localds ciconf.iso user-data meta-data

O comando '' cloud-localds '' está no pacote "cloud-image-utils", que (no Debian / Ubuntu) você instala com

 $ sudo apt install cloud-image-utils

As mesmas funções devem estar disponíveis também para usuários do Windows.

Na seção Armazenamento da GUI do VirtualBox, instale o arquivo .iso que você acabou de criar na unidade IDE criada na etapa anterior.

Inicie a VM e aguarde o login do terminal, depois "desligue a ACPI". Você não pode fazer o login porque não tem credenciais.

Defina as credenciais do usuário

Mova para o diretório do disco virtual VM (pode ser ~ / VirtualBox VMs / minimal-focal) e monte a imagem do disco. O pacote qemu é necessário, que é instalado com

 $ sudo apt install qemu

Para instalar a imagem do disco, proceda da seguinte forma:

 $ sudo modprobe nbd max_part=8
 $ sudo qemu-nbd -c /dev/nbd0 ubuntu-focal-20.04-cloudimg.vdi
 $ sudo mount /dev/nbd0p1 /mnt

O '' ubuntu-focal-20.04-cloudimg.vdi '' refere-se ao arquivo de imagem, substitua pelo seu. No final, o sistema de arquivos VM está disponível no diretório / mnt.

Para criar a credencial de usuário '' chroot '' para o sistema de arquivos VM, altere as credenciais do usuário (o comando '' passwd '' solicitará uma nova senha) e saia do ambiente '' chroot '':

 $ sudo chroot /mnt
 $ passwd user
 $ sync
 $ exit

Substitua '' usuário '' pelo nome de usuário configurado na etapa anterior. As chances de bagunçar seu sistema usando o comando chroot são limitadas, então tome cuidado com isso. Se você não sabe sobre isso, verifique a página de manual.

Somente quando você tiver deixado o ambiente '' chroot '' com segurança (verifique), copie sua chave pública (presumo que você tenha uma), dentro do sistema de arquivos VM:

 $ mkdir /mnt/home/user/.ssh
 $ cat ~/.ssh/id_rsa.pub >> /mnt/home/user/.ssh/authorized_keys

A etapa acima é opcional, mas extremamente conveniente. No caso de você não ter uma chave pública, existem milhares de tutoriais para isso ('' ssh-keygen '').

Quando terminar, desmonte a imagem de disco da VM:

 $ sync
 $ sudo umount /dev/nbd0p1
 $ sudo qemu-nbd -d /dev/nbd0
 $ sudo rmmod nbd

Se você se esquecer de desmontar, o disco da VM está danificado e você precisa reiniciar tudo. Verifique novamente antes de continuar.

Prepare-se para personalização

Inicie a máquina a partir da interface GUI do VirtualBox e faça o login usando o nome de usuário '' usuário '' e a senha definida.

A VM pode ser acessada também a partir da linha de comando em seu PC com

 $ ssh user@localhost -p 2222

('' usuário '' substituído pelo seu nome de usuário, 2222 é o número da porta configurada na primeira etapa).

Então use do jeito que você gosta (eu sugiro '' ssh '') para terminar o trabalho.

Faça login na VM e, usando um editor de linha, corrija um detalhe ausente no arquivo '' / etc / hosts '' na VM: adicione no final da linha '' localhost '' o nome da nova máquina, em o exemplo '' minimal-focal ''.

Em seguida, dê os seguintes comandos:

 $ sudo dpkg-reconfigure keyboard-configuration
 $ sudo apt update
 $ sudo apt upgrade
 $ sudo apt install linux-modules-extra-$(uname -r) tasksel

O primeiro comando adapta o teclado VM ao que você usa, enquanto o resto atualiza a configuração, instala um pacote contendo módulos que estão faltando em uma imagem de nuvem e o utilitário tasksel que é útil para customização.

Verificação final e conclusões

Usando o comando '' tasksel '', você pode instalar vários tipos de pacotes, por exemplo, um servidor LAMP. Mas você pode decidir instalar sua coleção de pacotes favorita, assim como com o mini.iso.

O processo descrito acima é conceitualmente mais difícil do que o realizado com o mini.iso, mas é mais rápido, levando cerca de 10 'para ter a máquina pronta para customização. Em contraste, você precisa baixar um VDI maior do que o mini.iso. Finalmente, a tecnologia de nuvem veio para ficar, então espero que esta modalidade esteja disponível para vários lançamentos do Ubuntu depois que o mini.iso for finalmente abandonado.

A verificação final pode consistir na instalação de uma distribuição de desktop, como o Xubuntu, usando o tasksel. O teste é significativo para verificar se um gerenciador de exibição pode operar corretamente. Para executar a verificação, clone a VM e chame '' tasksel '' do terminal VM. Em seguida, selecione (com '' espaço '') a "Área de trabalho mínima do Xubuntu". Aguarde até que a instalação seja concluída e reinicie.

Os usuários do Windows devem ser capazes de usar a mesma estratégia, mas as etapas que requerem a montagem do sistema de arquivos VM e do comando chroot são realizadas usando campos específicos no arquivo de dados do usuário.