Cómo instalar Ubuntu en Apple M1 sin romper nada



El equipo de desarrollo de Corellium ha lanzado un puerto de Ubuntu en una Mac Mini con un procesador Apple M1. Las publicaciones sobre el tema hablan solo sobre el éxito de los artesanos, pero no revelan detalles. Decidí por mi propia experiencia comprobar cómo instalar y usar. Ubuntu en Mac Mini, y describió todas las trampas que existen.



Los autores del puerto de Ubuntu para Mac, Corellium, se dedican a la virtualización en ARM64. Tienen la experiencia y el deseo de hacer cosas tan atrevidas.

Corellium trabajó anteriormente en Project Sandcastle, que le permite instalar el sistema operativo Android en iPhone 7 gracias a la vulnerabilidad checkm8. La instalación de Android en iPhone no se ha realizado desde el Proyecto iDroid y el iPhone 3G. Al igual que el proyecto iDroid, Project Sandcastle no proporciona un sistema operativo para el uso diario, sino una prueba de concepto masiva de código abierto.
Estos proyectos consumen mucho tiempo desde el punto de vista del desarrollo, son difíciles de operar por los usuarios normales y es poco probable que los utilice una amplia audiencia. Sin embargo, vale la pena aprovechar la oportunidad para verlo todo con tus propios ojos.



Cual es la dificultad



Con más detalle, consulte el artículo correspondiente en el blog de Corellium.



No es ningún secreto que Apple se desvía de los estándares aceptados y, a menudo, utiliza sus propias soluciones. Para empezar, observamos que macOS arranca de forma algo diferente a los sistemas operativos de las familias Windows y * nix. Los dispositivos Apple utilizan iBoot como gestor de arranque. Carga un kernel Mach-O que se puede comprimir, firmar y almacenar en un contenedor IMG4.



Las cosas más complejas comienzan cuando es necesario iniciar el resto de los núcleos del procesador. En los procesadores ARM64 convencionales, esto se realiza a través de la interfaz de coordinación de estado de energía (PSCI). Pero en M1, otros núcleos se inician en un desplazamiento, que se indica en el registro de E / S mapeado en memoria (MMIO) correspondiente.



Pero incluso eso no es todo. Apple ha creado su propio controlador de interrupciones que no se ajusta a ningún estándar ARM Generic Interrupt Controller (GIC). Además, las interrupciones generadas por el temporizador utilizan un tipo especial de solicitudes FIQ (solicitud de interrupción rápida) en lugar de IRQ, que aún no es compatible con el kernel de Linux.



Para la interacción de los núcleos del procesador entre sí, se utilizan interrupciones especiales - Inter-Processor Interrupt (IPI), que también se generan en M1 mediante FIQ. Por lo tanto, el soporte FIQ es una de las cosas más importantes en este puerto.



Kernel de Linux en M1 (fuente twitter.com ) Los



empleados de Corellium tuvieron que desarrollar su propio controlador para manejar interrupciones a través de FIQ, escribir un "contenedor" que permitiera que todos los núcleos se ejecutaran y resolver algunos problemas de hardware más. Solo entonces pudieron lanzar el kernel de Ubuntu .



Sin embargo, lanzar el kernel es solo el comienzo. Para una operación exitosa, necesita conectar dispositivos de entrada como un teclado y un mouse. Hay tres formas: usar el host USB en el chip M1 (para ThunderBolt / USB Type-C), usar el host xHCI (para USB Type-A) o usar Bluetooth.



Bluetooth se ejecuta en un protocolo similar a PCIe no estándar, por lo que desarrollar un módulo de kernel personalizado para un protocolo desconocido podría llevar mucho tiempo. Corellium decidió configurar USB y, después de un par de días de trabajo, pudieron conectar los dispositivos de entrada.



En el momento de escribir este artículo, la Prueba de concepto ya está disponible, que puede probar por su cuenta. Tenga en cuenta que puede realizar todas las acciones adicionales únicamente bajo su propio riesgo y riesgo.



Instalación de Ubuntu



Para comenzar a usar Ubuntu, necesitamos lo siguiente:



  • Mac con un procesador Apple M1 (compatible con Mac Mini, Macbook Pro y Macbook Air)
  • una unidad flash con un conector USB tipo C con un volumen de 16 GB o más;
  • Teclado USB y ratón USB.


Como unidad flash, utilicé un Kingston DataTraveler microDuo 3C de 32 GB que admite USB Type-A y USB Type-C. El manual de Corellium insiste en usar una unidad flash Tipo-C , ya que el arranque desde Tipo-A no es compatible en el momento de escribir este artículo. Conecté el mouse y el teclado a través de USB Type-A.



También hay requisitos menos obvios. Primero, su Mac Mini debe ejecutar macOS 11.2 o superior. En versiones anteriores del sistema operativo, la utilidad kmutil carece del comando configure-boot , que es necesario para el reemplazo correcto del kernel.



También debe desatar la Mac de Find My Mac. La presencia del "enlace" no permite deshabilitar los sistemas de seguridad por completo y ejecutar todos los comandos necesarios.



