Arch Linuxインストールガイド(一部改変、ラップトップ向け、随時更新)
はじめに
この文書は、ほとんど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".
環境
- ノートパソコン(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
まずは、キーボードの日本語配列を読み込みます。
パーティショニング
必要なパーティションは、以下のとおりです。
- EFI system partition
- Swap
- Linux filesystem
それぞれ、1GiB、メモリと同じ容量以上、残りの容量全て、という容量が望ましいです。Swapは、後述するハイバーネーションに使います。
それでは、パーティションを作っていきましょう。
ディスクの一覧を取得します。サイズを見て、どれがどのディスクであるか把握しましょう。
# fdisk -l
私の使ってるパソコンにはよく分からんIntelのNVMe SSDが入っており、メインストレージの1TB(今回は、/dev/nvme0n1
)に加えて、小さい32GBのストレージ(今回は、/dev/nvme1n1
)がついています。ちょうどサイズがいい感じなので、小さい方のストレージをスワップ領域に使ってやりましょう。
さて、GPTの構造について軽く把握しておくと後が楽なので、Wikipediaを見ておきましょう。
最初に「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参照。
同様の方法で、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
LANG=en_US.UTF-8
KEYMAP=jp106
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です。
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
(前略)
root ALL=(ALL) ALL
+ archie ALL=(ALL) ALL
(後略)
+ 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の設定をします。
[General]
EnableNetworkConfiguration=true
[Network]
NameResolvingService=systemd
EnableIPv6=true
iwd、systemd-resolvedを有効化、これらもついでに起動しておます。また、systemd-timesyncdも動かしておくと便利です。
systemctl --failed
やjournalctl -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」については、カーネルパラメータを渡して無効化します。
- 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
モジュールを読み込まないようにしましょう。
blacklist iTCO_wdt
ハイバネーションを有効化する
ハイバネーションというのは、メモリの中身をスワップに移しておいて、パソコンの電源を落とすというものです。ハイバネーションから復帰するためには、initramfsが、スワップ領域から状態を復元する必要があります。initramfsの設定をしましょう。
...
- 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です。
- 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
を編集して、便利にします。
HandlePowerKey=poweroff
HandlePowerKeyLongPress=poweroff
HandleLidSwitch=hibernate
HandleLidSwitchExternalPower=ignore
特に、HandleLidSwitch=hibernate
というのが便利です。
出先でパッとラップトップを閉じてかばんにしまって、帰ってきたらラップトップが灼熱、電池もほとんど残ってない、という状況を防げます。
以下省略
個人的な推奨事項は、以上のとおりです。
他の便利な設定については、ArchWikiを参照してください。
おわりに
特に、パーティショニングやハイバネーションについては詰まりやすかったり、間違えた理解で進めてしまいがちな箇所だと思います。
この記事が、少しでも参考になれば幸いです。
Discussion