🐧

自分用Arch Linux インストールメモ (インストール〜SSHまで)

2025/02/04に公開

Amazonスマイルセールとか言う謎のセールで前々から気になっていたN100のミニPCを購入した。こいつにLinuxを入れてTailscale・AdGuardとか用のサーバーとして運用したいのだが、せっかくなのでLinuxの勉強がてらArch Linuxを入れてみる。do-it-yourself、良いと思います。

基本的には公式のインストールガイドに従って進めつつ、適宜技術ブログなども参考にしながらやっていく。

インストールの準備

インストールメディアの入手 ~ ライブ環境の起動

インストールガイドの通り。省略

コンソールのキーボードレイアウト

JISキーボードを使っている場合は、loadkeys でキーマップを設定する。US配列の場合は何もしなくていい。

# loadkeys jp106

起動モードの確認

最近のPCはほとんどUEFIなので大丈夫だろうけど、一応確認しておく。
ディレクトリの中身が見れたらOK。

# ls /sys/firmware/efi/efivars

インターネットへの接続

有線ならLANケーブルを繋ぐだけ。
無線なら iwctl を使って接続の設定をする。

# iwctl

[iwd]# station device get-networks

[iwd]# station device connect [SSID] # パスワードを入力する

[iwd]# quit

pingを飛ばして疎通確認しておく。

# ping -c 3 archlinux.org

システムクロックの更新

タイムゾーンを一応設定しておく。

# timedatectl set-timezone Asia/Tokyo

timedatectl status で Local Time が正しく設定されていればOK。

パーティション

まずはインストール先のデバイス名を確認する。lsblk の結果から容量などを見て判断すればいい。SATAなら /dev/sda 、NVMeなら /dev/nvme0n1 など。

# lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  32.3M  1 loop /run/archiso/sfs/airootfs
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   512M  0 part 
└─sda2   8:2    0 465.3G  0 part 

デバイス名を確認したらパーティションを作成する。UEFIの場合、パーティションテーブルにはGPTを使う。
ファイルシステムにはbtrfsを使うのが今どきらしいのでそのとおりやってみる。軽く調べて見た印象では、サブボリュームを使えるのが便利そうだなと言う感じ。ただ、一応OSとホーム領域はパーティションレベルで分割しておく。というわけでこんな感じでパーティションを作っていく。

  • EFIシステムパーティション (/boot): 512MB (FAT32)
  • OS用パーティション (/): 100GB (btrfs)
  • ホーム用パーティション (/home): 残り全て (btrfs)

パーティション分割には parted を使う。

まず既存のパーティションを削除してGPTテーブルとして設定する。

# parted /dev/sda --script mklabel gpt

EFIパーティションは、先頭部分に1MiBから513MiBまでの512MiBを割り当てる。ESPフラグもセットする。

# parted /dev/sda --script mkpart ESP fat32 1MiB 513MiB
# parted /dev/sda --script set 1 esp on

OS用パーティションは、513MiBから102913MiBまでの100GB (= 102400MiB) を割り当てる。

# parted /dev/sda --script mkpart primary btrfs 513MiB 102913MiB

最後に、残った部分をホーム用パーティションとして割り当てる。

# parted /dev/sda --script mkpart primary btrfs 102913MiB 100%

パーティションのフォーマット

# mkfs.fat -F32 /dev/sda1 
# mkfs.btrfs /dev/sda2 
# mkfs.btrfs /dev/sda3

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

公式のインストールガイドに従い、ルートパーティションを /mnt にマウントする。

# mount /dev/sda2 /mnt

同様に、/mnt/boot/mnt/home にもマウントする。

# mkdir /mnt/boot
# mkdir /mnt/home
# mount /dev/sda1 /mnt/boot
# mount /dev/sda3 /mnt/home

パーティションの作成、フォーマットが正しくできているか確認しておく。

# lsblk --fs

NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT
loop0  squash 4.0                                                      0   100% /run/archiso/sfs/airootfs
sda                                                                          
├─sda1 vfat   FAT32       4E0A-6F8B                             511.3M     0% /mnt/boot
├─sda2 btrfs              4b8a3b4d-3b5e-4a8f-8d1c-4d1c6c2c4f5e     98G     0% /mnt
└─sda3 btrfs              4b8a3b4d-3b5e-4a8f-8d1c-4d1c6c2c4f5e  374.4G     0% /mnt/home

インストール

ミラーの選択

/etc/pacman.d/mirrorlist で日本のミラーを優先して見に行くよう設定する。順番はArch Linux JP Project - ミラーの状態 からスコア順に並べる (値が小さいほどいい)。

