💻

2023年6月 Arch Linux CLI インストール メモ

2023/06/02に公開

久しぶりに Arch Linux を開発機としてインストールバトルしたので忘備録として書いておくことにしました!

今回の目標はなるべく依存関係を少なくすることです!!!
(つまり systemd に結構依存します)

基本的には公式インストールガイド(EN版)を参考にしています。

SSH の用意

(インストールメディアを用意して起動したところを想定してます)
最初に手元のパソコンから操作できるようにするために IP の確認と SSH 接続するために root ユーザーの仮パスワードを設定します。

## インストールする端末側
# ログインするための仮パスワードを設定
passwd
# インストールする端末の IP を確認
ip a

## 作業用の端末
ssh root@192.168.1.10

パーティションを用意する

今回は Intel CPU を使用したパソコンの NVMe にインストールすることを想定しており、SSD なので Btrfs を採用しました。ファイルシステムについては自分が気に入ったものを採用するといいと思います。ちなみに私は SSD ではない場合は脳死で Ext4 を採用しています。

パーティション マウントポイント 容量
/dev/nvme0n1p1 /mnt/boot 100MB 以上
/dev/nvme0n1p2 /mnt 残り全て
/dev/sda1 /mnt/data オプション

人によっては fdisk でコマンド形式でやると思いますが私は cfdisk で GUI ベースで作業をします。
(なので基本何を使ってパーティションを分けるかはお好みです)

cfdisk /dev/nvme0n1
# 100MB の場合は 104857600
# 260MB の場合は 272629760
# 400MB の場合は 419430400
# 512MB の場合は 536870912
# 1024MB の場合は 1073741824

# オプション
cfdisk /dev/sda

# FAT32 でフォーマット
mkfs.fat -F 32 /dev/nvme0n1p1
# Btrfs でフォーマット
mkfs.btrfs /dev/nvme0n1p2
# Ext4 でフォーマット (オプション)
mkfs.ext4 /dev/sda1

今回はパソコンに搭載されているメモリ量が多いためスワップ領域を用意していませんが、いざ足りなくなったらスワップファイルを用意して対処するつもりです。

また、私の場合はboot領域は Arch Linux しかインストールせずカーネルが1つしか使わないというのであれば最低限の 260MB にしています。
複数のカーネルをインストールしたりするのであれば最低でも 512MB 以上にします。

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

以前までは --mkdir オプションを知らなかったため毎回 mkdir /mnt/boot していましたが mount コマンドだけで済むようになったので少し楽になりました。

mount /dev/nvme0n1p2 /mnt
mount --mkdir /dev/nvme0n1p1 /mnt/boot
# オプション
mount --mkdir /dev/sda1 /mnt/data

必須パッケージのインストール

  1. ミラーの編集

とりあえず執筆時点で公式Worldwide に指定されている geo.mirror.pkgbuild.com と日本のミラーサーバーを採用しました。

/etc/pacman.d/mirrorlist
##
## Arch Linux repository mirrorlist
## Filtered by mirror score from mirror status page
## Generated on 2023-10-17
##

Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
Server = https://mirrors.cat.net/archlinux/$repo/os/$arch
Server = https://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch

# https://ftp.kddilabs.jp/Linux/packages/archlinux/$repo/os/$arch
# http://srv2.ftp.ne.jp/Linux/packages/archlinux/$repo/os/$arch

#Server = https://repo.jing.rocks/archlinux/$repo/os/$arch
#Server = https://mirror.nishi.network/archlinux/$repo/os/$arch
#Server = https://jp.mirrors.cicku.me/archlinux/$repo/os/$arch

Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch
#Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch

ちなみに cloudflaremirrors.com では自分の位置から最適なデータセンターを選択するため、https://cloudflaremirrors.com/archlinux/iso/latest/archlinux-x86_64.iso をダウンロードすると高速に最新の ISO ファイルをダウンロードできるので便利だと思います。

  1. インストール