En primer lugar, preparemos una imagen para la unidad flash. Descargue y luego descomprima el archivo. La preparación debe realizarse en la terminal Mac en la que planeamos ejecutar Ubuntu.



tar -xjvf ubuntu-20.10-preinstalled-desktop-arm64+raspi.img.bz2
      
      





A continuación, expandimos la imagen a una unidad flash USB:



sudo dd if=ubuntu-20.10-preinstalled-desktop-arm64+raspi.img of=/dev/rYOURUSBDISK bs=1m
      
      





Tenga en cuenta que es necesario especificar la unidad flash USB y no la sección correspondiente. Por ejemplo / dev / rdisk6 . A continuación, copie los controladores a Wi-Fi:



cp -RLav /usr/share/firmware/wifi /Volumes/system-boot
      
      





Si está utilizando una conexión a Internet por cable, puede preparar una unidad flash USB en una computadora con Linux.
A continuación, conecte la unidad flash USB al puerto USB Type-C y reinicie en Recovery OS, conocido como 1TR (One True Recovery), y abra una terminal. En las Mac más nuevas, funciona así:



  1. Apague su Mac;
  2. Mantén pulsado el botón de encendido hasta que aparezca el texto "Cargando parámetros de lanzamiento";
  3. Seleccione la opción "Opciones" y haga clic en "Continuar";
  4. En el menú superior, abra "Utilidades" - "Terminal".


Tenga en cuenta que Recovery no debería pedirle que ingrese la contraseña de su sistema operativo o ID de Apple al inicio. Si, no obstante, pregunta, debe desactivar Find My Mac en la configuración de macOS.
Instale el kernel de Ubuntu:



bash -c "$(curl -fsSL https://downloads.corellium.info/linuxusbboot.sh)"
      
      





Contenido de la secuencia de comandos
#!/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 las políticas de arranque (BootPolicy) y deshabilita los sistemas de verificación de integridad de macOS si es necesario. Luego, el script carga el kernel de Linux en formato Mach-O en la raíz de la unidad del sistema y configura iBoot para el kernel de Linux.



Durante la ejecución del script, se le pedirá una contraseña para obtener los derechos de superusuario de macOS. Los comandos que ejecute también le alertarán cuando las acciones que realice reduzcan significativamente la seguridad de su Mac. Pero si desea ejecutar Ubuntu, debe darlo por sentado.



Una vez que se complete el script, puede reiniciar su Mac, luego Ubuntu 20.04 comenzará a descargarse.



Experiencia de uso



Iniciar Ubuntu por primera vez no será muy rápido. En los registros de descarga, cuatro o cinco servicios "caerán" y seis más "colgarán". Ubuntu tarda un tiempo relativamente largo en arrancar: unos minutos. Además, al principio, la capacidad de respuesta del sistema operativo será muy baja. El lanzamiento de nuevas aplicaciones, incluso sin un shell gráfico, puede llevar unos minutos. Este problema se resuelve por sí solo poco después de la carga.





Como puede ver, la imagen está basada en Ubuntu para Raspberry Pi . Por lo tanto, los usuarios root y pi del sistema tienen la contraseña raspberry. Desafortunadamente, es imposible hacer una captura de pantalla agradable e ilustrativa con el resultado de screenfetch. El sistema operativo no determina el modelo del procesador, por lo que la salida solo contiene Desconocido sin rostro.



Salida de 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

      
      







El hecho de que se trata de una imagen de sistema operativo para un RPi se notará al intentar instalar software desde el administrador de paquetes. Intentará instalar no solo el software requerido por el administrador, sino también actualizar el sistema operativo con la creación de initramfs para la "frambuesa". Tales acciones darán lugar a errores en los registros, a pesar de la instalación exitosa del software solicitado.



Como era de esperar, el sistema operativo contiene el conjunto mínimo requerido de controladores. La tarjeta de sonido, el módulo Bluetooth y el acelerador de gráficos no son compatibles. La mayoría de las utilidades del sistema, como lspci , lsusb y lshw , proporcionan muy poca información sobre el hardware.



A pesar de muchas limitaciones, decidí ejecutar el banco de pruebas sysbench.

Dispositivo Cálculos por segundo
Mac Mini (Ubuntu 20.10) 838
Lenovo ThinkPad E14 (Ubuntu 20.04) 483
Aunque esta prueba no es perfecta e indicativa, el Apple M1 de ocho núcleos es el doble de bueno que el Intel Core i5-1045U de ocho núcleos. Desafortunadamente, no pude ejecutar sysbench en macOS.



Conclusión



La instalación de sistemas operativos alternativos en una Mac siempre es un proceso técnicamente desafiante. Los nuevos procesadores M1 de Apple son un gran desafío para los entusiastas.



¿Ha utilizado alguna vez Windows o Linux en una Mac?



¿Quieres probar la nueva Mac Mini en el trabajo? ¡Vamos a probarlo gratis!

Solo sigue el enlace .



All Articles