3 pontos por GN⁺ 2024-08-01 | 1 comentários | Compartilhar no WhatsApp

Docker-OSX

Introdução ao Docker-OSX

  • Docker-OSX é um projeto que permite executar macOS em um contêiner Docker.
  • Oferece vários recursos, como encaminhamento X11, pesquisa de segurança do iMessage e funcionamento de USB do iPhone.
  • É possível realizar pesquisas de segurança do macOS em Linux e Windows.

Comunidade e suporte

  • O Docker-OSX mantém servidores no Discord e no Telegram.
  • Há uma comunidade ativa onde é possível compartilhar perguntas e ideias.
  • Contatos pessoais podem ser feitos pelo LinkedIn ou pelo site Sick.Codes.

Autor e contribuidores

  • Este projeto é mantido por Sick.Codes.
  • A lista de contribuidores adicionais pode ser consultada no GitHub.
  • O projeto agradece ao OSX-KVM e ao KVM-OpenCore.

Guia de início rápido

  • Há um tutorial em vídeo de instalação disponível.
  • Usuários de Windows devem conferir as notas adicionais.
  • Suporta várias versões do macOS, incluindo Catalina, Big Sur, Monterey, Ventura e Sonoma.

Catalina

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  sickcodes/docker-osx:latest

Big Sur

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  sickcodes/docker-osx:big-sur

Monterey

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  -e GENERATE_UNIQUE=true \
  -e MASTER_PLIST_URL='https://raw.githubusercontent.com/sickcodes/osx-serial-generator/…' \
  sickcodes/docker-osx:monterey

Ventura

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  -e GENERATE_UNIQUE=true \
  -e MASTER_PLIST_URL='https://raw.githubusercontent.com/sickcodes/osx-serial-generator/…' \
  sickcodes/docker-osx:ventura

Sonoma

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  -e GENERATE_UNIQUE=true \
  -e CPU='Haswell-noTSX' \
  -e CPUID_FLAGS='kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on' \
  -e MASTER_PLIST_URL='https://raw.githubusercontent.com/sickcodes/osx-serial-generator/…' \
  sickcodes/docker-osx:sonoma

Catalina pré-instalado

docker pull sickcodes/docker-osx:auto
docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  -e GENERATE_UNIQUE=true \
  sickcodes/docker-osx:auto

Sistemas antigos

High Sierra

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  sickcodes/docker-osx:high-sierra

Mojave

docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  sickcodes/docker-osx:mojave

Download manual e uso da imagem

  • Se a CDN do Docker estiver lenta, é possível baixar e usar a imagem manualmente.
wget https://images2.sick.codes/mac_hdd_ng_auto.img
docker run -it \
  --device /dev/kvm \
  -p 50922:10022 \
  -v "${PWD}/mac_hdd_ng_auto.img:/image" \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e "DISPLAY=${DISPLAY:-:0.0}" \
  -e GENERATE_UNIQUE=true \
  -e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/… \
  sickcodes/docker-osx:naked

Pass-through de USB do iPhone

  • São oferecidos vários métodos para pass-through de USB do iPhone.
  • Em PCs desktop, é possível seguir as instruções de @Silfalion.
  • Em notebooks, é possível usar o usbfluxd para um pass-through no estilo de rede.

Otimização de desempenho

  • É possível melhorar o desempenho usando o osx-optimizer.
  • Há várias opções de otimização, como pular a tela de login GUI e desativar a indexação do Spotlight.

Aumento de espaço em disco

  • É possível mover /var/lib/docker para uma unidade externa para liberar espaço em disco.
  • Um tutorial detalhado está disponível no site Sick.Codes.

Detalhes técnicos

  • Suporta várias versões do macOS: High Sierra, Mojave, Catalina, Big Sur, Monterey, Ventura e Sonoma.
  • Suporte a iPhone OSX KVM, compartilhamento de pastas, pass-through de USB, SSH e VNC.
  • Execução baseada em encaminhamento X11 e QEMU + KVM.

Requisitos

  • É necessário no mínimo 20 GB de espaço em disco.
  • É necessário ativar a virtualização nas configurações da BIOS.
  • É necessário um host KVM x86_64.

