Şifrelemeli Arch Linux Kurulumu (LUKS üzerinde LVM)

Sep 26 2020

Arch Linux'u şifreleme ile kurmak istiyorum. Öğreticiyi Arch wiki'de buldum ve ikinci seçeneğin (LUKS'ta LVM) benim için en iyi seçenek olduğunu düşünüyorum. İşte kullanmak istediğim bölümlendirme (Thinkpad X1 Carbon, ~ 500 GB SSD, 16 GB RAM):

  1. [hizalama boşluğu] 1 MB
  2. /boot 256 MB (FAT 32)
  3. 16 GB takas (bellek boyutu)
  4. / (kök) 64 GB (ext4)
  5. /var 8 GB (dahili4)
  6. /tmp 4 GB (dahili4)
  7. /home ~ 400 GB (ext4, kalan)

Diskin adı var nvme0n1. Yükleyiciyi başlattıktan (Eylül 2020 sürümü) ve WiFi'ye bağlandıktan sonra, diskin üzerine rastgele veriler yazıyorum:

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

Sonra yeni bir GPT bölüm şeması kuruyorum:

# parted -s /dev/nvme0n1 mklabel gpt

Ardından, önünde 1 MB hizalama boşluğu olan bir önyükleme bölümü oluşturup biçimlendiriyorum.

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

Şimdi wiki'nin belirsiz olduğu kısım geliyor. (Sadece /bootfarklı bir cihazda sahip olmanın mümkün olduğundan bahsediyor , ki benim yapmıyorum.) Şifrelenmiş birimimin üstüne yerleştirileceği başka bir bölüm yapmaya karar verdim:

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

Bu /dev/nvme0n1p2, kalan disk boyutuyla ikinci bir bölüm oluşturur . (Belki bu adım soruna neden olur.) Şifrelemeyi ayarlamaya devam ediyorum:

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

Sonra bölümleri yukarıda anlatıldığı gibi oluşturuyorum:

# 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

Bölümler şimdi biçimlendiriliyor:

# 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

Ve monte edilmiş:

# 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

Sistem artık aşağıdakilerle birlikte önyüklenebilir lvm2:

# pacstrap /mnt base liux linux-firmware lvm2

Ayrıca fstabşunları da oluşturuyor ve depoluyorum :

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

Ben chrootönyüklemeli sisteme:

# arch-chroot /mnt

Wiki de belirtildiği gibi, ben kanca ekleyebilir encryptve lvm2içinde /etc/mkinitcpio.conf:

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

Her zamanki kurulum görevlerine devam ediyorum (kök şifresi kurma, temel paketleri kurma, saat dilimini ayarlama, yerel ayar, dil, ana bilgisayar adı):

# 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

Şimdi bootloader geliyor. Burada geleneksel olarak grub yerine systemd bootloader'ı kullanıyorum. İşte nasıl kurduğum:

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

Kök bölümün UUID'sini (PARTUUID değil) aşağıdaki gibi buluyorum:

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

Ardından önyükleme girişini oluşturuyorum /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

Ve bir uyum /boot/loader/loader.conf:

default arch
timeout 0
editor  0

Son olarak mkinitcpio, yeni bir önyükleme için ayrılmadan önce koşuyorum :

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

Bu benim kurulum prosedürümdü. USB dongle'ı çıkarıp sistemi başlatıyorum. Önyükleyici görünüyor, ancak sonra aşağıdaki ekranı görüyorum:

:: 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.

Şimdi ne yaptığım konusunda oldukça bilgisizim. Bir şüphe, /dev/nvme0n1p2oluşturmam gereken ikinci bölüm ( ). Başka bir şüphe de bootloader ile yanlış bir şey yaptığım. Normal kurulumlarda, her zaman UUID yerine PARTUUID kullanırım. (Bununla birlikte, çıktısında PARTUUID yok blikd, bu yüzden muhtemelen sorun bu değil.)

Yanıtlar

1 PatrickBucher Sep 26 2020 at 18:34

@Frostschutz, soruna doğru çözümünü henüz bir cevap olarak yazmadığından, sorunu burada hızlıca özetleyeceğim: Yanlış bölümün UUID'sini seçtim. Altındaki kök bölüm /dev/VolumeGroup/rootseçilecek değil, gerçek bölümdür /dev/nvme0n1p2. İşte bu UUID'nin nasıl çıkarılacağı:

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

Daha sonra önyükleyici giriş yapılandırmasında kullanılabilir:

# 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

Özel web sitemde tüm prosedürü özetledim . Bölme boyutlarıyla ilgili tavsiyeler için @Cbhihe'ye de teşekkürler.