Pular para o conteúdo

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.
Perfil removido removido
Hits: 11.694 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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:
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
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:
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução

Revista Viva o Linux

PuTTY - Release 0.66 - Parte IV

Alguém, salve os multiterminais do Proinfo. Por favor!

Lapidando a configuração do mplayer

Introdução a CGI com a RFC 3875

Permissões do Linux

CentOS 5.8 - MySQL Cluster 7.1 + HAProxy

Solução para Ubuntu sem som

OpenSSH - Debian Lenny - CentOS 5.5 - Slackware 13.1

Uma geral acerca do WindowMaker

#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.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento
#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

Entre na sua conta para comentar.