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: 10.294 ]

Por: Perfil removido 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 nomecompleto@localhost -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

Criando aplicação para detectar informações do sistema em Kylix

Como customizar uma imagem ISO do Ubuntu

Instalação básica do FreeBSD 6.1 (passo a passo)

Formatando fontes no openoffice

Apache 2.4 - Módulos de Multiprocessamento - MPM

Leitura recomendada

Docker - Da virtualização a aplicações distribuídas

O Linux é difícil?

Interfaces Gráficas no Linux

Um tour pelo skin do Viva o Linux para aMSN

Distribuições GNU/Linux em computadores limitados ou antigos

  
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 removido 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 maurixnovatrento 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 removido 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 removido 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 maurixnovatrento 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 removido 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...

[10] Comentário enviado por retro em 14/09/2020 - 13:42h

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
bash: docker: comando não encontrado
eu reinstalei o docker e mesmo assim não funciona, dá exatamente o mesmo erro, já até mesmo reinstalei todos os outros pacotes e nada funciona

[11] Comentário enviado por removido em 14/09/2020 - 13:59h


[10] Comentário enviado por RetroGamerCX em 14/09/2020 - 13:42h

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
bash: docker: comando não encontrado
eu reinstalei o docker e mesmo assim não funciona, dá exatamente o mesmo erro, já até mesmo reinstalei todos os outros pacotes e nada funciona


Executou como usuário normal?

Verifique se o seu user está no grupo docker (comando: groups). Caso não esteja, adicione:
sudo gpasswd -a $USER docker

Se mesmo assim não rolar, siga as instruções de como instalar o docker na máquina (na página vc pode escolher outras distribuições):
https://docs.docker.com/engine/install/ubuntu/

[12] Comentário enviado por retro em 14/09/2020 - 15:20h


[11] Comentário enviado por ruankl em 14/09/2020 - 13:59h


[10] Comentário enviado por RetroGamerCX em 14/09/2020 - 13:42h

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
bash: docker: comando não encontrado
eu reinstalei o docker e mesmo assim não funciona, dá exatamente o mesmo erro, já até mesmo reinstalei todos os outros pacotes e nada funciona


Executou como usuário normal?

Verifique se o seu user está no grupo docker (comando: groups). Caso não esteja, adicione:
sudo gpasswd -a $USER docker

Se mesmo assim não rolar, siga as instruções de como instalar o docker na máquina (na página vc pode escolher outras distribuições):
https://docs.docker.com/engine/install/ubuntu/


mesmo assim não funcionou, acho que é porque eu estou usando a versão sid do debian, aí aparece o erro:
e: the repository 'http://download.docker.com/linux/debian bullseye release' does not have a release file

[13] Comentário enviado por removido em 14/09/2020 - 15:49h

mesmo assim não funcionou, acho que é porque eu estou usando a versão sid do debian, aí aparece o erro:
e: the repository 'http://download.docker.com/linux/debian bullseye release' does not have a release file


Nesse caso, tenta usar o do buster mesmo:
echo 'deb [arch=amd64] https://download.docker.com/linux/debian buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose

[14] Comentário enviado por retro em 14/09/2020 - 17:10h

eu quase consegui. o mouse é capturado, mas ele não funciona, ele não se mexe

[15] Comentário enviado por retro em 14/09/2020 - 18:09h


[14] Comentário enviado por RetroGamerCX em 14/09/2020 - 17:10h

eu quase consegui. o mouse é capturado, mas ele não funciona, ele não se mexe


agora quando a barra de progresso chega na metade, o sistema crasha

[16] Comentário enviado por retro em 14/09/2020 - 18:10h

não parece ser falta de ram, eu tenho 16gb de ram e a máquina está com 4gb de ram

[17] Comentário enviado por retro em 14/09/2020 - 19:03h

finalmente consegui, eu tive que colocar uns 10gb de ram para poder iniciar o sistema, ele começou a dar umas engasgadas porque a janela estava em 4k, e minha gpu não lida muito bem com a resolução 4k

[18] Comentário enviado por maurixnovatrento em 14/09/2020 - 20:35h


Aqui eu nem arrisquei agora, com esse driver sis ele nem vai rodar o menu de inicialização.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[19] Comentário enviado por removido em 14/09/2020 - 20:44h


[17] Comentário enviado por RetroGamerCX em 14/09/2020 - 19:03h

finalmente consegui, eu tive que colocar uns 10gb de ram para poder iniciar o sistema, ele começou a dar umas engasgadas porque a janela estava em 4k, e minha gpu não lida muito bem com a resolução 4k


Também tenho 16gb de ram, reservei 6gb para o contêiner e foi de boa. Em algumas ocasiões, pode rolar congelamento durante a instalação... ainda não sei o motivo, mas me parece ser o driver de vídeo genérico do qemu.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts