Arch Linux on KVM
KVM(Kernel-based Virtual Machine)上にArch Linuxをインストールするまでの手順とメモ。
ゼロからの環境構築を通じて、Linuxの仕組みを深く理解することを目指します。
なぜ Arch Linux なのか
Arch Linux は他のディストリビューションと一線を画す哲学を持っています。初心者向けの自動設定ツールをあえて排除し、 すべてを自分の手で組み上げることで、Linuxそのものへの理解が深まります。
軽量・高速
不要なパッケージが一切ない、必要最小限の構成から始まります。余分なデーモンやサービスが走らないため、リソース消費が極めて小さく、レスポンスが俊敏です。
高いカスタマイズ性
インストール直後は本当に最小限のシステムだけです。デスクトップ環境からカーネルパラメータまで、すべてを自分好みに構築できます。「自分だけのOS」を作れるのが最大の魅力です。
ローリングリリース
Ubuntu のようなバージョン区切りがなく、常に最新のソフトウェアを使い続けられます。pacman と AUR(Arch User Repository)により、膨大なパッケージを管理できます。
① KVM の準備
KVM(Kernel-based Virtual Machine)はLinuxカーネルに組み込まれた仮想化技術です。 ハードウェアに近いレイヤーで動作するため、VirtualBoxなどと比較して高いパフォーマンスが得られます。
仮想化サポートの確認
まず、CPUがハードウェア仮想化(Intel VT-x / AMD-V)に対応しているか確認します。1以上の数値が表示されれば対応しています。
$ egrep -c '(vmx|svm)' /proc/cpuinfo
KVM 関連パッケージのインストール
QEMU(仮想化エミュレータ本体)、libvirt(仮想マシン管理デーモン)、virt-manager(GUIツール)などをインストールします。
$ sudo apt update
$ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
ユーザーをグループに追加
自分のユーザーを libvirt グループと kvm グループに追加します。これにより、sudo なしで仮想マシンを操作できるようになります。変更を反映するには一度ログアウトが必要です。
$ sudo adduser $USER libvirt
$ sudo adduser $USER kvm
仮想ネットワークの起動
仮想マシンがインターネットに繋がるためのデフォルトネットワーク(NAT)を起動・自動起動設定します。
$ sudo virsh net-start default
$ sudo virsh net-autostart default
# 確認: Stateが "active" になっていればOK
$ sudo virsh net-list --all
② 仮想マシンの作成(Virt-manager)
Arch Linux 公式サイト から最新の ISO イメージをダウンロードし、Virt-manager で仮想マシンを作成します。
推奨リソース割り当て
| 項目 | 推奨値 |
|---|---|
| メモリ | 2048 MiB 以上 |
| CPU | 2 コア以上 |
| ディスク | 20 GiB 以上 |
| ファームウェア | UEFI |
③ インストーラーの初期設定
ISOから起動すると、ライブ環境のBashシェルが立ち上がります。インストール開始前にキーボードとネットワークを確認します。
キーボードレイアウトの設定
日本語配列キーボードを使用している場合、デフォルトのUS配列だと記号の位置がずれて入力ミスの原因になります。 以下のコマンドで日本語配列(JIS 106/109 キー)に切り替えます。
$ loadkeys jp106
ネットワーク疎通確認
KVM のデフォルト仮想ネットワーク(NAT)経由でインターネットに接続できるかを確認します。
pacstrap でパッケージをダウンロードするために、ネットワーク接続は必須です。
$ ping -c 3 google.com
④ ディスクのパーティション設定
UEFI で作成した KVM 仮想マシンでは、ディスク名は /dev/vda になります(物理マシンの /dev/sda に相当)。
cfdisk という対話型ツールでパーティションを切ります。
cfdisk を起動して GPT を選択
UEFI環境では GPT(GUID Partition Table)を使います。起動後に選択画面が出るので gpt を選択します。
$ cfdisk /dev/vda
EFI パーティションを作成
「New」で 512 MiB を作成し、「Type」を EFI System に変更します。UEFIブートに必要なブートローダーファイルがここに置かれます。
Root パーティションを作成
残り全容量で「New」し、「Type」を Linux root (x86-64) にします。OSそのものがここにインストールされます。
「Write」で書き込んで「Quit」
変更はこの時点まで実際には適用されていません。必ず「Write」を選択してからツールを終了してください。
ファイルシステムの作成(フォーマット)
パーティションを作っただけでは使えません。各パーティションをフォーマット(ファイルシステムを書き込む)します。 EFIパーティションは FAT32、ルートパーティションは ext4 が標準的です。
# EFIパーティション(/dev/vda1)をFAT32でフォーマット
$ mkfs.fat -F 32 /dev/vda1
# ルートパーティション(/dev/vda2)をext4でフォーマット
$ mkfs.ext4 /dev/vda2
パーティションのマウント
フォーマットしたパーティションをインストール先としてマウントします。
/mnt がルートになり、その中の /mnt/boot に EFI パーティションをマウントします。
# ルートパーティションを /mnt にマウント
$ mount /dev/vda2 /mnt
# EFIパーティションを /mnt/boot にマウント(--mkdirで自動作成)
$ mount --mkdir /dev/vda1 /mnt/boot
⑤ ベースシステムのインストール
pacstrap はArch Linux独自のインストールスクリプトです。
指定したマウントポイントに、必要なパッケージをネットからダウンロードしてインストールします。
# base: 最小限のシステム、linux: カーネル本体、linux-firmware: ドライバ集、nano: テキストエディタ
$ pacstrap -K /mnt base linux linux-firmware nano
fstab の生成と chroot
fstab は起動時にどのパーティションをどこにマウントするかを記述したファイルです。
genfstab コマンドで自動生成し、arch-chroot で新しいシステムに「入り込みます」。
# UUIDベースでfstabを生成して保存
$ genfstab -U /mnt >> /mnt/etc/fstab
# 新システムのルートに切り替え(ここからは新Arch環境のコマンドになる)
$ arch-chroot /mnt
インストール確認: pacman -Q qemu-guest-agent を実行し、バージョン番号が表示されればディスクへの書き込みは成功しています。
⑥ chroot 内での基本設定
arch-chroot で入った後に行う設定です。これらを忘れると再起動後に Arch Linux が正常に立ち上がりません。
タイムゾーンと時計の設定
システムクロックを日本時間(Asia/Tokyo、UTC+9)に設定します。hwclock でハードウェアクロックも同期させます。
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ hwclock --systohc
ロケール(言語)の設定
システムの言語・文字エンコードを設定します。英語UTF-8を有効にすることで、ほとんどのツールが正しく動作します。
# locale.gen を編集して "en_US.UTF-8 UTF-8" の行頭の # を削除して保存
$ nano /etc/locale.gen
# ロケールを生成
$ locale-gen
# デフォルトロケールとして設定
$ echo "LANG=en_US.UTF-8" > /etc/locale.conf
ホスト名の設定
ネットワーク上でこのマシンを識別するための名前(ホスト名)を設定します。好きな名前に変更して構いません。
$ echo "my-arch-linux" > /etc/hostname
root パスワードの設定
これを忘れると再起動後にログインできなくなります。必ず設定してください。
$ passwd
⑦ ブートローダー(GRUB)の設定
コンピュータを起動するとき、OSを呼び出す役割を担うのがブートローダーです。ここでは最も広く使われている GRUB を使います。
必要パッケージのインストール
GRUB 本体、UEFI起動メニューを書き換える efibootmgr、
そして再起動後にインターネットへ繋がるための networkmanager をまとめてインストールします。
$ pacman -S grub efibootmgr networkmanager
GRUB のインストール(EFIパーティションへ書き込み)
仮想マシンのEFIパーティション(/boot)にブートファイルを書き込み、UEFIファームウェアに「このファイルで起動して」と登録します。
$ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
GRUB 設定ファイルの生成
GRUBにLinuxカーネルの場所を教えるための設定ファイルを生成します。
Found linux image: /boot/vmlinuz-linux と表示されれば成功です。
$ grub-mkconfig -o /boot/grub/grub.cfg
⑧ 再起動と仕上げ
すべての設定が完了しました。新しいシステムを起動させるために環境から脱出し、再起動します。
# 再起動後にネットワークが自動で繋がるようにする
$ systemctl enable NetworkManager
# chroot環境から抜け出す
$ exit
# マウントを解除してから再起動
$ umount -R /mnt
$ reboot
⚠️ 重要: 再起動の際、Virt-manager の設定から Arch Linux の ISO ファイル(仮想CD)を取り外す のを忘れないでください。 ISO が挿さったままだと、また自動でインストーラーが起動してしまいます。