zkk / Arch Encripted



Operazioni preliminari

Verifico installazione virt-manager

sudo systemctl status libvirtd.service

Restituisce warning per mancanza del seguente pacchetto:

sudo pacman -S dmidecode

Verifico la rete virsh

sudo virsh net-list --all

Utilizzo UEFI

sudo pacman -S edk2-ovmf
sudo systemctl restart libvirtd.service

Download ISO

Archlinux - Download

mv ~/downloads/archlinux-2026.06.01-x86_64.iso ~/VM/

Preparazione Macchina

Seleziona parametri

Alla schermata Overview ultima voce in basso seleziono Firmware UEFI x86_64: /usr/share/edk2/x64/OVMF_CODE.4m.fd. Quindi Apply e Begin Installation.

Begin Installation

Imposta tastiera

loadkeys it

Imposta un font più grande

setfont ter-132b

Verifica Internet

ip link
ping -c 4 ping.archlinux.org

Verifica UEFI

cat /sys/firmware/efi/fw_platform_size

Imposta oraio

timedatectl
timedatectl set-timezone Europe/Rome

Partizionamento, formattazione e montaggio delle partizioni

Wipe signature filesystem

lsblk
wipefs -a /dev/vda

Partizionamento con Tabella GPT

lsblk
cfdisk /dev/vda

Configura la crittografia

cryptsetup luksFormat --type luks2 /dev/vda2
cryptsetup open /dev/vda2 crypt

Formatta filesystems

mkfs.fat -F 32 /dev/vda1
mkfs.btrfs /dev/mapper/crypt

Crea subvolumes

mount /dev/mapper/crypt /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@pkg
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@swap
umount /mnt

Monta i subvolumes

mount -o subvol=@,compress=zstd,noatime /dev/mapper/crypt /mnt

# Create mount points for other subvolumes
mkdir -p /mnt/{home,var/log,var/cache/pacman/pkg,.snapshots,swap,boot}

# Mount secondary subvolumes
mount -o subvol=@home,compress=zstd,noatime /dev/mapper/cryptroot /mnt/home
mount -o subvol=@log,compress=zstd,noatime /dev/mapper/cryptroot /mnt/var/log
mount -o subvol=@pkg,compress=zstd,noatime /dev/mapper/cryptroot /mnt/var/cache/pacman/pkg
mount -o subvol=@snapshots,compress=zstd,noatime /dev/mapper/cryptroot /mnt/.snapshots
mount -o subvol=@swap,noatime /dev/mapper/cryptroot /mnt/swap

Monta partizione EFI

mount /dev/nvme0n1p1 /mnt/boot

Creazione e attivazione swapfile

btrfs filesystem mkswapfile --size 4g /mnt/swap/swapfile
chmod 600 /mnt/swap/swapfile
swapon /mnt/swap/swapfile
swapon --show

Installazione sistema e chroot

pacman -Sy archlinux-keyring
pacstrap -K /mnt base linux linux-firmware btrfs-progs neovim networkmanager amd-ucode

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

# chroot
arch-chroot /nmt

Configurazione sistema

Fuso Orario e Orologio

ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime
hwclock --systohc

Localizzazione (Lingua e Tastiera)

echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
echo "KEYMAP=it" > /etc/vconsole.conf

Nome del Computer (Hostname)

echo "arch" > /etc/hostname

Popola il file /etc/hosts come segue:

127.0.0.1    localhost
::1          localhost
127.0.1.1    arch.localdomain arch

Abilita networmanager

systemctl enable NetworkManager

Imposta password di root

passwd

Configura initramfs

Nel file /etc/mkinitcpio.conf modifica HOOKS come segue:

HOOKS=(base systemd autodetect microconde modconf kms keyboard sd-vconsole block sd-encrypt filesystem fsck)

Quindi:

mkinitcpio -P

Systemd boot manger

bootctl install
blkid -s UUID -o value /dev/vda2

Segnati il codice UUID per inserirlo nel file /boot/loader/entries/arch.conf:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options rd.luks.name=<PARTITION_UUID>=cryptroot root=/dev/mapper/cryptroot
rootflags=subvol=@ rw

Infine creo il menu di scelta nel file /boot/loader/loader.conf con il seguente contenuto:

default arch.conf
timeout 3
console-mode max
editor no

Conclusione e primo avvio

exit
swapoff -a
umount -R /mnt
reboot

Installazione Sway ed utente max

pacman -Syu
pacman -S mesa xorg-wayland
pacman -S sway waybar wofi mako alacritty polkit-gnome grim slurp

# creazione utente
useradd -m -G wheel,video,audio -s /bin/bash max
passwd max
pacman -S sudo
visudo

Abilitare l’utilizzo di sudo togliendo il commento alla seguente riga:

%wheel ALL=(ALL:ALL) ALL

Configurazione

mkdir -p /home/max/.config/sway
mkdir -p /home/max/.config/waybar
cp /etc/sway/config /home/max/.config/sway/config
chown -R max:max /home/max/.config

Impostazione meta tasto