pacstrap -K /mnt base base-devel linux linux-firmware intel-ucode btrfs-progs openssh git neovim

今回は、カーネルに通常版を選択しましたが、今後は LTS 版やカスタムカーネルを選択するかもしれません。また、マイクロコードを読み込むようにしています。
他にも SSH で接続できるように OpenSSH や、今後使用する Git を先にインストールしておきます.
あと、有名どころのエディタである VimEmacsnano などを採用せずに Neovim を採用しています。

システムの設定

# fstab の生成
genfstab -U /mnt >> /mnt/etc/fstab

# chroot
arch-chroot /mnt

# タイムゾーンの設定
ln -sf /usr/share/zoneinfo/Japan /etc/localtime

# ハードウェアクロックの変更
hwclock --systohc
  • ロケール
    • 必要な言語の部分をアンコメントします
/etc/locale.gen
- #en_US.UTF-8 UTF-8
+ en_US.UTF-8 UTF-8
/etc/locale.gen
- #ja_JP.UTF-8 UTF-8
+ ja_JP.UTF-8 UTF-8
# ロケールを生成
locale-gen
# システム全体のロケールを設定する
echo LANG=en_US.UTF-8 > /etc/locale.conf

# ホスト名を設定する (みんなは好きな名前にしてね)
echo Azuki > /etc/hostname

# Initramfs
mkinitcpio -P

# root ユーザーの仮パスワードを設定する
passwd

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

Arch ブートプロセスを見ると様々なブートローダーが存在しますが、簡素で最初から systemd に組み込まれている systemd-boot を採用しました。

bootctl install
blkid -s PARTUUID -o value /dev/nvme0n1p2 > /boot/loader/entries/arch.conf
cp /boot/loader/entries/arch.conf /boot/loader/entries/arch-fallback.conf
/boot/loader/loader.conf
default arch.conf
timeout 3
console-mode auto
editor no
/boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=PARTUUID=(PARTUUIDの値) rw
options quiet loglevel=3
/boot/loader/entries/arch-fallback.conf
title   Arch Linux (fallback initramfs)
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux-fallback.img
options root=PARTUUID=(PARTUUIDの値) rw

quiet loglevel=3 の部分はサイレントブートするために追記しました。

  1. EFI ブートマネージャの自動更新
systemctl enable systemd-boot-update

mpacman の設定

高速化や見易さを重視のために次の個所をアンコメントします。

/etc/pacman.conf
 # Misc options
 #UseSyslog
-#Color
+Color
 #NoProgressBar
 CheckSpace
-#VerbosePkgLists
-#ParallelDownloads = 5
+VerbosePkgLists
+ParallelDownloads = 5
+ILoveCandy

ILoveCandy は有名な?隠し機能で進捗バーがパックマンになります。

makepkg の設定

pacman でインストールを行う部分の makepkg も設定を行っていきたいと思います。
/etc/makepkg.conf を編集していきます。

  1. 最適化されたパッケージの作成
    • CFLAGS 変数から -march-mtune フラグを全て削除してから -march=native を追記する
    • RUSTFLAGS="-C opt-level=3 -C target-cpu=native" を追記する
  2. 並列コンパイルする
    • nproc コマンドでプロセッサ数を確認する (例: 4)
    • MAKEFLAGS="-j4" を追記する
  3. tempfs を利用する
    • BUILDDIR=/tmp/makepkg をアンコメントする
  4. マルチコアで圧縮する
/etc/makepkg.conf
-COMPRESSXZ=(xz -c -z -)
+COMPRESSXZ=(xz -c -z --threads=0 -)
-COMPRESSZST=(zstd -c -z -q -)
+COMPRESSZST=(zstd -c -z -q --threads=0 -)

Linux カーネルなどの巨大なパッケージをビルドするときは、メモリ不足になるため BUILDDIR をコメントアウトして実行してください。

