⛩️

Arch Linuxインストールガイド(一部改変、ラップトップ向け、随時更新)

2025/03/05に公開

はじめに

この文書は、ほとんどArchWikiの内容を写したもので、一部内容を改変しています。この記事の内容は、GNU自由文書ライセンスのもとで自由に使用いただけます。


Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
https://wiki.archlinux.jp/index.php/インストールガイド

環境

  • ノートパソコン(HP spectre x360 13aw)
  • UEFI(+GPT)
  • Intelのx86_64プロセッサ(第10世代i7)
  • SSDは、1TB+32GB
  • メモリは、16GB

レガシーBIOSやMBRを使いたい場合、あるいはデュアルブートしたい場合は、別の記事を参照してください。

対象読者

  • ノートパソコンにArch Linuxを入れたいArch Linux初心者

とりあえずインストール

USBインストールメディアなどの準備については、ArchWikiを参照してください。

ライブ環境が起動したら

# loadkeys jp106

まずは、キーボードの日本語配列を読み込みます。

パーティショニング

必要なパーティションは、以下のとおりです。

  1. EFI system partition
  2. Swap
  3. Linux filesystem

それぞれ、1GiB、メモリと同じ容量以上、残りの容量全て、という容量が望ましいです。Swapは、後述するハイバーネーションに使います。
それでは、パーティションを作っていきましょう。
ディスクの一覧を取得します。サイズを見て、どれがどのディスクであるか把握しましょう。

# fdisk -l

私の使ってるパソコンにはよく分からんIntelのNVMe SSDが入っており、メインストレージの1TB(今回は、/dev/nvme0n1)に加えて、小さい32GBのストレージ(今回は、/dev/nvme1n1)がついています。ちょうどサイズがいい感じなので、小さい方のストレージをスワップ領域に使ってやりましょう。
さて、GPTの構造について軽く把握しておくと後が楽なので、Wikipediaを見ておきましょう。

https://ja.wikipedia.org/wiki/GUIDパーティションテーブル

最初に「Protective MBR」という領域があります。これは、GPTを認識できない古いソフトを動かすためのもので、必須です。この後、パーティションの情報(パーティションテーブル)があります。その後にパーティションが並び、最後にもう一度パーティションテーブルが置かれます。
ということで、ディスクを使うには、GPTを作ってからパーティションを割る必要があります。ディスクの先頭になんか空きスペースがあるという経験があれば、多分GPTのためです。GPTは、ディスクの先頭と末尾それぞれ1MB程度の領域に押し込まれています。
gdiskが便利なので、使いましょう。
まずは、/dev/nvme0n1をESP(EFI system partition)とLinux filesystemに割ります。

# gdisk /dev/nvme0n1
Command (? for help): o
Command (? for help): n
Partition number (1-128, default 1):
First sector (xxxxxx):
Last sector (xxxxxx): +1G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):ef00
Command (? for help): c
Partition number (1-5): 5
Enter name: EFI system partition

いったんここまでで区切ります。
まずは、o/dev/nvme0n1にGPTをつくり、nでパーティションを追加します。パーティションの大きさは1GiB(+1G)に設定し、パーティションのタイプをEFI system partition(ef00)にしています。また、PARTLABELをEFI system partitionとしました。
パーティションのタイプは、ArchWiki参照。

https://wiki.archlinux.jp/index.php/GPT_fdisk#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3.E3.82.BF.E3.82.A4.E3.83.97

同様の方法で、Linux filesystemとSwap(新しいディスクにもGPTを作るのを忘れないでください)も用意します。私は、PARTLABELをそれぞれ「Arch Linux」、「Swap」に設定しました。

ファイルシステムの作成、マウント

詳しい説明は省きます。デバイス名は、各々の環境に合わせて、間違えないようにしてください。

# mkfs.ext4 /dev/nvme0n1p2
# mkswap /dev/nvme1n1p1
# mkfs.fat -F 32 /dev/nvme0n1p1
# mount /dev/nvme0n1p2 /mnt
# mount --mkdir /dev/nvme0n1p1 /mnt/boot
# swapon /dev/nvme1n1p1

インターネットに接続する

ここでようやく、インターネットに接続します。
Archのライブ環境は、インターネットに対してものすごく脆弱な状態であると思われます。一度、インストール中にインターネットに繋ぎっぱなしで1時間以上置いていたことがあるのですが、pacmanの署名が壊れるか何かして、pacmanが使えなくなりました。
普通にインストールするだけの時間では不具合が起きたことはないので、そこまで神経質になる必要はないと思いますが、インストール中にインターネットに接続されている時間は、最小限にしましょう。

