この記事を作った動機

 arch linux をインストールするときに、いちいち忘れたことが出てきては、wiki を見に行くということをしていたので、自分が普段やっている工程をただ書き出そうというだけです。

 いつもどうり、とにかく動くこと優先なので、ロケーション設定とか、なんかいろいろ抜けてたりする可能性は大いになります。

ISO ファイルのダウンロード

Arch Linux - Downloads

ISO ファイルの書き込み

linux

 ここでの、/dev/sda は、USBドライブを意味している。

sudo dd if="archlinux-2025.03.01-x86_64.iso" of=/dev/sda status=progress

windows

 Rufus などのツールなど、なんでもいいのでISOファイルを扱うツールをダウンロードして、USBメモリに書き込む。細かいことは今回は省略する。

USB メモリから起動

 ここは各PCに固有の仕様に依存するので省略する。

キーボードレイアウト

 日本語キーボードのときは、レイアウト設定を変更しないと、後々キーの記号と入力される記号が異なる(US配列と日本語配列の違い)というめんどくさいことになるので、変更しておく。

loadkeys jp106

wifi につなげる

 インターネットが必要なので、wifiにつなげる。"[wlan0]“のところには、station listで表示される任意の wifi カードを選択する。

iwctl 

station list

station [wlan0] scan

station [wlan0] get-networks

station [wlan0] connect [targetNetworkName]
# パスワードを入力

exit

# ping が通ればOK
ping google.com
ping 8.8.8.8

ディスクの初期化

ディスク構成の確認

 以下の例では、SSD と sd カードが刺さっているときの表示例である。今回は、以下の例 (/dev/nvme0n1) とは異なるが、/dev/sda にインストールするという前提で話を進める。

fdisk -l

ディスク /dev/nvme0n1: 1.86 TiB, 2048408248320 バイト, 4000797360 セクタ
ディスク型式: SOLIDIGM SSDPFKNU020TZ                  
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 一応秘匿

デバイス         開始位置   終了位置     セクタ サイズ タイプ


ディスク /dev/mmcblk0: 28.15 GiB, 30224154624 バイト, 59031552 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 一応秘匿

デバイス       起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/mmcblk0p1          8192 59031551 59023360  28.1G  c W95 FAT32 (LBA)

efi パティーションとメインパティーションの作成

 提示されたデフォルト値でいいときはそのまま Enter を押すと、次の設定項目に進める。

 一応、usbメモリで普段やっているパティーション構成を再現するようにして、作業した例を載せておく。ちなみに、スワップ用のパティーションまで作っているが、普段私はインストール完了後に有効化する作業をしているので、ここでは特に、これ以上スワップについて記述することはしない。

EFI Linux filesystem Linux swap
EF00 8300 8200
gdisk /dev/sda

GPT fdisk (gdisk) version 1.0.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): n
Partition number (1-248, default 1): 
First sector (64-60620736, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-60620736, default = 60618751) or {+-}size{KMGTP}: 2G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI system partition'

