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 corretamente
          usando uma plataforma LFS 12.4.
        
        
          Informação do Pacote
        
        
          
            - 
              
                Transferência (HTTP): https://download.qemu.org/qemu-10.0.3.tar.xz
              
             
            - 
              
                Transferência (FTP): 
              
             
            - 
              
                Soma de verificação MD5 da transferência:
                4a244f485c9d7ac3d40f958f13eae298
              
             
            - 
              
                Tamanho da transferência: 129 MB
              
             
            - 
              
                Espaço em disco estimado exigido: 2,4 GB (490 MB instalado)
              
             
            - 
              
                Tempo de construção estimado: 1,3 UPC (adicionar 0,8 UPC para
                testes, ambos usando paralelismo=4)
              
             
          
         
        
          Transferências Adicionais
        
        
        
          Dependências do Qemu
        
        
          Exigidas
        
        
          GLib-2.84.4 e Pixman-0.46.4
        
        
          Recomendadas
        
        
          alsa-lib-1.2.14, dtc-1.7.2, libslirp-4.9.1 e SDL2-2.32.8
        
        
          
          
            Nota
          
          
            Se dtc-1.7.2 não estiver instalado, o sistema de
            construção tentará baixar uma cópia do código-fonte do dtc a
            partir da Internet.
          
         
        
          Opcionais
        
        
          pipewire-1.4.7 ou PulseAudio-17.0 (pode ser usado em vez da
          alsa-lib), BlueZ-5.83, cURL-8.15.0,
          Cyrus SASL-2.1.28, Fuse-3.17.4, GnuTLS-3.8.10,
          GTK-3.24.50, keyutils-1.6.3, libaio-0.3.113,
          libusb-1.0.29, libgcrypt-1.11.2, libjpeg-turbo-3.0.1, libseccomp-2.6.0, libssh2-1.11.1, libpng-1.6.50,
          libtasn1-4.20.0, Linux-PAM-1.7.1,
          LZO-2.10, Nettle-3.10.2, Mesa-25.1.8, VTE-0.80.3,
          capstone, ceph, daxctl, JACK, glusterfs, libbpf,
          libcacard,
          libcap-ng,
          libdw,
          libiscsi, libnfs,
          libpmem,
          libssh,
          libu2f-emu,
          lzfse,
          netmap, numactl, rdma-core, SELinux, snappy,
          spice, usbredir e
          VDE
        
        
          Opcionais (Tempo de execução)
        
        
          elogind-255.17
        
        
          Opcional (para construir a documentação)
        
        
          sphinx_rtd_theme-3.0.2
        
        
          
          
            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 Editor(a): https://wiki.linuxfromscratch.org/blfs/wiki/qemu
        
       
      
        
          Instalação do qemu
        
        
          A regra de udev do LFS permite somente que o(a) usuário(a)
          root, os(as) usuários(as)
          proprietários(as) de uma sessão local de login suportada pela
          dependência opcional de tempo de execução elogind-255.17 ou os(as) usuários(as)
          no grupo kvm usem o dispositivo
          KVM. Como o(a) usuário(a) root,
          adicione quaisquer usuários(as) não root que poderiam usar o dispositivo KVM, mesmo
          sem o elogind-255.17 instalado ou remotamente
          (por meio de uma conexão SSH), ao grupo kvm:
        
        usermod -a -G kvm <nome_de_usuário(a)>
        
          Corrija uma incompatibilidade com pip-25.2 e posterior:
        
        patch -Np1 -i ../qemu-10.0.3-python_fixes-1.patch
        
          Instale o qemu executando os
          seguintes comandos:
        
        
          
          
            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             \
             --enable-slirp           \
             --docdir=/usr/share/doc/qemu-10.0.3 &&
unset QEMU_ARCH &&
make
        
          qemu usa ninja como um subprocesso ao
          construir. Para executar os testes, emita: ninja test. Três testes são
          conhecidos por falharem devido a alguma mudança de recuo na
          mensagem de saída do shell com o bash-5.3 ou mais recente.
        
        
          Agora, como o(a) usuário(a) root:
        
        make install
        
          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:
        
        
          
          
            Nota
          
          
            Você precisa adicionar quaisquer usuários(as) que possam usar o
            dispositivo de rede de intercomunicação “bridge” ao grupo
            kvm, mesmo se o elogind-255.17 estiver instalado.
          
         
        chgrp kvm  /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper
        
          
          
            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
         
       
      
        
          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á tomar
          decisões a respeito de CPU, memória, disco, dispositivos USB,
          placa(s) de rede de intercomunicaçã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. Na seção seguinte, nós mostramos
          maneiras básicas de realizar essas etapas. Porém, o qemu é muito
          mais poderoso que isso, e é fortemente aconselhado ler-se a
          documentação do qemu em /usr/share/doc/qemu-10.0.3/qemu-doc.html.
        
        
          
          
            Nota
          
          
            É uma prática padrão nomear o computador executando qemu como
            “anfitrião”
            e a máquina emulada executando sob qemu como “convidada”. Nós
            usaremos essas notações no texto seguinte.
          
         
        
          
          
            Nota
          
          
            As instruções seguintes assumem que o link simbólico opcional,
            qemu, tenha sido criado. Além
            disso, o qemu
            deveria ser executado em um ambiente gráfico. Também é possível
            usar-se 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.
        
        
          Operating System
        
        
          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), e d
          (primeiro CD-ROM). A opção -m é a quantidade de memória a
          usar-se para a máquina virtual. A escolha depende da carga do
          anfitrião. As distribuições modernas deveriam estar confortáveis
          com 4 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-se como um CDROM. Aqui nós
          usamos um disco de resgate do GRUB, que possivelmente seja útil se
          algo der errado em tempo de 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.
        
        
          -drive
          if=pflash,format=raw,readonly=on,file=/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 uma
          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 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 as unidades Virtio habilitadas,
          então faça tua personalização. E, se o núcleo do convidado for
          Linux, 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 uma interface
          Virtio para o núcleo do convidado para acessar a interface de rede
          de intercomunicação, em vez de simular uma placa real de interface
          de rede de intercomunicação. Isso pode melhorar o desempenho de
          Entrada/Saída da rede de intercomunicaçã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
          Virtio.
        
        
          Controlando a Tela Emulada
        
        
          Para configurar a resolução da tela emulada para um servidor Xorg
          executando no sistema Linux convidado, leia-se “Configurações de Ajuste
          Fino de Exibição”.
        
        
          Rede de comunicação
        
        
          A solução acima para rede de intercomunicação permite que o
          convidado acesse a rede local de intercomunicaçã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 estarem
          executando, eles não conseguirão se comunicarem uns com os outros.
          Outros dispositivos de rede de intercomunicaçã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 intercomunicação
          comum. Na seção seguinte, nós descrevemos em mais detalhes como
          configurar o dispositivo “bridge”, que permite que os convidados
          apareçam como se estivessem conectados à rede local de
          intercomunicação. Todos os comandos abaixo deveriam ser executados
          como o(a) usuário(a) root.
        
        
          Configure a ponte com o bridge-utils-1.7.1. Somente a(s)
          interface(s) física(s) deveria(m) ser configurada(s) na
          inicialização. A(s) interface(s) virtual(is) será(ão) adicionada(s)
          conforme necessária(s) quando o qemu for iniciado.
        
        
          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,....