Unixery & daemon worship 🔥


It's a Unix system! I know this!

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