5 pontos por GN⁺ 2024-01-31 | 1 comentários | Compartilhar no WhatsApp
  • Quickemu é um wrapper para QEMU que, ao escolher o sistema operacional a executar, cuida automaticamente das configurações necessárias para criar máquinas virtuais, permitindo criar e executar rapidamente VMs de Windows, macOS e Linux
  • quickget baixa automaticamente a imagem upstream do SO desejado e cria o arquivo de configuração da VM, enquanto quickemu detecta o hardware e executa a VM com uma configuração adequada ao computador
  • O objetivo inicial era testar rapidamente distribuições Linux; as VMs e suas configurações podem ficar em qualquer local desejado, como um armazenamento USB externo ou o diretório home, e a execução não requer privilégios elevados
  • Atualmente, oferece suporte a quase 1000 edições de sistemas operacionais, incluindo macOS, Windows, a maioria dos BSDs, FreeDOS, Haiku, KolibriOS, OpenIndiana, ReactOS e outros
  • Funciona em hosts Linux e macOS e oferece recursos necessários para uso de VMs, como SPICE, compartilhamento de arquivos, QEMU Guest Agent, VirGL, passthrough USB, encaminhamento de portas, áudio e boot por EFI e Legacy BIOS

O que o Quickemu faz

  • Quickemu é um wrapper em torno do QEMU que cuida automaticamente das configurações necessárias ao criar uma máquina virtual
  • O usuário só precisa escolher o sistema operacional a executar, sem precisar definir diretamente muitas opções de configuração
  • As ferramentas principais são duas
    • quickget: baixa automaticamente o SO upstream desejado e cria o arquivo de configuração da VM
    • quickemu: enumera o hardware do host e executa a máquina virtual com a configuração otimizada para aquele computador

Ponto de partida do projeto e escopo atual

  • O objetivo inicial era permitir testes rápidos de distribuições Linux
  • As VMs e suas configurações podem ser armazenadas em qualquer local desejado, como um armazenamento USB externo ou o diretório home
  • A execução de máquinas virtuais não requer privilégios elevados
  • O suporte atual foi ampliado para além das distribuições Linux, incluindo macOS, Windows, a maioria dos BSDs e sistemas operacionais não Linux
    • Exemplos de suporte incluem FreeDOS, Haiku, KolibriOS, OpenIndiana, ReactOS e outros

Sistemas operacionais e hosts compatíveis

  • Os hosts compatíveis são Linux e macOS
  • Os sistemas operacionais convidados incluem
    • macOS Sequoia, Sonoma, Ventura, Monterey, Big Sur, Catalina, Mojave
    • Windows 10 e 11, incluindo TPM 2.0
    • Windows Server 2022, 2019, 2016
    • Ubuntu e todos os flavours oficiais do Ubuntu
    • A maioria dos BSDs e vários sistemas operacionais não Linux
  • Há suporte a convidados ARM64, permitindo executar VMs aarch64
    • Em hosts ARM, execução nativa
    • Em hosts x86_64, execução por emulação
  • O número de edições de sistemas operacionais compatíveis chega a quase 1000

Recursos de VM

  • Oferece suporte completo a SPICE, incluindo compartilhamento da área de transferência entre host e convidado
  • Há suporte a várias formas de compartilhamento de arquivos, dependendo do sistema operacional convidado
    • VirtIO-webdavd: compartilhamento de arquivos para convidados Linux e Windows
    • VirtIO-9p: compartilhamento de arquivos para convidados Linux e macOS
    • Samba: compartilhamento de arquivos para convidados Linux, macOS e Windows; requer smbd instalado no host
  • Oferece suporte ao QEMU Guest Agent, permitindo acessar o agente em nível de sistema por comandos QMP padrão
  • Em gráficos e dispositivos, oferece suporte a aceleração VirGL, passthrough de dispositivos USB e passthrough de smartcard
  • Também inclui recursos de rede e entrada/saída
    • Encaminhamento automático de porta SSH para o convidado
    • Encaminhamento de portas de rede
    • Áudio full-duplex
    • Suporte a braille
    • Boot EFI com ou sem SecureBoot
    • Boot por Legacy BIOS

Fluxo de início rápido

  • Após instalar o Quickemu, a VM é criada e executada em duas etapas
  • Com quickget, baixe a imagem ISO e crie o arquivo de configuração da VM
quickget nixos unstable minimal
  • Com quickemu, inicie a VM usando o arquivo de configuração criado pelo quickget
quickemu --vm nixos-unstable-minimal.conf
  • Ao executar quickget sem argumentos, é possível ver a lista de todos os sistemas operacionais compatíveis

