qemu-7.2.0

Introdução ao qemu

qemu é uma solução completa de virtualização para Linux em hardware x86 contendo extensões de virtualização (Intel VT ou AMD-V).

Esse pacote é conhecido por construir e funcionar adequadamente usando uma plataforma LFS 11.3.

Informação do Pacote

  • Transferência (HTTP): https://download.qemu.org/qemu-7.2.0.tar.xz

  • Transferência (FTP):

  • Soma de verificação MD5: 7630d6a9eba7ab2bcb9979d6d24c2697

  • Tamanho da transferência: 117 MB

  • Espaço em disco estimado exigido: 2,1 GB

  • Tempo de construção estimado: 1,3 UPC (adicione 2,0 UPC para os testes, ambos usando paralelismo=4)

Dependências do Qemu

Exigida

GLib-2.74.5 e um ambiente gráfico

Recomendadas

Opcionais

Dependendo do sistema de som, vários pacotes em ALSA-1.2.7, Python-3.11.2, PulseAudio-16.1, BlueZ-5.66, cURL-7.88.1, Cyrus SASL-2.1.28, GnuTLS-3.8.0, GTK+-2.24.33, GTK+-3.24.36, libusb-1.0.26, libgcrypt-1.10.1, libssh2-1.10.0, LZO-2.10, Nettle-3.8.1, Mesa-22.3.5, SDL-1.2.15, VTE-0.70.3 ou Vte-0.28.2 e libcacard

Opcional (para construir a documentação)

sphinx_rtd_theme-1.2.0

[Nota]

Nota

Esta lista de dependências opcionais não está completa. Veja-se a saída gerada de ./configure --help para uma lista mais completa.

Observações de Usuário(a): https://wiki.linuxfromscratch.org/blfs/wiki/qemu

Prerrequisitos KVM

Antes de construir o qemu, verifique para ver se o seu processador suporta a tecnologia de virtualização ("VT"):

grep -E '^flags.*(vmx|svm)' /proc/cpuinfo

Se obtiver alguma saída gerada, [então] você tem a tecnologia "VT" ("vmx" para processadores Intel e "svm" para processadores AMD). Você, então, precisa entrar no BIOS do seu sistema e garantir que ela esteja habilitada. Depois de habilitar, reinicialize de volta para sua instância LFS.

Configuração do Núcleo

Habilite as seguintes opções na configuração do núcleo e recompile o núcleo, se necessário:

[*] Virtualization:  --->                                             [CONFIG_VIRTUALIZATION]
  <*/M>   Kernel-based Virtual Machine (KVM) support [CONFIG_KVM]
  <*/M>     KVM for Intel (and compatible) processors support         [CONFIG_KVM_INTEL]
  <*/M>     KVM for AMD processors support                            [CONFIG_KVM_AMD]

As configurações Intel ou AMD não são ambas exigidas, mas a que corresponder ao processador do seu sistema é exigida.

Para usar o dispositivo de rede de comunicação bridge, conforme explicado abaixo, verifique se bridge-utils-1.7.1 está instalado e se as seguintes opções na configuração do núcleo estão habilitadas:

[*] Networking support  --->                         [CONFIG_NET]
  Networking options  --->
    <*/M> 802.1d Ethernet Bridging                   [CONFIG_BRIDGE]
Device Drivers  --->
  [*] Network device support  --->                   [CONFIG_NETDEVICES]
    <*/M>    Universal TUN/TAP device driver support [CONFIG_TUN]

Instalação do qemu

Como o(a) usuário(a) root, adicione quaisquer usuários(as) que possam usar o dispositivo KVM a esse grupo:

usermod -a -G kvm <nome_de_usuário(a)>

Instale qemu executando os seguintes comandos:

[Nota]

Nota

O qemu é capaz de executar muitos alvos. O processo de construção também é capaz de construir vários alvos de uma vez em uma lista delimitada por vírgulas atribuída a --target-list. Execute ./configure --help para obter uma lista completa dos alvos disponíveis.

if [ $(uname -m) = i686 ]; then
   QEMU_ARCH=i386-softmmu
else
   QEMU_ARCH=x86_64-softmmu
fi


mkdir -vp build &&
cd        build &&

../configure --prefix=/usr               \
             --sysconfdir=/etc           \
             --localstatedir=/var        \
             --target-list=$QEMU_ARCH    \
             --audio-drv-list=alsa       \
             --disable-pa                \
             --docdir=/usr/share/doc/qemu-7.2.0 &&

