🧠 Come installare Proxmox VE su server Hetzner

L’installazione di solito si fa installando prima una Debian sulla quale la distro è basata (in questo caso la relase denominata “Buster” per la versione 6) e poi aggiungendo gli indici del repository e installando da lì alcuni servizi chiave Proxmox.

Ultimamente però è stata aggiunta la possibilità di installare la distro su ZFS, il che apre la strada ad un sacco di niceties specialmente per quanto riguarda gli snapshot e i backup. (Resta da capire se alcuni dei servizi che Proxmox VE offre come ad esempio il cluster Ceph funzionino su ZFS, ma questo per ora è un altro discorso).

Comunque, ad installazione completata quello che si vuole ottere è una situazione come la seguente:

root@little:~# mount
[...]
rpool/ROOT/pve-1 on / type zfs (rw,relatime,xattr,noacl)
[...]
root@little:~# zpool list rpool
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
rpool   476G  1.22G   475G        -         -     0%     0%  1.00x    ONLINE  -
root@little:~# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: scrub repaired 0B in 0 days 00:00:01 with 0 errors on Sun Aug  9 00:24:02 2020
config:

	NAME           STATE     READ WRITE CKSUM
	rpool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    nvme0n1p3  ONLINE       0     0     0
	    nvme1n1p3  ONLINE       0     0     0

Di per sè forse basterebbe creare il pool prima dell’installazione (con il senno di poi) per poi procedere con la solita intallazione di Debian buster , però:

  • non ho mai installato prima con questa accoppiata di s.o. e filesystem quindi non so se il filesystem (con il RAID1) scelto dall’installatore configuri l’installazione in un modo piĂą particolare che non la semplice creazione del fs;

  • La rescue Hetzner non ha supporto per ZFS così com’è, perciò risulta incerta anche l’opzione della solita installazione.

Quindi l’idea è quella di installare la distro usando l’installatore. Bella idea, purtroppo però i server Hetzner, almeno quelli che ho usato fin’ora non hanno un KVM sempre collegato, ma solo a richiesta e quindi la cosa può sembrare complicata.

Mi sono ricordato però che è possibile attivare una particolare distro rescue chiamata vKVM Rescue che viene solitamente usata per poter vedere il boot del s.o. collegandosi con il browser in HTTPS alla porta 47773.

Per eseguire invece l’installazione di una distro, occorre fare delle modiche al volo alla riga di comando del QEMU che viene eseguito, quindi mi sono collegato via SSH sulla porta 47772 per avere una shell del rescue system e ho modificato lo script del servizio come segue:

root@vKVM-rescue ~ # cat << FINE | patch /opt/vkvm/startqemu
--- /opt/vkvm/startqemu.original 2020-08-07 21:30:55.136461035 +0200
+++ /opt/vkvm/startqemu 2020-08-07 21:32:22.572524758 +0200
@@ -1,2 +1,2 @@
 #!/bin/sh
-qemu-system-x86_64 -cpu host -monitor tcp:127.0.0.1:4444,nowait,server -usbdevice tablet -k de -boot nc -netdev socket,fd=200,id=vnet0 -vnc 127.0.0.1:1,websocket=5701 -device ahci,id=ahci0 -drive if=none,id=disk0,file=/dev/nvme0n1 -device ide-hd,bus=ahci0.0,drive=disk0 -drive if=none,id=disk1,file=/dev/nvme1n1 -device ide-hd,bus=ahci0.1,drive=disk1 -smp 8,sockets=1,cores=4,threads=2 -machine type=pc,accel=kvm -m 32053 -device e1000,netdev=vnet0,mac=90:1b:0e:95:a1:36                                                                                                                                         
+qemu-system-x86_64 -cpu host -cdrom /path/to/downloaded/proxmox.iso -monitor tcp:127.0.0.1:4444,nowait,server -usbdevice tablet -k it -boot d -netdev socket,fd=200,id=vnet0 -vnc 127.0.0.1:1,websocket=5701 -device ahci,id=ahci0 -drive if=none,id=disk0,file=/dev/nvme0n1 -device ide-hd,bus=ahci0.0,drive=disk0 -drive if=none,id=disk1,file=/dev/nvme1n1 -device ide-hd,bus=ahci0.1,drive=disk1 -smp 8,sockets=1,cores=4,threads=2 -machine type=pc,accel=kvm -m 32053 -device e1000,netdev=vnet0,mac=90:1b:0e:95:a1:36
FINE                                                                                                                                                     
patching file /opt/vkvm/startqemu

root@vKVM-rescue ~ # systemctl restart vkvm-startup

Ricarica la pagina web e l’installazione via cd dovrebbe partire. Una volta completata ricorda di riavviare, cambiando il dispositivo di boot indietro sull’originale nc per partire dai dischi. La rete potrebbe ancora non funzionare però c’è da dire al kernel di nominare l’unica ethernet con lo stesso nome:

root@little:/etc/default# cat << FINE | patch /etc/default/grub 
--- grub.original 2020-08-07 22:02:44.525885443 +0200
+++ grub 2020-08-07 23:22:26.300000000 +0200
@@ -7,7 +7,7 @@
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR="Proxmox Virtual Environment"
 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
-GRUB_CMDLINE_LINUX="root=ZFS=rpool/ROOT/pve-1 boot=zfs"
+GRUB_CMDLINE_LINUX="root=ZFS=rpool/ROOT/pve-1 boot=zfs net.ifnames=0 biosdevname=0"
 
 # Disable os-prober, it might add menu entries for each guest
 GRUB_DISABLE_OS_PROBER=true
FINE
root@little:~# update-grub

…e poi c’è rinominare la ethernet ensX in eth0 in /etc/network/interfaces. Ora esegui halt dentro la VM e dalla console ssh del vKVM esegui reboot, dopo qualche minuto dovresti poterti collegare sulla porta 22.

Enjoy!