# iwctl
[iwd]# station list
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect XXXXXXX(SSID)
passphrase: ********
[iwd]# exit
# timedatectl status

必須パッケージたちをインストールする

個人的に不可欠だと思っているパッケージも追加しています。(なんとArchはデフォルトでsudoが入っていないのです)

# pacstrap -K /mnt base linux linux-firmware sudo sof-firmware neovim iwd firewalld efibootmgr polkit intel-ucode

インターネットから切断します。

# iwctl
[iwd]# station wlan0 disconnect

その他諸々の設定

fstabは、File System Tableか何かの略だと思います。

# genfstab -U /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc
# nvim /etc/locale.gen
(en_US.UTF-8とja_JP.UTF-8のみコメントアウト)
# locale-gen
/etc/locale.conf
LANG=en_US.UTF-8
/etc/vconsole.conf
KEYMAP=jp106
/etc/hostname
hp-spectre-x360-13aw

ホストネームは、迷ったらこんな感じで製品名にしてみてはいかがでしょうか。
最後に、ルートパスワードを設定します。

# passwd

EFIstubの設定

今回は、EFIstubをブートに使おうと思います。あらかじめNVRAMにカーネルパラメータを渡しておいて、直接ブートするという方法です。

# cat /etc/fstab >> /boot/setup-efistub.sh

これで、ファイルシステムの情報が/boot/setup-efistub.shにコピーされました。neovimで/boot/setup-efistub.shを編集していきましょう。なお、今回はとりあえず最低限起動するようにだけしてやります。使わなかった行は、#でコメントアウトしておいてください。インストール後に使います。
neovimのビジュアルモード、コピー、ペーストを覚えておくとめちゃめちゃ便利です。ググったら情報が出てきます。
デバイス名、パーティション番号は、各々の環境に合わせてください。UUIDは、Linux filesystemのUUIDです。

/boot/setup-efistub.sh
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "EFISTUB Arch" --loader /vmlinuz-linux --unicode 'root=UUID=xxxxxxxxx-xxxxxx-xxxxxx rw initrd=\initramfs-linux.img'

(後略)

これで、最低限起動するようになるはずです。
USBブートに使っていたブートエントリを削除しておきます。最終的には「System will try recovery」みたいな表示が出るはずです。

# efibootmgr -B -b 0001,0002

さて、ブートエントリを追加します。

# source /boot/setup-efistub.sh

これで、ブートエントリが追加されたはずです。

インストール終了

インストールは終了しました。お疲れ様でした。ちなみに、USBインストールメディアののisoは全部メモリに載ってるので、「画面が暗くなったタイミングで抜く!」みたいなことしなくても、適当なタイミングで抜いて大丈夫です。
exitでchrootから抜けて、systemctl rebootで再起動しましょう。

個人的な推奨事項

再起動したら、ユーザー名rootでログインしましょう。
以下、個人的におすすめの設定を紹介していきます。GUIについては扱わないので、適当に調べて入れてください。

ユーザーとグループ

普段使うためのユーザーを作ります。ユーザー名は、適当にarchieとしておきます。

# useradd -m archie
# passwd archie
# usermod -aG wheel archie(← 管理者グループに追加)
# EDITOR=nvim visudo
visudo
(前略)
  root ALL=(ALL) ALL
+ archie ALL=(ALL) ALL
(後略)
/etc/environment
+ SUDO_EDITOR=nvim

(2025.03.05 追記)SUDO_EDITOR環境変数をnvimに設定することで、sudo -eでNeovimを使うことが可能です。
この後、いったんログアウトしてarchieとして入り直しましょう。

セキュリティ

ファイアウォールを有効化します。ついでに起動しておきます。

$ sudo systemctl enable firewalld
$ sudo systemctl start firewalld

サービス管理、システムメンテナンス

ネットワークに関するサービスをいくつか設定しておきましょう。今回は、最小限の設定をしておきます。

  • iwdで認証 + ネットワーク設定
  • systemd-resolvedで名前解決

実際には、systemd-networkdも使ったほうが優れたシステムになるかもしれません。
iwdの設定をします。

/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true

[Network]
NameResolvingService=systemd
EnableIPv6=true

iwd、systemd-resolvedを有効化、これらもついでに起動しておます。また、systemd-timesyncdも動かしておくと便利です。

systemctl --failedjournalctl -b -p 3..0とかのコマンドも使えないと、かなり困ります。Wikiを読んで、コマンド打ってみて、覚えておきましょう。dmesgも重要です。

