Comment installer Ubuntu sur Apple M1 sans rien casser



L'équipe de développement de Corellium a publié un portage d'Ubuntu sur un Mac Mini avec un processeur Apple M1. Les publications sur le sujet ne parlent que du succès des artisans, mais ne divulguent pas de détails. J'ai décidé de ma propre expérience pour vérifier comment installer et utiliser. Ubuntu sur Mac Mini, et décrit tous les pièges qui existent.



Les auteurs du port Ubuntu pour Mac, Corellium, sont engagés dans la virtualisation sur ARM64. Ils ont l'expérience et le désir de faire des choses aussi audacieuses.

Corellium a déjà travaillé sur Project Sandcastle, qui vous permet d'installer Android OS sur iPhone 7 grâce à la vulnérabilité checkm8. L'installation d'Android sur iPhone n'a pas été effectuée depuis le projet iDroid et l'iPhone 3G. Comme le projet iDroid, Project Sandcastle ne fournit pas un système d'exploitation pour un usage quotidien, mais plutôt une preuve de concept open source massive.
De tels projets prennent beaucoup de temps du point de vue du développement, sont difficiles à exploiter par les utilisateurs ordinaires et sont peu susceptibles d'être utilisés par un large public. Néanmoins, cela vaut la peine de profiter de l'occasion pour tout voir de vos propres yeux.



Quelle est la difficulté



Plus en détail, consultez l'article correspondant sur le blog Corellium.



Ce n'est un secret pour personne qu'Apple s'écarte des normes acceptées et utilise souvent ses propres solutions. Pour commencer, nous notons que macOS démarre un peu différemment des systèmes d'exploitation des familles Windows et * nix. Les appareils Apple utilisent iBoot comme chargeur de démarrage. Il charge un noyau Mach-O qui peut être compressé, signé et stocké dans un conteneur IMG4.



Des choses plus complexes commencent lorsqu'il devient nécessaire de démarrer le reste des cœurs du processeur. Sur les processeurs ARM64 conventionnels, cela se fait via l'interface de coordination de l'état de l'alimentation (PSCI). Mais dans M1, les autres cœurs sont démarrés à un décalage, qui est indiqué dans le registre E / S mappé en mémoire (MMIO) correspondant.



Mais même ce n'est pas tout. Apple a créé son propre contrôleur d'interruption qui n'est conforme à aucune norme ARM Generic Interrupt Controller (GIC). De plus, les interruptions générées par le minuteur utilisent un type spécial de requêtes FIQ (Fast Interrupt Request) au lieu d'IRQ, ce qui n'est pas encore pris en charge par le noyau Linux.



Pour l'interaction des cœurs de processeur les uns avec les autres, des interruptions spéciales sont utilisées - Inter-Processor Interrupt (IPI), qui sont également générées dans M1 à l'aide de FIQ. Ainsi, le support FIQ est l'une des choses les plus importantes de ce port.



Noyau Linux sur M1 (source twitter.com ) Les



employés de Corellium ont dû développer leur propre pilote pour gérer les interruptions via FIQ, écrire un «wrapper» qui permettrait à tous les noyaux de fonctionner, et résoudre quelques autres problèmes matériels. Ce n'est qu'alors qu'ils ont pu lancer le noyau Ubuntu .



Cependant, le lancement du noyau n'est que le début. Pour un fonctionnement réussi, vous devez connecter des périphériques d'entrée tels qu'un clavier et une souris. Il existe trois façons: utiliser l'hôte USB dans la puce M1 (pour ThunderBolt / USB Type-C), utiliser l'hôte xHCI (pour USB Type-A) ou utiliser Bluetooth.



Bluetooth fonctionne sur un protocole de type PCIe non standard, le développement d'un module de noyau personnalisé pour un protocole inconnu peut donc prendre beaucoup de temps. Corellium a décidé de configurer l'USB et, après quelques jours de travail, ils ont pu connecter les périphériques d'entrée.



Au moment d'écrire ces lignes, la preuve de concept est déjà disponible, que vous pouvez essayer par vous-même. Veuillez noter que vous pouvez effectuer toutes les autres actions uniquement à vos propres risques et périls.



Installer Ubuntu



Pour commencer à utiliser Ubuntu, nous avons besoin des éléments suivants:



  • Mac avec un processeur Apple M1 (Mac Mini, Macbook Pro et Macbook Air pris en charge)
  • une clé USB avec un connecteur USB Type-C avec un volume de 16 Go ou plus;
  • Clavier USB et souris USB.


En tant que lecteur flash, j'ai utilisé un microDuo 3C Kingston DataTraveler de 32 Go prenant en charge les ports USB Type-A et USB Type-C. Le manuel de Corellium insiste sur l'utilisation d'un lecteur flash de type C , car le démarrage à partir de Type-A n'est pas pris en charge au moment de la rédaction de cet article. J'ai connecté la souris et le clavier via USB Type-A.



Il existe également des exigences moins évidentes. Tout d'abord, votre Mac Mini doit exécuter macOS 11.2 ou supérieur. Dans les anciennes versions du système d'exploitation, l'utilitaire kmutil ne dispose pas de la commande configure-boot , qui est requise pour le remplacement correct du noyau.



