Configurar uma VM CentOS armhfp no Ubuntu 18.04 Desktop
Para um dos meus projetos, configurei uma máquina virtual CentOS armhfp no meu desktop Ubuntu 18.04. Eu poderia ter testado de outra forma, gravando a imagem ARM em um cartão SD e inicializando-o na placa, mas preferi trabalhar no QEMU. Testar em placas como a Cubietruck ou Raspberry Pi consome tempo. Se a imagem for corrompida, você deve repetir todo o procedimento: remover o cartão SD, regravar a imagem correta do sistema operacional, inicializar e testar o pacote ou atualização, alterar as configurações do U-Boot e assim por diante.
QEMU é um emulador e virtualizador de máquina de código aberto que pode executar sistemas operacionais para muitas arquiteturas. Configurar o ambiente QEMU em um sistema operacional base como Ubuntu ou CentOS é simples.
Pré-requisitos
Instale o QEMU e os pacotes de suporte no sistema Ubuntu 18.04.
sudo apt-get update
sudo apt-get install -y qemu-kvm qemu virt-manager virt-viewer libvirt-bin
Você também pode baixar o QEMU do site oficial. Para baixar e compilar o QEMU 5.0.0:
wget https://download.qemu.org/qemu-5.0.0.tar.xz
tar xvJf qemu-5.0.0.tar.xz
cd qemu-5.0.0
./configure
make
Para baixar e compilar o QEMU a partir do git:
git clone https://git.qemu.org/git/qemu.git
cd qemu
git submodule init
git submodule update --recursive
./configure
make
Configure o bridge networking no sistema. Uma rede em bridge fornece a uma máquina virtual uma interface de rede dedicada, o que permite que máquinas convidadas se conectem à rede externa. Você deve configurá-la antes de criar uma máquina virtual com o QEMU.
sudo apt-get install -y bridge-utils resolvconf
Edite o arquivo interfaces para criar um bridge chamado br1. Você também pode atribuir um endereço IP estático ao bridge.
sudo nano /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#Bridge Name #
auto br1
# Bridge Information #
iface br1 inet static
bridge_ports ens33
bridge_stp off
bridge_fd 9
# Bridge IP #
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-nameservers 8.8.8.8
Baixar a imagem CentOS ARM
Baixe ou importe a imagem ARM. Este guia usa a imagem CentOS ARM. Você pode baixá-la na página do CentOS, ou obtê-la com wget ou curl do servidor FTP do CentOS.
Ou você pode usar wget para baixar a imagem pela linha de comando.
wget http://centos.zero.com.ar/centos-altarch/7.8.2003/isos/armhfp/CentOS-Userland-7-armv7hl-generic-Minimal-2003-sda.raw.xz
Executando o QEMU
O QEMU requer os arquivos de kernel e initramfs para inicializar a imagem. Você pode extrair esses arquivos montando a imagem com o comando kpartx ou mount.
Usando kpartx:
sudo kpartx -av (path_of_your_image)
Este comando cria dispositivos de loop no seu sistema. Monte o dispositivo de loop necessário em /mnt usando o comando mount e copie os arquivos necessários da imagem.
sudo mount /dev/mapper/loop21p2 /mnt/
Quando terminar, desmonte /mnt e exclua os dispositivos de loop.
sudo umount /mnt/
sudo kpartx -dv (path_of_the_image)
Usando o comando mount:
Use o comando parted para obter os setores inicial e final das partições na imagem.
sudo parted (path_of_the_image)
Este comando abre o utilitário parted. Digite unit e pressione Enter, depois insira a opção b. Em seguida, digite print para exibir as informações necessárias.
Use estas informações para montar a partição necessária em /mnt. Este exemplo monta a primeira partição em /mnt.
sudo mount -o loop,offset=4194304 (image_path) /mnt/
Depois de extrair os arquivos necessários da imagem, use o seguinte comando QEMU para executar a VM.
qemu-system-arm \
-M cubieboard -m 2048 -cpu arm1176 -dtb sun4i-a10-cubieboard.dtb \
-kernel vmlinuz-4.19.113-300.el7.armv7hl \
-append "ro root=UUID=64e0ba9f-b645-4ce1-925d-e1a723a580fd rhgb quiet LANG=en_US.UTF-8" \
-initrd initramfs-4.19.113-300.el7.armv7hl.img -nographic \
-drive file=(Image_file_path),format=raw,if=none,id=d1 \
-device ide-hd,drive=d1 -net user,hostfwd=tcp::10022-:22 -net nic
Este comando fornece à VM 2 GB de RAM e disponibiliza as outras informações necessárias para inicializar a imagem, como o kernel e o initrd.
Assim que a imagem inicializar, o prompt de login aparecerá no seu terminal.
Por padrão, a partição do sistema de arquivos raiz é limitada a 2 GB. Você pode aumentar o tamanho da partição com o seguinte comando.
[root@host ~]# /usr/bin/rootfs-expand