暗号化を使用したArch Linux設定(LUKSのLVM)

暗号化を使用したArch Linux設定(LUKSのLVM)

Arch Linuxの暗号化を設定したいと思います。チュートリアルを見つけました。アーチスウィキ、2番目のオプション(LUKSのLVM)が私にとっては最善の選択だと思います。私が使用したいパーティションは次のとおりです(Thinkpad X1 Carbon、〜500 GB SSD、16 GB RAM)。

  1. [ソート間隔] 1MB
  2. /boot256MB(FAT 32)
  3. 16GBスワップ(メモリサイズ)
  4. /(ルート)64GB(ext4)
  5. /var8GB(ext4)
  6. /tmp4GB(拡張4)
  7. /home~400GB(ext4、残り)

ディスク名はですnvme0n1。インストーラ(2020年9月版)を起動し、WiFiに接続した後、ディスクを任意のデータで上書きします。

# shred --random-source=/dev/urandom --iterations=3 /dev/nvme0n1

次に、新しいGPTパーティションスキーマを設定します。

# parted -s /dev/nvme0n1 mklabel gpt

次に、前に1MBのソート間隔を持つブートパーティションを作成してフォーマットしました。

# parted -s /dev/nvme0n1 mkpart boot fat32 1MiB 257MiB
# parted -s /dev/nvme0n1 set 1 esp on
# mkfs.fat -F 32 /dev/nvme0n1p1

今Wikipediaが不明な部分が出てきます。 (他のデバイスで使用できることだけが言及されていますが、/boot私はそのようなデバイスがありません。)暗号化されたボリュームがその上にある別のパーティションを作成することにしました。

# parted -s /dev/nvme0n1 mkpart cryptlvm 257MiB '100%'

/dev/nvme0n1p2これにより、残りのディスクサイズで2番目のパーティションが作成されます。 (この手順で問題が発生する可能性があります。)暗号化設定に進みます。

# cryptsetup luksFormat /dev/nvme0n1p2     # YES, entering passphrase  twice
# cryptsetup open /dev/nvme0n1p2 cryptlvm  # entering passphrase
# pvcreate /dev/mapper/cryptlvm
# vgcreate VolumeGroup /dev/mapper/cryptlvm

その後、上記のようにパーティションを作成しました。

# lvcreate -L 16G VolumeGroup -n swap
# lvcreate -L 64G VolumeGroup -n root
# lvcreate -L 8G VolumeGroup -n var
# lvcreate -L 4G VolumeGroup -n tmp
# lvcreate -l '100%FREE' VolumeGroup -n home

これでパーティションをフォーマットします。

# mkswap /dev/VolumeGroup/swap
# mkfs.ext4 -F /dev/VolumeGroup/root
# mkfs.ext4 -F /dev/VolumeGroup/var
# mkfs.ext4 -F /dev/VolumeGroup/tmp
# mkfs.ext4 -F /dev/VolumeGroup/home

そして以下をインストールしてください:

# mount /dev/VolumeGroup/root /mnt

# mkdir /mnt/boot
# mount /dev/nvme0n1p1 /mnt/boot

# mkdir /mnt/var
mount /dev/VolumeGroup/var /mnt/var

# mkdir /mnt/tmp
mount /dev/VolumeGroup/tmp /mnt/tmp

# mkdir /mnt/home
mount /dev/VolumeGroup/home /mnt/home

これで、次のコマンドを使用してシステムを起動できますlvm2

# pacstrap /mnt base liux linux-firmware lvm2

私も作成して保存しましたfstab

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

chroot起動システムに入ります。

# arch-chroot /mnt

Wikiで述べたようにフックを追加し、encrypt以下を追加しましたlvm2/etc/mkinitcpio.conf

HOOKS=(base udev autodetect keyboard keymap consolefont modconf block filesystems fsck encrypt lvm2)

一般的な設定タスク(ルートパスワード設定、デフォルトパッケージのインストール、タイムゾーン、ロケール、言語、ホスト名の設定)に進みます。

# passwd
# pacman -S iw wpa_supplicant dialog intel-ucode netctl dhcpcd
# ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime
# timedatectl set-ntp true
# hwclock --systohc
# echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
# locale-gen
# echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# echo -n 'x1' > /etc/hostname

これでブートローダが出ます。ここでは、伝統的に grub の代わりに systemd ブートローダを使用します。設定方法は次のとおりです。

# systemd-machine-id-setup
# bootctl --path=/boot install

ルートパーティションのUUID(PARTUUIDではない)を次のように計算しました。

# blkid | grep /dev/VolumeGroup/root | egrep -o 'UUID="[^"]!"'
UUID="6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf"

次に、次の場所に開始項目を作成します/boot/loader/entries/arch.conf

title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options cryptdevice=UUID=6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf:cryptlvm root/dev/VolumeGroup/root

以下に基づいています/boot/loader/loader.conf

default arch
timeout 0
editor  0

最後にmkinitcpio再起動する前に、次を実行してください。

# mkinitcpio -P
# exit
# umount -R /mnt
# shutdown -h now

私のセットアッププロセスです。 USBドングルを取り外してシステムを起動しました。ブートローダが表示されますが、次の画面が表示されます。

:: running early hook [udev]
Starting version 246.6-1-arch
:: running early hook [lvm2]
:: running hook [udev]
:: Triggering uevents...
:: running hook [encrypt]
Waiting 10 seconds for device /dev/disk/by-uuid/6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf ...
Waiting 10 seconds for device /dev/VolumeGroup/root ...
ERROR: device '/dev/VolumeGroup/root' not found. Skippng fsck.
:: mounting '/dev/VolumeGroup/root' on real root
mount: /new_root: no filesystem type specified.
You are now being dropped into an emergency shell.

今、私は何が間違っていたのか分かりません。 1つの疑いは、/dev/nvme0n1p22番目のパーティション()を作成する必要があるということです。もう一つの疑いは、私のブートローダーに何か問題があるということです。通常の設定では、常にUUIDの代わりにPARTUUIDを使用します。 (ただし、出力にはPARTUUIDがないので blikd問題ではないかもしれません。)

ベストアンサー1

@frostschutzはまだこの問題に対する正しい解決策を答えていないので、ここで問題を簡単にまとめます。無効なパーティションのUUIDを選択しました。以下のルートパーティションは、選択した/dev/VolumeGroup/rootパーティションではなく実際のパーティションです/dev/nvme0n1p2。 UUIDを抽出する方法は次のとおりです。

# uuid=$(blkid --match-tag UUID -o value /dev/nvme0n1p2)

その後、ブートローダエントリの設定で使用できます。

# cat <<EOF >/boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options cryptdevice=UUID=${uuid}:cryptlvm root=/dev/volgrp/root
EOF

私のブログに全体のプロセスをまとめました。個人のウェブサイト。また、パーティションサイズの提案をいただいた@Cbhiheにも感謝します。

おすすめ記事