Tim pengembangan Corellium telah merilis port Ubuntu pada Mac Mini dengan prosesor Apple M1. Publikasi tentang topik ini hanya menceritakan tentang keberhasilan pengrajin, tetapi tidak mengungkapkan detailnya. Saya memutuskan berdasarkan pengalaman saya sendiri untuk memeriksa cara menginstal dan menggunakan. Ubuntu di Mac Mini, dan menjelaskan semua jebakan yang ada.
Penulis port Ubuntu untuk Mac, Corellium, terlibat dalam virtualisasi pada ARM64. Mereka memiliki pengalaman dan keinginan untuk melakukan hal-hal yang berani.
Corellium sebelumnya bekerja di Project Sandcastle, yang memungkinkan Anda menginstal OS Android di iPhone 7 berkat kerentanan checkm8. Menginstal Android di iPhone belum dilakukan sejak Proyek iDroid dan iPhone 3G. Seperti Proyek iDroid, Project Sandcastle tidak menyediakan OS untuk penggunaan sehari-hari, melainkan Proof-of-Concept open source yang sangat besar.Proyek semacam itu sangat memakan waktu dari sudut pandang pengembangan, sulit dioperasikan oleh pengguna biasa, dan tidak mungkin digunakan oleh khalayak luas. Namun demikian, ada baiknya mengambil kesempatan untuk melihat semuanya dengan mata kepala sendiri.
Apa kesulitannya
Lebih detail, lihat artikel terkait di blog Corellium.
Bukan rahasia lagi bahwa Apple menyimpang dari standar yang diterima dan sering menggunakan solusinya sendiri. Untuk memulainya, kami mencatat bahwa macOS melakukan booting agak berbeda dari sistem operasi keluarga Windows dan * nix. Perangkat Apple menggunakan iBoot sebagai bootloader. Ini memuat kernel Mach-O yang dapat dikompresi, ditandatangani, dan disimpan dalam wadah IMG4.
Hal-hal yang lebih kompleks dimulai ketika inti prosesor perlu dijalankan. Pada prosesor ARM64 konvensional, ini dilakukan melalui Antarmuka Koordinasi Status Daya (PSCI). Tapi di M1, inti lain dimulai pada offset, yang ditunjukkan dalam register I / O yang dipetakan memori (MMIO) yang sesuai.
Tetapi bahkan itu belum semuanya. Apple telah membuat pengontrol interupsi sendiri yang tidak sesuai dengan standar ARM Generic Interrupt Controller (GIC). Juga, interupsi yang dihasilkan oleh pengatur waktu menggunakan tipe khusus dari permintaan FIQ (Fast Interrupt Request) alih-alih IRQ, yang belum didukung oleh kernel Linux.
Untuk interaksi inti prosesor satu sama lain, interupsi khusus digunakan - Inter-Processor Interrupt (IPI), yang juga dihasilkan di M1 menggunakan FIQ. Dengan demikian, dukungan FIQ adalah salah satu hal terpenting di port ini.
Karyawan Corellium harus mengembangkan driver mereka sendiri untuk menangani interupsi melalui FIQ, menulis "pembungkus" yang akan memungkinkan semua kernel untuk berjalan, dan menyelesaikan beberapa masalah perangkat keras lagi. Baru setelah itu mereka dapat meluncurkan kernel Ubuntu .
Namun, meluncurkan kernel hanyalah permulaan. Agar pengoperasian berhasil, Anda perlu menghubungkan perangkat input seperti keyboard dan mouse. Ada tiga cara: gunakan host USB di chip M1 (untuk ThunderBolt / USB Type-C), gunakan host xHCI (untuk USB Type-A), atau gunakan Bluetooth.
Bluetooth berjalan pada protokol mirip PCIe non-standar, jadi mengembangkan modul kernel khusus untuk protokol yang tidak dikenal bisa memakan waktu lama. Corellium memutuskan untuk mengatur USB, dan setelah beberapa hari bekerja, mereka dapat menghubungkan perangkat input.
Pada saat penulisan ini, Bukti Konsep sudah tersedia, yang dapat Anda coba sendiri. Harap dicatat bahwa Anda dapat melakukan semua tindakan lebih lanjut sepenuhnya dengan risiko dan risiko Anda sendiri.
Menginstal Ubuntu
Untuk mulai menggunakan Ubuntu, kita membutuhkan yang berikut ini:
- Mac dengan prosesor Apple M1 (mendukung Mac Mini, Macbook Pro, dan Macbook Air)
- flash drive dengan konektor USB Type-C dengan volume 16 GB atau lebih;
- Keyboard USB dan mouse USB.
Sebagai flash drive, saya menggunakan microDuo 3C Kingston DataTraveler 32GB yang mendukung USB Type-A dan USB Type-C. Manual Corellium bersikeras menggunakan flash drive Type-C , karena boot dari Type-A tidak didukung pada saat penulisan ini. Saya menghubungkan mouse dan keyboard melalui USB Type-A.
Ada juga persyaratan yang kurang jelas. Pertama, Mac Mini Anda harus menjalankan macOS 11.2 atau lebih tinggi. Pada versi OS yang lebih lama, utilitas kmutil tidak memiliki perintah konfigurasi-boot , yang diperlukan untuk penggantian kernel yang benar.
Anda juga perlu melepaskan Mac dari Find My Mac. Kehadiran "pengikatan" tidak memungkinkan untuk menonaktifkan sistem keamanan sepenuhnya dan menjalankan semua perintah yang diperlukan.
Pertama-tama, mari siapkan gambar untuk flash drive. Unduh dan keluarkan arsipnya. Persiapan harus dilakukan di terminal Mac tempat kami berencana untuk menjalankan Ubuntu.
tar -xjvf ubuntu-20.10-preinstalled-desktop-arm64+raspi.img.bz2
Selanjutnya, kami memperluas gambar ke flash drive USB:
sudo dd if=ubuntu-20.10-preinstalled-desktop-arm64+raspi.img of=/dev/rYOURUSBDISK bs=1m
Harap dicatat bahwa itu perlu untuk menentukan USB flash drive, dan bukan bagian di atasnya. Misalnya / dev / rdisk6 . Selanjutnya, salin driver ke Wi-Fi:
cp -RLav /usr/share/firmware/wifi /Volumes/system-boot
Jika Anda menggunakan koneksi internet kabel, Anda dapat menyiapkan flash drive USB di komputer yang menjalankan Linux.Selanjutnya, sambungkan flash drive USB ke port USB Type-C dan reboot ke Recovery OS, yang dikenal sebagai 1TR (One True Recovery), dan buka terminal. Di Mac yang lebih baru, ini berfungsi seperti ini:
- Matikan Mac Anda;
- Tahan tombol daya hingga teks "Memuat parameter peluncuran" muncul;
- Pilih opsi "Opsi" dan klik "Lanjutkan";
- Di menu atas, buka "Utilities" - "Terminal".
Harap dicatat bahwa Pemulihan seharusnya tidak meminta Anda untuk memasukkan kata sandi OS atau ID Apple Anda saat startup. Jika dia tetap bertanya, maka Anda perlu menonaktifkan Find My Mac di pengaturan macOS.Instal kernel Ubuntu:
bash -c "$(curl -fsSL https://downloads.corellium.info/linuxusbboot.sh)"
Konten skrip
#!/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";
Skrip ini memeriksa kebijakan boot (BootPolicy) dan menonaktifkan sistem pemeriksaan integritas macOS jika diperlukan. Skrip kemudian memuat kernel Linux dalam format Mach-O ke root drive sistem dan mengkonfigurasi iBoot untuk kernel Linux.
Selama eksekusi skrip, Anda akan dimintai kata sandi untuk mendapatkan hak pengguna super macOS. Perintah yang Anda jalankan juga akan memberi tahu Anda saat tindakan yang Anda lakukan secara signifikan mengurangi keamanan Mac Anda. Tetapi jika Anda ingin menjalankan Ubuntu, Anda harus menerima begitu saja.
Setelah skrip selesai, Anda dapat memulai ulang Mac Anda, kemudian Ubuntu 20.04 akan mulai mengunduh.
Pengalaman penggunaan
Memulai Ubuntu untuk pertama kalinya tidak akan terlalu cepat. Dalam log unduhan, empat atau lima layanan akan "putus" dan enam lainnya "macet". Ubuntu membutuhkan waktu yang relatif lama untuk boot: beberapa menit. Apalagi pada awalnya responsivitas OS akan sangat rendah. Meluncurkan aplikasi baru, bahkan tanpa shell grafis, dapat memakan waktu beberapa menit. Masalah ini teratasi sendiri segera setelah memuat.
Seperti yang Anda lihat, gambar tersebut didasarkan pada Ubuntu untuk Raspberry Pi . Oleh karena itu, pengguna root dan pi di sistem memiliki kata sandi raspberry. Sayangnya, tidak mungkin membuat tangkapan layar yang bagus dan ilustratif dengan keluaran pengambilan layar. OS tidak menentukan model prosesor, jadi outputnya hanya berisi Unknown.
Keluaran 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
Fakta bahwa ini adalah image OS untuk RPi akan terlihat saat mencoba menginstal perangkat lunak dari manajer paket. Dia akan mencoba menginstal tidak hanya perangkat lunak yang dibutuhkan oleh administrator, tetapi juga memperbarui OS dengan pembuatan initramfs untuk "raspberry". Tindakan tersebut akan menyebabkan kesalahan dalam log, meskipun perangkat lunak yang diminta berhasil diinstal.
Seperti yang diharapkan, OS berisi kumpulan driver minimum yang diperlukan. Kartu suara, modul Bluetooth dan akselerator grafis tidak didukung. Kebanyakan utilitas sistem, seperti lspci , lsusb, dan lshw , memberikan sedikit informasi tentang perangkat keras.
Meskipun banyak keterbatasan, saya memutuskan untuk menjalankan benchmark sysbench.
| Alat | Perhitungan per detik |
|---|---|
| Mac Mini (Ubuntu 20.10) | 838 |
| Lenovo ThinkPad E14 (Ubuntu 20.04) | 483 |
Kesimpulan
Menginstal sistem operasi alternatif di Mac selalu merupakan proses yang menantang secara teknis. Prosesor M1 baru Apple merupakan tantangan besar bagi para penggemar.
Pernahkah Anda menggunakan Windows atau Linux di Mac?
Ingin mencoba Mac Mini baru di tempat kerja? Ayo berikan untuk tes gratis! Ikuti
saja tautannya .