2021年版Arch Linuxインストール備忘録

2021年版Arch Linuxインストール備忘録

昨日自宅のメイン PC の OS を Arch Linux をインストールしました。 128GB の NVMe SSD を使っていたのですが、 docker pullpacman -Syu すると度々 Disk Full になって限界だったので、1TB の SSD に換装することにしました。 最後に Arch Linux をインストールしたのは 5 年以上前で知識のアップデートが必要だったので作業メモとして残しておきます。

インストールディスクの作成

インストールディスクは家に余っていた USB ディスクに作りました。 クラウド上にデータを保存するのが当たり前になった今日、USB ディスクを使ったのも 5 年ぶりくらいかもしれません。 Arch Linux のダウンロードサイトからインストーラーの ISO を取得して、USB flash installation mediumにある方法でインストールディクスを作ります。 これは以前から変わらず dd でポンッと作ることができます。

# dd bs=4M if=archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress

また dd だけではなく cat や cp による方法も紹介されており、Unix らしくていいなと思いました。

データのバックアップ

自分のマザーボードは M.2 スロットが 1 つしかありません。 新しい NVMe SSD に載せ替える前に、今のディスクからバックアップしておきます。 /home だけではなく /etc/usr も対象とします。 必要なファイルを tar で固めても良いのですが、dd で取得したデータはあとからマウント可能と言うのを知ったのでそちらの方法でバックアップを作りました。

起動中の OS でバックアップを実行するのは危険なので、先程作成したインストールディスクから起動してバックアップデータを作成します。 HDD に十分な容量が余っていたので、そのディスクをマウントして dd の結果を保存します。 余分なディスクがない方は、dd の出力を s3 などに流してクラウドに保存できるかもしれません(未検証なのでできなかったらすみません)。

# sudo mount /dev/md127 /mnt/workspace/   # /dev/md127はHDDで構成しているRAID
# dd bs=4M if=/dev/nvme0n1 of=/mnt/nvme0n1.img status=progress

無事バックアップが完了すれば、一度マシンをシャットダウンして新しい NVMe SSD に交換します。

Arch Linux のインストール

基本的にInstallation guideに従いますが、ディスク構成とブートローダーの手順のみ記述します。

ディスク構成

新しい NVMe SSD が認識されたら、まずはパーティションの作成とファイルシステムの初期化です。 パーティションは GPT(MBR では無い方)で作成します。 これまでは //home を別パーティションで作ってたのですが、役に立った覚えがないので同一パーティションにしました。 SWAP 領域は 32GiB メモリに対して最適なサイズがわからなかったのですが、Red Hat のドキュメントを参考に 4GiB にしました。

UEFI から起動するには EFI system partition (ESP) が必要で、容量は 260 MiB 以上が推奨です。 Installation guide には ESP のマウント先は /efi または /boot と書いてありますが、ESP のページ にその違いが書いてあります。 ESP の領域が小さかったり明示的に分けたい場合は /efi/boot を分けるそうなのですが、特別な理由がないので /boot にマウントしてブートローダーとカーネルの両方を配置します。 最終的なパーティション構成は以下のとおりです。

nvme0n1     259:0    0 931.5G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part  /boot
├─nvme0n1p2 259:2    0     4G  0 part  [SWAP]
└─nvme0n1p3 259:3    0   927G  0 part  /

ブートローダー

以前は GRUB を使っていましたが、現在は systemd がブートローダーを内包しているのでそちらを利用してみます。 インストール先に chroot した状態で、bootctl コマンドでブートローダーとなる EFI アプリケーションを展開します。

# bootctl install

ブートローダーおよびエントリーの設定をそれぞれ保存します。

# /boot/loader/entries/arch.conf

title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img   # Intel CPUなら事前にintel-ucodeパッケージをインストールしておく
initrd /initramfs-linux.img
# /dev/disk/by-uuid からディスクのUUIDを確認できる
options root="UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" rw
# /boot/loader/entries/arch-fallback.conf

title Arch Linux (fallback initramfs)
linux /vmlinuz-linux
initrd /intel-ucode.img   # Intel CPUなら事前にintel-ucodeパッケージをインストールしておく
initrd /initramfs-linux-fallback.img
# /dev/disk/by-uuid からディスクのUUIDを確認できる
options root="UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" rw
# /boot/loader/loader.conf

#timeout 3
#console-mode keep
default arch.conf

bootctl status で正しく設定できているか確認します。

# bootctl status

再起動して NVMe SSD から Arch Linux が起動するか確認します。

再起動後のセットアップ

無事 Arch Linux が起動できることを確認したら、次はデスクトップ環境として利用できるようにセットアップします。 基本的にGeneral recommendationsに従いますが、特筆すべき手順だけ抜粋します。

ネットワーク

以前は dhcpcd を使っていましたが、現在は systemd からネットワークの設定ができます。 我が家のネットワーク構成は DHCP でアドレス設定をするので、 /etc/systemd/network 以下に設定を書きます。

# /etc/systemd/network/00-enpXsXXXX.network

