PONOS Advent Calendar 2023の4日目の記事です。
前回は、@PortierさんのUnityのBigQueryのコストを制限する基本設定でした。
はじめに
Arch LinuxはLinuxディストリビューションの1つです。
シンプルかつ軽量を旨としており、硬派なことで有名です。
たとえばOSのインストールに関しても、グラフィカルなインストーラーなどはなく、インストールガイドを見ながらコマンドを打っていくことになります。
このインストール手順が秀逸でして、ハマることも含めて沢山の気付きを得られます。
そんなArch Linuxのインストールを、インストールそのものを目的にやることを「素振り」と呼んでいます。
前回の素振りこちら。
書き進めていたらどんどん長くなってしまったので、前後編に分割しました。
後編はこちら → Arch Linuxインストールの素振り2023 with Appleシリコン(後編)
今回の素振り環境について
毎回同じ構成で素振りしても面白くありませんし、ちょっと趣向を加えます。
今回はAppleシリコンMac上で、仮想マシンとして稼働させることにしました。
AppleシリコンMacにおける仮想マシン環境
2020年より、MacのCPUはARMベースのAppleシリコンに置き換わっています。
それ以前のIntel製CPUだった頃とはCPUアーキテクチャそのものが変わったことで互換性もなくなりました。
(なのに、CPU互換レイヤーのRosetta 2が超優秀で、そこまで困ることもなかったり。)
仮想マシンについてもCPUの変更は大きく影響しています。
特に、ハイパーバイザー型仮想化を行う場合は、ゲストOSのCPUアーキテクチャはホストOSと同じものしか使えません。
ゲストOSにもある程度のパフォーマンスを求める場合は、ARMアーキテクチャを選択することになります。
仮想化ソフトにはUTMを選択
Appleシリコンが登場した当初と比べて、仮想化ソフトもかなり充実してきました。
今回はその中で、UTMを使用します。
UTMはQEMUのGUIフロントエンドのような立ち位置で、お手軽に仮想マシンが構築できます。
また、ハイパーバイザー型だけでなくエミュレーションでの仮想化も可能です。1
ディストリビューションにはArch Linux ARMを選択
前述の通りAppleシリコンはARMベースであり、ネイティブで動作するのはaarch64
(ARM64)アーキテクチャです。
ところが、Linuxディストリビューションの多くはIntel系のx86_64
アーキテクチャ向けで、それはArch Linuxも例外ではなく、公式から提供されているISOもx86_64
向けです。
今回は、代わりにARM向けポートのArch Linux ARMを使用します。
Arch Linux ARM on UTM
それでは、ここから本編です。
進め方
基本的にArch Wikiのインストールガイドに従って進めます。
ただし、ARM環境特有の手順がある場合など、適宜ガイドから寄り道して進めることもあります。
ここからは、インストールガイドの項番と一致する形で見出しに番号を付けていきます。
(仮想マシンの作成はインストールガイドの範囲外なため、0番としました。)
0. 仮想マシンの作成
UTMで新規仮想マシンを作ります。
- 仮想化 or エミュレート → 仮想化
- オペレーティングシステム → Linux
- 仮想化エンジンの「Apple仮想化を使用」はチェックなし
- メモリ 4096MB、CPUコア数 デフォルト
- ストレージ 10GB
0-1. シリアルポートの追加
作成した仮想マシンを編集します。
デバイスの「新規」から、シリアルポートを追加してください。
シリアルポートが無くても仮想マシンの画面から操作はできます。
ですが、この画面ではテキストのコピペができないのが非常に辛いため、シリアル通信で操作することをオススメします。
1. インストールの準備
1-1. インストールメディアの入手
今回は前述の通り、本家Arch LinuxではなくARM向けポートのArch Linux ARMを使います。
Arch Linux ARMの公式サイトではISOイメージが提供されていないため、Archboot Projectから「ARM - aarch64」用のISOをダウンロードします。
1-2. 署名の検証
Archbootのサイトから直接ダウンロードしているので必要ない気もしますが、一応ダイジェストだけでも比較しておきます。
# b2sum archboot-2023.11.29-15.35-6.2.10-1-aarch64-ARCH-aarch64.iso
18ef364ebaa181570c94c136639b358a7bae365e30ea3186219aa2421d931f6e3fb948c47e2e94b75b981e9205a4475957d4a5c6d22c8571ee9f3623b9211b11 archboot-2023.11.29-15.35-6.2.10-1-aarch64-ARCH-aarch64.iso
# Archbootに記載されているB2SUMと一致
1-3. インストールメディアの準備
仮想マシンの起動ISOに、ArchbootからダウンロードしたISOファイルを指定します。
さらに、ISOファイルをマウントしたドライブをリストの一番上に移動させます。
仮想マシンの起動時は、このリストの順番で起動ディスクとして探索されるようです。
1-4. ライブ環境の起動
この状態で仮想マシンを起動すると、ブートローダーのオプション選択画面が出てきます。
1つ目の「Archboot - Aech Linux AA64」が選択されているので、そのままEnterで確定すると、OSが起動し、ライブ環境の初期設定に進みます。
ロケールやネットワークの設定は基本的にデフォルト設定のままで問題ありません。仮想ネットワークも自動認識されます。
一通り設定が済むとこの画面になります。
カーソルで「Exit」を選択しEnterで確定、さらに「Exit Program」でランチャーを抜けます。
(ここで「2 Launch Desktop Environment」を選ぶとGUIが立ち上がるみたいです。)
シェルが触れるようになりました。
1-5. コンソールのキーボードレイアウト
USキーボードを使っているのでパス。
必要であれば、ここで日本語キーボードに変更できます。
1-6. 起動モードの確認
[root@archboot /]# ls /sys/firmware/efi/efivars
Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c
(略)
ディレクトリが存在して中身が表示されたので、EFIモードです。
1-7. インターネットへの接続
UTMが仮想ネットワークを作ってくれているので、そのままインターネットに繋がるはずです。
[root@archboot /]# ping archlinux.jp
PING archlinux.jp (160.16.119.98) 56(84) bytes of data.
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=1 ttl=54 time=16.9 ms
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=2 ttl=54 time=17.3 ms
(CTRL+C で止めないとずっと流れ続ける)
繋がりました。
1-8. システムクロックの更新
[root@archboot /]# timedatectl status
Local time: Sun 2023-12-03 21:55:55 JST
Universal time: Sun 2023-12-03 12:55:55 UTC
RTC time: Sun 2023-12-03 12:55:55
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
同期されていることを確認。
1-9. パーティション
簡単な確認コマンドが続いたあとにしれっと出てきましたが、ここ超重要ポイントです。
Arch Linuxをインストールする先のドライブに、パーティションを切っていきます。
一般的なOSインストールとは違い、Arch Linuxでは自分でコマンドを打って手動でやる必要があります。(が、それが楽しい)
[root@archboot /]fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/zram0: 5 GiB, 5368709120 bytes, 1310720 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
fdisk -l
で認識されているドライブのデバイス名を確認します。
1つ目の容量10GBのものがインストール先の仮想ドライブです。
名前は``/dev/vda`と分かりました。
1-9-1. パーティション設計
早速作業していきたいところですが、まずはパーティションの設計からです。
この後fdisk
でパーティションを切っていく際、どういう構成にしたいのかを把握していないと何度も後戻りする羽目になってしまいます。
Arch Wikiのレイアウト例に従って考えましょう。
詳しくはArch Wikiのパーティショニングを参照。
作成するパーティションは全部で3つ。
EFIシステムパーティションとスワップパーティション、それとシステムの/
(ルート)が入るメインのパーティションです。
ほぼレイアウト例の通り、このように設計しました。
番号 | パーティションタイプ | フォーマット | 容量 | 備考 |
---|---|---|---|---|
1 | EFIシステムパーティション | FAT | 512MB | |
2 | Linux swap | swap | 512MB | |
3 | Linux | ext4 | 残り全部 | だいたい9GBくらいになるはず |
パーティションには番号を付ける必要があり、かつ作成する順番も重要です。
上記のように「残り全部」と指定するためには、それ以外のサイズが確定している必要があるためです。
1-9-2. fdisk
でパーティション作成
それでは、fdisk
でパーティションを切っていきます。
[root@archboot /]#fdisk /dev/vda
Welcome to fdisk (util-linux 2.39.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xf9f5cbec.
Command (m for help):
fdisk
は対話型のツールです。
たとえばm
を入力すると、利用可能なコマンドの一覧が出てきます。
以下のように入力して、パーティション確保とタイプ指定を行っていきます。
- EFIシステムパーティション
-
n
Enter
# 新規パーティション作成 -
p
Enter
# 種別はプライマリパーティション -
1
Enter
# パーティション番号は1 -
Enter
# 先頭セクタは推奨のまま確定 -
+512M
Enter
# 512MB確保できる場所を末尾セクタに指定 -
t
Enter
# パーティションタイプを指定 - (このパーティションは1つ目なので、パーティション番号入力はなし)
-
EF
Enter
# パーティションタイプコードを入力
-
- スワップパーティション
-
n
Enter
-
p
Enter
-
2
Enter
Enter
-
+512M
Enter
-
t
Enter
-
2
Enter
# パーティション番号を指定 -
82
Enter
-
- Linuxルートパーティション
-
n
Enter
-
p
Enter
-
3
Enter
Enter
-
Enter
残りの領域全部を確保 - (デフォルトのパーティションタイプのままでよいので、タイプ変更は不要)
-
ここまでできたら、p
でパーティション一覧を表示し、結果を確認。
Device Boot Start End Sectors Size Id Type
/dev/vda1 2048 1001471 999424 488M ef EFI (FAT-12/16/32)
/dev/vda2 1001472 2050047 1048576 512M 82 Linux swap / Solaris
/dev/vda3 2050048 20971519 18921472 9G 83 Linux
各パーティションには、ドライブのデバイス名vda
とパーティション番号を組み合わせた名前が付きます。
この後のステップでもちょくちょく遣うので、どこかにメモしておくとよいです。
最後にw
でパーティションテーブルを書き込むのを忘れずに。
1-10. パーティションのフォーマット
パーティションが切れたので、実際に使えるようにフォーマットしていきます。
[root@archboot /]# mkfs.fat -F32 /dev/vda1 # EFIシステムパーティションはFAT32
[root@archboot /]# mkswap /dev/vda2
[root@archboot /]# mkfs.ext4 /dev/vda3 # Linuxルートパーティションはext4
1-11. ファイルシステムのマウント
フォーマットが済んだ各パーティションをマウントしていきます。
[root@archboot /]# mount /dev/vda3 /mnt # Linuxルートパーティションを /mnt の下に
[root@archboot /]# mount --mkdir /dev/vda1 /mnt/boot # /mnt/boot を作成しつつマウント
[root@archboot /]# swapon /dev/vda2
これでライブ環境から仮想ドライブに書き込める状態になりました。
前編まとめ
これで、インストールガイドのうち「1 インストールの準備」が完了しました。
「準備だけ?」と思うかもしれませんが、実はすでにインストールガイドページの75%くらいは終わっています。
それだけ準備が大事ってことですね。
前編の範囲だと、UTMの使いやすさに驚きました。
実はUTM公式のVMイメージを配布するサイトがあり、そこからArch Linux ARMのイメージをダウンロードしてくれば、インストール不要で動かせたりします。(この記事はインストールが目的なのでやりませんが。)
あとは、パーティショニングをやるとファイルシステムが身近になっていいですね。
これだけで即実践できるわけではないけど、得体の知れない何か怖いものではないし、少なくとも操作するためのツール(fdisk
など)を知っていると一歩前進できるように思います。
後編へ続きます。(後日公開予定)
明日は @nissy_gp さんです!! 👏
-
試しにx86_64向けArch LinuxのライブISOを入れてみたところ、普通に起動しました。すごい。 ↩