unset QEMU_ARCH &&

make

qemu usa ninja como um subprocesso ao construir. Para executar os testes, emita: ninja test.

Agora, como o(a) usuário(a) root:

make install

Você também precisará adicionar uma regra do Udev para que o dispositivo KVM obtenha as permissões corretas. Como o(a) usuário(a) root, emita:

cat > /lib/udev/rules.d/65-kvm.rules << "EOF"
KERNEL=="kvm", GROUP="kvm", MODE="0660"
EOF

Mude as permissões e a propriedade de um script auxiliar, que é necessário ao usar o dispositivo de rede de comunicação bridge (veja-se abaixo). Novamente, como o(a) usuário(a) root, emita:

chgrp kvm  /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper
[Nota]

Nota

Por conveniência, você possivelmente deseje criar um link simbólico para executar o aplicativo instalado. Por exemplo (como o(a) usuário(a) root):

ln -sv qemu-system-`uname -m` /usr/bin/qemu

Explicações do Comando

--audio-drv-list=alsa --disable-pa: Essa chave configura o controlador de áudio para o ALSA. Veja-se abaixo para habilitar outros controladores de áudio.

--audio-drv-list=pa --disable-alsa: Essa chave configura o controlador de áudio para o pulseaudio. Para outros controladores, vejam-se as opções da --audio-drv-list na saída gerada de ./configure --help. O controlador padrão de áudio é o OSS. Para habilitar o suporte para ambos, ALSA e pulseaudio, use --audio-drv-list=alsa,pa.

Usando o Qemu

Como usar o qemu significa usar um computador virtual, as etapas para configurar a máquina virtual estão em estreita analogia com aquelas para configurar um computador real. Você precisará decidir a respeito de CPU, memória, disco, dispositivos USB, placa(s) de rede de comunicação, tamanho da tela, etc. Assim que o hardware estiver decidido, você terá, por exemplo, de escolher como conectar a máquina à internet e(ou) instalar um sistema operacional. A seguir, mostramos maneiras básicas de realizar essas etapas. Porém, o qemu é muito mais que isso, e é fortemente aconselhado ler-se a documentação do qemu em /usr/share/doc/qemu-7.2.0/qemu-doc.html.

[Nota]

Nota

É uma prática padrão nomear o computador executando qemu como anfitrião e a máquina emulada executando sob qemu como convidada. Usaremos essas notações a seguir.

[Nota]

Nota

As instruções a seguir assumem que o link simbólico opcional, qemu, tenha sido criado. Além disso, o qemu deveria ser executado em um ambiente gráfico. Mas é possível usar o qemu sem uma parte superior ou via SSH. Veja-se a documentação para as várias possibilidades.

Disco

Um disco virtual pode ser configurado da seguinte maneira:

VDISK_SIZE=50G
VDISK_FILENAME=vdisk.img
qemu-img create -f qcow2 $VDISK_FILENAME $VDISK_SIZE

O tamanho do disco virtual e o nome do arquivo deveriam ser ajustados conforme desejado. O tamanho atual do arquivo estará menor que o especificado, mas será expandido conforme necessário, de forma que é seguro colocar um valor alto.

Sistema Operacional

Para instalar um sistema operacional, baixe uma imagem ISO a partir da sua distribuição preferida Linux. Para os propósitos deste exemplo, usaremos Fedora-16-x86_64-Live-LXDE.iso no diretório atual. Execute o seguinte:

qemu -enable-kvm                           \
     -drive file=$VDISK_FILENAME           \
     -cdrom Fedora-16-x86_64-Live-LXDE.iso \
     -boot d                               \
     -m 1G

Siga os procedimentos normais de instalação para a distribuição escolhida. A opção -boot especifica a ordem de inicialização das unidades como uma sequência de caracteres de letras de unidades. As letras de unidade válidas são: a, b (disquete 1 e 2), c (primeiro disco rígido), d (primeiro CD-ROM). A opção -m é a quantidade de memória a usar para a máquina virtual. A escolha depende da carga do anfitrião. As distribuições modernas deveriam estar confortáveis com 1 GB. A opção -enable-kvm permite a aceleração de hardware. Sem essa chave, a emulação é muito mais lenta.

Definindo o hardware virtual

O hardware da máquina virtual é definido pela linha de comando do qemu. Um exemplo de comando é dado abaixo:

