Erste Gehversuche mit FreeBSD

Ich bin ein großer GNU/Linux-Fan und im Besonderen mit Debian und Arch Linux sehr zufrieden. Dennoch hatte ich schon länger den Plan, in das FreeBSD-Universum zu schnuppern. Bisher ist mir das System bei der Firewall-Lösung OPNsense begegenet, die jedoch (im Normalfall) über die WebUI konfiguriert wird. Mit den Spezifika von FreeBSD setzt man sich dort eher weniger auseinander. Nun kam ich dazu, über den Tellerrand zu schauen und hab mich initial mit FreeBSD auseinander gesetzt. Mein erster Installationsversuch ist im Folgenden dokumentiert.

Installation

Der erste Blick fiel in die offizielle Dokumentation, die mir sehr ausführlich erscheint und die in deutscher Sprache vorliegt. Nachdem ich mir einen Überblick verschafft hatte, wurde das entsprechende ISO-File hier herunter geladen, auf einen Ventoy-Multiboot-Stick gezogen und davon gebootet.

Es öffnet sich sofort der Installer. Die vorgeschlagenen Einstellungen wurden weitgehend übernommen. Einzige wesentliche Änderung: Der zusätzlich angelegte User tobi wurde der Gruppe wheel zugeordnet. Dadurch kann mit dem Befehl su - root von meinem eigenen User zu root gewechselt werden. Sonst hätte ich das su: Sorry-Problem. Zudem wurde SSH aktiviert.

Der Installations-Assistent war schnell durchlaufen. Doch beim darauf folgenden Neustart lief mir folgende Fehlermeldung über den Weg:

sdhci_pci0-slot0: Controller timeout
sdhci_pci0-slot0: ============== REGISTER DUMP ==============
sdhci_pci0-slot0: Sys addr: 0x00000000 | Version:  0x00001002
sdhci_pci0-slot0: Blk size: 0x00000000 | Blk cnt:  0x00000000
sdhci_pci0-slot0: Argument: 0x000001aa | Trn mode: 0x00000000
sdhci_pci0-slot0: Present:  0x00020001 | Host ctl: 0x00000001
sdhci_pci0-slot0: Power:    0x0000000e | Blk gap:  0x00000080
sdhci_pci0-slot0: Wake-up:  0x00000000 | Clock:    0x0000fa07
sdhci_pci0-slot0: Timeout:  0x00000000 | Int stat: 0x00000000
sdhci_pci0-slot0: Int enab: 0x01ff003b | Sig enab: 0x01ff003b
sdhci_pci0-slot0: AC12 err: 0x00000000 | Host ctl2:0x00000000
sdhci_pci0-slot0: Caps:     0x7568c881 | Caps2:    0x00000807
sdhci_pci0-slot0: Max curr: 0x00000000 | ADMA err: 0x00000000
sdhci_pci0-slot0: ADMA addr:0x00000000 | Slot int: 0x00000000
sdhci_pci0-slot0: ===========================================

Diese Meldung erscheint etwa 2 bis 3 Minuten im Sekunden-Takt. Die Maschine bootet jedoch im Anschluss ordentlich durch. Die genannte Fehlermeldung konnte im Kernel-Ring-Buffer mit dmesg nachvollzogen werden. Weitere Infos zu sdhci_pci0 können wie folgt ausgegeben werden:

root@fbsd:~ # pciconf -lv sdhci_pci0
sdhci_pci0@pci0:0:30:6: class=0x080501 rev=0x21 hdr=0x00 vendor=0x8086 [...] 
    vendor     = 'Intel Corporation'
    device     = 'Sunrise Point-LP Secure Digital IO Controller'
    class      = base peripheral
    subclass   = SD host controller

Der in meinem NUC eingebaute SD-Kartenleser schien das Problem zu sein. Der Hinweis hier hat mir auf die Sprünge geholfen:

root@fbsd:~ # echo hint.sdhci_pci.0.disabled="1" >> /boot/loader.conf

Die Warnungen und die Verzögerung beim Boot-Prozess sind somit weg. Ich kann mich anmelden, Das System scheint zu laufen.

Ersteinrichtung

Im Anschluss an die Basis-Installation hab ich mich umgesehen. Neben den bekannten Befehlen wie uname -a oder dem FreeBSD-typischen Kommando freebsd-version -kru ist vor allem die Datei /etc/os-release aufschlussreich:

root@fbsd:~ # cat /etc/os-release
NAME=FreeBSD
VERSION="13.2-RELEASE"
VERSION_ID="13.2"
ID=freebsd
ANSI_COLOR="0;31"
PRETTY_NAME="FreeBSD 13.2-RELEASE"
CPE_NAME="cpe:/o:freebsd:freebsd:13.2"
HOME_URL="https://FreeBSD.org/"
BUG_REPORT_URL="https://bugs.FreeBSD.org/"

Es wird empfohlen, nach einer Installation das System zu aktualisieren (Auszug):

root@fbsd:~ # freebsd-update fetch install
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update1.freebsd.org... done.
Fetching metadata signature for 13.2-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 42 patches.....10....20....30....40. done.
Applying patches... done.
Fetching 20 files... ....10....20 done.
The following files will be added as part of updating to
13.2-RELEASE-p3:
/etc/ssl/certs/0179095f.0
[...]

Im Anschluss, war mir nicht so ganz klar, in welcher Umgebung ich nach dem Login unterwegs bin. Die erste Verwunderung: Nach einem Logout bzw. Neustart ist die history leer. Eine Untersuchung der Shell ergab …

