はじめに
家に手頃なPCが眠っていたので、Windowsを消して前から気になっていたArch Linuxをインストールしてみることにしました。デュアルブートではないです。PC自体が6年前の代物で、CPU自体も第7世代のCORE i5とかなので、性能的に不安だったからです。あと家にWindows機が別途あったので特にWindows機が必要じゃなかったというのもあります。
Arch Linux自体については、Arch Linuxのすゝめとか参考になります。
この記事の内容は、以下に基づいています(2023年3月20日アクセス)。この公式ガイドと突き合わせながらこの記事を使っていただくと一番いいかもしれません。
インストールメディアを作成する
以下を参考にUSBを使ってインストールメディア(ブータブルUSB)を作成しました。単にISOイメージをUSBに置くだけではダメですよ。
あと、インストールメディアを作成するとUSB内にあるファイルは全て消えるので注意してください。インストールメディアにしたUSBはUSBとして普通に使えなくなりますが、初期化すれば元に戻ります。僕のはバッファローのやつなので、バッファローの場合の初期化方法が説明された記事を置いときます。
僕はmacユーザーなので、ここではmacでUSBを使ってインストールメディアを作成する方法を説明します。macにUSBを挿したら、以下の手順でインストールメディアを作成します。
まず、USBドライブが何という名前で認識されているのかを確認します。以下のコマンドを実行すると、USBデバイスは/dev/disk5 (external, physical)
のように表示されます。僕の環境では/dev/disk5
でしたが、/dev/disk2
だったり他の数字になっていることもあるでしょう。
diskutil list
次にUSBデバイスをアンマウントします。/dev/disk5
の部分は適宜変えてください。
diskutil unmountDisk /dev/disk5
最後にISOイメージファイルをUSBデバイスにコピーして完成です。ISOイメージファイルのパスは自分の環境に合わせて変えてください。またdisk5
の前にr
を指定してrawモードを使うことで高速に転送できるようにしています。もちろんこのrdisk5
も適宜変えてください。
sudo dd if=path/to/archlinux-2023.03.01-x86_64.iso of=/dev/rdisk5 bs=1m
インストールメディアが完成するとUSBは普通のUSBとして使えなくなるので、画面上に「「セットしたディスクは、このコンピュータで読み取れないディスクでした。」と表示されますが、「無視」を押してください。
BIOSの設定を一部変更してからブートする
次に生贄にするWindows機にUSBを挿してから、BIOSの設定を変更して、ブートします。
BIOSの開き方はメーカーによってまちまちだと思うので調べてください。僕のは電源を入れてから、メーカーのロゴが表示されているときにF2キーを連打することで開くことができました。
BIOSを開いたら、ブートする前にセキュアブートを無効化する必要があります。またBoot Device Priorityを変更して、USB HDDを一番先頭にし、HDDを2番目にします。
ノート: Arch Linux インストールイメージはセキュアブートをサポートしません。インストールメディアから起動するには、セキュアブートを無効化 する必要があります。インストールが完了した後に セキュアブート をセットアップすることもできます。
最後に設定を保存してブートすればArch Linuxの初期画面が開きます。一応、僕のPCの場合の方法が書かれた記事を置いときます。
作業ログを作成する
作業前に、作業ログを取るようにしましょう。作業ログを取ることで、後から分析したり、質問したりするのに使うことができるので便利です。script <ファイル名>
と実行することができます。単にscript
と実行すると、typescript
というファイルが生成されます。
script
exit
を実行して、作業ログの記録を終了できます。a
オプションをつけてあげることで、再度同じファイルに作業ログを追記できます。
script -a
キーボードレイアウトの設定
デフォルトのキーボードレイアウトはUSキーボードとのことなので、以下のコマンドを実行して日本語キーボードレイアウトに変更します。
loadkeys jp106
インターネットに接続する
ネットワークインターフェースの確認
以下のコマンドでネットワークインターフェースが認識・有効化されていることを確認します。このとき、state DOWN
となっていても問題ありません。<BROADCAST,MULTICAST,UP,LOWER_UP>
などとなっている部分にUP
があればそのネットワークインターフェースは有効化されています。一緒にネットワークインターフェースの名前も確認しておきましょう。一番上のLOOPBACK
などと書かれている方ではないです。僕の場合はwlan0
という名前でした。
ip link
もしネットワークインターフェースがUPしてないようでしたら、以下のコマンドで有効化します。wlan0
の部分は適宜変えてください。
ip link set wlan0 up
無線カードの確認
また無線カードがrfkill
によってブロックされているかを確認します。以下のコマンドを実行したとき、Soft blocked: yes
または Hard blocked: yes
のいずれかが表示された場合、無線カードがrfkill
によってブロックされています。 Soft blocked: yes
は、ソフトウェアによって無線カードがブロックされていることを示し、Hard blocked: yes
は、物理的なスイッチまたはキーによって無線カードがブロックされていることを示します。
rfkill list
無線カードがブロックされている場合は以下のコマンドを実行してブロックを解除してください。
rfkill unblock all
Wi-Fiに接続する
無線または有線でインターネットに接続します。ここでは無線の場合の手順を示します。
$ iwctl
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect <任意のSSID>
[iwd]# known-networks list
接続確認
接続できたら、「Ctrl + C」で対話型シェルから抜けて、ping archlinux.jp
で接続を確認しましょう。
タイムゾーンの設定
インターネットに接続すると自動的に時刻が同期されますが、タイムゾーンはUTCになっているので、Asia/Tokyo
に変更します。以下のコマンドで現在の日時設定を確認できます。
timedatectl status
以下のコマンドを実行して、タイムゾーンを変更します。
timedatectl set-timezone Asia/Tokyo
この記事を参考にしました。
パーティションの設定
パーティションとは
パーティションについては以下の記事が参考になります。BIOS、UEFI、MBR、GPT、基本パーティション、拡張パーティション、論理パーティションという用語がわからない人も以下の記事を読んでおいてください。
現在のパーティショニングの確認
現在のパーティショニングがどうなっているかを以下のコマンドで確認します。rom
、loop
、airoot
などが名前に含まれるデバイスは無視してください。sda
やnvme0n1
、mmcblk0
などのような名前が表示されていると思います。僕の場合はsda
でした。また、Disklabel type: gpt
と表示されていたら、パーティションスキームはGPTになっていることがわかります。
fdisk -l
バックアップ
ハードディスクに変更を加える前に、以下のコマンドを実行してドライブのパーティションテーブルとパーティションスキームをバックアップしておきます。/dev/sda > sda.dump
は適宜自分の環境に合わせて変えてください。
sfdisk -d /dev/sda > sda.dump
必要なら、以下のコマンドを実行すれば、バックアップからレイアウトを復元できます。
sfdisk /dev/sda < sda.dump
パーティションのレイアウト
インストールガイドのレイアウト例に則って、以下のようにパーティショニングします。EFIシステムパーティションのサイズは複数のカーネルをインストールする場合に最低限必要な1GiBとしています(複数カーネルをインストールする予定はありませんが念の為)。
スワップパーティションのサイズに関しては以下のように言及されているので、PCのRAMと同じ8GiBとしています。
歴史的に、スワップパーティションのサイズは物理 RAM のサイズの2倍にするという一般的なルールがありました。しかし、コンピュータがより多くのメモリを搭載するようになってから、このルールは時代遅れになりました。例えば、512 MiB の RAM を搭載する平均的なデスクトップマシンでは、通常「2倍ルール」は適切です。十分な量の RAM (1024 MiB 以上)が利用できる場合は、スワップパーティションを小さくしてもよいでしょう。
ハイバネート(suspend to disk)する場合、RAM と同じサイズのスワップパーティションを作成することが推奨されます。カーネルは、スワップ領域に収まるように suspend-to-disk イメージを圧縮しようとしますが、スワップ領域のサイズが RAM よりも大幅に小さい場合にハイバネートが成功する保証はありません。詳細は サスペンドとハイバネート#ハイバネーション を見てください。 - パーティショニング - ArchWiki
/home
は以下を参考にして、20GiBにしています。
マウントポイント | パーティション | タイプ | サイズ |
---|---|---|---|
/mnt/boot |
/dev/sda1 | EFIシステムパーティション | 1GiB(最低300MiB必要) |
[swap] |
/dev/sda2 | Linux swap | 8GiB(最低512MiB必要) |
/mnt |
/dev/sda3 | Linux x86-64 root (/) | 20GB |
/mnt/home |
/dev/sda4 | home (/home) | 残りデバイス容量全て |
パーティショニングツール
パーティショニングには以下のツールが使用できます。ここではparted
を使用します。
名称 | パッケージ | MBR | GPT | CLI | TUI | スクリプティングユーティリティ | GUI |
---|---|---|---|---|---|---|---|
fdisk | util-linux | Yes | Yes | fdisk | cfdisk | sfdisk | partitionmanager |
GPT fdisk | gptfdisk | No | Yes | gdisk | cgdisk | sgdisk | No |
Parted | parted | Yes | Yes | parted | No | parted | gparted, gnome-disk-utility |
パーティショニング
以下のコマンドを実行し、対話型シェルに入ります。/dev/sda
に関しては適宜自分の環境に合わせて変えてください。
parted /dev/sda
?
を入力するとコマンド一覧が表示されます。
print
を入力すると、現在のパーティションを表示できます。
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 274MB 273MB fat32 EFI system partition boot, hidden, esp
2 274MB 290MB 16.8MB Microsoft reserved partition msftres
3 290MB 255GB 255GB ntfs Basic data partition msftdata
4 1049kB 274MB 273MB fat32 Basic data partition hidden, diag
僕のPCには、Windowsがすでにダウンロードされているので、EFIシステムパーティションはすでに存在しますが、Linux用のブートローダーがインストールされているわけではないので削除し、新しいEFIシステムパーティションを作ることにします。
(parted) rm 1
(parted) rm 2
(parted) rm 3
(parted) rm 4
(parted) mkpart ESP fat32 1MiB 1GiB
(parted) set 1 esp on
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1074MB 1073MB fat32 ESP boot, esp
次にスワップパーティションを作成します。
(parted) mkpart primary linux-swap 1GiB 9GiB
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1074MB 1073MB fat32 ESP boot, esp
2 1074MB 9664MB 8590MB linux-swap(v1) primary swap
最後に/
とhome
用のパーティションを作成します。
(parted) mkpart primary ext4 9GiB 29GiB
(parted) mkpart primary ext4 29GiB 100%
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1074MB 1073MB fat32 ESP boot, esp
2 1074MB 9664MB 8590MB linux-swap(v1) primary swap
3 9664MB 31.1GB 21.5GB ext4 primary
3 31.1GB 256GB 225GB ext4 primary
「Ctrl + C」で対話型シェルを抜けます。
マウント済みのファイルシステムをアンマウントする
以下のコマンドでどのデバイスがマウントされているかを確かめます。
lsblk -f
もしもMOUNTPOINTS
の項目に値がある場合はそのデバイスを以下のコマンドでアンマウントします。(rom
、loop
、airoot
などが名前に含まれるデバイスは除く)
umount /dev/sda2
ファイルシステムを作成する
EFIシステムパーティションにFAT32ファイルシステムを作成します。EFIシステムパーティションのファイルシステムはFAT32である必要があります。
mkfs.fat -F 32 /dev/sda1
次に/dev/sda2
にスワップパーティションをmkswap
で初期化します。
mkswap /dev/sda2
最後に/
とhome
用のパーティションにext4ファイルシステムを作成します。
mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4
ファイルシステムをディレクトリにマウントする
mount
コマンドでディレクトリにマウントします。マウントする前にマウントポイントをmkdir
コマンドで作成しておく必要があります。スワップボリュームはswapon
コマンドで有効化します。
mkdir -p /mnt/boot
mount /dev/sda1 /mnt/boot
swapon /dev/sda2
mount /dev/sda3 /mnt
mkdir /mnt/home
mount /dev/sda4 /mnt/home
lsblk -f
インストール
ミラーリストを変更する
パッケージをインストールする際は、/etc/pacman.d/mirrorlist
に書かれているミラーサーバーからパッケージがインストールされるのですが、デフォルトのミラーリストには世界中のサーバーが載っており、そのままだとダウンロードするのに時間がかかってしまいます。以下を実行してミラーリストに日本のサーバーを載せるように変更します。
curl -s "https://archlinux.org/mirrorlist/?country=JP" | sed -e 's/^#Server/Server/' > /etc/pacman.d/mirrorlist
cat /etc/pacman.d/mirrorlist
必須パッケージのインストール
pacstrap -K /mnt base linux linux-firmware
システムの設定
以下を実行してfstab
を生成します。U
オプションを指定するとUUIDが生成されますが、扱いづらいのでL
オプションを指定してラベルを使うことにします。
genfstab -L /mnt > /mnt/etc/fstab
fstab
の内容を確認して、きちんと設定されているか確かめます。fstab
がきちんと作成されていないと後述するgtub-install
コマンド等の実行時にエラーが起こってしまいます。きちんと全てのデバイス(僕の場合は、/dev/sda1
、/dev/sda2
、/dev/sda3
)が書かれているかどうか、EFIシステムパーテーションのファイルシステムがvfat
と表示されているかどうかなどを確認してください。
cat /mnt/etc/fstab
載っていないデバイスがあったら再度マウントし、fstab
を生成します。
mount /dev/sda1 /mnt/boot
genfstab -L /mnt > /mnt/etc/fstab
以下を実行して新しくインストールしたシステムにchroot
する。
arch-chroot /mnt
以下を実行してタイムゾーンを設定します。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
cat /etc/localtime
hwclock --systohc
cat /etc/adjtime
以下を実行してローカリゼーションを行います。
locale-gen
echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo LANG=ja_JP.UTF-8 > /etc/locale.conf
echo KEYMAP=jp106 > /etc/vconsole.conf
以下を実行してネットワーク設定を行います。本当はNetworkManagerを使用したかったのですが、systemd
のエラーが出て使えなかったので、代わりにdhcpcd
を使います。下記に詳しく書いてありそうですが、僕はよく分かってません。
また、wlan0
やhostname
、hostname.local
の部分は適当に変えてください。
pacman -S dhcpcd
ip link
systemctl enable dhcpcd@wlan0
echo hostname > /etc/hostname
echo "127.0.0.1 localhost" > /etc/hosts
echo "::1 localhost" >> /etc/hosts
echo "127.0.1.1 hostname" >> /etc/hosts
以下を実行してrootユーザーと一般ユーザーの設定をします。username
は適宜変えてください。
passwd
echo $SHELL
useradd -m -G wheel -s /bin/bash username
pacman -S sudo
pacman -S vim
visudo
以下のように/etc/sudoers
の内容を編集します。
~
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL # ここをコメントアウトする
~
以下を実行してブートローダーをインストールします。ここではsystemd-bootを使用します。他にもGRUBなどがブートローダーとしてよく使われていますが、SlackのArch Linux JPで質問したところ、「grubわけわからない感がすごいので使ってないな」、「bootのエントリー選択を凝った画面にしたいとかならgrub一択だけど、CUIでシンプルにして、起動スプラッシュは[OK]をいっぱい表示させたいとかならsystemd-bootは最適だと思ってる」などと、systemd-boot推しの人が多かった印象でした。
また、systemctl enable systemd-boot-update.service
でsystemdに同梱されているsystemd-boot-update.serviceを有効にし、次回の起動時にブートローダーが自動で更新されるようにします。
加えて、IntelプロセッサかAMDプロセッサかに応じて、それぞれintel-ucode
またはamd-ucode
をインストールし、/boot/loader/entries/arch.conf
にinitrd /intel-ucode.img
またはinitrd /amd-ucode.img
の行を追記することで、マイクロコードのアップデートがインストールされるようにします。
bootctl --path=/boot install
systemctl is-enabled systemd-boot-update.service
systemctl enable systemd-boot-update.service
systemctl is-enabled systemd-boot-update.service
pacman -S intel-ucode
echo "default arch.conf" > /boot/loader/loader.conf
echo "timeout 10" >> /boot/loader/loader.conf
echo "editor no" >> /boot/loader/loader.conf
echo "console-mode max" >> /boot/loader/loader.conf
echo "title Arch Linux" > /boot/loader/entries/arch.conf
echo "linux /vmlinuz-linux" >> /boot/loader/entries/arch.conf
echo "initrd /intel-ucode.img" >> /boot/loader/entries/arch.conf
echo "initrd /initramfs-linux.img" >> /boot/loader/entries/arch.conf
echo "options root=/dev/sda3 rw" >> /boot/loader/entries/arch.conf
作業ログを保存する
exit
でchrootを抜けてから、再度exit
で作業記録を終了し、作業ログファイルをドライブにコピーします。
exit
exit
cp typescript /mnt/root/worklog_archlinux-install_2023Mar21.log
ブート
reboot
でブートします。起動が開始する前までに、USBを取り外してください。
reboot
インストール後のセットアップ