TODO

  • Documentação para pesquisa de segurança.
  • Suporte a aceleração por GPU.
  • Suporte a virt-manager.

Imagem Docker

  • É possível baixar a imagem Docker-OSX no Docker Hub.

Suporte a Kubernetes

  • O Docker-OSX oferece suporte a Kubernetes.
  • O Helm Chart e a documentação do Kubernetes podem ser consultados no diretório helm.

Suporte

  • Perguntas pequenas ou problemas podem ser enviados pelas issues do GitHub.
  • Serviços de suporte profissional também são oferecidos.

Licença e contribuições

  • O Docker-OSX segue a licença GPL v3+.
  • Contribuições são bem-vindas, e a lista de contribuidores pode ser consultada no GitHub.

Projetos semelhantes

  • Dock Droid: executa Android em um contêiner Docker.
  • Docker-eyeOS: executa iOS 12 em um contêiner Docker.
  • Bluebubbles.app: executa um relay de iMessage no Docker.

Isenção de responsabilidade

  • Se você tem interesse em pesquisa de segurança da Apple, este projeto pode ser útil.
  • Questões legais relacionadas a Hackintosh, OSX-KVM e Docker-OSX são de responsabilidade de cada um.

Resumo do GN⁺

  • Docker-OSX é uma ferramenta útil que permite executar macOS em um contêiner Docker.
  • Suporta várias versões do macOS e é útil para pesquisa de segurança e desenvolvimento.
  • Tem suporte ativo da comunidade e oferece várias opções de instalação e otimização.
  • Projetos com funcionalidades semelhantes incluem Dock Droid e Docker-eyeOS.

1 comentários

 
GN⁺ 2024-08-01
Comentários do Hacker News
  • Para aceleração por GPU, é necessário usar uma dGPU compatível (AMD RX 6xxx ou superior) via PCI passthrough

    • A iGPU da Intel funciona até Comet Lake e parte de Ice Lake, mas as versões mais recentes não funcionam
    • Parece que, por enquanto, não será possível emular o macOS das builds para Apple Silicon
    • Como o Intel VT-x não existe na AMD, a virtualização não é possível em hosts AMD
    • Há uma forma de fazer o Docker funcionar por emulação com versões antigas do VirtualBox
  • Projetos relacionados:

    • Docker-OSX: executar uma VM de macOS no Docker
    • macOS in QEMU in Docker: executar macOS no QEMU
  • Em uma entrevista com Sick Codes, foi discutida a abordagem para este produto

    • OSX-PROXMOX: projeto que oferece funcionalidade semelhante em um home server com Proxmox
    • Em uso em um HP Z420 Xeon, sendo muito estável com GPU passthrough
  • Seria legal rodar a sincronização do iCloud em um home server

    • Atualmente não há uma boa forma de fazer backup físico do iCloud para um home server/NAS
  • Este projeto atualmente oferece apenas imagens Docker x86-64, não aarch64

  • Quero tentar fazer builds de iOS

    • Quero explorar a possibilidade de build usando Unity, React Native etc.
    • Mesmo que o tempo de build seja 5 vezes maior, isso pareceria ótimo do ponto de vista da liberdade
  • O QEMU roda em um contêiner, e o macOS roda dentro dele

    • A instalação é muito simples e não há etapas de configuração manual
    • É bem provável que viole claramente o EULA do macOS
    • O software da Apple só pode ser executado em computadores com a marca Apple
    • Recomendo baixar e guardar o projeto, pois ele pode receber um aviso legal
  • Fico me perguntando se redistribuir imagens do macOS é permitido pela licença

    • Há dúvida se este projeto está distribuindo cópias ilegais no Docker Hub
  • Fico me perguntando se o progresso vai parar quando sair uma versão mais recente do macOS sem suporte a Intel

    • Fico me perguntando se é possível rodar o Docker dentro deste contêiner para executar macOS dentro de macOS
  • Não gosto do uso incorreto do termo "USB passthrough"

    • Na prática, é usado um "proxy USB sobre ethernet"
    • Isso traz várias desvantagens que um passthrough comum não tem