Installation
Vom Hoster gibt es keine FreeBSD Images mehr. Großer Schock!
Das Rescue System hat OpenZFS und qemu am Start. Dann aus dem alten Host und Zeug noch Wissen gezogen.
Der Plan: mfsbsd mittels qemu starten, die Festplatten
durchreichen und von Hand da FreeBSD rein installieren.
Hintergrund
Im Server sind 2x 10TB Festplatten verbaut. Will große Dateien hosten und Thick Jails laufen lassen. Deshalb keine SSDs. Habe einfach auch keine Lasten die schnellen Disk-IO benötigen.
Auch werde ich kein EFI aufsetzen. Sind mir zu viele bewegliche Teile die kaputt gehen können. Ob der Bootloader fancy aussieht ist im Rack egal (Jajaja, Kernelmodule, ich weiß…).
Die zwei Festplatten bekommen einen Mirror verpasst:
| Name | Size | Type | ||
|---|---|---|---|---|
boot0, boot1 | 512K | freebsd-boot | 2x einzeln | 🔓 |
swap0, swap1 | 16G | freebsd-swap | gmirror eli | 🔑 |
core0, core1 | 64G | freebsd-zfs | fürs system | 🔓 |
virt0, virt1 | 1024G | freebsd-zfs | für jails | 🔑 |
data0, data1 | rest | freebsd-zfs | für files | 🔑 |
Bootstrapping
- Server ins Rescue-System booten.
- Verbinden mit
ssh -o StrictHostKeyChecking=no… - Linux Kram:
apt updateapt install tmux htop curl
mfsbsd im App-Store laden:
curl -O https://mfsbsd.vx.sk/files/iso/14/amd64/mfsbsd-14.1-RELEASE-amd64.iso
Ab jetzt sollten wir in tmux sein…
qemu-system-x86_64 \
-net nic -net user,hostfwd=tcp::1022-:22 -m 2048M -enable-kvm \
-cpu host,+nx -M pc -smp 2 -vga std -k en-us \
-cdrom ./mfsbsd-14.1-RELEASE-amd64.iso \
-device virtio-scsi-pci,id=scsi0 \
-drive file=/dev/sda,if=none,format=raw,discard=unmap,aio=native,cache=none,id=n0 \
-device scsi-hd,drive=n0,bus=scsi0.0 \
-drive file=/dev/sdb,if=none,format=raw,discard=unmap,aio=native,cache=none,id=n1 \
-device scsi-hd,drive=n1,bus=scsi0.0 \
-boot once=d -monitor stdio
Neue console in tmux, und ssh -p 1022 root@localhost.
Passwort ist mfsroot.
Partitionieren
Die zwei Platten haben die Devices /dev/da0 & /dev/da1 bekommen.
Für das momentane System zfs laden und 4K Sektoren erzwingen:
kldload zfs
sysctl vfs.zfs.min_auto_ashift=12
Bootsektoren der Platten nullen:
dd count=2 if=/dev/zero of=/dev/da0
dd count=2 if=/dev/zero of=/dev/da1
Partitionstabelle anlegen:
gpart create -s GPT da0
gpart create -s GPT da1
Die Partitionen (nach Tabelle oben) erstellen:
gpart add -a 4k -t freebsd-boot -s 512K -l boot0 da0
gpart add -a 4k -t freebsd-boot -s 512K -l boot1 da1
gpart add -a 4k -t freebsd-swap -s 16G -l swap0 da0
gpart add -a 4k -t freebsd-swap -s 16G -l swap1 da1
gpart add -a 4k -t freebsd-zfs -s 64G -l core0 da0
gpart add -a 4k -t freebsd-zfs -s 64G -l core1 da1
gpart add -a 4k -t freebsd-zfs -s 1024G -l virt0 da0
gpart add -a 4k -t freebsd-zfs -s 1024G -l virt1 da1
gpart add -a 4k -t freebsd-zfs -l data0 da0
gpart add -a 4k -t freebsd-zfs -l data1 da1
Unter /dev/gpt sollten alle Partitionen als Devices vorhanden sein.
Boot Partition
Partitionen markieren:
gpart set -a bootme -i 1 da0
gpart set -a bootme -i 1 da1
Bootloader kommt beim chroot ins installierte System. Stay tuned.
Swap
Es reicht hier den Mirror zu erstellen.
gmirror label swap gpt/swap0 gpt/swap1
In das Ziel-System kommt später noch ein Eintrag in die fstab.
Pools & Datasets
Das Installations-Target ist /mnt.
Für das System selbst – core:
zpool create \
-f -m none \
-o cachefile=/boot/zfs/zpool.cache \
-o altroot=/mnt \
-O compression=lz4 \
-O atime=off \
core mirror gpt/core0 gpt/core1
zfs create -o mountpoint=none core/ROOT
zfs create -o mountpoint=/ core/ROOT/default
zfs create -o mountpoint=/usr -o canmount=off core/usr
zfs create -o setuid=off core/usr/ports
zfs create core/usr/home
zfs create core/usr/local
zfs create core/usr/obj
zfs create core/usr/src
zfs create -o mountpoint=/var -o canmount=off core/var
zfs create -o atime=on core/var/mail
zfs create -o setuid=off -o exec=off core/var/audit
zfs create -o setuid=off -o exec=off core/var/crash
zfs create -o setuid=off -o exec=off core/var/log
zfs create -o setuid=off core/var/tmp
zfs create core/var/db
Boot Environment setzen:
zpool set bootfs=core/ROOT/default core
Die Partitionen virt und data werden verschlüsselt.
Deshalb bleiben diese erstmal liegen – wird gemacht wenn das System läuft.
System Installieren
Wir brauchen die zwei Disketten in Laufwerk A: & B::
fetch https://download.freebsd.org/releases/amd64/14.2-RELEASE/base.txz
fetch https://download.freebsd.org/releases/amd64/14.2-RELEASE/kernel.txz
# check
fetch https://download.freebsd.org/releases/amd64/14.2-RELEASE/MANIFEST
grep "$(sha256 -q base.txz)" MANIFEST
grep "$(sha256 -q kernel.txz)" MANIFEST
Auspacken:
tar -C /mnt -xf base.txz
tar -C /mnt -xf kernel.txz
Das wars. Feierabend!
Konfigurieren
Die boot/loader.conf:
cat << LOL >> /mnt/boot/loader.conf
cryptodev_load="YES"
geom_eli_load="YES"
geom_mirror_load="YES"
zfs_load="YES"
vfs.root.mountfrom="zfs:core/ROOT/default"
kern.geom.label.disk_ident.enable="0"
kern.geom.label.gptid.enable="0"
security.bsd.allow_destructive_dtrace="0"
fdescfs_load="YES"
nullfs_load="YES"
tmpfs_load="YES"
LOL
Eine fstab im Zielsystem erzeugen:
cat << LOL >> /mnt/etc/fstab
tmpfs tmp tmpfs rw,mode=1777 0 0
/dev/mirror/swap.eli none swap sw 0 0
LOL
Berechtigungnen für /tmp setzen:
chmod 1777 /mnt/tmp
chmod 1777 /mnt/var/tmp
Die Zeitzone verlinken (Ziel existiert noch nicht, bzw. unter altroot /mnt):
ln -s /usr/share/zoneinfo/Europe/Berlin /mnt/etc/localtime
Home-Folder verlinken (Ziel existiert hier auch noch nicht wegen altroot):
ln -s /usr/home /mnt/home
Und die rc.conf:
cat << LOL >> /mnt/etc/rc.conf
# Filesystem
zfs_enable="YES"
dumpdev="AUTO"
# Network
hostname="machine"
ifconfig_em0="DHCP"
ifconfig_em0_ipv6="inet6 accept_rtadv"
resolv_enable="NO"
netwait_enable="YES"
# Daemons
syslogd_flags="-ss"
powerd_enable="YES"
sshd_enable="YES"
ntpd_enable="YES"
ntpd_sync_on_start="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
LOL
Anmerkung der Redaktion: Der Name vom Interface kann anders sein.
Für mich ist es igb0.
Es lohnt sich auch mal Notizen zu machen was für eine Netzwerk-Config das
Rescue-System per DHCP bekommen hat (z.B. Gateway-Addresse).
Kernel Zeug:
cat << LOL >> /mnt/etc/sysctl.conf
# force 4K sectors
vfs.zfs.min_auto_ashift=12
# hardening
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=1
LOL
DNS wäre auch ganz nett:
cat << LOL >> /mnt/etc/resolv.conf
nameserver 2620:fe::fe
nameserver 2620:fe::9
nameserver 149.112.112.112
nameserver 9.9.9.9
LOL
Changeroot
Vorbereiten:
mount -t devfs devfs /mnt/dev
mount -t tmpfs tmpfs /mnt/tmp
Wir können das System erstmalig nutzen:
chroot /mnt
-
Symlinks checken:
- Passt
/homenach/usr/home? - Zeigt
/etc/localtimenicht ins leere?
- Passt
-
Root Passwort mit
passwdsetzen. -
User mit
addusererstellen (in Gruppewheeleinladen). -
pkgzum Leben erwecken…-
pkg info -ao -
pkg install sudo-
In der
/usr/local/etc/suodersdiese Zeile auskommentieren:%wheel ALL=(ALL:ALL) ALL
-
-
Hier wäre die Stelle wo sich weitere Sachen installieren lassen, oder zumindest Updates machen…
- Je nachdem was man haben möchte.
-
-
sshKeys hinterlegen:mkdir ~user/.ssh- Key in
~user/.ssh/authorized_keyshinterlegen.- Auf dem Web-Host hinterlegen und dann mit
fetch. - Das Clipboard funktioniert zufällig?
- Irgendwas mit
scp… - Morse-Telegraphie…
- Auf dem Web-Host hinterlegen und dann mit
chown -R user:user ~user/.sshchmod 700 ~user/.ssh
-
Wichtig! Bootloader installieren:
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1 -
Fertig:
exit!
Anmerkung der Redaktion: Beim letztendlichen installieren des Servers war
der Order /var/home/user leer, was den Login mit ssh Keys bisschen
schwierig macht.
Irgendwas mache ich falsch hier. Der Workaround:
/var/home/userin ein/usr.tgzfile legencp /var/home/user/.ssh/authorized_keys /root/.ssh/authorized_keysPermitRootLogin prohibit-passwordfürsshdsetzen- Nach dem ersten Start
/usr.tgzentpacken undPermitRootLogin nosetzen.
Pools exportieren
-
ZFS-Cache-File rüber kopieren:
cp /boot/zfs/zpool.cache /mnt/boot/zfs/zpool.cache -
Die chroot Filesysteme aushängen und die Pools exportieren:
umount /mnt/devumount /mnt/tmpzpool export coremountsollte wieder so gut wie leer sein…
Fertig
Jetzt aber wirklich Feierabend!
Das mfsbsd mit einem shutdown -p now sauber runterfahren.
qemu beendet sich.
Dem Rescue-System noch einen guten Tag wünschen, und reboot.
Danach Einrichten.