qemu -enable-kvm                     \
     -smp 4                          \
     -cpu host                       \
     -m 1G                           \
     -drive file=$VDISK_FILENAME     \
     -cdrom grub-img.iso             \
     -boot order=c,once=d,menu=on    \
     -net nic,netdev=net0            \
     -netdev user,id=net0            \
     -device ac97                    \
     -vga std                        \
     -serial mon:stdio               \
     -name "fedora-16"

Significado das opções da linha de comando

-enable-kvm: habilita o suporte completo à virtualização KVM. Em alguns hardwares, possivelmente seja necessário adicionar a opção não documentada -machine smm=off para a finalidade de habilitar o KVM.

-smp <N>: habilita o multiprocessamento simétrico com <N> CPUs.

-cpu <model>: simula a CPU <model>. A lista dos modelos suportados pode ser obtida com -cpu help.

-drive file=<nome_do_arquivo>: define um disco virtual cuja imagem está armazenada em <nome_de_arquivo>.

-cdrom grub-img.iso: define um arquivo em formato ISO para usar como um CDROM. Aqui usamos um disco de resgate do GRUB, que pode ser útil quando algo der errado no momento da inicialização.

-boot order=c,once=d,menu=on: define a ordem da inicialização para o BIOS virtual.

-net nic,netdev=<netid>: define uma placa de rede de comunicação conectada ao dispositivo de rede de comunicação com id <netid>.

-netdev user,id=<netid>: define o dispositivo do(a) usuário(a) da rede de comunicação. Essa é uma rede de comunicação local virtual com endereços 10.0.2.0/24, onde o anfitrião tem o endereço 10.0.2.2 e atua como um gateway para a Internet; e com um servidor de nomes no endereço 10.0.2.3 e um servidor SMB no endereço 10.0.2.4 . Um servidor DHCP integrado consegue alocar endereços entre 10.0.2.15 e 10.0.2.31.

-soundhw <modelo>: define o modelo da placa de som. A lista pode ser obtida com -soundhw help.

-vga <tipo>: define o tipo de placa VGA a emular. Para -vga std, se você estiver construindo um núcleo Linux para o convidado, é recomendado habilitar CONFIG_DRM_BOCHS (como parte do núcleo ou um módulo do núcleo) para controlar todos os recursos da placa VGA emulada e CONFIG_FB para exibir o console do Linux nela. Os outros valores <tipo> não estão testados pelos(as) editores(as) e possivelmente exijam dependências adicionais.

-serial mon:stdio: envia a porta serial do convidado (/dev/ttyS0 em convidados Linux), multiplexada com o monitor do qemu, para a entrada e saída padrão do processo do qemu.

-name <nome>: configura o nome do convidado. Esse nome é exibido na legenda da janela do convidado. Possivelmente seja útil se você executar vários convidados ao mesmo tempo.

-pflash /usr/share/qemu/edk2-x86_64-code.fd: Carrega um firmware EDK2 UEFI pré-construído, em vez do BIOS padrão do PC. Use essa opção se você quiser inicializar o sistema operacional convidado com UEFI.

-drive file=<nome_do_arquivo>,if=virtio: Fornece interface Virtio para o núcleo do convidado para acessar a imagem do disco, em vez de simular um hardware real de disco. Isso pode melhorar o desempenho de Entrada/Saída do disco, mas exige um controlador Virtio no núcleo do convidado. Use-o em vez de um -drive simples se o núcleo do convidado suportar o Virtio. Para construir um núcleo Linux com suporte Virtio para o convidado, use make defconfig && make kvm_guest.config para criar uma configuração inicial do núcleo com os controladores Virtio habilitados, então faça sua personalização. E, se o núcleo do convidado for Linux, [então] os discos virtuais usando a interface Virtio serão nomeados vdx no devtmpfs, em vez de sdx.

-net nic,netdev=net0,model=virtio-net-pci: Fornece interface Virtio para o núcleo do convidado para acessar a interface de rede de comunicação, em vez de simular uma placa real de interface de rede de comunicação. Isso pode melhorar o desempenho de Entrada/Saída da rede de comunicação, mas exige um controlador Virtio no núcleo do convidado. Use-o em vez de um -net simples se o núcleo do convidado suportar o Virtio.

Controlando a Tela Emulada