Per evitare conflitti con i3wm utilizzato nella macchina Host, modifico il tasto funzione da Start a Alt modificando la seguente riga all’interno del file di configurazione di Sway ~/.config/sway/config:

set $mod Mod1

Terminale e Launcher

Modificare quanto segue all’interno del file ~/.config/sway/config:

# Your preferred terminal emulator
set $term alacritty

# Your preferred application launcher
set $menu wofi --show run

Configurazione Tastiera Italiana in Sway

Aggiungere alla fine del file ~/.config/sway/config:

input * {
    xkb_layout "it"
}

Creare un Keybinding su i3wm per avviare la VM

Trova il nome esatto della tua macchina virtuale eseguendo questo comando sul terminale del tuo Arch Host:

sudo virsh list --all

Ipotizzando che la VM si chiami arch, all’interno del file di configurazione ~/.config/i3/config:

bindsym $mod+Shift+v exec --no-startup-id virsh --connect qemu:///system start arch && sleep 1 && virt-viewer --connect qemu:///system --wait arch

Ricarica i3wm e la combinazione tasti $mod+Shift+v dovrebbe aprire il visualizzatore:

i3-msg reload && i3-msg restart

Verifica accelerazione 3D

Entrare in sway, aprire un terminale e digitare:

sudo pacman -S weston
weston-simple-egl
sudo pacman -R weston

Risoluzione schermo

sudo pacman -S wlr-randr

Verifica il nome dello schermo, nel mio caso Virtual-1, ed inserisci nel file ~/.config/sway/config:

set $display Virtual-1
bindsym $mod+F1 output $display mode 1280x720
bindsym $mod+F2 output $display mode 1920x1080

La combinazione tasti con $mod+F2 va utilizzata a schermo intero, pertanto effettua la seguente veriazione nel file di confgurazione ~/.config/sway/config:

bindsym $mod+f fullscreen toggle

Effettuato SNAPSHOT

virt-manager

Selezionare internal come Snapshot Mode.

btrfs

Riga di comando dall’interno della macchina Guest per effettuare lo snapshot:

suod btrfs subvolume snapshot -r / /.snapshots/root_base_$(date +%F)

Eventualmente per ripristinare lo snapshot:

sudo btrfs subvolume list /
sudo mkdir -p /mnt/btrfs-root
sudo mount -o subvolid=5 /dev/mapper/crypt /mnt/btrfs-root
sudo btrfs subvolume snapshot /mnt/btrfs-root/.snapshots/root_base_XXXX-XX-XX /mnt/btrfs-root/@_new
sudo mv /mnt/btrfs-root/@ /mnt/btrfs-root/@_old
sudo mv /mnt/btrfs-root/@_new /mnt/btrfs-root/@
sudo umount /mnt/btrfs-root
reboot

E per eliminare lo snapshopt:

sudo btrfs subvolume delete /.snapshots/root_base_XXXX-XX-XX/

Continua configurazioni

Creazione cartella condivisa

Spengo la macchina virtuale e vado View > Details.

Avvio la macchina virtuale e verifico:

cd
mkdir home_max
sudo mount -t virtiofs host_max /home/max/host_max
ls host_max
sudo umount /home/max/host_max

Inserisco la seguente riga nel file /etc/fstab:

host_max  /home/max/host_max  virtiofs  defaults,nofail,rw  0  0

Quindi verifico:

sudo mount -a
sudo systemctl daemon-reload

Copia/incolla bidirezionale

Sulla macchina Host:

sudo pacman -S xclip xsel

Sulla macchina virtuale:

sudo pacman -S spice-vdagent wl-clipboard xclip

Poichè abbiamo a che fare con macchina Host con Xorg e macchina Guest con Wayland dobbiamo inserire dei comandi nel file ~/.config/sway/config che travasino la clipboard nelle 2 direzioni:

exec spice-vdagent -x

# FLUSSO 1: VM > Host, Monitora Wayland e scrive su X11/Spice
exec wl-paste --type text --watch xclip -selection clipboard

# FLUSSO 2: Host > VM, Sincronizzazione forzata temporizzata
exec_always bash -c 'last=""; while true; do current=$(xclip -selection clipboard -o 2>/dev/null); if [ -n "$current" ] && [ "$current" != "$last" ]; then echo -n "$current" | wl-copy; last="$current"; fi; sleep 0.5; done'

All’uscita da sway insiste un output di errore/warning sulla console come il seguente:

Note: WAYLAND_DISPLAY is set to wayland-1
Note: XDG_RUNTIME_DIR is set to /user/1000
Please check whether /run/user/1000/wayland-1 socket exists and is accessible.

Per evitare questa noia (anche se è sufficiente digitare exit) ho inserito il seguente codice in ~/.bash_profile:

In questo modo entro immediatamente in sway dalla TTY1 e quando esco lo faccio anche dalla TTY1.

# If we are on TTY1 and Sway is not already running, launch it
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
    exec sway 2> /home/max/.sway-session.log
fi

Passaggio a zsh

cat /etc/zsh/zshenv