まえがき
最速でArch LinuxからGNOME日本語環境をインストールするまでの手抜きガイド。実質自分用のメモなので一度Arch Linuxをインストールしたことがある人じゃないと分かりづらい可能性が高い。
Arch Wikiを参照しながらインストール作業を行った方が確実だが躓いたときの参考になれば幸甚だ。
今まではGRUB2をブートローダとして使ってきたがこれを機にシンプルで軽快な systemd-boot
を使ってみることにした。
当環境
今回インストールするシステム
- 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イメージファイルをダウンロードする。
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ブートパーティション | /boot | EFI | 512MB |
スワップパーティション | swap | SWAP | 32GB |
ルート | / | 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
いつまでもスーパーユーザーで操作しているのは危険なので sudo
か doas
をインストールして都度権限を取得するようにする。今回 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
このチュートリアルが終わったあとにした設定などを下記の記事に載せたのでよろしければどうぞ。
おわり
コメント