Vous devez également délier le Mac de Find My Mac. La présence du "binding" ne permet pas de désactiver complètement les systèmes de sécurité et d'exécuter toutes les commandes nécessaires.



Tout d'abord, préparons une image pour le lecteur flash. Téléchargez puis décompressez l'archive. La préparation doit être effectuée dans le terminal Mac sur lequel nous prévoyons d'exécuter Ubuntu.



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





Ensuite, nous développons l'image sur une clé USB:



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





Veuillez noter qu'il est nécessaire de spécifier le lecteur flash USB, et non sa section. Par exemple / dev / rdisk6 . Ensuite, copiez les pilotes sur le Wi-Fi:



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





Si vous utilisez une connexion Internet filaire, vous pouvez préparer une clé USB sur un ordinateur exécutant Linux.
Ensuite, connectez la clé USB au port USB Type-C et redémarrez dans Recovery OS, connu sous le nom de 1TR (le One True Recovery), et ouvrez un terminal. Sur les Mac plus récents, cela fonctionne comme ceci:



  1. Éteignez votre Mac;
  2. Maintenez le bouton d'alimentation enfoncé jusqu'à ce que le texte «Chargement des paramètres de lancement» apparaisse;
  3. Sélectionnez l'option "Options" et cliquez sur "Continuer";
  4. Dans le menu du haut, ouvrez "Utilitaires" - "Terminal".


Veuillez noter que Recovery ne doit pas vous demander de saisir le mot de passe de votre système d'exploitation ou votre identifiant Apple au démarrage. S'il le demande néanmoins, vous devez désactiver Localiser mon Mac dans les paramètres macOS.
Installez le noyau Ubuntu:



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





Contenu du 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";

      
      







Ce script vérifie les politiques de démarrage (BootPolicy) et désactive les systèmes de vérification d'intégrité macOS si nécessaire. Le script charge ensuite le noyau Linux au format Mach-O dans la racine du lecteur système et configure iBoot pour le noyau Linux.



Pendant l'exécution du script, vous serez invité à entrer un mot de passe pour obtenir les droits de superutilisateur macOS. Les commandes que vous exécutez vous alerteront également lorsque les actions que vous effectuez réduisent considérablement la sécurité de votre Mac. Mais si vous voulez exécuter Ubuntu, vous devez le prendre pour acquis.



Une fois le script terminé, vous pouvez redémarrer votre Mac, puis Ubuntu 20.04 commencera le téléchargement.



Expérience d'utilisation



Démarrer Ubuntu pour la première fois ne sera pas très rapide. Dans les journaux de téléchargement, quatre ou cinq services «tomberont» et six autres «se bloqueront». Ubuntu prend un temps relativement long à démarrer: quelques minutes. De plus, dans un premier temps, la réactivité de l'OS sera très faible. Le lancement de nouvelles applications, même sans shell graphique, peut prendre quelques minutes. Ce problème se résout peu de temps après le chargement.





Comme vous pouvez le voir, l'image est basée sur Ubuntu pour le Raspberry Pi . Par conséquent, les utilisateurs root et pi sur le système ont le mot de passe framboise. Malheureusement, il est impossible de faire une capture d'écran agréable et illustrative avec la sortie screenfetch. Le système d'exploitation ne détermine pas le modèle de processeur, donc la sortie contient uniquement Inconnu sans visage.



Sortie 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

      
      







Le fait qu'il s'agisse d'une image de système d'exploitation pour un RPi sera perceptible lors de la tentative d'installation du logiciel à partir du gestionnaire de packages. Il essaiera d'installer non seulement le logiciel requis par l'administrateur, mais aussi de mettre à jour le système d'exploitation avec la création d'initramfs pour le "raspberry". De telles actions entraîneront des erreurs dans les journaux, malgré l'installation réussie du logiciel demandé.



Comme prévu, le système d'exploitation contient l'ensemble minimum requis de pilotes. La carte son, le module Bluetooth et l'accélérateur graphique ne sont pas pris en charge. La plupart des utilitaires système, tels que lspci , lsusb et lshw , fournissent très peu d'informations sur le matériel.



Malgré de nombreuses limitations, j'ai décidé d'exécuter le benchmark sysbench.

Dispositif Calculs par seconde
Mac Mini (Ubuntu 20.10) 838
Lenovo ThinkPad E14 (Ubuntu 20.04) 483
Bien que ce test ne soit pas parfait et indicatif, l'Apple M1 à huit cœurs est deux fois plus performant que le Intel Core i5-1045U à huit cœurs. Malheureusement, je n'ai pas pu exécuter sysbench sur macOS.



Conclusion



L'installation de systèmes d'exploitation alternatifs sur un Mac est toujours un processus techniquement difficile. Les nouveaux processeurs M1 d'Apple sont un grand défi pour les passionnés.



Avez-vous déjà utilisé Windows ou Linux sur un Mac?



Vous voulez essayer le nouveau Mac Mini au travail? Faisons le test gratuitement! Suivez

simplement le lien .



All Articles