A equipe de desenvolvimento do Corellium lançou uma versão do Ubuntu em um Mac Mini com um processador Apple M1. Publicações sobre o tema falam apenas do sucesso dos artesãos, mas não divulgam detalhes. Decidi por experiência própria verificar como instalar e usar. Ubuntu no Mac Mini, e descreveu todas as armadilhas que existem.
Os autores do porte do Ubuntu para Mac, Corellium, estão envolvidos na virtualização no ARM64. Eles têm a experiência e o desejo de fazer coisas ousadas.
Corellium trabalhou anteriormente no Projeto Sandcastle, que permite instalar o sistema operacional Android no iPhone 7 graças à vulnerabilidade checkm8. A instalação do Android no iPhone não foi feita desde o Projeto iDroid e o iPhone 3G. Como o Projeto iDroid, o Projeto Sandcastle não fornece um sistema operacional para o uso diário, mas sim uma enorme Prova de Conceito de código aberto.Esses projetos consomem muito tempo do ponto de vista do desenvolvimento, são difíceis de operar por usuários comuns e dificilmente serão usados por um público amplo. No entanto, vale a pena aproveitar para ver tudo com os próprios olhos.
Qual é a dificuldade
Em mais detalhes, consulte o artigo correspondente no blog do Corellium.
Não é nenhum segredo que a Apple se desvia dos padrões aceitos e muitas vezes usa suas próprias soluções. Para começar, observamos que o macOS inicializa de maneira um pouco diferente dos sistemas operacionais das famílias Windows e * nix. Os dispositivos Apple usam o iBoot como carregador de inicialização. Ele carrega um kernel Mach-O que pode ser compactado, assinado e armazenado em um contêiner IMG4.
Coisas mais complexas começam quando é necessário iniciar o resto dos núcleos do processador. Em processadores ARM64 convencionais, isso é feito por meio da Power State Coordination Interface (PSCI). Mas em M1, outros núcleos são iniciados em um deslocamento, que é indicado no registro I / O mapeado em memória (MMIO) correspondente.
Mas mesmo isso não é tudo. A Apple criou seu próprio controlador de interrupção que não está em conformidade com nenhum padrão ARM Generic Interrupt Controller (GIC). Além disso, as interrupções geradas pelo cronômetro usam um tipo especial de solicitações FIQ (Fast Interrupt Request) em vez de IRQs, que ainda não é suportado pelo kernel do Linux.
Para a interação dos núcleos do processador entre si, são utilizadas interrupções especiais - Inter-Processor Interrupt (IPI), que também são geradas em M1 usando FIQ. Assim, o suporte FIQ é uma das coisas mais importantes neste porto.
Os funcionários da Corellium tiveram que desenvolver seu próprio driver para lidar com interrupções via FIQ, escrever um "wrapper" que permitiria que todos os kernels rodassem e resolver mais alguns problemas de hardware. Só então eles foram capazes de lançar o kernel do Ubuntu .
No entanto, lançar o kernel é apenas o começo. Para uma operação bem-sucedida, você precisa conectar dispositivos de entrada, como teclado e mouse. Existem três maneiras: use o host USB no chip M1 (para ThunderBolt / USB Type-C), use o host xHCI (para USB Type-A) ou use o Bluetooth.
O Bluetooth é executado em um protocolo não padrão do tipo PCIe, portanto, o desenvolvimento de um módulo de kernel personalizado para um protocolo desconhecido pode levar muito tempo. O Corellium decidiu configurar o USB e, após alguns dias de trabalho, eles conseguiram conectar os dispositivos de entrada.
No momento em que este livro foi escrito, a Prova de Conceito já estava disponível, que você pode experimentar por conta própria. Observe que você pode realizar todas as outras ações por sua própria conta e risco.
Instalando Ubuntu
Para começar a usar o Ubuntu, precisamos do seguinte:
- Mac com processador Apple M1 (compatível com Mac Mini, Macbook Pro e Macbook Air)
- uma unidade flash com um conector USB Tipo C com um volume de 16 GB ou mais;
- Teclado e mouse USB.
Como uma unidade flash, usei um Kingston DataTraveler microDuo 3C de 32 GB que suporta USB Tipo-A e USB Tipo-C. O manual do Corellium insiste no uso de uma unidade flash Tipo-C , pois a inicialização a partir do Tipo A não é suportada no momento em que este livro foi escrito. Eu conectei o mouse e o teclado via USB Tipo A.
Existem também requisitos menos óbvios. Primeiro, seu Mac Mini deve estar executando o macOS 11.2 ou superior. Em versões mais antigas do sistema operacional, o utilitário kmutil não possui o comando configure-boot , que é necessário para a substituição correta do kernel.
Você também precisa desamarrar o Mac do Find My Mac. A presença do "enlace" não permite desabilitar completamente os sistemas de segurança e executar todos os comandos necessários.
Em primeiro lugar, vamos preparar uma imagem para o pen drive. Baixe e descompacte o arquivo. A preparação deve ser realizada no terminal Mac no qual pretendemos executar o Ubuntu.
tar -xjvf ubuntu-20.10-preinstalled-desktop-arm64+raspi.img.bz2
Em seguida, expandimos a imagem para uma unidade flash USB:
sudo dd if=ubuntu-20.10-preinstalled-desktop-arm64+raspi.img of=/dev/rYOURUSBDISK bs=1m
Observe que é necessário especificar a unidade flash USB, e não a seção sobre ela. Por exemplo / dev / rdisk6 . Em seguida, copie os drivers para o Wi-Fi:
cp -RLav /usr/share/firmware/wifi /Volumes/system-boot
Se estiver usando uma conexão com fio à Internet, você pode preparar uma unidade flash USB em um computador com Linux.Em seguida, conecte a unidade flash USB à porta USB Type-C e reinicie no Recovery OS, conhecido como 1TR (the One True Recovery), e abra um terminal. Em Macs mais recentes, funciona assim:
- Desligue seu Mac;
- Segure o botão liga / desliga até que o texto "Carregando parâmetros de inicialização" apareça;
- Selecione a opção "Opções" e clique em "Continuar";
- No menu superior, abra "Utilitários" - "Terminal".
Observe que o Recovery não deve solicitar que você insira a senha do sistema operacional ou o ID Apple na inicialização. Mesmo assim, se ele perguntar, você precisará desativar o Find My Mac nas configurações do macOS.Instale o kernel do Ubuntu:
bash -c "$(curl -fsSL https://downloads.corellium.info/linuxusbboot.sh)"
Conteúdo do script
#!/bin/sh
bputil -d | grep "CustomerKC" | grep -v "absent"
KC=$?
if [ $KC -eq 1 ]
then
bputil -n -k -c -a -s
csrutil disable
csrutil authenticated-root disable
fi
curl https://downloads.corellium.info/linux.macho > linux.macho
kmutil configure-boot -c linux.macho -v /Volumes/Macintosh\ HD/
echo "Kernel installed. Please reboot";
Este script verifica as políticas de inicialização (BootPolicy) e desativa os sistemas de verificação de integridade do macOS, se necessário. O script carrega o kernel Linux no formato Mach-O na raiz da unidade do sistema e configura o iBoot para o kernel Linux.
Durante a execução do script, será solicitada uma senha para obter os direitos de superusuário do macOS. Os comandos que você executa também o alertam quando as ações que você executa estão reduzindo significativamente a segurança do seu Mac. Mas se você quiser rodar o Ubuntu, você tem que dar como certo.
Após a conclusão do script, você pode reiniciar o Mac e, em seguida, o Ubuntu 20.04 começará o download.
Experiência de uso
Iniciar o Ubuntu pela primeira vez não será muito rápido. Nos logs de download, quatro ou cinco serviços "cairão" e outros seis "travarão". O Ubuntu leva um tempo relativamente longo para inicializar: alguns minutos. Além disso, a princípio a capacidade de resposta do sistema operacional será muito baixa. O lançamento de novos aplicativos, mesmo sem um shell gráfico, pode levar alguns minutos. Este problema se resolve logo após o carregamento.
Como você pode ver, a imagem é baseada no Ubuntu para o Raspberry Pi . Portanto, os usuários root e pi no sistema possuem a senha raspberry. Infelizmente, é impossível fazer uma captura de tela bonita e ilustrativa com a saída do screenfetch. O SO não determina o modelo do processador, portanto, a saída contém apenas Desconhecido sem rosto.
Saída Lscpu
Architecture: aarch64 CPU op-mode(s): 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 Vendor ID: 0x61 Model: 1 Stepping: 0x1 CPU max MHz: 3204.0669 CPU min MHz: 600.0030 BogoMIPS: 48.00 Vulnerability Itlb multihit: Not affected Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl Vulnerability Spectre v1: Mitigation; __user pointer sanitization Vulnerability Spectre v2: Not affected Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Not affected Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm ssbs sb dcpodp flagm2 frint
O fato de que esta é uma imagem do sistema operacional para um RPi será perceptível ao tentar instalar o software a partir do gerenciador de pacotes. Ele tentará instalar não só o software exigido pelo administrador, mas também atualizar o SO com a criação do initramfs para o "framboesa". Essas ações levarão a erros nos logs, apesar da instalação bem-sucedida do software solicitado.
Como esperado, o sistema operacional contém o conjunto mínimo necessário de drivers. Placa de som, módulo Bluetooth e acelerador gráfico não são suportados. A maioria dos utilitários de sistema, como lspci , lsusb e lshw , fornecem muito poucas informações sobre o hardware.
Apesar das muitas limitações, decidi executar o benchmark sysbench.
| Dispositivo | Cálculos por segundo |
|---|---|
| Mac Mini (Ubuntu 20.10) | 838 |
| Lenovo ThinkPad E14 (Ubuntu 20.04) | 483 |
Conclusão
Instalar sistemas operacionais alternativos em um Mac é sempre um processo tecnicamente desafiador. Os novos processadores M1 da Apple são um grande desafio para os entusiastas.
Você já usou Windows ou Linux em um Mac?
Quer experimentar o novo Mac Mini no trabalho? Vamos testar de graça!
Basta seguir o link .