対象
- 手元に降ってきたPCを最低限しっかり動く状態にしたい人
- 手頃なサーバを建ててみたい人
- ArchLinux Install Battleにさくっとケッチャコつけたい人
目的
内蔵メディアから起動できる状態にする
ウィンドウマネージャは(まだ)入れない
検証環境
- UEFI仮想環境(qemu)
- 日本語配列キーボード
手順
ライブ環境の起動
https://archlinux.org/download からisoをダウンロードしてUSBフラッシュに書き込む
電源ボタン押下直後からF10等を連打してブートメニューを表示
UEFI: USB
等を選択してUSBフラッシュからUEFIで起動
キーマップ読込
現在のキーボードが日本語配列であることをシステムに知らせる
loadkeys jp106
WiFi接続
WiFi経由でネットワークに接続する
LANケーブルでも良し
iwctl
station wlan0 connect SSID
exit
パーティション構築
起動に必要なデータの入るEFIパーティションとそれ以外のデータの入るルートパーティションを作成する
lsblk
で現状確認
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 794.4M 1 loop /run/archiso/airootfs
sda 8:0 0 32G 0 disk
sr0 11:0 1 1.1G 0 rom /run/archiso/bootmnt
パーティション切り
cfdiskでパーティションを切る
2つのパーティションを作成し、それぞれ用途に合ったtypeを設定する
例では/dev/sda
だが、ほとんどのPCは/dev/nvme0n1
のはず
cfdisk /dev/sda
- GPTフォーマットを選択
- EFIパーティションの作成 [ New ]
size: 550MB
,type: EFI Partition
- ルートパーティションの作成 [ New ]
size: 任意
type: Linux Filesystem
- 変更の適用 [ Write ]
yes
- [ Quit ]
lsblk
で現状確認
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 794.4M 1 loop /run/archiso/airootfs
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 550M 0 part
└─sda2 8:2 0 31.5G 0 part
sr0 11:0 1 1.1G 0 rom /run/archiso/bootmnt
フォーマット
作成したパーティションをフォーマット、つまりファイルシステムの初期化を行うことでOSの記憶領域として使えるようにする
EFIパーティションをFAT32でフォーマット
以後sda1,sda2は適宜読み替えて
mkfs.fat -F32 /dev/sda1
mkfs.fat 4.2 (2021-01-31)
ルートパーティションをbtrfsでフォーマット
既存のデータがある場合は-f
を付ける必要がある
mkfs.btrfs /dev/sda2
btrfs-progs v6.10.1
See https://btrfs.readthedocs.io for more information.
Performing full device TRIM /dev/sda2 (31.46GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
this does not affect your deployments:
- DUP for metadata (-m dup)
- enabled no-holes (-O no-holes)
- enabled free-space-tree (-R free-space-tree)
Label: (null)
UUID: 0d61db70-6f59-4228-b520-fa9af06a91c3
Node size: 16384
Sector size: 4096 (CPU page size: 4096)
Filesystem size: 31.46GiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 256.00MiB
System: DUP 8.00MiB
SSD detected: no
Zoned device: no
Features: extref, skinny-metadata, no-holes, free-space-tree
Checksum: crc32c
Number of devices: 1
Devices:
ID SIZE PATH
1 31.46GiB /dev/sda2
マウント
作成したパーティションを現在の環境から操作するためマウントする
mount /dev/sda2 /mnt
mount --mkdir /dev/sda1 /mnt/boot
lsblk
で現状確認
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 794.4M 1 loop /run/archiso/airootfs
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 550M 0 part /mnt/boot
└─sda2 8:2 0 31.5G 0 part /mnt
sr0 11:0 1 1.1G 0 rom /run/archiso/bootmnt
キーリングの更新
パッケージの整合を取るためのデータベースの更新を行う
古いisoを使っている場合、この操作無しではパッケージのインストールができない
pacman -Sy archlinux-keyring
:: Processing package changes...
(1/1) upgrading archlinux-keyring [##############################] 100%
==> Appending keys from archlinux.gpg...
==> Disabling revoked keys in keyring...
-> Disabled 1 key.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 5 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 5 signed: 102 trust: 0-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2 valid: 78 signed: 20 trust: 78-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2025-07-01
確認のために適当なパッケージをインストールする
pacman -S brightnessctl
パッケージのインストール
マウントしたパーティションから起動できる状態にするため、必要なパッケージをインストールする
# Intel CPU + Intel GPU Example
pacstrap -K /mnt \
base linux linux-firmware sof-firmware \ # 動作に必要
efibootmgr dosfstools btrfs-progs \ # 記憶領域操作関連
sudo vim git openssh man-db \ # 実質必要なソフト
iwd bluez bluez-utils \ # 無線関連
linux-headers base-devel \ # AURで必要
intel-ucode \
intel-media-driver intel-gpu-tools vulkan-intel
デバイスベンダによって変更する必要があるパッケージ
- マイクロコード
- CPUがIntel:
intel-ucode
- CPUがAMD:
amd-ucode
- CPUがIntel:
- GPUドライバ
- GPUがIntel
intel-media-driver
intel-gpu-tools
vulkan-intel
- GPUがAMD
mesa
vulkan-radeon
- GPUがIntel
ネットワーク設定のコピー
isoに含まれるネットワーク設定及び現在接続しているWiFiの情報を新規環境にコピーする
設定ファイル無しではWiFiは愚かLANケーブルですらネットワーク接続できない
cp /etc/systemd/network/* /mnt/etc/systemd/network
mkdir /mnt/var/lib/iwd
cp -r /var/lib/iwd/* /mnt/var/lib/iwd
ブートローダのインストール
OSが起動する前に必要なファイル群を読み込むために必要なソフト、ブートローダインストールする
ブートローダにはいくつか選択肢があるが、ここではsystemd-bootを使う
ブートローダのインストールはこの後のchroot環境下で行う方が主流だが、最近のsystemd-bootはarch-chroot下からインストールするとEFIエントリ作成してくれないため、ここで操作を行う
bootctl install --esp-path=/mnt/boot
Created "/mnt/boot/EFI".
Created "/mnt/boot/EFI/systemd".
Created "/mnt/boot/EFI/BOOT".
Created "/mnt/boot/loader".
Created "/mnt/boot/loader/entries".
Created "/mnt/boot/EFI/Linux".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/mnt/boot/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/mnt/boot/EFI/BOOT/BOOTX64.EFI".
⚠️ Mount point '/mnt/boot' which backs the random seed file is world accessible, which is a security hole! ⚠️
⚠️ Random seed file '/mnt/boot/loader/.#bootctlrandom-seed93c35ea251aad8ef' is world accessible, which is a security hole! ⚠️
Random seed file /mnt/boot/loader/random-seed successfully written (32 bytes).
Successfully initialized system token in EFI variable with 32 bytes.
Created EFI boot entry "Linux Boot Manager".
fstabの生成
起動時にマウントするパーティションを記述するファイル、fstabをgenfstabを使って生成する
genfstab -U /mnt |tee /mnt/etc/fstab
# /dev/sda2
UUID=0d61db70-6f59-4228-b520-fa9af06a91c3 / btrfs rw,relatime,discard=async,space_cache=v2,subvolid=5,subvol=/ 0 0
# /dev/sda1
UUID=0714-9AD7 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
chroot
新規環境を起動したときにルートとなる階層に実際にルートを移して、あたかも新規環境を起動したような環境を用意できるコマンド
新規環境の起動に必要な設定、及び起動後に行う設定を行う
arch-chroot /mnt
タイムゾーンの設定
システムが地方時を扱ううえで必要
ちなみにlinuxカーネルが地方時を扱うことはない
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RTCの同期
PC内部のリアルタイムクロック(RTC)にライブ環境が取得した時刻情報を保存する
ライブ環境は既に裏でネットワークと時刻を同期している
linuxはデフォルトでUTCを書き込むがWindowsはデフォルトでは地方時を書き込む
hwclock --systohc
ロケール生成
システムで表示したい言語のロケールを生成する
vim /etc/locale.gen
i
で編集モードに入る
# en_US.UTF-8
と# ja_JP.UTF-8
の頭の#
を外す
:w
で保存:q
で終了
locale-gen
コマンドでlocale.gen
ファイルにて指定した言語のロケールを生成する
locale-gen
Generating locales...
en_US.UTF-8... done
ja_JP.UTF-8... done
Generation complete.
locale.conf
にて今後使用するロケールを指定する
tty環境で日本語を表示すると豆腐になるので、ウィンドウマネージャを入れる予定がない場合は設定しない方がいい
echo LANG=ja_JP.UTF-8|tee /etc/locale.conf
キーマップとホスト名の設定
$HOST_NAME
にホスト名を入力
echo KEYMAP=jp106|tee /etc/vconsole.conf
echo $HOST_NAME|tee /etc/hostname
ブートローダの設定
ブートローダの更新
chroot前にインストールしたブートローダはisoに含まれているため、iso自体が古い場合はブートローダも古い場合がある
bootctl update
loader.conf
systemd-boot自身の挙動を設定する
vim /boot/loader/loader.conf
内容は以下
default arch.conf
timeout 3
console-mode keep
editor no
ブートエントリの作成
起動に用いるファイルやオプションを設定する
systemd-bootで用意されている例をコピーして一部をsedで書き換える
export $(blkid -o export /dev/sda2)
sed -e"/#.*/d" \
-e"s/root=.*/root=UUID=$UUID rw/" \
/usr/share/systemd/bootctl/arch.conf |\
tee /boot/loader/entries/arch.conf
ユーザ設定
rootアカウントのパスワード設定
passwd
ユーザアカウントの作成
$USER_NAME
にアカウント名を入力
wheelグループに入れてsudo
できるようにする
useradd -m -g wheel $USER_NAME
ユーザアカウントのパスワード設定
$USER_NAME
にアカウント名を入力
passwd $USER_NAME
sudoers
wheelグループのメンバがsudo
できるようにする
sudoedit /etc/sudoers
# Defaults env_keep += "HOME"
と# %wheel ALL=(ALL:ALL) ALL
の頭の#
を外す
resolv.confの設定
DNSとして機能させるsystemd-resolvedがresolv.confに干渉できるよう設定する
umount /etc/resolv.conf
ln -sf \
/run/systemd/resolve/stub-resolv.conf \
/etc/resolv.conf
各種デーモンの有効化
次回起動時から必要なデーモンが実行されるようにする
systemctl enable \
systemd-networkd \
systemd-resolved \
systemd-timesyncd \
iwd bluetooth
chrootを抜けて再起動する
exit
reboot