2023年6月 Arch Linux CLI インストール メモ
久しぶりに 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
必須パッケージのインストール
- ミラーの編集
とりあえず執筆時点で公式の Worldwide に指定されている geo.mirror.pkgbuild.com
と日本のミラーサーバーを採用しました。
##
## 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 ファイルをダウンロードできるので便利だと思います。
- インストール
pacstrap -K /mnt base base-devel linux linux-firmware intel-ucode btrfs-progs openssh git neovim
今回は、カーネルに通常版を選択しましたが、今後は LTS 版やカスタムカーネルを選択するかもしれません。また、マイクロコードを読み込むようにしています。
他にも SSH で接続できるように OpenSSH や、今後使用する Git を先にインストールしておきます.
あと、有名どころのエディタである Vim・Emacs・nano などを採用せずに Neovim を採用しています。
システムの設定
# fstab の生成
genfstab -U /mnt >> /mnt/etc/fstab
# chroot
arch-chroot /mnt
# タイムゾーンの設定
ln -sf /usr/share/zoneinfo/Japan /etc/localtime
# ハードウェアクロックの変更
hwclock --systohc
- ロケール
- 必要な言語の部分をアンコメントします
- #en_US.UTF-8 UTF-8
+ en_US.UTF-8 UTF-8
- #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
default arch.conf
timeout 3
console-mode auto
editor no
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=PARTUUID=(PARTUUIDの値) rw
options quiet loglevel=3
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
の部分はサイレントブートするために追記しました。
- EFI ブートマネージャの自動更新
systemctl enable systemd-boot-update
mpacman の設定
高速化や見易さを重視のために次の個所をアンコメントします。
# Misc options
#UseSyslog
-#Color
+Color
#NoProgressBar
CheckSpace
-#VerbosePkgLists
-#ParallelDownloads = 5
+VerbosePkgLists
+ParallelDownloads = 5
+ILoveCandy
ILoveCandy
は有名な?隠し機能で進捗バーがパックマンになります。
makepkg の設定
pacman でインストールを行う部分の makepkg も設定を行っていきたいと思います。
/etc/makepkg.conf
を編集していきます。
- 最適化されたパッケージの作成
-
CFLAGS
変数から-march
と-mtune
フラグを全て削除してから-march=native
を追記する -
RUSTFLAGS="-C opt-level=3 -C target-cpu=native"
を追記する
-
- 並列コンパイルする
-
nproc
コマンドでプロセッサ数を確認する (例: 4) -
MAKEFLAGS="-j4"
を追記する
-
- tempfs を利用する
-
BUILDDIR=/tmp/makepkg
をアンコメントする
-
- マルチコアで圧縮する
-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 の最適化 (オプション)
-
圧縮
btrfs filesystem defragment -r -v -czstd /
-
デフラグ
btrfs filesystem defragment -r /
-
/etc/fstab
で Btrfs を利用してる/dev/nvme0n1p2
オプションにcompress-force=zstd
とautodefrag
を追記する
ネットワークの設定
ネットワーク設定を確認したところ今回は有線接続のみで冒頭に述べやように依存を減らしたいので systemd-networkd と systemd-resolved を使用しました。
- systemd-networkd の設定ファイルを用意する
[Match]
Name=en*
[Network]
DHCP=yes
- systemd-resolved の設定ファイルを用意する
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
- 有効化
systemctl enable systemd-networkd systemd-resolved
NTP の設定
Network Time Protocol daemon について調べると簡単に systemd-timesyncd で設定することができるため採用しました。
-
systemd-timesyncd
を使ってNTPを設定する
NTP=ntp.nict.jp
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
- 有効化
systemctl enable systemd-timesyncd
その他の設定
# メモリの最適化を有効化する(OOM Killer)
systemctl enable systemd-oomd
# OpenSSH の有効化する
systemctl enable sshd
Tailscale (オプション)
WireGuard を使用して、外部からのアクセスをセキュアで手軽にできるようにするため Tailscale を使います。
- インストール
pacman -S tailscale
- Exit Nodes に必要な設定をする
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 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 に関しては色々あるので自分が気に入ったものを探してください!!
まだまだ知見を集めてる途中なので今後アップデートするかまた新たに記事を書きたいと思います。
知見
まだまだ知見を集めてる途中なので今後アップデートするかまた新たに記事を書きたいと思います。
Discussion