Arch Linuxインストールガイド 2021年版

Linux
この記事は約18分で読めます。

まえがき

最速でArch LinuxからGNOME日本語環境をインストールするまでの手抜きガイド。実質自分用のメモなので一度Arch Linuxをインストールしたことがある人じゃないと分かりづらい可能性が高い。

Arch Wikiを参照しながらインストール作業を行った方が確実だが躓いたときの参考になれば幸甚だ。

最近FFmpeg関連のパッケージをインストール、アンインストールを行っているときにいろんなコーディックを巻き込んで削除してしまい、システムが滅茶苦茶になってしまったので重い腰をあげて約2年ぶりにクリーンインストールすることにした。

今まではGRUB2をブートローダとして使ってきたがこれを機にシンプルで軽快な systemd-boot を使ってみることにした。

インストールガイド - ArchWiki

当環境

今回インストールするシステム

  • CPU:AMD Ryzen 2600X
  • GPU:AMD Radeon RX 580
  • STR:ADATA XPG SX8100 500GB
  • MTB:ASUS PRIME B450 PLUS

インストールするソフトウェア

  • Arch Linux 2021年3月リリース版
  • ブートローダ:systemd-boot
  • カーネル:Linux 5.11
  • デスクトップ環境:GNOME

ブータブルメディアの用意

まずは公式サイトからISOイメージファイルをダウンロードする。

Arch Linux JP Project - ダウンロード

lsblk コマンドで書き込むUSBメモリのデバイス名を確認しよう。当環境では /dev/sdb だった。

$ lsblk

ダウンロードしたISOイメージをUSBメモリに焼く。驚くべきことに cat で書き込み可能だ。

# cat /hoge/hoge/archlinux-2021hogehoge.iso > /dev/sdb

ターミナル上では何も反応がないように見えるがUSBメモリのアクセスランプが点灯しているのが確認できるはずだ。書き込みが終わったらシステムを再起動してUSBメモリからブートしよう。

BIOS設定の確認

Arch Linuxブータブルメディアが立ち上がったらまずBIOSがUEFIモードに設定されているか確認を行う。UEFIとはOSが起動してなくても小洒落たグラフィック環境やユーザに様々な機能を提供する高機能なBIOSだ。

$ ls -l /sys/firmware/efi/efivars

以下のようにバーっとファイル(デバイス)名が表示されれば無事UEFIモードで起動している。なにも表示されなかった場合は通常のBIOSモードだ。

実行結果

問題なければそのまま書き込んだArch Linuxインストールメディアから起動しよう。

前設定

キーボード設定

日本語キーボードを使っている場合はJISキーボードレイアウトを読み込む。

# loadkeys jp106

ネットワークの確認

# ip link

archlinux.jp サーバに3回ピングしてネットに繋がっているか確認する

# ping -c 3 archlinux.jp

システムクロックの更新

システムの時刻を正しくネット経由でシンクロさせる

# timedatectl set-ntp true

システムクロックがシンクロしているか確認する

# timedatectl status

パーティション管理

今回はディスクのパーティションをこのように区切る。データを初期化しても良いディスクであることを前提とする。

SSDでSWAP領域はいるのかどうか疑義があるようだが今回はあえて作ることにした。

マウントポイントタイプ容量
EFIブートパーティション/bootEFI512MB
スワップパーティションswapSWAP32GB
ルート/ext4残り

ここでは gdisk でパーティション管理をするが、GUIで操作できる cgdisk のほうが初心者は扱いやすいと思う。失敗すると面倒なことになるので自分のやりやすいツールを使ってパーティショニングしよう。

# gdisk /dev/sda
Command : p #デバイスリストを表示する

/dev/rom/dev/loop/dev/airoot と言ったデバイスは実デバイスではないので無視して良い。

パーティションテーブルとパーティション

パーティションテーブルの作成

# gdisk /dev/sda
Command : o

/dev/sda1  EFIパーティションを作る。空白の部分は空白のままエンターキーを押下。