# vi /etc/pacman.d/mirrorlist

// 上部に追加する
Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/
Server = https://mirrors.cat.net/archlinux/
Server = http://mirrors.cat.net/archlinux/
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/

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

公式のインストールガイドに従う。今回はbtrfsを使用しているので、btrfs-progs もインストールしておく。

# pacstrap -K /mnt base linux linux-firmware btrfs-progs

システムの設定

基本は公式のインストールガイドに従うだけ。

fstabの生成

# genfstab -U /mnt >> /mnt/etc/fstab

cat で中身を見ると、各デバイスのUUID, マウントポイント、ファイルシステム、マウントオプションなどが確認できる。

chroot

これを実行すると /mnt がルートディレクトリになり、今までのコマンド履歴は見れなくなるので注意。

# arch-chroot /mnt

タイムゾーン

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc

ロケール

ロケール設定の前に、テキストエディタがないのは辛いので好きなのをインストールする。今回はvimを使う。ついでにパッケージのアップデートもしておく。

# pacman -Syyu
# pacman -S vim

vimで /etc/locale.gen を開いて、en_US.UTF-8 UTF-8, ja_JP.UTF-8 UTF-8 の行をアンコメントする。探すのが面倒だったら追記してもいい。
その後、locale-gen を実行してロケールを生成する。

# locale-gen

/etc/locale.confLANG を設定する。ja_JP.UTF-8 を設定すれば日本語にできるが、ターミナルに豆腐が出てくるのが嫌なので私は en_US.UTF-8 を設定している。GUIやSSHがメインの用途ならそんなに気にならないかもしれない。ここはお好みで。

# echo "LANG=en_US.UTF-8" > /etc/locale.conf

JISキーボードを使っている場合は、/etc/vconsole.conf にキーマップを設定する。

# echo "KEYMAP=jp106" > /etc/vconsole.conf

ネットワーク設定

お好みでホスト名を設定する。

# echo "myhostname" > /etc/hostname

localhostを解決できるようにするため、/etc/hosts にホスト名を設定する。固定IPを割り振る場合は 127.0.1.1 の部分をそのIPに変更すると良いらしい (今回はDHCPを使うので試していない)。

# vim /etc/hosts

// 以下を追記
127.0.0.1        localhost
::1              localhost
127.0.1.1        myhostname

正しく設定されているか一応見ておく。

# getent hosts

127.0.0.1       localhost
127.0.0.1       localhost
127.0.1.1       myhostname

今回は無線LANでセットアップしている関係上、Network Managerを使う。有線かつDHCPなら dhcpd の方がシンプルで良さそう。

# pacman -S networkmanager

次回起動時にNetwork Managerが自動で有効化されるよう設定しておく。

# systemctl enable NetworkManager

Initramfs

RAIDや暗号化などは使用しないので、インストールガイドに書かれている通り、今回は設定の必要はなさそう。

Rootパスワード

忘れずに設定しておく。

# passwd

ブートローダー

GRUBが定番だが、ミーハーなので systemd-boot を使いたい。EFIシステムパーティションにブートローダーをインストールする。こちらもArch LinuxのWikiに従う。にしてもArch LinuxのWikiは充実しすぎててすごい。コミュニティの熱量を感じます。

まず、このあと使う intel-ucode をインストールしておく。これはマイクロコードのアップデートに対応するためのライブラリらしい。使ってるCPUに合わせて intel-ucodeamd-ucode をインストールする。

# pacman -S intel-ucode

システムがUEFIで起動していることは確認済みで、/mntchroot もできているので、bootctl で EFIシステムパーティションに systemd-boot をインストールする。

# bootctl --path=/boot install

自動更新の設定もしておく。

# systemctl enable systemd-boot-update

次に /boot/loader/loader.conf を開き、ローダーの設定を行う。ここではデフォルトで起動するエントリの設定や、自動選択までの時間、エディタの使用可否などが設定できる (参考 :loader.conf(5) — Arch manual pages )。今回のPCにはArchしかインストールしないので、timeoutは0にする。0にすると選択画面が表示されなくなるので、表示したい場合はスペースを連打すればいい。

# vim /boot/loader/loader.conf

// 設定例
default arch.conf
timeout 0
editor no 

最後に、/boot/loader/entries/arch.conf にエントリを追加する。各パラメータの説明は以下の通り。

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
  • title : エントリの名前
  • linux : カーネルのパス (/boot を起点とした絶対パス)
  • initrd : マイクロコード、初期RAMディスクのパス (/boot を起点とした絶対パス)
  • options : カーネルに渡す引数

