Linuxを日常的に使う実験ブログ

【2022年版】Arch LinuxをUEFI + GPT環境にインストールする

 2022-07-24

 Arch Linux

今回のテーマは「【2022年版】Arch LinuxをUEFI + GPT環境にインストールする」です。2015年にArch LinuxをUEFI + GPT環境にインストールするという記事を書きましたが、細かい部分で内容が古くなってしまっており、2022年版を書いてみました。目新しい内容はないですが、2015年とはリポジトリのパッケージ構成が異なっていたり、初期インストールされるツールが異なるなどの点が異なっており、単純な記事の修正よりは書き直したほうが適当と判断しました。バージョンリリースのOSですと、バージョンごとのインストール方法を記事化すれば良いのですが、決まったバージョンを持たないローリング・リリースの場合インストール記事の扱いは難しいなと感じました。

それにしてもあれから7年も経ったのですね。(遠い目)

UEFI + GPTが主流化する流れは変わらず

前述のとおり、Arch LinuxのUEFI + GPT環境へのインストール記事を書いたのが2015年でした。その頃、既にUEFIはBIOSに取って代わる存在となっていましたが、2022年の現在ではその傾向は更に進んだと思います。

UEFI関連の話題としては2021年に発表されたWindows11がシステム要件としてシステムファームウェアがUEFI + セキュアブート対応としている点でしょうか。これによりWindows 11はBIOS搭載マシンにはインストールできないということになります。現在市場に新規で出回っているマシンのほとんどがUEFI対応マシンであることを考慮すると、Windows 11が原因でBIOS排除に拍車が掛かるとは思えませんが、それでも近い将来BIOSってなに?って世代が出てきそうですね。

インストールメディアの入手

では早速作業に入っていきましょう。まずはArch Linuxの公式ページよりisoファイルをダウンロードしましょう。Arch LinuxはGUIのついたLive DVDは配布しておらず小さな容量のインストール用メディアを配布しています。

isoファイルをダウンロードしたらCDに焼くか、USBスティックを作成します。USBスティックをLinuxで作る場合はddコマンドを利用して作成できます。

dd bs=4M if=/path/to/isofile of=/dev/sdX status=progress && sync

※sdXはデバイス名を表しています。

インストール作業

インストールメディアの起動

CDかUSBスティックからArch Linuxを起動しましょう。起動メディアの順番はUEFIファームウェアで調整しておきましょう。

インストールメディアが無事起動するとGRUB画面が出ます。

GRUB画面

起動すると自動でrootとしてログインします。lynxが入っており、インストール作業に困ったらinstallation_guileコマンドでArchwikiのページを見ることができます。(ただし英語です)

キーボード設定

以下コマンドでキーボードレイアウトを日本語化しておきましょう。

loadkeys jp106

ネットワークの設定

有線で接続している場合は自動でインターネットに接続すると思いますが、ネットワークインターフェースが認識、有効化されているかを確認してください。

ip link

もし無線の場合はiwctlを使って無線ネットワークに接続してください。

次にインターネットに接続可能か確かめてみましょう。以下のようにpingコマンドで確認します。

ping -c 3 archlinux.jp

パーティショニング

UEFI + GPT環境にインストールする際に気をつけなければ行けないのが、ESP(EFI System Partition)を設ける必要があることです。ESPは少なくとも300MiBの容量が推奨されていますが、512MiB程度の容量を確保しておいたほうが良いでしょう。

今回のパーティション構成は以下表を想定しています。

デバイスマウント位置フォーマットタイプ
sda1/bootFAT32ESP
sda2/ext4Linux filesystem
sda3-swapLinux swap

パーティショニングにはgdiskを用いました。もしGPTパーティションテーブルが作成済みならばcgdiskでも良いと思います。パーティションツールについてはLinuxで使えるパーティション管理ツールの比較もご覧ください。

以下コマンドでgdiskを起動します。今回は/dev/sdaにGPTパーティションテーブルがない前提とします。

gdisk /dev/sda

以下はgdisk内のコマンドです。上記表のパーティショニングを行うための操作例を示します。

[gdiskの操作例]

#GPTパーティションテーブルを作成
[gdisk] g #これでGPTパーティションテーブルを作成

#sda1パーティションを作成
[gdisk] n #新規パーティション作成
[gdisk] Partition number: 1 enterを押下
[gdisk] First sector: enter押下
[gdisk] Last sector: +512MiB
[gdisk] Hex code or GUID: EF00

#sda2パーティションを作成
[gdisk] n
[gdisk] Partition number: 2
[gdisk] First sector: enter押下
[gdisk] Last sector: +37.5GiB
[gdisk] Hex code or GUID: 8300

#sda3パーティションを作成
[gdisk] n
[gdisk] Partition number: 3
[gdisk] First sector: enter押下
[gdisk] Last sector: +2GiB
[gdisk] Hex code or GUID: 8200

ファイルシステムの作成

各パーティションにファイルシステムとスワップを作成していきます。以下コマンドを実行します。