Possivelmente aconteça que a janela de convidado exibida pelo qemu não corresponda à capacidade total da placa emulada VGA. Por exemplo, a placa vmware é compatível com 1600x900, mas somente 1024x768 é exibido por padrão. Uma configuração adequada do Xorg no convidado permite usar o tamanho completo (observe que o controlador de vídeo do Xorg a ser usado é o Controlador VMware do Xorg-13.4.0):

cat > /usr/share/X11/xorg.conf.d/20-vmware.conf << "EOF"
Section         "Monitor"
  Identifier    "Monitor0"
  # cvt 1600 900
  # 1600x900 59.95 Hz (CVT 1.44M9) hsync: 55.99 kHz; pclk: 118.25 MHz
  Modeline      "1600x900"  118.25  1600 1696 1856 2112  900 903 908 934 -hsync +vsync
  Option        "PreferredMode" "1600x900"
  HorizSync     1-200
  VertRefresh   1-200
EndSection

Section         "Device"
  Identifier    "Adaptador VMware SVGA II"
  Option        "Monitor" "default"
  Driver        "vmware"
EndSection

Section         "Screen"
  Identifier    "Tela Padrão"
  Device        "Adaptador VMware SVGA II"
  Monitor       "Monitor0"

  SubSection    "Display"
    Depth       24
    Modes       "1600x900" "1440x900" "1366x768" "1280x720" "800x480"
  EndSubSection

EndSection
EOF

Novos tamanhos estarão disponíveis além dos nativos. Você precisa reiniciar o X para a finalidade de ter os novos tamanhos disponíveis.

Rede de comunicação

A solução acima para rede de comunicação permite que o convidado acesse a rede local de comunicação por meio do anfitrião (e possivelmente acesse a Internet por meio de roteadores locais), mas o inverso não é verdadeiro. Nem mesmo o anfitrião consegue acessar o convidado, a menos que o encaminhamento de porta esteja habilitado. E, no caso de vários convidados estiverem executando, eles não conseguirão se comunicarem uns com os outros. Outros dispositivos de rede de comunicação podem ser usados para esse propósito. Por exemplo, existe o dispositivo socket, que permite que vários convidados compartilhem uma rede virtual de comunicação comum. A seguir, descrevemos em mais detalhes como configurar o dispositivo bridge, que permite que os convidados apareçam como se estivessem conectados à rede local de comunicação. Todos os comandos abaixo deveriam ser executados como o(a) usuário(a) root.

Permite que o anfitrião encaminhe pacotes IP:

sysctl -w net.ipv4.ip_forward=1

Para tornar isso permanente, adicione o comando a /etc/sysctl.d/60-net-forward.conf:

cat >> /etc/sysctl.d/60-net-forward.conf << EOF
net.ipv4.ip_forward=1
EOF

Apronte um arquivo exigido de configuração:

install -vdm 755 /etc/qemu &&
echo allow br0 > /etc/qemu/bridge.conf

Na linha de comando do qemu acima, substitua a chave -netdev user,... por -netdev bridge,....

Conteúdo

Aplicativos Instalados: elf2dmp, qemu (link simbólico), qemu-edid, qemu-ga, qemu-img, qemu-io, qemu-keymap, qemu-nbd, qemu-pr-helper, qemu-storage-daemon e qemu-system-<arch>
Biblioteca Instalada: Nenhuma
Diretórios Instalados: /usr/share/qemu e /usr/share/doc/qemu-7.2.0 (opcional)

Descrições Curtas

elf2dmp

Converte arquivos do formato elf para dmp

qemu-edid

é uma ferramenta de teste para o gerador EDID do qemu

qemu-ga

implementa suporte para comandos e eventos QMP (QEMU Monitor Protocol) que terminam e se originam, respectivamente, dentro do convidado usando um agente construído como parte do QEMU

qemu-img

fornece comandos para gerenciar imagens de disco do QEMU

qemu-io

é um aplicativo de diagnóstico e de manipulação para mídia (virtual) de memória. Ainda está em um estágio inicial de desenvolvimento

qemu-keymap

gera mapas de teclado reverso do qemu a partir de mapas de teclado do xkb, que podem ser usados com a chave de linha de comando "-k" do qemu

qemu-nbd

exporta imagens de disco do Qemu usando o protocolo QEMU Disk Network Block Device (NBD)

qemu-pr-helper

Implementa o auxiliar de reserva persistente para o QEMU

qemu-storage-daemon

permite modificar imagens de disco usando o QEMU Monitor Protocol (QMP) sem executar uma "VM"

qemu-system-x86_64

é o emulador PC System do QEMU