Homserver Schnellanleitung, Teil 3
Ich schreibe mir hier nur ein paar Notizen für die Installation eines Homeservers mit FreeBSD auf. Ohne Anspruch auf Vollständigkeit.
Inhalt:
- Teil 1: Installation und grundlegende Konfiguration von SSH, E-Mail, Hardware, ZFS, …
- Teil 2: Fileserver
- Teil 3: VMs und Jails
Virtualisierung
Auf dem Server sollen die eigentlichen Services in VMs oder Jails ausgeführt werden. Dazu Tools für Virtuelle Maschinen und Jails installieren:
pkg install vm-bhyve bhyve-firmware grub2-bhyve qemu-tools bastille
Netzwerk
Für VMs und Jails ist eine Netzwerkbridge nötig. Die Bridge wird manuell erstellt, damit die Tools das nicht jeweils selbst versuchen:
sysrc cloned_interfaces="bridge0"
sysrc ifconfig_bridge0="inet 10.0.0.10 netmask 255.255.255.0 addm igb0 up"
sysrc ifconfig_igb0="up"
sysrc defaultrouter="10.0.0.1"
VMs mit vm-bhyve
VMs lassen sich mit vm-bhyve verwalten. Als erstes ein Dataset erstellen, in dem die VMs liegen sollen:
zfs create -o recordsize=64K -o mountpoint=/mnt/vm hellraiser/encrypted/vm
vm-bhyve aktivieren und das VM-Dataset festlegen:
sysrc vm_enable="YES"
sysrc vm_dir="zfs:hellraiser/encrypted/vm"
Die Kosnolenausgabe der VMs soll in tmux erfolgen:
vm set console=tmux
Bridge konfigurieren:
vm switch create -t manual -b bridge0 public
VM Templates kopieren und bearbeiten
cp /usr/local/share/examples/vm-bhyve/* /mnt/vm/.templates
Die Templates kann man dann dort bearbeiten, z.B. die /mnt/vm/.templates/debian.conf
:
loader="grub"
cpu=2
memory=4096M
network0_type="virtio-net"
network0_switch="public"
disk0_type="nvme"
disk0_name="disk0.img"
grub_run_partition="1"
grub_run_dir="/boot/grub"
VM aus img installieren
Um eine VM aus einem vorgefertigten img (Cloud-Images) zu installieren:
vm img https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-amd64.raw
vm create -t debian -i debian-12-nocloud-amd64.raw -s 16G debianvm
vm start debianvm
vm console debianvm
Die Cloud-Images haben eine vorgegebene Partitionierung. Um die root-Partition (Partition 1) auf maximale Größe des Geräts (/dev/nvme0n1) zu erweitern, macht man in Debian:
apt install cloud-guest-utils
growpart /dev/nvme0n1 1
Hinweis: Die Debian “nocloud” Images haben cloud-init
nicht installiert, stattdessen erlauben sie root-Login ohne Passwort. Passwort nach dem Login (vm console
) setzen!
VM von iso installieren
vm iso https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.9.0-amd64-netinst.iso
vm create -t debian -s 16G debianvm
vm install debianvm debian-12.9.0-amd64-netinst.iso
vm console debianvm
Jails mit Bastille
Für die Verwaltung der Jails bietet sich das Tool bastille an, das in Shell geschrieben ist und keine weiteren Abhängigkeiten benötigt. Die Konfiguration liegt in /usr/local/etc/bastille/bastille.conf
und kann mit dem Tool sysrc
einfach verwaltet werden.
ZFS aktivieren, den Pool und das Dataset festlegen, das für Bastille genutzt werden soll. Das Dataset wird unter /usr/local/bastille
gemountet:
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_enable="YES"
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_zpool="hellraiser"
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_prefix="encrypted/bastille"
Limitierungen
Um Jails zu limitieren, z.B. bei der Speichernutzung, muss RACCT/RCTL im Kernel aktiviert werden. Danach neustarten:
echo "kern.racct.enable=1" > /boot/loader.conf.d/racct.conf
reboot
Image herunterladen
Das aktuellste Jail-Image für das System runterladen:
bastille bootstrap 14.2-RELEASE update
Oder automatisch das aktuellste für das laufende System in der Fish-Shell:
bastille bootstrap (string split -f1 -- '-p' (uname -r)) update
Eine jail erstellen
Eine Jail lässt sich dann folgendermaßen erstellen:
bastille create --bridge myjailname 14.2-RELEASE 10.0.0.123/24 bridge0
Oder mit dem gleichen Image wie das laufende System in der Fish-Shell:
bastille create --bridge myjailname (string split -f1 -- '-p' (uname -r)) 10.0.0.123/24 bridge0