- 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
- A wiki aborda primeiros passos, configurações avançadas e uso
1 comentários
Opiniões no Hacker News
Eu sempre usava quando precisava gerenciar muitos hosts de VM diferentes e VMs locais antigamente
É 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
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 :)
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
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
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...
Além disso, ainda realiza uma verificação adicional de correspondência do hash, algo que a maioria não faz
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?
Espero que o interesse do Hacker News neste ano motive alguém a implementar verificação de assinatura para Linux
0. https://mac.getutm.app/
https://docs.getutm.app/installation/ios/
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 --unattendedAo 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 osSe precisar de uma imagem de disco do Fedora 39, também existe o virt-builder
$ virt-builder fedora-39Depois, dá para importá-la para o libvirt com
virt-install --importO 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 --unattendedERROR 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
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
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
“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
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?
No Linux, recomendo muito Incus/LXD. Rodar uma VM é tão simples quanto
Depois de iniciar, o acesso ao shell é feito assim
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.04e, comdocker export ubuntu, crie um tar a partir de uma imagem Docker qualquerDepois é 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 commachinectl start ubuntuemachinectl shell ubuntuO 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á
Há 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%?
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
O Quickemu parece ser voltado principalmente ao uso em desktop