[Match]
# ip linkコマンドでインターフェイスの名前を確認できる
Name=enpXsXXXX

[Network]
DHCP=yes

systemd-networkd および systemd-resolved サービスを有効化します。 ping archlinux.org が成功すれば大丈夫です。

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

ディスプレイマネージャ

以前は SLiM というディスプレイマネージャーを使っていましたが今はメンテナンスされていないようです。 軽量ディスプレイマネージャーである xdm の、Arch Linux 向けに手が加えられている xdm-archlinux を利用します。 以下のパッケージを pacman でインストールします。

$ sudo pacman -S xdm-archlinux xterm

以下のコマンドで xdm の起動と有効化をします。

# systemctl enable --now xdm-archlinux.service

xdm が起動すればログイン画面がでますが、.xsession ファイルが必要です。 ログイン時に Enter キーではなくF1 キーでログインすることで緊急用の xterm が起動します。 .xsession に Window Manager の設定を書いて、Enter キーでログインができれば成功です。

$ touch ~/.xsession && chmod +x ~/.xsession
# ~/.xsession

# fcitxを利用する場合
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS='@im=fcitx'
fcitx

# Awesome WMを利用する場合
awesome

ビデオドライバ

うちは NVIDIA のグラフィックカードを使っているので、ドライバーのインストールをします。

$ sudo pacman -S nvidia

X の設定を生成しログインし直して NVIDIA のドライバが有効になれば OK です。

$ sudo nvidia-xconfig

オーディオ

ALSA は Linux 上で音を出すためのモジュールです。 昔のアプリケーションは音を出すために ALSA とやりとりしてたのですが、現在 Firefox などは PulseAudio とやり取りします。 オーディオの設定をするために、PulseAudio と ALSA のユーティリティをインストールします。

$ sudo pacman -S alsa-utils pulseaudio

次に出力するデフォルトのデバイスを設定するために、aplay コマンドでデバイスカードの番号を取得します。 うちでは JBL Pebbles を使っています。

$ aplay -l
...
card 2: Pebbles [JBL Pebbles], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
...

利用するオーディオデバイスが card 0 ならとくに何もする必要はありませんが、そうでない場合はデフォルトで利用するカードを ~/.asoundrc に保存します。

# ~/.asoundrc

defaults.pcm.card 2   # デフォルトの出力先
defaults.ctl.card 2   # デフォルトの設定先

そしてログインし直すか、pulseaudio -D で PulseAudio サーバーを起動します。 PulseAudio で音を鳴らせる paplay コマンドで期待するデバイスから音が流れ、ALSA の alsamixer コマンドでボリュームが調整できれば大丈夫です。

$ paplay /usr/share/sounds/alsa/Noise.wav
$ alsamixer

以前の環境の復元

グラフィックとオーディオの設定ができれば、Linux デスクトップの設定もほぼ完了と言っても過言ではないです。 あとは以前の設定を参考にしながら必要な設定をします。

以前の NVMe SSD からバックアップしたデータは mount コマンドでマウントできます。 バックアップデータの中に複数のパーティションが存在するので、マウントするときにどのパーティションを使うかを知る必要があります。 まずはバックアップデータのセクタサイズとパーティションのオフセットを fdisk または gdisk コマンドで確認します。

$ gdisk -l /workspace/nvme0n1.img
...
Sector size (logical): 512 bytes
...
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00
   2         1050624        62914559   29.5 GiB    8300
   3        62914560       250068991   89.2 GiB    8300

セクタサイズと開始位置をかけ合わせた数を、mount コマンドの offset オプションに渡します。 これで /mnt 以下から以前の NVMe に保存されていたデータにアクセスできます。

$ sudo mount -o ro,loop,offset=$((512 * 1050624)) /workspace/nvme0n1.img /mnt/

以前の設定ファイルが欲しくなれば /mnt からコピーできます。 またルートディレクトリをマウントしたのなら、chroot でルートディレクトリを新たに切り替えることで、前のディスク上で作業をすることもできます。

$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo mount --type tmpfs tmpfs /mnt/tmp  # chroot以下の作業の記録は /tmp にできる
$ sudo chroot /mnt

chroot した環境でコマンドの結果(例えばインストール済みパッケージに一覧など)を /tmp に保存すれば、ホスト側からは /mnt/tmp からアクセスできます。

まとめと感想

週末に Arch Linux インストールチャレンジをしましたが、Linux の再勉強と頭の体操にちょうど良かったです。 Arch Linux の wiki は、Arch Linux ユーザー以外にも非常に価値のあるドキュメントで、サーバー管理者やエンジニアにとっては必読書とも言えます。 また昔話にはなりますが、ブートローダー、グラフィック、サウンド周りの設定がものすごく簡単になりました。 Linux が起動しなくなったり音が出なくなったときに、ドキュメントを必死に探して、設定を試行錯誤した青春時代が懐かしく感じます。


Profile picture

Shin'ya Ueoka

B2B向けSaaSを提供する会社の、元Webエンジニア。今はエンジニアリング組織のマネジメントをしている。