VM Arch Linux (UEFI); (LVM2 + XFS) dalam LUKS2 & Btrfs dalam LUKS2
QEMU/KVM (Manual)
- Setelah Live CD berjaya boot dan dilog masuk sebagai root, set tulisan yang lebih besar di konsol dengan font
Terminus
:
setfont ter-d22b
- Dapatkan senarai blok pemacu:
alias lsblk="lsblk -o NAME,FSTYPE,SIZE,UUID,LABEL,MOUNTPOINTS"
lsblk
1. Layout untuk (LVM2 + XFS) dalam LUKS2:
/dev/mapper/myvg-root = /dev/myvg/root
/dev/mapper/myvg-home = /dev/myvg/home
2. Layout untuk Btrfs dalam LUKS2:
- Setup partitions. (Kondisinya adalah sama untuk kedua-dua jenis format):
gdisk /dev/nvme0n1
Command (? for help): n Partition number (1-128, default 1): First sector (34-62914526, default = 2048) or {+-}size{KMGTP}: Last sector (2048-62914526, default = 62912511) or {+-}size{KMGTP}: +260M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): ef00 Changed type of partition to 'EFI system partition'
Command (? for help): n Partition number (2-128, default 2): First sector (34-62914526, default = 534528) or {+-}size{KMGTP}: Last sector (534528-62914526, default = 62912511) or {+-}size{KMGTP}: +512M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to ‘Linux filesystem’
Command (? for help): n Partition number (3-128, default 3): First sector (34-62914526, default = 1583104) or {+-}size{KMGTP}: Last sector (1583104-62914526, default = 62912511) or {+-}size{KMGTP}: 62914526 Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): 8309 Changed type of partition to ‘Linux LUKS’
Command (? for help): p Disk /dev/nvme0n1: 62914560 sectors, 30.0 GiB Model: QEMU NVMe Ctrl Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 9B38641F-9465-43B0-8F1D-3F28D94A670B Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 62914526 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name 1 2048 534527 260.0 MiB EF00 EFI system partition 2 534528 1583103 512.0 MiB 8300 Linux filesystem 3 1583104 62914526 29.2 GiB 8309 Linux LUKS
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/nvme0n1. The operation has completed succesfully.
- Format partition untuk
ESP
yang akan menempatkan bootloaderEFI
(saya guna GRUB2):
mkfs.fat -F 32 -n ESP /dev/nvme0n1p1
- Format partition
BOOT
(mengikut format masing-masing).
(LVM2 + XFS)
mkfs.xfs -L BOOT /dev/nvme0n1p2
(Btrfs)
mkfs.btrfs -L BOOT -n 32k /dev/nvme0n1p2
- Encrypt partition ketiga.
cryptsetup luksFormat /dev/nvme0n1p3
WARNING! ======== This will overwrite data on /dev/nvme0n1p3 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/nvme0n1p3: _ Verify passphrase: _ cryptsetup luksFormat /dev/nvme0n1p3 19.78s user 0.71s system 5% cpu 6:49.45 total
- Dan buka di peranti
cryptarchvm
. Hendak bagi nama apa pun kepada peranti itu, terpulanglah pada keputusan masing-masing.
cryptsetup open /dev/nvme0n1p3 cryptarchvm
Enter passphrase for /dev/nvme0n1p3: _ cryptsetup open /dev/nvme0n1p3 cryptarchvm 6.54s user 0.33s system 10% cpu 3.327 total
(LVM2 + XFS)
- Buat ① Physical Volume, ② Volume Group berserta ③ Logical Volumes pada partition
LUKS
ini. - Format kesemua logical volumes yang dicipta dan mount ke direktori-direktori berkaitan.
- Jangan lupa untuk mount BOOT & ESP partition juga.
pvcreate /dev/mapper/cryptarchvm
vgcreate myvg /dev/mapper/cryptarchvm
lvcreate -L 10G myvg -n root
lvcreate -l +100%FREE myvg -n home
mkfs.xfs -L ROOT /dev/myvg/root
mkfs.xfs -L HOME /dev/myvg/home
mount -m /dev/myvg/root /mnt/arch
mount -m /dev/myvg/home /mnt/arch/home
mount -m /dev/nvme0n1p2 /mnt/arch/boot
mount -m /dev/nvme0n1p1 /mnt/arch/boot/efi
(Btrfs)
- ① Format partition
LUKS
itu dan jalankan langkah-langkah berikutnya; ② mount root partition, ③ tambah subvolumesbtrfs
, ④ unmount root partitition tersebut sebelum kemudiannya, ⓹ mount kesemua subvolumes berkenaan. - Jangan dilupakan juga untuk mount BOOT & ESP partition.
mkfs.btrfs -L ARCH -n 32k /dev/mapper/cryptarchvm
mount -m -o defaults,compress=zstd /dev/mapper/cryptarchvm /mnt/arch
btrfs subvolume create /mnt/arch/@
btrfs subvolume create /mnt/arch/@home
btrfs subvolume create /mnt/arch/@snapshots
umount /mnt/arch
mount -o defaults,compress=zstd,ssd,subvol=@ /dev/mapper/cryptarchvm /mnt/arch
mount -m -o defaults,compress=zstd,ssd,subvol=@home /dev/mapper/cryptarchvm /mnt/arch/home
mount -m -o defaults,compress=zstd,ssd,subvol=@snapshots /dev/mapper/cryptarchvm /mnt/arch/.snapshots
mount -m -o defaults,compress=zstd,ssd /dev/nvme0n1p2 /mnt/arch/boot
mount -m /dev/nvme0n1p1 /mnt/arch/boot/efi
Seterusnya:
- Nyahkomen
ParallelDownloads
dalam/etc/pacman.conf
. Muat turun selari ini tidak ditetapkan secara lalai maka perlu di-enabled terlebih dahulu. - Pasang pakej yang berikut ke dalam mounted root partition sebelum menjalankan
arch-chroot
:
(LVM2 + XFS)
pacstrap -K /mnt/arch base base-devel linux lvm2 xfsprogs vim terminus-font efibootmgr grub amd-ucode gptfdisk openssh
(Btrfs)
pacstrap -K /mnt/arch base base-devel linux btrfs-progs vim terminus-font efibootmgr grub amd-ucode gptfdisk openssh
- Jana fstab, arch-chroot ke dalam root partition dan tetapkan zon masa.
genfstab -U /mnt/arch >> /mnt/arch/etc/fstab
arch-chroot /mnt/arch
ln -sf /usr/share/zoneinfo/Asia/Kuala_Lumpur /etc/localtime
hwclock --systohc
- Enable servis penyelarasan masa dan tambah tetapan berikutnya seperti rujukan
ArchWiki
.
systemctl enable systemd-timesyncd.service
vim /etc/locale.gen #nyahkomen 'locale' yang dikehendaki sebelum jana
locale-gen
echo 'LANG=en_US.UTF-8' >> /etc/locale.conf
echo 'FONT=ter-d22b' >> /etc/vconsole.conf
echo 'archlinuxvm' >> /etc/hostname
- Sunting fail konfig mkinitcpio.
vim /etc/mkinitcpio.conf
(untuk LVM2 + XFS) HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)
(untuk Btrfs) BINARIES=(btrfs setfont) HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)
- Jana imej kernel dan initrd serta tetapkan kata laluan untuk root sebelum terus kepada memasang bootloader GRUB di dalam partition ESP.
mkinitcpio -P
passwd
- Sebelum pasang grub, masukkan arahan tambahan untuk kernel dan nyahkomen baris kedua seperti yang berikutnya.
vim /etc/default/grub
GRUB_CMDLINE_LINUX="cryptdevice=UUID=UUID-peranti-LUKS:cryptarchvm" GRUB_ENABLE_CRYPTODISK=y
- Pasang grub.
grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot/efi --bootloader-id=GRUB --recheck
Installing for x86_64-efi platform. Installation finished. No error reported.
- Akan ada dua direktori dalam
/boot/efi
: ① EFI dan juga ② grub. Jana fail konfig grub dengan perintah berikut. Saya abaikan amaran berkenaan os-prober kerana memang tidak ada menggunakan sistem selainnya.
grub-mkconfig -o /boot/efi/grub/grub.cfg
Generating grub configuration file ... Found linux image: /boot/vmlinuz-linux Found initrd image: /boot/amd-ucode.img /boot/initramfs-linux.img Found fallback initrd image(s) in /boot: amd-ucode.img initramfs-linux-fallback.img Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... done
- Contoh output entri menu GRUB:-
1menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d696445d-15d5-4591-bd60-b7b1d707232e' {
2 load_video
3 set gfxpayload=keep
4 insmod gzio
5 insmod part_gpt
6 insmod btrfs
7 search --no-floppy --fs-uuid --set=root fb49ee31-3c1a-4fee-ac37-6f6b30a4100f
8 echo 'Loading Linux linux ...'
9 linux /vmlinuz-linux root=UUID=d696445d-15d5-4591-bd60-b7b1d707232e rw rootflags=subvol=@ cryptdevice=UUID=d166095a-9b06-4e4a-b4c7-62e6504c3cb9:cryptarchvm loglevel=3 quiet
10 echo 'Loading initial ramdisk ...'
11 initrd /amd-ucode.img /initramfs-linux.img
12}
Sambungan Rangkaian (Network Connection) di dalam Tetamu Arch Linux:-
Untuk menyambung jaringan di dalam sistem tetamu ini, terdapat dua medium yang menyediakan Resolusi Domain Name (DNS):-
- Dengan
systemd-networkd
dansystemd-resolved
yang menurutArchWiki
ialah cara yang paling ringkas untuk VM. Terasa seperti telah ditipu pula sebab berdasarkan pembelajaran sendiri, kaedahnya tak adalah ringkas mana.
systemctl enable systemd-networkd.service
systemctl enable systemd-resolved.service
- Selepas beberapa kali menggaru kepala yang tidak gatal mengkaji apa yang tidak cukupnya dengan hanya enabling servis kedua-duanya seperti di atas, saya dapati kena buat langkah-langkah yang dibincangkan di bawah ini dahulu iaitu menyalin beberapa direktori. Perlu keluar daripada arch-chroot dahulu untuk menyalin dan menampal direktori-direktori ini daripada Live CD ke sistem tetamu Arch.
exit
cp -r /etc/systemd/system/systemd-networkd-wait-online.service.d /mnt/arch/etc/systemd/system
cp -r /etc/systemd/network /mnt/arch/etc/systemd
- (Masih di dalam
arch-chroot
): Saya rasa, kaedah kedua ini lebih ringkas iaitu dengan menggunakan kliendhcpcd
. Pasang pakej ini dan enable sahaja servisnya. Dulu-dulu pun memang cara inilah yang saya aplikasikan. Tetapi sekarang saya cuba untuk membuka hati kepada kebanyakan servissystemd
yang ada memandangkan inilah sisteminit
yang dijadikan sebagai tetapan lalai oleh pengurusan sistem utama saya ini.
pacman -S dhcpcd
systemctl enable dhcpcd.service
exit
- Sekarang, bolehlah unmount (--recursive) dan cuba reboot untuk melihat sama ada sistem berjaya boot atau tidak:
umount -R /mnt/arch
reboot
- Setelah berjaya boot, symlink-kan fail
stub-resolv.conf
ke/etc/resolv.conf
(hanya seandainya menggunakan servissystemd-resolved
untuk memperoleh Resolusi Domain Name sebagaimana yang telah saya terangkan di atas. Sekiranya menggunakan kliendhcpcd
, langkau perkara ini);
ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
- Serta semak status timedatectl bagi memastikan bahawa masa dan tarikh telah diselaraskan mengikut zon masa dan lokaliti kita. Contoh output:-
timedatectl
Local time: Tue 2022-06-28 18:05:45 +08 Universal time: Tue 2022-06-28 10:05:45 UTC RTC time: Tue 2022-06-28 10:05:45 Time zone: Asia/Kuala_Lumpur (+08, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: no
Jangan lupa ping mana-mana url untuk memastikan sambungan jaringan berjaya diperolehi.
Katakanlah kita sudah menggunakan opsyen pertama tetapi mahu beralih kepada
dhcpcd
, buat langkah-langkah di bawah sebagai root (pastikan pakej dhcpcd sudah dipasang terlebih dahulu sebelum menjalankan ini).
unlink /etc/resolv.conf
systemctl stop systemd-resolved.service
systemctl stop systemd-networkd.service
systemctl disable systemd-resolved.service
systemctl disable systemd-networkd.service
systemctl enable --now dhcpcd.service
Xorg dalam VM Arch Linux:
- Sudah pastinya akan ada sedikit kelainan dalam settings untuk paparan
Xorg
di antara sistem VM dengan sistem sebenar. Begitu juga terdapat beberapa pakej / perkara yang boleh dilangkau apabila di dalam VM dek perkongsian peranti di antara keduanya. - Antara pakej-pakej / benda yang TIDAK memerlukan konfigurasi ialah:
- Pakej pengurus untuk sambungan jaringan tanpa wayar (WiFi) seperti
iwd
,NetworkManager
dan lain-lain. xf86-video-driver
untuk grafik kerana VM menggunakan GPUvirtio
yang dikesan secara automatik.
- Pakej pengurus untuk sambungan jaringan tanpa wayar (WiFi) seperti
Contoh grafik dengan Desktop Environment XFCE4
(Sebagai root):
- Pakej-pakej di bawah melibatkan penggunaan
touchpad
, sebahagian pakej daripada grupxorg
, ejenspice
bagi kemudahan copy paste antara kedua-dua sistem dan pakejxsel
untuk clipboard (pakej alternatif ialahxclip
) sertaxcompmgr
sebagai pengurus komposit.
pacman -Syu xf86-input-libinput xorg-server xorg-apps xorg-xinit xfce4 spice-vdagent qemu-guest-agent xsel xcompmgr
- Buat konfigurasi
Xorg
untuk disalin fail konfignya ke direktori/etc/X11
.
Xorg -configure
cp xorg.conf.new /etc/X11/xorg.conf
(Sebagai pengguna) ~Tambah user dengan arahan useradd dan masukkan namanya ke dalam fail sudoers (visudo
):
- Salin fail
xinitrc
ke direktori rumah pengguna dan jadikan fail berkenaan boleh dilaksanakan (executable).
cp /etc/X11/xinit/xinitrc .xinitrc
chmod +rx .xinitrc
- Sunting fail
.xinitrc
itu di bahagian paling bawah sekali dan komen baris-baris yang tidak berkenaan:
vim .xinitrc
xcompmgr -c & exec startxfce4
- Dan mulakan
Xorg
.
startx