自分用Arch Linux インストールメモ (インストール〜SSHまで)
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.conf
に LANG
を設定する。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-ucode
か amd-ucode
をインストールする。
お
# pacman -S intel-ucode
システムがUEFIで起動していることは確認済みで、/mnt
に chroot
もできているので、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
ArchLinuxでsystemd-bootを使いたい人のため - minfaox3公式ウェブサイト
Discussion