Headless VirtualBox

WIP - Este texto é um trabalho em progresso, ainda não registrei todos os exemplos que queria nem revi o texto. Contribuições são bem-vindas.

Continuando com o projeto de montar um cluster de máquinas, vou precisar de algum sistema de virtualização, porque nem todos os experimentos que quero fazer podem ser feitos apenas com containers. Fiz alguns testes com o QEMU, mas por enquanto é mais prático continuar com o VirtualBox.

Todo acesso no cluster é via ssh, então é necessário controlar o VirtualBox via linha de comando usando o utilitário VBoxManage.

Instalação

Como eu uso o Debian Stable para os servidores, para instalar a versão mais recente do VittualBox é necessário usar o repositório Debian Fasttrack como descrito no site do Debian.

Esse é um resumo da instalação

apt install fasttrack-archive-keyring

Adicione ao arquivo /etc/apt/sources.list as seguintes linhas. (lembre de observar o nome da versão)

deb https://fasttrack.debian.net/debian-fasttrack/ bullseye-fasttrack main contrib
deb https://fasttrack.debian.net/debian-fasttrack/ bullseye-backports-staging main contrib

Então faça a instalação normalmente

apt update
apt upgrade
apt install virtualbox virtualbox-ext-pack

Existem vários outros pacotes que podem ser interessantes, procure por eles usando o comando apt search virtualbox.

Criando uma VM

VM_NAME="Nome_da_VM"
VBoxManage createvm \
--name $NAME_VM \
--ostype Debian_64 \
--register

Ajustando CPU

VBoxManage modifyvm $NAME_VM \
--cpus 2 \
--cpuexecutioncap 50 \
--memory 2048 \
--vram 12

Ajustando Memória

VBoxManage modifyvm $NAME_VM \
--memory 2048 \
--vram 12

Atribuindo uma interface de rede

VBoxManage modifyvm $NAME_VM \
--nic1 bridged \
--bridgeadapter1 eno1

Criando HD virtual

VBoxManage createhd \
--filename $NAME_VM.vdi \
--size 5120 \
--variant Standard

Anexando um controladora SATA na VM

VBoxManage storagectl $NAME_VM \
--name "SATA Controller" \
--add sata \
--bootable on

Anexando o disco virtual no controlador

VBoxManage storageattach $NAME_VM \
--storagectl "SATA Controller" \
--port 0 \
--device 0 \
--type hdd \
--medium $NAME_VM.vdi

Anexando uma controladora IDE na VM

VBoxManage storagectl $NAME_VM \
--name "IDE Controller" \
--add ide
VBoxManage storageattach $NAME_VM \
--storagectl "IDE Controller" \
--port 0 \
--device 0 \
--type dvddrive \
--medium imagem.iso

Anexando o drive DVD do host na VM

VBoxManage storageattach $NAME_VM \
--storagectl "IDE Controller" \
--port 0 \
--device 0 \
--type dvddrive \
--medium host:/dev/dvd

Removendo media

VBoxManage storageattach $NAME_VM \
--storagectl "IDE Controller" \
--port 0 \
--device 0 \
--type dvddrive \
--medium none

Abilitando VRDE (RDP)

VirtualBox Remote Display Protocol (VRDP) é compatível com o Remote Desktop Protocol (RDP) criado pela Microsoft e é útil principalmente no início do processo de instalação da máquina cliente.

Você pode modificar a máquina virtual para ativar o RDP automaticamente com o parâmetro --vrde on ou pode passar o mesmo parâmetro quando iniciar a VM.

VBoxManage modifyvm $NAME_VM --vrde on

Existem alguns modos disponíveis para autenticação para o RDP, eu prefiro usar o modo external. Dessa forma o sistema vai usar a conta e senha de usuário do host para autenticar no RDP.

VBoxManage modifyvm $NAME_VM --vrdeauthtype external

Listando tipos de sistemas operacionais

VBoxManage list ostypes

Obtendo informações

Mostrar as inforações de uma vm

VBoxManage showvminfo $NAME_VM

Listando VMs

VBoxManage list vms

Iniciando a VM

VBoxManage startvm $NAME_VM \
--type headless

Quando a máquina iniciar, a forma mais simples de conectar a ela nos primeiros acessos, enquanto você ainda não configurou um nome para máquina nem algum sistema de Zero Configuration Networking é obtendo o endereço MAC com o comando showvminfo e usando ele para encontrar o IP da VM na rede.

VBoxManage showvminfo $NAME_VM
ip neighbor |tr '[:lower:]' '[:upper:]' |grep "XX:XX:XX:XX:XX:XX"

Listando VMs em execução

VBoxManage list runningvms

Lista VMs no modo longo

VBoxManage list -l runningvms

Removendo uma VM

VBoxManage unregistervm --delete $NAME_VM

Desligando a VM

Alem de poweroff também podemos usar pause, resume, reset e vários outros comandos.

VBoxManage controlvm $NAME_VM poweroff

Exportando e importando a VM

VBoxManage export $NAME_VM -o $NAME_VM.ova 
VBoxManage import $NAME_VM.ova

Existem muitas outras opções e parâmetros úteis no VBoxManage, você pode consultar elas no capítulo 8º da documentação do VirtualBox

Cesar Gimenes