Command : n 
Partition number : 1
First sector :  
Last sector : 512M
Hex code or GUID : ef00

/dev/sda2 SWAPパーティションを作る。

Command : n 
Partition number : 2
First sector : 
Last sector : 32G
Hex code or GUID : 8200

/dev/sda3 ルート・パーティションを作る。

Command : n
Partition number : 3
First sector : 
Last sector : 
Hex code or GUID :

書き込みを行う。

Command : w

正しく書き込まれたか確認する。

# lsblk
実行結果

NVMe の場合

M.2プロトコルのSSDの場合はSATA接続のドライブと異なりデバイス名が少々長くなるのでややこしい。

NVMeドライブと接続した状態で lsblk を実行すると以下のように表示される。これはまだフォーマットされていない状態だ。

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    1   7.2G  0 disk
|-sda1   8:1    1   7.2G  0 /part /run/archiso/boot/mnt
nvme0n1 29:0    0 476.9G  0 disk

cgdisk でパーティションを編集する。以下のようにちゃんとNVMeドライブを定義しないとパーティショニングツールが勝手にSATAドライブを選択してしまう場合があるので注意しよう。

$ cgdisk /dev/nvme0n1

未フォーマットの状態だと以下のような警告文が表示される。GPTパーティションテーブルがないかディスクが破損している旨の通知だ。GPTパーティションテーブルを修復したい場合は gdisk や他のツールが良いよとのこと。

Warning! Non-GPT or damaged disk detected! This program will attempt to convert to GPT form or repair damage to GPT data structures, but may not succeed. Use gdisk or another disk repair tool if you have a damaged GPT disk.

パーティションを編集した後再び lsblk を実行すると以下のようになる。

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    1   7.2G  0 disk
|-sda1        8:1    1   7.2G  0 /part /run/archiso/boot/mnt
nvme0n1     259:0    0 476.9G  0 disk
|-nvme0n1p1 259:1    0     1G  0 disk
|-nvme0n1p2 259:2    0 475.9G  0 disk

/dev/nvme0n1p1 を EFI ブートパーティション。 /dev/nvme0n1p2 をルートパーティション。

パーティションをフォーマット

EFI System Partition(ESP) はFAT32ファイルシステムでしか動かないのでそれでフォーマットをする

# mkfs.fat -F32 /dev/sda1

SWAPパーティションをフォーマット

# mkswap /dev/sda2

ルートパーティションのext4ファイルシステムにフォーマット

# mkfs.ext4 /dev/sda3

マウント

ここからは分割したパーティションにそれぞれマウントポイントを設定し、インストーラ

スワップ・パーティションのマウントポイントを指定

# swapon /dev/sda2

ルート・パーティションをマウント

# mount /dev/sda3 /mnt

必ずルートディレクトリをマウントしてからブートディレクトリを作成してマウントする。そうしないとブートディレクトリが消滅してしまう。

# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot

インストール

基本パッケージとカーネル、ファームウェアをインストールする。Archブータブルメディアでしか使えない pacstrap コマンドを用いてお手軽にさくっとインストールできる。

# pacstrap /mnt base linux linux-firmware

ディスクパーティションやファイルシステム、マウントに関する設定を司る fstab を生成する。中身を覗いてみて必要ならば fstab を編集する。

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

chroot を使って先程マウントしたディレクトリをルートディレクトリとして扱う。

# arch-chroot /mnt

ローカライゼーション

タイムゾーンを設定する。Tab でオートコンプリートを使うと便利だ。

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

hwclock ハードウェア・クロックをシステム・クロックにシンクロさせる。

# hwclock --systohc

好きなエディタをインストールする。ここでは私の大好きな nano エディタを使う。去年あたりまではインストールメディアに含まれていたのだがいつの間にか除外されてしまった。なのでインストールしなければならない。

# pacman -S nano

ローケルの設定を行う。これを設定するとターミナルやデスクトップ環境などローケルに対応しているプログラムで多言語表示などを行えるようになる。