linux, initrdに指定したパスについては、ls \boot で対象ファイルが存在するか確認しておくといい。
注意点として、マイクロコードを指定するオプションはRAMディスクよりも前に指定しなければならない (参考 :マイクロコード - ArchWiki )。また、optionsのrootにはルートパーティションのUUIDを指定する。今回は /dev/sda2 をルートとしているので、blkid でUUIDを確認して設定する。UUIDの手打ちは面倒なので、blkid の出力をフィルタリングして echo で書き込むと楽。

# echo $(blkid -s UUID -o value /dev/sda2) > /boot/loader/entries/arch.conf

再起動

chroot環境から抜けて、/mnt にマウントしたパーティションをアンマウントする。

# exit
# umount -R /mnt

あとはうまくいくことを願って再起動。

# reboot

再起動後 systemd-boot のブートローダーが表示されたら勝ち。ローダーの設定でtimeoutを0にしている場合は、UEFIのブートロゴが出たあたりからスペースを連打しているとブートローダーに入れる。起動後はrootユーザー・ passwd で設定したパスワードでログインできる。
ここから先はインストールメディアは必要ない。

ネットワーク設定

有線LANの場合、network-manager が起動していれば接続できる。繋がらない場合はサービスを起動させる。

# systemctl start NetworkManager

無線LANの場合は、nmcli で設定する。まずSSIDのリストを確認する。

# nmcli device wifi 

接続するSSIDを選んでパスワードを入力する。

# nmcli device wifi connect [SSID] password [password]

pingが通ればOK。

# ping -c 3 archlinux.org

Zshのインストール

ログインシェルにzshを使いたいのでインストールする。

# pacman -S zsh

ユーザーの追加

ユーザーを追加する。このときログインシェルをzshに設定する。ちなみに、各オプションの説明はこんな感じ。

  • -m : ホームディレクトリを作成する
  • -G wheel : wheelグループ ( su が使えるユーザーのグループ) に追加する
  • -s /usr/bin/zsh : ログインシェルをzshに設定する
# useradd -m -G wheel -s /usr/bin/zsh [username]

パスワードも設定する。

# passwd [username]

sudo をインストールする。

# pacman -S sudo

sudo を使えるようにするために、wheel グループに対して sudo の権限を与える。

# EDITOR=vim visudo

// 以下の行をアンコメント
%wheel ALL=(ALL:ALL) ALL

root からログアウトする。

# exit

作成したユーザーでログインし直す。ログイン直後にzshの設定プロンプトが開くので、今回はとりあえず 0 を選択して空の .zshrc だけ作ってもらう。
シェルに入ったら、sudo が使えることを確認する。

$ sudo ls

SSHの設定

今回は主にサーバー運用なので、デスクトップ環境より先にSSHを導入する。

$ sudo pacman -S openssh

sshd を起動する。自動起動の設定もしておく。

$ sudo systemctl start sshd
$ sudo systemctl enable sshd

パスワード認証は無効化しておく。

$ sudo vim /etc/ssh/sshd_config

// PasswordAuthentication no

Tailscaleのインストール

Tailscale SSHを使えばSSHの設定もかなり楽になる。まずはTailscaleをインストールする。

$ sudo pacman -S tailscale

tailscaled の設定を行う。

$ sudo systemctl start tailscaled
$ sudo systemctl enable tailscaled

Tailscaleを起動してTailscale SSHを有効化する。認証用URLが表示されるので、何かしらの端末からアクセスして認証する。

$ sudo tailscale up --ssh

他の端末からSSHが通るか確認する。

$ tailscale status # TailscaleのIPを確認
$ ssh [username]@[tailscale-ip]

再起動してもTailscale経由で接続できるようになっていればOK。

他端末からSSHで接続できるようになったので、一旦ここで一区切りとする。
引き続きTailscaleやAdGuardの設定を行っていくが、それはまた別の記事で。せっかくなのでHyprlandとかも試してみたいと思っている。

Reference

インストールガイド - ArchWiki

Arch Linux インストールメモ - 永遠に未完成

ArchLinuxでsystemd-bootを使いたい人のため - minfaox3公式ウェブサイト

systemd-bootの紹介 | Webシステム開発/教育ソリューションのタイムインターメディア

新・自分用 Arch Linux インストールメモ

私的Arch Linuxインストール講座

2023年 令和最新版 archlinux インストールオレオレ手順 - blog.k16em.net

Discussion