Btrfs の最適化 (オプション)

  1. 圧縮
    • btrfs filesystem defragment -r -v -czstd /
  2. デフラグ
    • btrfs filesystem defragment -r /
  3. /etc/fstab で Btrfs を利用してる /dev/nvme0n1p2 オプションに compress-force=zstdautodefrag を追記する

ネットワークの設定

ネットワーク設定を確認したところ今回は有線接続のみで冒頭に述べやように依存を減らしたいので systemd-networkdsystemd-resolved を使用しました。

  1. systemd-networkd の設定ファイルを用意する
/etc/systemd/network/dhcp.network
[Match]
Name=en*

[Network]
DHCP=yes
  1. systemd-resolved の設定ファイルを用意する
/etc/systemd/resolved.conf
DNS=2001:4860:4860::8888#dns.google 8.8.8.8#dns.google
FallbackDNS=2606:4700:4700::1111#cloudflare-dns.com 1.1.1.1#cloudflare-dns.com
Cache=yes
  1. 有効化
systemctl enable systemd-networkd systemd-resolved

NTP の設定

Network Time Protocol daemon について調べると簡単に systemd-timesyncd で設定することができるため採用しました。

  1. systemd-timesyncd を使ってNTPを設定する
/etc/systemd/timesyncd.conf
NTP=ntp.nict.jp
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
  1. 有効化
systemctl enable systemd-timesyncd

その他の設定

# メモリの最適化を有効化する(OOM Killer)
systemctl enable systemd-oomd

# OpenSSH の有効化する
systemctl enable sshd

Tailscale (オプション)

WireGuard を使用して、外部からのアクセスをセキュアで手軽にできるようにするため Tailscale を使います。

  1. インストール
pacman -S tailscale
  1. Exit Nodes に必要な設定をする
/etc/sysctl.d/ipforward.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
  1. 有効化
systemctl enable tailscaled

Docker (オプション)

なにかとアプリケーションを検証したり、運用に便利なのでインストールしておきます。

# インストール
pacman -S docker docker-compose

# 有効化
systemctl enable docker

ユーザーの追加

今回は私のユーザー名 ress で書いてますので、皆さんは各自 ress の部分を自分の名前などに変更してください

# wheel グループに所属したユーザーを作成する
useradd -m -G wheel ress

# パスワードを設定する
passwd ress

# wheel グループを管理者権限に変更する
# %wheel ALL=(ALL:ALL) ALL をアンコメントする
EDITOR=nvim visudo

# ログイン
su - ress

AUR ヘルパーのインストール

Arch Linux では Arch User Repository というコミュニティによって運営されているリポジトリです。
サイト を見ればわかりますがいろいろなパッケージが存在しています。
そんな AUR から簡単にパッケージをインストールするための AUR ヘルパー をインストールします。
以前?まで有名だった Yay ですが最近は Paru に移行してるみたいです。
今後 Paru を試すと思いますが今回はまだ Yay を使用します。

sudo pacman -S --asdeps go
git clone https://aur.archlinux.org/yay.git
cd yay && makepkg -si && cd && sudo rm -fr yay

再起動

# 作成したユーザーから抜ける
exit

# chroot から抜ける
exit

# マウント解除
umount -R /mnt

# 再起動
reboot

初回起動後にやること

再起動が終わりインストールメディア(USB・ディスクなど)を外したら作成したユーザーでログインします。

# Tailscale のセットアップ (オプション)
sudo tailscale up --auth-key tskey-auth-XXX --advertise-exit-node

# NTP の有効化
sudo timedatectl set-ntp true

# resolv.conf の変更
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

# root の仮パスワードを削除
sudo passwd -d root

終わりに

これで CLI 環境の Arch Linux がインストールできたと思います。
GUI に関しては色々あるので自分が気に入ったものを探してください!!

まだまだ知見を集めてる途中なので今後アップデートするかまた新たに記事を書きたいと思います。

知見

https://zenn.dev/ress/scraps/3f49f4982d51de

まだまだ知見を集めてる途中なので今後アップデートするかまた新たに記事を書きたいと思います。

GitHubで編集を提案

Discussion