# nano /etc/locale.gen

以下の2行をアンコメント、#を削除する。

en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

Ctrl + X で保存して nano を終了する。

locale-gen を生成する

# locale-gen

以下のコマンドを実行し現在の言語設定を表示する

# localectl

日本語設定になっていなければ /etc/locale.conf を以下のように編集する

# nano /etc/locale.conf
LANG=ja_JP.UTF-8

ネットワーク設定

PCのホスト名を設定する。他のシステムと通信を行う際などに使うホスト名を設定する。

# nano /etc/hostname

### 任意のホスト名を設定 ###

hogehoge

hosts に先程きめたホスト名を入れる

# nano /etc/hosts
127.0.0.1	localhost
::1		localhost
127.0.1.1	hogehoge.localdomain	hogehoge

Initramfs

mkinitcpio を実行

# mkinitcpio -P
実行結果

パスワードの設定

ルートユーザのパスワードを設定する

# passwd
New password : 
Retype new password :

ブートローダ(systemd-boot)

systemd 付属の systemd-boot ブートローダを使う。 systemd-boot は systemd の一部であり新たにパッケージをインストールする必要がなく、systemd から直接特定のブートオプションに再起動することができる。

systemd-boot はパッケージのインストールが不要だが、GRUB 同様 EFIシステムパーティションに bootctl をインストールする必要がある

確認作業

/boot ディレクトリ内にブートイメージが作られているか確認する。

# ls -la --color /boot

問題がなければ以下のように表示される。イメージファイルがなければブートパーティションのマウントをミスっている可能性が高い。

実行結果

インストール

bootctl のインストール

# bootctl install
実行結果

ブートディレクトリにEFIやloaderディレクトリが作成され、起動に必要なファイルがブートディレクトリにコピーされる。

マイクロコードのインストール

ついでにマイクロコードもインストールしておく。マイクロコードはIntelやAMDなどのCPUメーカーから提供されているセキュリティパッチみたいなもの。Linuxカーネルが読み込まれるときにこのコードが読み込まれる。マザーボードベンダーがだらしなくてCPUの脆弱性をついたハックをされずに安全に運用できるようにする仕組み。

# pacman -S amd-ucode

Intel CPUの場合は

# pacman -S intel-ucode

ブートローダの設定

loader ディレクトリへ移動する

# cd /boot/loader

loader.conf が生成されているか確認する

# ls -la --color
# nano loader.conf

タイムアウト時間が3秒だと(私が)反応できないので5秒に変える。 editor no で勝手に他のユーザにブートオプションを改変できないようにする。default オプションには任意の ファイル名.conf を入れる

timeout 5
editor no
default arch.conf

Ctrl + X で保存して終了

ブートエントリの設定

エントリーディレクトリへと移動する

# cd /boot/loader/entries

エディタで先程決めたエントリ設定ファイルを作り、編集する。

# nano arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /amd-ucode.img #Intelの場合は intel-ucode.img
initrd  /initramfs-linux.img
options root="UUID=****" rw

ルートパーティションのUUIDを入力する必要がある。上記最後の行の「****」にあたる場所。UUIDをメモして手打ちするのは手間なので blkid を使って  arch.conf へと出力する。

# blkid /dev/sda3 >> arch.conf

UUIDだけ残して削除する。最終的には arch.conf は以下のようになる。

title   Arch Linux
linux   /vmlinuz-linux
initrd  /amd-ucode.img
initrd  /initramfs-linux.img
options root="UUID=a51de28a-9ed9-4555-a3fd-0234eb3ffe4c7" rw

フォールバックエントリを作る

カーネルのフォールバックイメージのエントリを作成する。
ブートが失敗したときに使えるかもしれない。

さきほど作成したエントリを名前を変えて複製し下記のように編集する。

# cp arch.conf arch-fallback.conf
# nano arch-fallback.conf
title   Arch Linux Fallback Image
linux   /vmlinuz-linux
initrd  /initramfs-linux-fallback.img
options root="UUID=a51de28a-9ed9-4555-a3fd-0234eb3ffe4c7" rw