パッケージ管理

省略します。ArchWikiを参照してください。
毎日打つべきコマンドは、$ sudo pacman -Syuです。

ブート

watchdogを無効にする

Arch Linuxの起動、終了時に見るエラーランキング第1位が「ACPI BIOS error AE_ALREADY_EXISTS」、第2位が「watchdog did not stop!」です。(要出典)
「ACPI BIOS error」については、今のところ解決策を見つけられてないので、無視しています。電池関連で何かやってるんだと思いますが、何も困ったことはないです。
「watchdog did not stop!」については、対策が可能です。
watchdogは、カーネルやプロセスの状態を監視し、場合によってはフリーズしたときにPCを再起動したりできる便利機能です。しかし、サーバーや組み込み以外では不要です。なんなら割り込みで電力を無駄に消費します。無効にしましょう。
watchdogにも2種類あるようです。どちらも無効化します。カーネルが立ち上げる「nmi_watchdog」と、ハードウェアから提供される「iTCO_wdt」(IntelのCPUの場合)です。「nmi_watchdog」については、カーネルパラメータを渡して無効化します。

/boot/setup-efistub.sh
- efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "EFISTUB Arch" --loader /vmlinuz-linux --unicode 'root=UUID=xxxxxxxxx-xxxxxx-xxxxxx rw initrd=\initramfs-linux.img'
+ efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "EFISTUB Arch" --loader /vmlinuz-linux --unicode 'root=UUID=xxxxxxxxx-xxxxxx-xxxxxx rw nmi_watchdog=0 initrd=\initramfs-linux.img'

さて、次にハードウェアから提供されるものです。modprobeの設定で、iTCO_wdtモジュールを読み込まないようにしましょう。

/etc/modprobe.d/nowatchdog.conf
blacklist iTCO_wdt

ハイバネーションを有効化する

ハイバネーションというのは、メモリの中身をスワップに移しておいて、パソコンの電源を落とすというものです。ハイバネーションから復帰するためには、initramfsが、スワップ領域から状態を復元する必要があります。initramfsの設定をしましょう。

/etc/mkinitcpio.conf
...
- HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)
+ HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems resume fsck)
...

initramfsを再生成します。

sudo mkinitcpio -p linux

ハイバネーションのときにメモリの中身を移す先をカーネルに伝えておく必要があります。カーネルパラメータを追加しましょう。yyyyyy-yyy-yyyyyyは、スワップパーティションのUUIDです。

/boot/setup-efistub.sh
- efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "EFISTUB Arch" --loader /vmlinuz-linux --unicode 'root=UUID=xxxxxxxxx-xxxxxx-xxxxxx rw nmi_watchdog=0 initrd=\initramfs-linux.img'
+ efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "EFISTUB Arch" --loader /vmlinuz-linux --unicode 'root=UUID=xxxxxxxxx-xxxxxx-xxxxxx resume=UUID=yyyyyy-yyy-yyyyyy rw nmi_watchdog=0 initrd=\initramfs-linux.img'

インストールのときに行ったように、ブートエントリを削除し、新しいブートエントリを追加してください。
これで、ハイバネーションが有効化されました。試しにハイバネートしてみましょう。
まずは、普通に再起動します。

$ systemctl reboot

適当なシェル変数をexportしておきます。

$ export GOTOH=510
$ systemctl hibernate

さて、画面が暗転しました。電源ボタンを押して立ち上げてみましょう。
そして、適当なシェル変数が残っているか、確認してみます。

$ echo $GOTOH
510

残ってますね。
ハイバネーションに成功しています。

GUI

省略します。好みのものを使ってください。Waylandがおすすめです。

電源管理

/etc/systemd/logind.confを編集して、便利にします。

/etc/systemd/logind.conf
HandlePowerKey=poweroff
HandlePowerKeyLongPress=poweroff
HandleLidSwitch=hibernate
HandleLidSwitchExternalPower=ignore

特に、HandleLidSwitch=hibernateというのが便利です。
出先でパッとラップトップを閉じてかばんにしまって、帰ってきたらラップトップが灼熱、電池もほとんど残ってない、という状況を防げます。

以下省略

個人的な推奨事項は、以上のとおりです。
他の便利な設定については、ArchWikiを参照してください。

https://wiki.archlinux.jp/index.php/一般的な推奨事項

おわりに

特に、パーティショニングやハイバネーションについては詰まりやすかったり、間違えた理解で進めてしまいがちな箇所だと思います。
この記事が、少しでも参考になれば幸いです。

Discussion