root@fbsd:~ # echo $SHELL
/bin/csh

Die Ausgabe verrät mir, dass ich DAS nicht haben will. Daher wurden im Anschluss erstmal ein paar Basis-Tools installiert und den beiden Usern, die ich verwende (tobi und root), in der Folge die bash als Standard-Shell untergejubelt (Ja … genau … ich mag die BASH).

root@fbsd:~ # pkg install vim sudo tmux bash 
chsh -s /usr/local/bin/bash tobi
chsh -s /usr/local/bin/bash root

Danach ist alles wie gewohnt: Die eingegebenen Befehle werden beim Logout-Vorgang in die ~/.bash_history geschrieben und sind somit nach einem Reboot oder neuem Login verfügbar.

Im Anschluss wurde noch sudo eingerichtet. Oh … sieh an … visudo funktioniert. Wie gewohnt sind schon zahlreiche auskommentierte Konfigurationsanweisungen enthalten. Die folgende Zeile wurde auskommentiert:

%wheel ALL=(ALL:ALL) NOPASSWD: ALL

Somit kann ich mit mit meinem User tobi via sudo -i ohne die Eingabe eines Passwortes in den User root wechseln. Wie oben beschrieben funktioniert das nur, wenn der entsprechende User ein Mitglied der Gruppe wheel ist:

[tobi@fbsd ~]$ sudo -i
[root@fbsd ~]# 

SSH einrichten

Der SSH-Server wurde bei der Installation schon installiert und aktiviert. Ein Blick in die /etc/rc.conf verrät, dass dieser aktiviert ist …

[root@fbsd ~]# cat /etc/rc.conf | grep ssh
sshd_enable="YES"

… der Service läuft …

[root@fbsd ~]# service sshd status
sshd is running as pid 4336.

… und laut sockstat lauscht der SSH-Server korrekt auf Port 22:

[root@fbsd ~]# sockstat -4| grep ssh
root     sshd       4336  5  tcp4   *:22                  *:*

Die Authentifizierung des Users bei Anmeldung soll via PubKey-Auth erfolgen. Typischerweise liegt die Konfigurationsdatei für SSH, wie gewohnt unter /etc/ssh/sshd_config. Für den Testlauf lasse ich diese unverändert. Auf produktiven Maschinen, die über das Internet erreichbar sind, würde ich Anpassungen zur Absicherung vornehmen (SSH-Port wechseln, Passwort-Login verbieten, etc.).

Von meinem Debian-Notebook aus kopiere ich den entsprechenden Public-Key mit ssh-copy-id auf die FreeBSD-Maschine:

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub tobi@<FreeBSD-PC-IP>

Klappt wie erwartet: Der Pub-Key liegt jetzt in der Datei ~/.ssh/authorized_keys mit den korrekten Berechtigungen.

Grafische Benutzeroberfläche

Zuletzt wurde auf der Test-Maschine noch die grafische Benutzeroberfläche KDE und der Display-Manager SDDM installiert. Hierzu gibt es verschiedene Wege. Unter Debian bietet sich hier der Weg über tasksel an. Daher hab ich nach einem Pendant unter FreeBSD gesucht und ein ähnliches Tool gefunden: `

[root@fbsd ~]# pkg install desktop-installer
[root@fbsd ~]# desktop-installer

Hierbei handelt es sich um einen Assistenten, der durch die Installation führt und neben einer Auswahl von Desktop-Umgebungen wie KDE, Gnome, LXQT, etc., auch die notwendigen grafischen Treiber und Anwendungen installiert bzw. konfiguriert. Bei der Ausführung von desktop-installer, gibt es allerlei Fragen zu beantworten. In der Regel wurde die jeweils vorgeschlagene Option gewählt.

Allerdings habe ich drei Anläufe gebraucht, bis es dann lief. Meine Erkenntnisse:

  • Wenn man den desktop-installer z. B. durch einen Reboot unterbricht, kann man diesen erneut aufrufen und die bisherigen gewählten Einstellungen sind vorausgewählt.
  • Es gibt nach der Treiber-Konfiguration der Grafikkarte die Möglichkeit KDE anzutesten. In diesem Zustand ist die Installation noch nicht fertig. Man kann jedoch sehen, ob die gewählten Einstellungen zu einer korrekten Darstellung führen.
  • SDDM begrüßte mich nach der Installation mit einem “Black-Screen”. Ursache war ein ausgewähltes SDDM-Theme, das nicht installiert war.

Fazit

Damit ist die Installation abgeschlossen. Die aufkommenden Hürden waren für mich durch die Doku, die Community und meinen eigenen Lösungsansätzen gut zu bewältigen. Ich werde in den kommenden Monaten diesen Rechner in meinem kleinen Heim-Labor verwenden und schauen, ob ich damit arbeiten kann. Ich bin gespannt wie sich die Kiste so macht und welche Erkenntnisse ich gewinnen kann.

Quellen

https://docs.freebsd.org/de/books/handbook/basics/
https://docs.freebsd.org/en/articles/linux-users/
https://forums.freebsd.org/threads/sdhci_pci0_slot0-controller-timeout.59077
https://ostechnix.com/install-freebsd/
https://cstan.io/post/2011/12/freebsd-su-sorry/
https://www.cyberciti.biz/faq/freebsd-bash-installation/
https://nudesystems.com/install-freebsd-with-kde/