Command (? for help): n
Partition number (2-248, default 2): 
First sector (64-60620736, default = 4196352) or {+-}size{KMGTP}: 
Last sector (4196352-60620736, default = 60618751) or {+-}size{KMGTP}: -10G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sda: 60620800 sectors, 28.9 GiB
Model: KUM2            
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 一応秘匿
Partition table holds up to 248 entries
Main partition table begins at sector 2 and ends at sector 63
First usable sector is 64, last usable sector is 60620736
Partitions will be aligned on 2048-sector boundaries
Total free space is 20975551 sectors (10.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4194304   2.0 GiB     EF00  EFI system partition
   2         4196352        39649216   16.9 GiB    8300  Linux filesystem

Command (? for help): n
Partition number (3-248, default 3): 
First sector (64-60620736, default = 39649280) or {+-}size{KMGTP}: 
Last sector (39649280-60620736, default = 60618751) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): p
Disk /dev/sda: 60620800 sectors, 28.9 GiB
Model: KUM2            
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 一応秘匿
Partition table holds up to 248 entries
Main partition table begins at sector 2 and ends at sector 63
First usable sector is 64, last usable sector is 60620736
Partitions will be aligned on 2048-sector boundaries
Total free space is 6079 sectors (3.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4194304   2.0 GiB     EF00  EFI system partition
   2         4196352        39649216   16.9 GiB    8300  Linux filesystem
   3        39649280        60618751   10.0 GiB    8200  Linux swap

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

フォーマット

mkfs.fat -F 32 /dev/sda1
mkfs.ext4 /dev/sda2

マウントする

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

/etc/fstab を生成する

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

 fstab なるものを生成しておかないと、後々 /boot が正常にマウントされないというトラブルになるので気をつける。

 最初のうちはなくても実は動いてしまうが、後々 liunx カーネルのアップデートとかがあると、linux kernel 本体と initramfs がアップデートされるときに、UEFI側から見えるパテーションである、/dev/sda1には、古い linux kernel 本体と initramfs がそのまま更新されないままになり、起動時にはそれが読み込まれてしまう。

 これの何が問題かと言うと、モジュールのバージョンが合わないということが起こり、最悪 linux が立ち上がってこなくなる。起動しても wifi が使えないなどの障害になる。

pacstrap

 基本的な環境のインストールを行う。これをしないと、arch-chrootのときに chroot 環境に入ることができない。

pacstrap -K /mnt base linux linux-firmware

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

 今回は、GRUB をブートローダとしてインストールする。正直以下のやり方が正しいかと言われると怪しいが、とりあえず動く。

grub-install --efi-directory /mnt/boot --boot-directory /mnt/boot

arch-chroot

 インストールした環境を設定していく。

chroot 環境に入る

arch-chroot /mnt

hostname の設定

 任意の名前を設定できる。あんまり特殊な名前にはできないと思う。

echo "naynmohusahusa" > /etc/hostname

アカウント作成とパスワードの設定

 パスワードを設定しないと、あとからこの設定をやり直すことになる。

  • root パスワードの設定
passwd
  • アカウントを作成する
# -m でホームディレクトリを作る
useradd -m husa
# sudo の管理者権限を付与
usermod -aG wheel husa
# パスワード設定
passwd husa

pacman の設定

 multilib を有効化しておく。 よく[multilib]の部分を忘れて、コメントアウトしたままになり、設定が正しく反映されていないままになることがあるので気をつける。

  • /etc/pacman.conf 変更前
...
# [multilib]
# Include = /etc/pacman.d/mirrorlist
...
  • /etc/pacman.conf 変更後
...
[multilib]
Include = /etc/pacman.d/mirrorlist
...

アプリケーション群のインストール

sudo pacman -Syyu 
sudo pacman -S gnome neovim firewalld reflector sudo networkmanager noto-fonts-cjk

sudoers

 管理者権限を wheel グループに属性ているユーザに付与する。

  • /etc/sudoers 変更前
...
# %wheel ALL=(ALL:ALL) ALL
...
  • /etc/sudoers 変更後
...
%wheel ALL=(ALL:ALL) ALL
...

reflector の設定(オプション)

  • /etc/xdg/reflector/reflector.conf
...
--country Japan
...

必要なサービスの有効化

sudo systemctl enable gdm NetworkManager firewalld reflector
sudo systemctl enable bluetooth # オプション

ブートローダの設定を生成

 chroot 環境に入る前にインストールした GRUB に対して、設定ファイルを生成する。

sudo grub-mkconfig -o /boot/grub/grub.cfg

タイムゾーンの設定

timedatectl list-timezones
timedatectl set-timezone Japan
timedatectl status

#               Local time: Sat 2025-06-21 05:31:02 JST
#            Universal time: Fri 2025-06-20 20:31:02 UTC
#                  RTC time: Fri 2025-06-20 20:31:02
#                 Time zone: Japan (JST, +0900)
# System clock synchronized: no
#               NTP service: inactive
#           RTC in local TZ: no

chroot 環境の終了

exit

再起動

 ここまでくれば、とりあえず GNOME が立ち上がってくるところまで行けるはずである。

reboot

補足

arch-keyring がうまく機能しない

 最終的な対処法としては、単に pacman 署名確認機能を無効化してアップデートさせて、元に戻すしか今のところ私は対処方法を見つけられていない。本来であれば、このようにして安全装置を外すことは推奨されないが、無理やり進めたいならば、以下のように設定することもできる。

  • /etc/pacman.conf
# SigLevel = Required DatabaseOptional
SigLevel = Never

 一旦署名機能を無効化したあとは、keyringをアップデートすることで、とりあえず元どうり署名機能が使えるときもある。でもうまくいかないときもあって、そういうときは、google を彷徨ってたりしばらく時間をおいて、どうしたらいいか考えたりしている。はっきりとどうしたらいいかということは分かっていない。

sudo pacman -Syyu
sudo pacman -S arch-keyring

パスワードを設定し忘れた

 root と作成したアカウントもろともパスワードの設定を忘れると、再起動したときに何もできないということになる。その時はインストールメディアから起動し直して設定を行う。ここでも、ディスクは /dev/sda として見えることを前提に話を進める。

  1. fdisk で構成を確認
fdisk -l
  1. arch linux 本体が入ったパティーションをマウント
mount /dev/sda2 /mnt
  1. chroot 環境に入る
arch-chroot /mnt
  1. パスワードを設定
passwd      # root ユーザのパスワードを設定
passwd husa # husa という名前のユーザのパスワードを設定
  1. chroot 環境を抜けて再起動
exit
reboot

関連してそうな記事

参考にしたサイトとか