https://blog.naskya.net/

[[ 🗃 ^wzWnj blog ]] :: [📥 Inbox] [📤 Outbox] [💥 Errbox] [🐤 Followers] [🤝 Collaborators] [🏗 Projects] [🛠 Commits]

Clone

HTTPS: git clone https://code.naskya.net/repos/wzWnj

SSH: git clone USERNAME@code.naskya.net:wzWnj

Branches

Tags

main :: content / post /

6h4tqyyx5xzh.md

これはなに

いつも Arch Linux のインストール方法を忘れてインストールにコケるので、備忘録としてインストール方法を書き残しておきます。かなり殴り書きです。

参考にした記事

私の Arch Linux のインストール方法は以下の 3 つの記事および ArchWiki から大きな影響を受けています。特に、全体の大まかな流れは 1 番目のページ{{< link https://gist.github.com/noghartt/8388f7d8543e3eb1777cb6ed4a3d7807 >}}に準拠しています。しかし、BTRFS の subvolume の構成が少し違ったり、記事に含まれるいくつかの誤りを修正していたりします。

  1. My Arch Linux installation - systemd-boot + LUKS + LVM + Btrfs + swapfile + xmonad
  2. Secured Arch Linux Installation
  3. Ubuntu Desktop 20.04: installation guide with btrfs-luks full disk encryption including /boot and auto-apt snapshots with Timeshift

Arch Linux のインストール

{{}}. Live USB の作成・起動

Ventoy を USB メモリにインストールし、Arch Linux の ISO イメージ をダウンロードして USB メモリに移します。ダウンロードした ISO イメージのチェックサムは必ず確認しましょう。

するとこの USB メモリから Arch Linux のインストール用環境を起動できるようになるので、ブートメニューから Ventoy をインストールした USB メモリのパーティションを選んで Arch Linux のイメージを grub2 モードで起動します。

起動時に、マリオがコインを獲得したときのような効果音が出ます。その後、(BIOS ではなく)UEFI で起動していることを確認するために /sys/firmware/efi/efivars を確認します。

ls /sys/firmware/efi/efivars

このディレクトリが存在しなかった場合には起動するモードを間違えているので再起動してやり直しです。

{{}}. 他の環境から SSH 接続

Live USB から起動した環境ではブラウザも何も無いので、コマンドの入力などが不便です{{<note 例えば、このページを開いてコマンドをコピー&ペーストすることができない>}}。そこで、既に OS がセットアップされている他の PC などから SSH 接続して以降の操作を行います。他の環境が無い場合には仕方ないのでこの工程は飛ばします。

  1. passwd コマンドを実行し、root パスワードを設定します。このパスワードはここでしか使いません。
  2. ip addr を実行し、ローカルの IP アドレスを確認します。 console root@archiso ~ # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.1.x/24 brd 192.168.1.255 scope global dynamic noprefixroute enp4s0 valid_lft 8476sec preferred_lft 6676sec inet6 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 14063sec preferred_lft 12263sec inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever この場合には 192.168.1.x がローカル IP アドレスです。
  3. ローカルネットワークの他の環境から SSH 接続します。さっき設定したパスワードを尋ねられます。 sh ssh root@192.168.1.x

{{}}. 基本設定

  1. システムの時刻を更新します。 sh timedatectl set-ntp true

  2. インターネットに接続されていることを確認します。 sh ping -c5 archlinux.org ## {{}}. ディスクの暗号化・マウント

  3. lsblk を実行し、接続されているストレージを確認します。今回は /dev/nvme0n1 に Arch Linux をインストールします。 console root@archiso ~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 795.7M 1 loop /run/archiso/airootfs sda 8:0 1 28.9G 0 disk ├─sda1 8:1 1 4.8G 0 part │ └─ventoy 254:0 0 1.1G 0 dm ├─sda2 8:2 1 32M 0 part ├─sda3 8:3 1 12G 0 part └─sda4 8:4 1 12G 0 part nvme0n1 259:0 0 3.6T 0 disk

  4. パーティションを作成します。select label type という画面が出たら gpt を選択します。 sh cfdisk /dev/nvme0n1

    root@archiso ~ # lsblk
    NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
    loop0         7:0    0 795.7M  1 loop /run/archiso/airootfs
    sda           8:0    1  28.9G  0 disk
    ├─sda1        8:1    1   4.8G  0 part
    │ └─ventoy  254:0    0   1.1G  0 dm
    ├─sda2        8:2    1    32M  0 part
    ├─sda3        8:3    1    12G  0 part
    └─sda4        8:4    1    12G  0 part
    nvme0n1     259:0    0   3.6T  0 disk
    ├─nvme0n1p1 259:3    0   500M  0 part
    └─nvme0n1p2 259:4    0   3.6T  0 part

    /dev/nvme0n1p1 が 500 MiB の起動用パーティションで、/dev/nvme0n1p2 がメインのパーティションです。

  5. 1 つ目の参考記事に従って LUKS でディスクを暗号化し、論理ボリュームを作成します。 sh cryptsetup --hash sha512 --use-random --verify-passphrase luksFormat /dev/nvme0n1p2 cryptsetup open /dev/nvme0n1p2 cryptlvm pvcreate /dev/mapper/cryptlvm vgcreate vg /dev/mapper/cryptlvm lvcreate -l 100%FREE vg -n root

  6. 起動用とメインのパーティションをそれぞれ FAT と BTRFS にフォーマットします。 sh mkfs.fat -F32 /dev/nvme0n1p1 mkfs.btrfs -L btrfs /dev/mapper/vg-root

  7. BTRFS の subvolume を作成します。ここでは 1 つ目の参考記事の通りにはせず、3 つ目の参考記事の構成(@@home)を用います{{< note そうしないと timeshift を使えないため >}}。 sh mount /dev/mapper/vg-root /mnt cd /mnt btrfs subv create @ btrfs subv create @home cd .. umount /mnt

  8. 引き続き、1 つ目の記事を参考に操作していきます。ただし、マウントのオプションから space_cache を抜いて、subvolume の名前もさっき作成したものに合わせます。 sh SSD_MOUNTS='autodefrag,compress=lzo,discard,noatime,nodev,rw,ssd' mount -o subvol=@,"${SSD_MOUNTS}" /dev/mapper/vg-root /mnt mkdir -p /mnt/{boot,home} mount -o discard,noatime,nodev,noexec,nosuid,rw /dev/nvme0n1p1 /mnt/boot mount -o subvol=@home,nosuid,"${SSD_MOUNTS}" /dev/mapper/vg-root /mnt/home

{{}}. ソフトウェアのインストール

  1. /etc/pacman.conf を編集し、parallelDownloads を 20 に変更します。
  2. 基本的なソフトウェアをインストールします。Intel 製 CPU をお使いの場合は amd-ucode ではなく intel-ucode をインストールします。 sh pacstrap /mnt base base-devel linux-zen linux-firmware lvm2 amd-ucode btrfs-progs
  3. /etc/fstab/ を生成します。 sh genfstab -U /mnt >> /mnt/etc/fstab
  4. 新しい環境に chroot します。 sh arch-chroot /mnt
  5. 基本的なソフトウェアをインストールします。 sh pacman -S helix git dhcpcd reflector zsh

{{}}. タイムゾーンやロケール、ホストの設定

  1. ArchWiki{{<link https://wiki.archlinux.org/title/Installation_guide>}} を参考に、タイムゾーンなどを設定します。 sh ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime hwclock --systohc helix /etc/locale.gen # en_US.UTF-8 から始まる行をアンコメント helix /etc/pacman.conf # color を有効化し、parallelDownloads を 20 に変更 locale-gen echo 'arch' > /etc/hostname echo 'LANG=en_US.UTF-8' > /etc/locale.conf echo 'KEYMAP=us' > /etc/vconsole.conf

  2. /etc/hosts を編集します。 sh helix /etc/hosts

    127.0.0.1		localhost
    ::1				localhost
    127.0.1.1		arch.localdomain	arch
  3. ユーザーを追加し、パスワードを設定し、sudo コマンドを使えるようにします。 sh useradd -mG storage,wheel -s "$(which zsh)" aria passwd aria EDITOR=helix visudo # %wheel ALL=(ALL:ALL) ALL をアンコメント

    root ユーザーのパスワードも設定しておいたほうがいい気がしますが、今のところ設定せずに困ったことがありません。

{{}}. 起動用の設定

1 つ目の記事を参考に操作していきます。

  1. /etc/mkinitcpio.conf を開き、HOOKS= から始まる行を以下のように編集します。 conf HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt lvm2 filesystems btrfs)

  2. mkinitcpio を実行します。 sh mkinitcpio -p linux-zen

  3. systemd-boot をインストールします。 sh bootctl install

  4. ブートメニューの設定をします。 sh helix /boot/loader/loader.conf

    default arch
    timeout 10
    console-mode max
    editor no

    参考記事の記述が一部間違っているので注意しながら Arch Linux のブートエントリーを作成します。

    helix /boot/loader/entries/arch.conf
    title Arch Linux
    linux /vmlinuz-linux-zen
    initrd /amd-ucode.img
    initrd /initramfs-linux-zen.img
    options rd.luks.name=xxxxxxxxxx=cryptlvm rd.luks.options=discard root=/dev/mapper/vg-root resume=/dev/mapper/vg-root rootfstype=btrfs rootflags=subvol=@ rw

    ただし、xxxxxxxxxx の部分は blkid /dev/nvme0n1p2 -s UUID -o value の結果に置換します。

  5. ドキドキしながら再起動します。 sh exit reboot now

{{}}. 起動後の設定

  1. インターネットに接続できるようにします。 sh sudo systemctl enable --now dhcpcd systemd-resolved ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

  2. AUR ヘルパーをインストールします。 sh git clone https://aur.archlinux.org/paru-bin.git cd paru-bin makepkg -si cd .. rm -rf paru-bin

  3. 好きなウィンドウマネージャーをインストールしたり、dotfiles を復元したりします(要追記)。 sh pacman -S xorg-server xorg-xinit xmonad xmonad-contrib echo 'exec xmonad' > ~/.xinitrc mkdir ~/.xmonad # ...

  4. システムのバックアップ用に timeshift を設定します。 sh paru timeshift sudo timeshift-gtk

    BTRFS モードにして、定期的に @@home ボリュームのバックアップを作成させます。

  5. ソフトウェアのインストールやアップデートの前に timeshift のバックアップを自動で作成させる pacman hook をインストールします。 sh paru timeshift-autosnap

[See repo JSON]