Documentação e referências

1 comentários

 
GN⁺ 2024-01-31
Opiniões no Hacker News
  • Recomendo https://virt-manager.org/. No meu ambiente funcionou muito melhor, e também oferece suporte a executar o QEMU em um sistema remoto via SSH
    Eu sempre usava quando precisava gerenciar muitos hosts de VM diferentes e VMs locais antigamente
    • virt-manager é um dos softwares mais subestimados que existem. É poderoso e acaba sendo usado com frequência
      É preciso conhecer um pouco a terminologia básica sobre VMs, mas ele lembra muito uma GUI à moda antiga, cheia de recursos e poder
      Se suas necessidades forem simples ou se você tiver menos familiaridade com VMs, o Gnome Boxes usa o mesmo backend e oferece uma GUI limpa. Por ser simples, ele é menos flexível, mas o bom é que, se mais tarde você precisar ajustar configurações que não são expostas no Boxes, pode abrir a VM do Gnome Boxes no virt-manager
    • Não é a mesma coisa, mas o Quickemu também funciona bem por SSH
      Quando executado em um sistema remoto via SSH, ele faz “X forwarding” do console do QEMU para a sessão Wayland local do Fedora
      No começo achei que estivesse rodando em modo headless, então fiquei bem surpreso quando apareceu uma janela :)
    • É surpreendente como um programa que só configura coisas pode ser tão importante e útil
      Isso me faz imaginar como seria se a configuração fosse separada do software que ela configura. Em vez de aprender a maneira como cada programa de UI reinventou a roda, você poderia escolher seu gerenciador de configurações favorito
      O mais próximo que temos hoje são arquivos de configuração em texto. Todo programa que os usa precisa escolher uma linguagem específica e um local de armazenamento
      Uma ideia em que tenho pensado bastante ultimamente é uma camada intermediária de configuração. A UI de configuração visível ao usuário usaria a linguagem/formato que você quisesse, e esses dados serviriam como fonte única da verdade para gerar os arquivos de configuração que o software leria
    • libvirt e virt-manager são apenas interfaces de usuário simplificadas para os softwares reais, QEMU e KVM. Eles resolvem um problema relativamente trivial: analisar arquivos de configuração e passar as opções corretas para o binário do QEMU
      Também há funções úteis de gerenciamento, como iniciar/parar com base em arquivos de configuração e acesso a console serial, mas essas coisas também são muito simples de implementar diretamente com scripts de shell. O tratamento de armazenamento do libvirt é terrivelmente verboso e complexo, e ainda assim nem lida direito com thin LVs ou ZFS
      Se você não quer operar do jeito corporativo padrão e não pretende aprender o software básico, como QEMU ou shell, ou se não precisa de alguma função obscura do libvirt, eu recomendaria usar QEMU diretamente sobre KVM e seus próprios scripts. Você vai aprender mais QEMU do que usando um wrapper Python medíocre e terá mais controle sobre o sistema
      Além disso, a IBM/Red Hat parece ter praticamente abandonado o virt-manager, empurrando-o para a nova interface web, o Copilot
      O Quickemu é mais interessante porque permite olhar rapidamente alguns exemplos e subir uma nova VM sem gastar tempo aprendendo uma UI grande e complexa
    • Gosto da abordagem de passar opções de linha de comando diretamente para o QEMU. Para sistemas operacionais antigos como Windows NT on MIPS ou Ultrix, isso funciona bem
  • Vou repetir o alerta de segurança da última vez que isso apareceu[1]
    Esta ferramenta baixa arquivos arbitrários da internet e compara seus checksums com outro arquivo arbitrário da internet[2]
    Não é a melhor prática de segurança. A forma correta seria commitar no repositório as chaves GPG dos desenvolvedores das distribuições e verificar todos os arquivos com essas chaves
    Isso não quer dizer que eu queira diminuir o esforço deste projeto em descobrir as flags corretas para passar ao QEMU para inicializar vários sistemas operacionais
    [1] https://news.ycombinator.com/item?id=28797129
    [2] https://github.com/quickemu-project/quickemu/blob/0c8e1a5205...
    • Você pode explicar por que isso é um problema de segurança? Verificação por chave GPG é mesmo a melhor forma de garantir autenticidade, mas isso não é muito diferente do que quase todo mundo faz: baixar a ISO do próprio site HTTPS da distribuição
      Além disso, ainda realiza uma verificação adicional de correspondência do hash, algo que a maioria não faz
    • Quanto disso é uma prática ultrapassada? TCP/TLS já não deveria fornecer checksum e assinatura de origem?
      Na época do FTP, checksum e GPG eram indispensáveis. Com HTTP/TCP, as tentativas novamente e o tratamento de checksum ficam por conta do TCP, então a necessidade de GPG aumenta, mas ambos ainda eram necessários por causa de ataques man-in-the-middle
      Mas, com HTTPS, por que isso ainda é importante? HTTPS não substitui as duas verificações e a confirmação de assinatura?
    • Além disso, durante uma transmissão ao vivo, o autor digitou a senha do usuário em um teclado mecânico com o microfone ligado
    • Não parece baixar “arquivos arbitrários da internet”; parece usar apenas as fontes originais
    • Para referência, o macOS agora faz verificação de assinatura. Para Windows, não há assinatura disponível para usar
      Espero que o interesse do Hacker News neste ano motive alguém a implementar verificação de assinatura para Linux
  • No macOS, o UTM[0] faz isso muito bem. Ele também oferece uma pequena galeria de imagens prontas[1]
    0. https://mac.getutm.app/
    1. https://mac.getutm.app/gallery/
  • O libvirt inclui o virt-install, que permite criar rapidamente Windows e várias distribuições Linux e fazer instalações automáticas. Não testei no Mac
    Um exemplo recente com Alma Linux é o seguinte
    $ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattended

