Corellium開発チームは、AppleM1プロセッサを搭載したMacMiniにUbuntuのポートをリリースしました。このトピックに関する出版物は、職人の成功についてのみ述べており、詳細は開示していません。インストールと使用方法を確認するために、自分の経験に決めました。Mac Mini上のUbuntu、および存在するすべての落とし穴について説明しました。
Mac用のUbuntuポートの作成者であるCorelliumは、ARM64での仮想化に取り組んでいます。彼らはそのような大胆なことをしたいという経験と願望を持っています。
Corelliumは以前ProjectSandcastleに取り組んでいました。これにより、checkm8の脆弱性のおかげでiPhone7にAndroidOSをインストールできます。iDroidProjectとiPhone3G以降、iPhoneへのAndroidのインストールは行われていません。iDroid Projectと同様に、Project Sandcastleは日常的に使用するOSを提供していませんが、大規模なオープンソースの概念実証を提供しています。このようなプロジェクトは、開発の観点から非常に時間がかかり、一般ユーザーが操作するのが難しく、幅広いユーザーが使用する可能性は低いです。それでも、この機会にすべてを自分の目で見る価値はあります。
難しさは何ですか
詳細については、Corelliumブログの対応する 記事を参照してください。
Appleが受け入れられている標準から逸脱し、多くの場合独自のソリューションを使用していることは周知の事実です。まず、macOSの起動はWindowsおよび* nixファミリのオペレーティングシステムとは多少異なることに注意してください。 AppleデバイスはiBootをブートローダーとして使用します。圧縮、署名、IMG4コンテナへの保存が可能なMach-Oカーネルをロードします 。
残りのプロセッサコアを起動する必要が生じたときに、より複雑なことが始まります。従来のARM64プロセッサでは、これはPower State Coordination Interface(PSCI)を介して行われます。ただし、M1では、他のコアはオフセットで開始されます。これは、対応するメモリマップドI / O(MMIO)レジスタに示されています。
しかし、それでもすべてではありません。 Appleは、ARM Generic Interrupt Controller(GIC)標準に準拠していない独自の割り込みコントローラーを作成しました。また、タイマーによって生成された割り込みは、LinuxカーネルでまだサポートされていないIRQの代わりに特別なタイプのFIQ(高速割り込み要求)要求を使用します。
プロセッサコアの相互作用のために、特別な割り込みが使用されます-プロセッサ間割り込み(IPI)。これもFIQを使用してM1で生成されます。したがって、FIQサポートはこのポートで最も重要なことの1つです。
Corelliumの従業員は、FIQを介して割り込みを処理するための独自のドライバーを開発し、すべてのカーネルを実行できるようにする「ラッパー」を作成し、さらにいくつかのハードウェアの問題を解決する必要がありました。そうして初めて、彼ら はUbuntuカーネルを起動することができました。
ただし、カーネルの起動はまだ始まったばかりです。操作を成功させるには、キーボードやマウスなどの入力デバイスを接続する必要があります。 3つの方法があります:M1チップでUSBホストを使用する(ThunderBolt / USB Type-Cの場合)、xHCIホストを使用する(USB Type-Aの場合)、またはBluetoothを使用します。
Bluetoothは非標準のPCIeに似たプロトコルで実行されるため、未知のプロトコル用のカスタムカーネルモジュールの開発には長い時間がかかる可能性があります。CorelliumはUSBをセットアップすることを決定し、数日間の作業の後、入力デバイスを接続することができました。
この記事の執筆時点では、概念実証はすでに利用可能であり、自分で試すことができます。 それ以降のすべてのアクションは、ご自身の危険とリスクでのみ実行できることに注意してください。
Ubuntuのインストール
Ubuntuの使用を開始するには、次のものが必要です。
- Apple M1プロセッサを搭載したMac(Mac Mini、Macbook Pro、およびMacbook Airをサポート)
- 16GB以上の容量のUSBType-Cコネクタを備えたフラッシュドライブ。
- USBキーボードとUSBマウス。
フラッシュドライブとして、USBType-AとUSBType-Cをサポートする32GBのKingstonDataTraveler microDuo3Cを使用しました。 Corelliumのマニュアルで は、Type-Aからの起動はこの記事の執筆時点ではサポートされていないため、Type-Cフラッシュドライブの使用を主張しています。 USBType-Aでマウスとキーボードを接続しました。
あまり明白でない要件もあります。まず、MacMiniはmacOS11.2以降を実行している必要があります。古いOSバージョンでは、kmutilユーティリティにconfigure-bootコマンド がありません。これは、カーネルを正しく置き換えるために必要です。
また、「Macを探す」からMacを解く必要があります。 「バインディング」が存在するため、セキュリティシステムを完全に無効にして、必要なすべてのコマンドを実行することはできません。
まず、フラッシュドライブ用のイメージを準備しましょう 。アーカイブをダウンロードして解凍します。準備は、Ubuntuを実行する予定のMacターミナルで実行する必要があります。
tar -xjvf ubuntu-20.10-preinstalled-desktop-arm64+raspi.img.bz2
次に、イメージをUSBフラッシュドライブに展開します。
sudo dd if=ubuntu-20.10-preinstalled-desktop-arm64+raspi.img of=/dev/rYOURUSBDISK bs=1m
USBフラッシュドライブのセクションではなく、USBフラッシュドライブを指定する必要があることに注意してください。たとえば、 / dev / rdisk6です。次に、ドライバーをWi-Fiにコピーします。
cp -RLav /usr/share/firmware/wifi /Volumes/system-boot
有線インターネット接続を使用している場合は、Linuxを実行しているコンピューターでUSBフラッシュドライブを準備できます。次に、USBフラッシュドライブをUSB Type-Cポートに接続し、1TR(One True Recovery)と呼ばれるリカバリOSで再起動して、ターミナルを開きます。新しいMacでは、次のように機能します。
- Macの電源を切ります。
- 「起動パラメータのロード」というテキストが表示されるまで電源ボタンを押し続けます。
- 「オプション」オプションを選択し、「続行」をクリックします。
- トップメニューで、「ユーティリティ」-「ターミナル」を開きます。
Recoveryは、起動時にOSパスワードまたはAppleIDの入力を求めないことに注意してください。それでも彼が尋ねた場合は、macOSの設定で「Macを探す」を無効にする必要があります。Ubuntuカーネルをインストールします。
bash -c "$(curl -fsSL https://downloads.corellium.info/linuxusbboot.sh)"
スクリプトの内容
#!/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";
このスクリプトは、ブートポリシー(BootPolicy)をチェックし、必要に応じてmacOS整合性チェックシステムを無効にします。次に、スクリプトはLinuxカーネルをMach-O形式でシステムドライブのルートにロードし、Linuxカーネル用にiBootを構成します。
スクリプトの実行中に、macOSスーパーユーザー権限を取得するためのパスワードの入力を求められます。実行するコマンドは、実行するアクションによってMacのセキュリティが大幅に低下している場合にも警告を発します。しかし、Ubuntuを実行したい場合は、当然のことと考えなければなりません。
スクリプトが完了したら、Macを再起動すると、Ubuntu20.04のダウンロードが開始されます。
使用経験
初めてUbuntuを起動するのはそれほど速くはありません。ダウンロードログでは、4つまたは5つのサービスが「ドロップ」し、さらに6つのサービスが「ハング」します。Ubuntuの起動には比較的長い時間がかかります:数分。さらに、最初はOSの応答性が非常に低くなります。グラフィカルシェルがなくても、新しいアプリケーションの起動には数分かかる場合があります。この問題は、ロード後すぐに解決します。
ご覧のとおり、この画像はRaspberryPi用のUbuntuに基づいてい ます。したがって、システムのrootユーザーとpiユーザーのパスワードはraspberryです。残念ながら、screenfetchの出力を使用して見栄えのするスクリーンショットを作成することは不可能です。OSはプロセッサモデルを決定しないため、出力には顔のない不明のみが含まれます。
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
これがRPiのOSイメージであるという事実は、パッケージマネージャーからソフトウェアをインストールしようとすると目立ちます。彼は、管理者が必要とするソフトウェアをインストールするだけでなく、「ラズベリー」のinitramfsを作成してOSを更新しようとします。このようなアクションは、要求されたソフトウェアのインストールが成功したにもかかわらず、ログにエラーを引き起こします。
予想どおり、OSには最低限必要なドライバーのセットが含まれています。サウンドカード、Bluetoothモジュール、グラフィックアクセラレータはサポートされていません。など、ほとんどのシステムユーティリティ、 lspciを、 lsusbが、と lshwは、ハードウェアについてほとんど情報を提供します。
多くの制限にもかかわらず、私はsysbenchベンチマークを実行することにしました。
端末 | 1秒あたりの計算 |
---|---|
Mac Mini(Ubuntu 20.10) | 838 |
Lenovo ThinkPad E14(Ubuntu 20.04) | 483 |
結論
Macに代替オペレーティングシステムをインストールすることは、常に技術的に困難なプロセスです。Appleの新しいM1プロセッサは、愛好家にとって大きな挑戦です。
MacでWindowsまたはLinuxを使用したことがありますか?
仕事で新しいMacMiniを試してみませんか?無料でテストに出しましょう!リンクをたどる
だけです。