systemd-boot が自動更新するようにする

systemd をアップデートするたびに bootctl update を実行しなければならない。うっかり忘れてしまうことが多いので自動化する。

好きなエディタで /etc/pacman.d/hooks/ 下に .hook ファイルを作成.

# nano /etc/pacman.d/hooks/systemd-boot.hook
[Trigger]
Type = Package
Operation = Upgrade
Target = systemd

[Action]
Description = Updating systemd-boot
When = PostTransaction
Exec = /usr/bin/bootctl update

これで一旦インストール作業は終了とする。

chroot 環境を抜けて再起動する。

# exit
# reboot

以下おまけ

ネットワークに接続

Arch Linux のインストールメディアは networkd の仮設定がなされているため自動で接続してくれたが、インストール作業後に Linux を起動するとこれらの設定がリセットされてしまっている。このため今度は networkd の設定を自分で行わなければならない。予め NetworkManager などをインストールしていればこの手間は省ける。

デバイスに接続されているネットワークデバイスを調べる。

# ip link
実行結果

networkd の設定を行う。 ip コマンドで取得したデバイス名を用いてルールを作る。

# nano /etc/systemd/network/dhcp.network

セキュリティ的によろしくないが Name=en* といった感じでワイルドカードを使うのも手。

[Match]
Name=enp0s3

[Network]
DHCP=yes

以下の2つの systemd サービスを起動させる。

# systemctl start systemd-networkd.service
# systemctl start systemd-resolved.service

ユーザ

ユーザを作成する。

# useradd -m -G wheel -s /bin/bash hogehoge

-m オプションはホームディレクトリを作成、 -G はグループリストを指定する。 ユーザ hogehoge を特権コマンドも実行できる wheel ユーザグループに指定。 -s はログインシェルを指定するオプション。

ユーザのパスワードを設定する。

# passwd hogehoge

sudo

いつまでもスーパーユーザーで操作しているのは危険なので sudodoas をインストールして都度権限を取得するようにする。今回 doas はまだ勉強中なので sudo を入れる。

# pacman -S sudo

wheel ユーザグループに sudo 権限を付与する。

# nano /etc/sudoers

以下の行を探してアンコメントする。

%wheel ALL=(ALL) ALL

スーパーユーザを抜ける。

# exit

デスクトップ環境の導入(GNOME)

あとは自分のお好みのデスクトップ環境、KDE Plasma なり GNOME なりをインストールすれば良い。最近は Xサーバや Wayland も勝手にインストールしてくるので別途インストールの必要はなくなった。

$ sudo pacman -S gnome gnome-extra

AMD 環境ならばスイスイインストールできるが NVIDIA 製のグラボを搭載してる場合はひと手間必要だがここでは割愛する。

GDM(GNOME Display Manager)と NetworkManager を有効化する。

$ sudo systemctl enable gdm && sudo systemctl enable NetworkManager

再起動したら GDM が起動するはずだが、今回 GDM が起動しないトラブルが発生した。おそらく言語関係でクラッシュを起こしているというのが筆者の予想。

トラブルシューティング

GDMが真っ黒になったまま起動しない場合は Ctrl Alt F2 同時押しで他のターミナル環境に入る。ログインして以下のコマンドで GDM を再起動させる。

$ sudo systemctl restart gdm

GNOMEにログインしたあとに日本語フォントをインストールしたり言語の設定を日本語に変えると直った。

$ sudo pacman -S noto-fonts-cjk

念のために /etc/locale.conf の LANG= が下記のようになっていることを確認しよう。

LANG=ja_JP.UTF-8 UTF-8

数回再起動を試すと勝手に直る可能性があるので試してみよう。

Image by Esa Riutta from Pixabay

このチュートリアルが終わったあとにした設定などを下記の記事に載せたのでよろしければどうぞ。

コメント

タイトルとURLをコピーしました