Rodando o macOS com Docker, qemu, e KVM

Neste artigo veremos como executar o macOS dentro do Linux usando virtualização com Docker, qemu e KVM. Muito indicado para programadores mobile que precisariam de um Macbook para publicar suas apps.

[ Hits: 1.345 ]

Por: Ruan Klein em 20/07/2020


Introdução



Dica importante se você precisa do macOS para testar a sua aplicação, ou se você precisa criar uma build react native para o iOS mas não possui um Macbook. Ou ainda se você é curioso e nunca usou o sistema operacional da Apple.

Antes de tudo, precisamos instalar o Docker, o qemu, e o kvm na máquina.

Para o Ubuntu e derivados:
Quanto ao qemu e o kvm:

Arch Linux:

sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison ebtables edk2-ovmf

Ubuntu/Debian:

sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager

CentOS/RHEL/Fedora:

sudo yum install libvirt qemu-kvm -y

Habilite os serviços necessários pelo systemd:

sudo systemctl enable libvirtd.service
sudo systemctl enable virtlogd.service

Adicione o seu usuário no grupo docker, libvirt-qemu, e qemu-kvm:

sudo usermod -a -G docker,kvm,libvirt-qemu $USER

Reinicie o sistema.

Com o docker instalado e funcionando, podemos criar um contêiner com o macOS com o seguinte comando:

docker run --name macos -e RAM=4 -p 50922:10022 --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix sickcodes/docker-osx:latest

No parâmetro "-e RAM=4" é especificado a quantidade de RAM para a máquina virtual.

Após o download da imagem e a criação do contêiner através do comando acima, vai abrir uma janela com a tela de boot do macOS.

1. Selecione o macOS Base System.

2. Escolha o Disk Utility.

3. Selecione o maior disco qemu (aproximadamente 200GB) e escolha erase.

4. Feche o Disk Utility e selecione a opção "Reinstall macOS".

Aguarde um longo período até que o SO seja instalado.

No vídeo abaixo demonstro uma aplicação rodando com expo (react native) para iOS usando essa configuração:
Algumas observações:

  • A porta 50922 é utilizada para liberar o acesso SSH para o macOS. Ou seja, se preferir utilizar apenas o ecossistema Unix do macOS através do terminal do Linux, essa opção pode ser útil, visto que usar o macOS com teclado ABNT2 é complicado e sempre tem problema.

    Para acessar com SSH, é necessário habilitar o acesso remoto nas configurações de compartilhamento no macOS antes. Depois, basta usar o comando abaixo:

    ssh [email protected] -p 50922

    Onde "nomecompleto" é o seu username definido na instalação do macOS.
  • Se for utilizar o Xcode e o Simulator (emulador de iPhone), recomendo ter pelo menos 12GB de RAM. O macOS não permite rodar o Simulator com menos de 5GB de RAM.

Para mais detalhes, como alterar a quantidades de core, o tamanho do disco, entre outros, consulte o repositório do projeto:
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Usando Docker para encapsular qualquer aplicação no GNU/Linux

Leitura recomendada

Tumbleweed, o openSUSE Rolling Release

Crie Seu Próprio Gerenciador de Pacotes do Zero - Parte 1

Iniciar no Linux sem medo

Criação e edição de partições

Trabalhando com datas no Linux

  
Comentários
[1] Comentário enviado por fabio em 20/07/2020 - 09:15h

Muito bom! Em plena segunda-feira e já ganhei a semana. Precisava demais disso.

[2] Comentário enviado por leoberbert em 20/07/2020 - 09:30h

Muito maneiro! Favoritei :)

[3] Comentário enviado por ruankl em 20/07/2020 - 10:42h


[1] Comentário enviado por fabio em 20/07/2020 - 09:15h

Muito bom! Em plena segunda-feira e já ganhei a semana. Precisava demais disso.


Opa, ótimo ler isso!

Da para deixar mais "prático" ainda com o sshfs; montar a pasta do macOS virtualizado (como se fosse uma pasta qualquer no host) e abrir o vscode nessa pasta, assim vc desenvolve no linux e ao salvar roda refresh automatico no simulator! Estou fazendo dessa forma para finalizar um projeto em RN para iOS e roda sem problemas!

[4] Comentário enviado por mauricio123 em 20/07/2020 - 11:41h


Nossa, incrivel. Sempre tive curiosidade em testar o macOS.
___________________________________
Conhecimento não se Leva para o Túmulo.

[5] Comentário enviado por bilufe em 22/07/2020 - 10:55h

Na Snap Store tem o aplicativo Sosumi, o qual ele faz tudo sozinho. Ele cria a máquina virtual, baixa os arquivos necessários e põe pra funcionar.
E o melhor: roda em qualquer distribuição Linux que suporta Snaps, não mexe muito no sistema (snaps estão isolados), e é simples de remover.

https://snapcraft.io/sosumi

[6] Comentário enviado por ruankl em 22/07/2020 - 12:48h


[5] Comentário enviado por bilufe em 22/07/2020 - 10:55h

Na Snap Store tem o aplicativo Sosumi, o qual ele faz tudo sozinho. Ele cria a máquina virtual, baixa os arquivos necessários e põe pra funcionar.
E o melhor: roda em qualquer distribuição Linux que suporta Snaps, não mexe muito no sistema (snaps estão isolados), e é simples de remover.

https://snapcraft.io/sosumi


Legal, assisti no canal do Diolinux sobre o Sosumi. Porém o que me intrigou foi o tempo de instalação: 3h para instalar o macOS. Com essa solução em docker, levou foi +- 45 minutos.

Outro ponto, não sei ao certo se consigo acesso SSH pelo Sosumi. Sabe me dizer?

[7] Comentário enviado por mauricio123 em 22/07/2020 - 12:55h


3h? Então é melhor essa solução mesmo.

___________________________________
Conhecimento não se Leva para o Túmulo.

[8] Comentário enviado por fabio em 27/07/2020 - 17:05h

Aproveitando o embalo do artigo, conhece alguma imagem que execute o Windows no docker?

[9] Comentário enviado por ruankl em 27/07/2020 - 21:25h


[8] Comentário enviado por fabio em 27/07/2020 - 17:05h

Aproveitando o embalo do artigo, conhece alguma imagem que execute o Windows no docker?


Eu cheguei a pesquisar depois que escrevi o artigo, mas não achei nada... pelo menos para o meu uso, o VirtualBox + Windows da conta do recado, visto que tem os adicionais para integrar melhor o Windows com o host linux...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts