Mój domowy serwer Intel NUC NUC10i7FNK – instalacja i konfiguracja Proxmox VE

Dlaczego warto zainstalować ręcznie Proxmox 7 na Debian 11

Możemy oczywiście zainstalować Proxmox 7 bezpośrednio z gotowego obraz ISO nagranego na pendrive ale najważniejszą zaletą instalacji czystego Debiana 11 przed Proxmox VE jest swobodny podział dysku na dowolny układ partycji w wybranym systemie plików np. EXT3/EXt4 a nie narzuconym LVM. Pod spodem Proxmox 7 jest przecież dokładnie Debian 11 z dodatkowymi repozytoriami i zainstalowanym oprogramowaniem do wirtualizacji Qemu/KVM.

Przygotowanie obrazu systemu Debian 11 na pendrive

Pobieramy obraz systemu Debian 11 debian-live-11.7.0-amd64-standard.iso ~ 1,2 GB z https://cdimage.debian.org/cdimage/release/current-live/amd64/iso-hybrid/ i nagrywamy przy użyciu programu Rufus na naszego pendrive => 2 GB.

Instalacja Debian 11 na Intel NUC NUC10i7FNK

Przed rozpoczęciem instalacji dobrze jest ustawić zalecane ustawienia BIOS-u szczególnie opcję Legacy Boot. Uruchamiamy Intel NUC, wciskamy F10 i  botujemy system z pendrive. W tym przypadku ponieważ głównym i jedynym dyskiem wewnętrznym czyli najszybszym będzie WD Blue SN 570 NVMe o pojemności 2 TB dobrze jest utworzyć na nim 2 osobne partycje EXT4:
16 GB na system, konfigurację i dodatkowe programy z punktem montowania /. Po instalacji Proxmox VE wykorzystane jest ok 4,3 GB z 16 GB.
2 TB na maszyny wirtualne oraz logi z punktem montowania /var . W katalogu /var/lib/vz są przechowywane pliki maszyn wirtualnych.

Wybieramy z dodatkowego oprogramowania tylko SSH Server ora standard system utilities.

Instalacja Proxmox 7 na Debian 11

Instalację Proxmox VE na Debian 11 opisuje również szczegółowo strona producenta Proxmox Install Proxmox VE on Debian 11 Bullseye – Proxmox VE. Poniżej jest dokładny zapis tego w jaki sposób ja zainstalowałem i przygotowałem do działania Proxmox VE na swoim serwerze.

Instalacja i konfiguracja OpenSSH Server

# gdyby pominięto podczas instalacji z pendrive
apt-get install openssh-server
systemctl status sshd

# jeśli to nasz serwer, dostępny tylko z wewnętrz i mamy nad nim pełną kontrolę to
# warto dla ułatwienia włączyć bezpośrednio logowania root-a
nano /etc/ssh/sshd_config
PermitRootLogin yes

systemctl restart sshd

Ustawienie nazwy hosta oraz statycznego adresu ip Debian 11

Moja domowa sieć jest prywatną adresacją w klasie C o notacji 192.168.8.0/24. W tym przypadku Debian 11 ma dostępną tylko 1 fizyczną kartę sieciową przypiętą do 1 interfejsu sieciowego Linux o nazwie eno1 i statycznie ustawionym adresie 192.168.8.20. Na potrzeby wszystkich usług wewnątrz sieci tam gdzie to tylko możliwe stosuje się komunikację po protokole https i certyfikat Letsencrypt generowany dla domeny netapps.ovh. Serwer DNS na routerze Mikrotik (192.168.8.1) ma statyczne wpisy wskazujące lokalne adresy ip na nazwy hostów w domenie *.netapps.ovh np. 192.168.8.20 – pve.netapps.ovh

nano /etc/hosts

127.0.0.1       localhost
#127.0.1.1      pve
192.168.8.20    pve.netapps.ovh pve

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# to polecenie powinno zwrócić adres ip serwera
hostname --ip-address
192.168.8.20

Ustawiamy statyczny adres ip potrzebny do instalacji Proxmox VE

# edytujemy konfigurację sieci
nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eno1
#iface eno1 inet dhcp

auto eno1
iface eno1 inet static
address 192.168.8.20
netmask 255.255.255.0
gateway 192.168.8.1
dns-domain netapps.ovh
dns-nameservers 192.168.8.1

# po zapisaniu zmian w /etc/network/interfaces usuwamy
rm -rf /etc/network/interfaces.d/setup

# restartujemy usługę sieci
systemctl restart networking

Dodanie repozytorium Proxmox VE i instalacja pve-kernel 6.2 oraz Proxmox VE

# dodanie repozytoriów proxmox ve
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
apt update && apt full-upgrade

# instalacja najnowszego kernela 6.x
apt install pve-kernel-6.2
systemctl reboot

# instalacja pakietów Proxmox VE
apt install proxmox-ve postfix open-iscsi
reboot