mkfs.ext4 /dev/sda2
mkfs.vfat -F 32 /dev/sda1 #ESP用
mkswap /dev/sda3 #swap作成

ファイルシステムのマウント

作成した各パーティションをシステムにマウントし、swapを有効化しましょう。

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
swapon /dev/sda3 #swapの有効化

基本的なパッケージのインストール

下準備はできました。では/mntディレクトリにArch Linuxの基本的なパッケージをインストールしましょう。以下コマンドを実行します。

pacstrap /mnt base linux linux-firmware nano

今回はエディタとしてnanoを入れています。お好みに応じてnano, vi, vim, neovimなどから選択してください。この段階でエディタをインストールしなくても後ほどpacmanからインストールすることができます。

尚、arch-chrootでシステム内に入ったあとでpacmanでインストールすることも可能です。

fstabの作成

以下コマンドを実行してfstabを作成します。fstabはシステムがファイルシステムをマウントするための設定ファイルです。手動で作成しても構いません。

genfstab -U /mnt >> /mnt/etc/fstab 

UUIDを用いる場合は-Uオプションを、ラベルを用いる場合は-Lオプションを用いてください。作成されたfstabを表示して確認することをオススメします。以下コマンドで確認できます。必要に応じて修正をしてください。

cat /mnt/etc/fstab

ルートパスワードの設定

rootユーザー用のパスワードを決めましょう。

passwd
# 新規パスワードを入力

ログインユーザーの作成

この作業は後回しに出来るのですが、ここで作成してしまいます。

useradd -m -G wheel -s /bin/bash <user名>
passwd <user名>
# ユーザー用のパスワード入力

コンソールキーマップの設定

コンソールでのキーマップを設定しましょう。ここで設定をしておくことでログイン後に毎回loadkeysコマンドを打たなくて済むようになります。

nano /etc/vconsole.conf

vconsole.confの設定例です。以下のように編集します。

KEYMAP=jp106
FONT=Lat2-Terminus16

尚、コンソールフォントは/usr/share/kbd/consolefonts/以下にありますので一覧を見たい場合は以下のコマンドで確認できます。

ls /usr/share/kbd/consoletrans/ | less

タイムゾーンの設定

タイムゾーンの設定は/usr/share/zoneinfo/<地域>/<都市>にあります。このリンクを/etc/localtimeにリンクを貼りましょう。

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ハードウェアクロックをシステムの時刻に設定し/etc/adjtimeを生成します。

hwclock -w

ローカリゼーションの設定

まずは/etc/locale.genをエディタで開き、en_US.UTF-8と他のロケール(ここではja_JP.UTF-8)をコメントアウトします。そして以下コマンドを実行してロケールを生成します。

locale-gen

次に/etc/locale.confを作成し、以下のように編集します。なぜen_USなのか?ja_JPではないのか?という疑問を抱く方もいるかと思いますが、ここで日本語にしてしまうとコンソール画面が文字化けしてしまいます。ですので、コンソール画面では英語、Xorg(またはWayland)を立ち上げてGUI画面となった場合には日本語を使うようにすると良いと思います。(GUIの導入と日本語化については本稿では割愛します)

LANG=en_US.UTF-8

ネットワークの設定

今回はNetworkManagerを導入してネットワークの設定を行います。dhcpcdパッケージを導入しても良いですが、各ネットワーク設定ツールは排他的な関係にあるため、同時にサービスを有効化することは避けてください。NetworkManager以外の選択肢を選びたい場合など、ネットワークの設定に関する詳細はArchwikiをご覧ください。

pacman -S NetworkManager
systemctl enable NetworkManager

ブートローダのインストール

UEFI + GPT環境へのインストールがBIOS + MBR環境と最も異なる点はこのブートローダのインストールだと思います。以下のコマンドでブートローダをインストールします。ここでは(arch-root環境下での)/bootがEPSであるという前提で作業を進めていいます。

pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

VirtualBox等のUEFIのファームウェアによってはefiファイルを特定の場所、名前で指定しないと検知できない場合があります。以下のコマンドでファイルをコピーしておきます。

mkdir /boot/EFI/boot/
cp /boot/EFI/GRUB/brubx64.efi /boot/EFI/boot/bootx64.efi

再起動

ではarch-chroot環境から抜け出して再起動しましょう。rebootコマンドで再起動してもよいのですが、ここではメディアを取り出すことも考慮して一旦システムをシャットダウンします。

exit  # これでchroot環境を出る
poweroff

インストールメディアを取り外した後に再度システムを立ち上げます。GRUB画面から無事にArch Linuxを起動できればOKです。お疲れ様でした。

最後に

Arch Linuxのインストール作業はGUIインストーラがないため敬遠されることもありますが、カーネルのビルド作業もなく、パッケージはバイナリでインストールできるため、GentooやCRUXに比べると非常に楽だと思います。Ubuntu等のインストールのハードルが低いLinuxでコマンドライン操作に慣れたらArch Linuxに挑戦してみるというのも面白いと思います。皆様のLinuxライフ向上に本記事が何か貢献できれば幸いです。