Ao voltar depois de tomar um café, a VM do Alma Linux já está instalada e rodando. A lista de sistemas operacionais compatíveis varia conforme a versão do libvirt, e dá para conferir com
$ osinfo-query os

  • Se precisar de uma imagem de disco do Fedora 39, também existe o virt-builder
    $ virt-builder fedora-39
    Depois, dá para importá-la para o libvirt com virt-install --import

  • O virt-install baixa a ISO automaticamente? Ao tentar, aparece uma mensagem assim
    $ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattended
    ERROR Validating install media 'alma9.iso' failed: Must specify storage creation parameters for non-existent path '/home/foo/alma9.iso'.

  • Não está claro qual seria o resultado disso. Fico curioso sobre coisas como: qual seria o hostname, como o disco seria particionado, quais pacotes seriam instalados e para quais fuso horário e layout de teclado ele seria configurado

  • Para fazer isso, foi necessário instalar o libosinfo-bin

  • A conveniência desse tipo de ferramenta é excelente, mas, somando os dois scripts principais, dá algo em torno de 5000 linhas de Bash
    Eu gostaria de revisar antes de executar, mas não quero ler 5000 linhas de Bash

    • Em geral concordo que scripts de shell normalmente não são agradáveis de ler, mas este código na verdade não é ruim
      Não sei se isso convence, mas li o script Bash antes de executá-lo e ele estava bem estruturado. As funcionalidades estão bem separadas em funções, os nomes de variáveis são razoáveis, há comentários úteis, não há fluxos de controle estranhos nem chamadas indiretas, e o uso de comandos obscuros é mínimo. Está entre os scripts de shell mais legíveis que já vi
      Pensando no que esse script realmente faz, também faz sentido que o código seja relativamente direto. O essencial é executar um comando que inicia o QEMU. O resto do código verifica o sistema local para decidir quais argumentos passar para esse comando ou baixa alguns arquivos quando necessário
    • Há motivo para tratá-lo de forma diferente de outro software só por ser um script de shell? Você lê o código-fonte do kernel antes de executar um sistema operacional? E o navegador web?
      Não estou dizendo que devemos executar tudo às cegas, mas os critérios que usamos para escolher o software que vamos rodar normalmente não dependem de estarmos familiarizados com o código-fonte
    • Se você estiver realmente preocupado e tiver tempo, talvez seja criticado por isso, mas também dá para conversar sobre o código com o ChatGPT. O prompt poderia ser algo assim
      “You are a linux guru, and you have extensive experience with bash and all forms of unix/linux. I am going to be pasting a large amount of code in a little bit at a time. Every time I paste code and send it to you, you are going to add it to the previous code and ask me if I am done. When I am done we are going to talk about the code, and you are going to help me break it down and understand what is going on. If you understand you will ask me to start sending code, otherwise ask me any questions before you ask for the code.”
      Já usei esse método com códigos mais curtos, mas ainda abaixo de 1000 linhas e acima do limite do prompt, e funcionou bem. Reconheço que o ChatGPT anda mais preguiçoso ultimamente, e às vezes é preciso explicitar para ele não ser preguiçoso e entregar toda a saída solicitada, mas no geral ele explica código muito bem
    • Vejo isso como uma questão de construção de confiança em software como um todo. É sobre como a confiança é estabelecida e quais expectativas e responsabilidades existem para desenvolvedores e usuários
      A frase “com muitos olhos, todos os bugs se tornam rasos” parece, para alguns usuários, um clichê que faz parar de pensar. Como está público e pode ser revisado, presume-se que esteja tudo bem, imaginando uma multidão de auditores de código verificando tudo; na prática, porém, eu esperaria mais ação maliciosa do que boa-fé
      No mundo Windows, utilitários de ajuste existem há décadas. Eles atraem pessoas que acreditam que desenvolvedores de “grandes empresas” não têm motivação para extrair o máximo desempenho do sistema e que deixaram, por trás de configurações rápidas ou ajustes no registro, opções fáceis que seriam úteis para todos. Lembro do TronScript, que aparece de vez em quando; olhando o histórico e o nível de participação, acho que ele provavelmente passaria no teste do cheiro, o que é bom, mas ainda assim esconde detalhes em nome da automação e leva o usuário a esperar que ele tome boas decisões em seu lugar. É possível mergulhar, investigar e aprender o que acontece e por quê, mas para muita gente ele é praticamente indistinguível de um binário
      O lado positivo é que a maioria dessas ferramentas tem um público limitado, então não vale muito a pena comprometê-las. Se uma marca específica passar a ser usada o suficiente, pode acontecer algo como o CCleaner da Piriform, que recebeu um backdoor em 2017
  • Parece interessante, mas alguém poderia me dizer quais vantagens isso teria para quem usa Ubuntu e só roda Windows 11 ocasionalmente no VirtualBox?

    • É difícil responder, porque depende muito do que você faz com a VM. Isto parece um wrapper para QEMU e uma ferramenta que tenta escolher configurações razoáveis para facilitar a criação de novas VMs
    • Há especialmente a questão da aceleração por GPU. Rodar videoconferência no Windows dentro do vbox é quase impossível, e até aplicativos GUI um pouco mais complexos ficam com bastante atraso
    • Parece mais uma alternativa ao Gnome Boxes. É uma ferramenta que baixa imagens recentes, fornece configurações padrão para a distribuição/OS em questão e ainda oferece suporte adicional a sistemas mais trabalhosos, como Windows e macOS
    • Se você realmente for rodar macOS, é uma grande vantagem em relação a instalá-lo no VirtualBox ou no VMware. Neles, é preciso aplicar vários patches, então é muito difícil fazer funcionar
  • No Linux, recomendo muito Incus/LXD. Rodar uma VM é tão simples quanto

    incus launch images:ubuntu/22.04 --vm my-ubuntu-vm  
    

    Depois de iniciar, o acesso ao shell é feito assim

    incus exec my-ubuntu-vm /bin/bash  
    

    Incus/LXD também oferece suporte a contêineres de sistema

  • Algo de que gosto, mas que quase nunca é mencionado, é o systemd-nspawn. Execute docker create --name ubuntu ubuntu:22.04 e, com docker export ubuntu, crie um tar a partir de uma imagem Docker qualquer
    Depois é só extrair em /var/lib/machines/ubuntu. É preciso escolher uma imagem que inclua systemd ou instalar o systemd dentro do contêiner. Por fim, entre com machinectl start ubuntu e machinectl shell ubuntu
    O systemd-nspawn é muito simples e leve, e emula muito bem uma máquina Linux real. Se você pegar uma partição raiz qualquer baseada em systemd e inicializá-la com systemd-nspawn, ela funciona do jeito que está

  • números de variação de desempenho em comparação com simplesmente executar uma VM? Normalmente rodo um guest Linux dentro de um host Linux e muitas vezes fico decepcionado com o desempenho do guest
    Nunca investiguei como ajustar a experiência com VMs, então fico curioso para saber o quanto estou deixando de aproveitar. É 5% mais rápido? 100%?

    • Como você está executando? Rodando KVM/QEMU com as configurações adequadas, o desempenho fica quase bare-metal
  • Ele roda nativamente em Arm, ou seja, no Apple Silicon? E nas versões mais recentes do macOS? Há aceleração gráfica? Como a rede é tratada?

  • Fico curioso sobre qual é a diferença em relação ao Proxmox e se dá para reproduzir manualmente essas otimizações no meu ambiente Proxmox

    • Isto é muito diferente do Proxmox. O Proxmox foi feito para laboratórios e datacenters que precisam hospedar muitos servidores como VMs
      O Quickemu parece ser voltado principalmente ao uso em desktop