# posprzątanie systemu po instalacji
apt remove linux-image-amd64 'linux-image-5.10*'
update-grub
apt remove os-prober

Dodanie / wyłączenia swapa w systemie Debian 11

W zależności od ilości pamięci fizycznej możemy ustawić wymagany rozmiar swap-a. Red Hat zaleca wielkość swapa na ok 20 % rozmiaru pamięci fizycznej, co w moim przypadku dla 64GB RAM oznacza 12 GB swapa.

# sprawdzamy obecne ustawienia swapa
sudo swapon --show
sudo swapoff /swap.img
rm -rf /swap.img
sudo fallocate -l 12G /var/swap
mkswap -f /var/swap
chmod 0600 /var/swap
sudo swapon /var/swap

# dodajemy wpis do montowania swap przy starcie systemu
nano /etc/fstab
/var/swap       none    swap    sw      0       0

Jeśli jednak mamy dużo pamięci fizycznej RAM i chcemy zwiększyć żywotność dysku SSD to warto wyłączyć swapa w systemie i/ lub zmniejszyć parametr swappiness

# sprawdzenie obecnego ustawienia przerzucania nieżywanych obszarów RAM do swapa
cat /proc/sys/vm/swappiness
sysctl -w vm.swappiness=0

nano /etc/sysctl.conf
vm.swappiness=0

sudo swapoff /var/swap
rm -rf /var/swap

Ustawienie strefy czasowej i włączenie automatycznej synchronizacji czasu ze źródłem w internecie

# ustawienie strefy czasowej
timedatectl set-timezone Europe/Warsaw

# instalacja chrony
apt install chrony
systemctl start chrony
systemctl enable chrony

# sprawdzenie czy chrony się aktualizuje
chronyc sources -v
chronyc tracking

Utworzenie podstawowego bridge vmbr0 dla Proxmox VE

Bridge w Proxmox VE ma wiele zastosowań np. tworzenie VLAN-ów czyli separacja ruchu pomiędzy maszynami wirtualnymi a pozostałymi elementami sieci. Dlatego zalecane jest korzystanie z bridge zamiast bezpośrednio z interfejsów sieciowych np. eno1.  Domyślnie Proxmox 7 instaluje vmbr0 podczas gdy  po instalacji na Debianie 11 należy utworzyć go ręcznie.

nano /etc/network/interfaces

# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

#auto eno1
#iface eno1 inet static
#       address 192.168.8.20/24
#       gateway 192.168.8.1
#       dns-domain netapps.ovh
#       dns-nameservers 192.168.8.1

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.8.20/24
        gateway 192.168.8.1
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0
		
# restart usłygi sieciowej po zmianach w /etc/network/interfaces		
systemctl restart networking

Instalacja tuned-adm

tune-adm to narzędzie wiersza poleceń, które umożliwia przełączanie między profilami Tuned w celu poprawy wydajności w wielu określonych przypadkach użycia. Udostępnia również polecenie podrzędne tune-adm, które ocenia system i wyświetla zalecany profil dostrajania. Więcej informacji o tym ciekawym narzędziu można znaleźć na stronie A.5. tuned-adm Red Hat Enterprise Linux 7 | Red Hat Customer Portal

# instalacja pakietów tuned
apt install tuned tuned-utils tuned-utils-systemtap

# ustawienie profilu dla wirtualizacji
tuned-adm profile virtual-host

# sprawdzenie jaki profil jest aktywny
tuned-adm active
Current active profile: virtual-host

Włączenie ksmtuned

Scalanie tej samej strony jądra (KSM), używane przez hipernadzorcę KVM, umożliwia gościom KVM współdzielenie identycznych stron pamięci. Te udostępnione strony to zwykle wspólne biblioteki lub inne identyczne, często używane dane. KSM pozwala na większą gęstość gości identycznych lub podobnych systemów operacyjnych gościa, unikając powielania pamięci.
Koncepcja pamięci współdzielonej jest powszechna w nowoczesnych systemach operacyjnych. Na przykład, kiedy program jest uruchamiany po raz pierwszy, dzieli całą swoją pamięć z programem nadrzędnym. Kiedy program potomny lub rodzic próbuje zmodyfikować tę pamięć, jądro przydziela nowy region pamięci, kopiuje oryginalną zawartość i pozwala programowi zmodyfikować ten nowy region. Jest to znane jako kopiowanie przy zapisie. KSM to funkcja Linuksa, która wykorzystuje tę koncepcję w odwrotnej kolejności. KSM umożliwia jądru zbadanie dwóch lub więcej już uruchomionych programów i porównanie ich pamięci. Jeśli jakiekolwiek regiony pamięci lub strony są identyczne, KSM redukuje wiele identycznych stron pamięci do jednej strony. Ta strona jest następnie oznaczana jako kopia przy zapisie. Jeśli zawartość strony zostanie zmodyfikowana przez maszynę wirtualną gościa, dla tego gościa zostanie utworzona nowa strona. Jest to przydatne w przypadku wirtualizacji z KVM. Po uruchomieniu maszyny wirtualnej gościa dziedziczy ona tylko pamięć z procesu hosta qemu-kvm. Po uruchomieniu gościa zawartość obrazu systemu operacyjnego gościa może być udostępniana, gdy goście korzystają z tego samego systemu operacyjnego lub aplikacji. KSM pozwala KVM zażądać udostępnienia tych identycznych regionów pamięci gościa. KSM zapewnia zwiększoną szybkość i wykorzystanie pamięci. W KSM wspólne dane procesowe są przechowywane w pamięci podręcznej lub w pamięci głównej. Zmniejsza to braki w pamięci podręcznej dla gości KVM, co może poprawić wydajność niektórych aplikacji i systemów operacyjnych. Po drugie, współdzielenie pamięci zmniejsza ogólne wykorzystanie pamięci przez gości, co pozwala na większe zagęszczenie i lepsze wykorzystanie zasobów. Poniższe ustawienie ksmtuned zakłada że przy użyciu ponad 32 GB czyli 50 % z 64 GB RAM ksmtuned zacznie współdzielić identyczne strony pamięci.

apt install ksmtuned
ystemctl enable ksmtuned
systemctl start ksmtuned

nano /etc/ksmtuned.conf

# Configuration file for ksmtuned.
# How long ksmtuned should sleep between tuning adjustments
KSM_MONITOR_INTERVAL=60
# Millisecond sleep between ksm scans for 16Gb server.
# Smaller servers sleep more, bigger sleep less.
KSM_SLEEP_MSEC=100
#KSM_SLEEP_MSEC=10
# KSM_NPAGES_BOOST - is added to the `npages` value, when `free memory` is less than `thres`.
KSM_NPAGES_BOOST=300
# KSM_NPAGES_DECAY - is the value given is subtracted to the `npages` value, when `free memory` is greater than `thres`.
KSM_NPAGES_DECAY=-50
# KSM_NPAGES_MIN - is the lower limit for the `npages` value.
KSM_NPAGES_MIN=64
# KSM_NPAGES_MAX - is the upper limit for the `npages` value.
KSM_NPAGES_MAX=1250
# KSM_THRES_COEF - is the RAM percentage to be calculated in parameter `thres`.
# if (free_memory < (KSM_THRES_COEF*total/100))
# 64 GB physical RAM = 12,8 GB (20 %) start KSM
KSM_THRES_COEF=50
# KSM_THRES_CONST - If this is a low memory system, and the `thres` value is less than `KSM_THRES_CONST`, then reset `thres` value to `KSM_THRES_CONST` value.
KSM_THRES_CONST=2048
# uncomment the following to enable ksmtuned debug information
LOGFILE=/var/log/ksmtuned
DEBUG=1

# restart usługi ksmtuned po zmianach w /etc/ksmtuned.conf
systemctl restart ksmtuned

Dodanie repozytorium no-subscription i aktualizacja systemu

# usunięcie niepotrzebnych repo
rm -rf /etc/apt/sources.list.d/pve-enterprise.list
rm -rf /etc/apt/sources.list.d/pve-install-repo.list

nano /etc/apt/sources.list 
deb http://ftp.debian.org/debian bullseye main contrib
deb http://ftp.debian.org/debian bullseye-updates main contrib
deb http://security.debian.org/debian-security bullseye-security main contrib
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription

# aktualizacja systemu
apt update && apt upgrade

Wyłączenie monitu no subscription w Proxmox VE 7

cd /usr/share/javascript/proxmox-widget-toolkit
cp proxmoxlib.js proxmoxlib.js.bak
nano proxmoxlib.js
# ctrl + w "No Valid Subscription"

# zmienić to
Ext.Msg.show({
 title: gettext('No valid subscription'),
Modify it to look like this:

# na to
void({
 title: gettext('No valid subscription'),

# zapisać zmiany i ponownie uruchomić przeglądarkę
systemctl restart pveproxy.service

Proxmox VE Helper Scripts

Dwie powyższe operacje oraz wiele innych możemy wykonać automatycznie przy pomocy gotowego skryptu: post-pve-install.sh pochodzącego z GitHub – tteck/Proxmox: Proxmox VE Helper Scripts

# na praktycznie wszystkie pytania odpowiadamy twierdząco
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)"

Dostęp do konsoli Proxmox VE

# jeśli nie mamy skonfugurowanego lokalnego DNS-a wskazującego na adres ip PVE
https://192.168.8.20:8006/

# jeśli mamy skonfigurowany lokalny DNS wskazujący lokalny adres ip PVE na nazwę domenową np.
https://pve.netapps.ovh:8006/

Następne kroki w konfiguracji Proxmox VE