Wie angekündigt habe ich nun meinen Apachen in den Ruhestand geschickt… Damit ist nun also ebenfalls mein Webserver auf FreeBSD und ebenfalls auf NGINX.
Siehe auch: HTTP/3 und QUIC
Fragen? Einfach melden.
IT-Blog von Sebastian van de Meer
Wie angekündigt habe ich nun meinen Apachen in den Ruhestand geschickt… Damit ist nun also ebenfalls mein Webserver auf FreeBSD und ebenfalls auf NGINX.
Siehe auch: HTTP/3 und QUIC
Fragen? Einfach melden.
Auf fast jedem Unix ähnlichen System haben Benutzer nicht das Recht das komplette System herunterfahren oder neustarten zu können. Macht ja nur Sinn… Nutzt man dieses System aber als Desktop könnte es in gewissen Fällen ebenfalls nicht dumm sein, wenn Benutzer nicht in der Lage sind das System zu rebooten und einen shutdown abzusetzten. In den Meisten Fällen ist man dann wohl doch alleine auf seinem System und es ist eher eine Einschränkung wenn man sich erst als privilegierter Benutzer anmelden muss um seinen Comupter/Laptop abschalten zu können.
Dafür wurden nun verschiedenste Dienste entwickelt um dieses so einfach wie möglich zu erledigen. Das wohl bekannteste und verbreitetste ist consolekit / policykit / polkit. Dieses System ermöglicht es bestimmte Rechte basierend auf Benutzer oder Gruppen zu verteilen. Die gängigen Logonmanager sowie Displaymanager haben in der Regel bereits die Möglichkeit eingebaut um sich damit auszutauschen. Der normale Linux Benutzer wird damit wohl kaum noch in Berührung kommen.
Am einfachsten schaut man sich als Benutzer einmal in einem xterminal an welche Möglichkeiten einem geboten werden:
$ pkaction
Schon gibt es eine Liste der aktuell konfigurierbaren „Berechtigungen“. Ob shutdown und reboot dabei ist sagt einem:
$ pkaction | grep -E 'stop|restart' org.freedesktop.consolekit.system.restart org.freedesktop.consolekit.system.restart-multiple-users org.freedesktop.consolekit.system.stop org.freedesktop.consolekit.system.stop-multiple-users
Ob der eigene Benutzer es bereits darf sagt einem:
$ pkaction --action-id org.freedesktop.consolekit.system.restart --verbose org.freedesktop.consolekit.system.restart: description: Restart the system message: System policy prevents restarting the system vendor: vendor_url: icon: implicit any: no implicit inactive: no implicit active: yes
Implicit active ist hier der spannende Eintrag… Dieser ergibt sich für mich aus der von mir angelegten Regel 05-shutreboot.rules unter /usr/local/etc/polkit-1/rules.d diese schaut wie folgt aus:
polkit.addRule(function (action, subject) {
if (action.id == "org.freedesktop.consolekit.system.restart" ||
action.id == "org.freedesktop.consolekit.system.stop"
&& subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
Die Regel besagt das org.freedesktop.consolekit.system.stop sowie restart das Ergebnis YES zurückgeben soll, wenn der Benutzer in der Gruppe wheel ist. ist diese Regel eingetragen, und man ist sich sicher das alles klappen müsste, es dennoch nicht funktioniert sind ein beliebter Fehler die Rechte vom Ordner. Hier könnte folgendes helfen:
$ chown polkitd:wheel /usr/local/etc/polkit-1
In diesem Sinne…
Siehe auch: FreeBSD auf dem Desktop
Fragen? Einfach melden.
Ich dachte schon voll einen am Zaun zu haben. Nach meinem letzten Update von fish ging plötzlich ein Backspace mehr und die Pfeiltasten gaben ebenso lustige Steuerzeichen zurück wie Ende oder Pos1 :-/
Es ist tatsächlich ein dummer Bug. Darauf gekommen bin ich über: https://github.com/fish-shell/fish-shell/issues/3050
Sowie am Ende: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213013
Comment 9 weckt Hoffnung:
Baptiste Daroussin freebsd_committer 2016-10-06 19:52:25 UTC The issue is fixed in head (12) I will merge in 11 in a month and will propose the fix for an errata, thanks for reporting
Bis dahin verhilft mir folgender Workaround beim Starten meines Terminals zu einer sauberen Shell:
Einfach als Start Command für mein Mate-Terminal:
env LC_ALL=C mate-terminal
Tut was es soll!
So long…
Siehe auch: FreeBSD auf dem Desktop
Fragen? Einfach melden.
Veraltet: FreeBSD 10.3 und 11.0 haben seit Jahren keinerlei Support mehr. Aktuelle Versionen: FreeBSD Releases. Das Upgrade-Verfahren mit freebsd-update ist aber weiterhin identisch.
Da hier schon die Fragen gekommen sind.. Folgende kurze Schritte haben mir zu meinem neuen FreeBSD 11 Desktop gebracht:
$ pkg upgrade $ freebsd-update fetch install $ freebsd-update -r 11.0-RELEASE upgrade $ freebase-update install $ reboot $ freebase-update install $ pkg remove -f javavmwrapper $ pkg install pkg $ pkg upgrade $ rehash $ freebase-update install $ reboot $ uname -a
Mein Benutzer musste dann noch in die Gruppe Video:
$ pw groupmod video -m username
Der Bootloader hatte ebenfalls ein Problem das nvidia Modul zu laden. Daher habe ich den Eintrag aus der /boot/loader.conf entfernt und lasse es nun über die /etc/rc.conf mit folgendem Eintrag laden:
kld_list="nvidia"
Das ist auch schon alles 🙂
Fragen? Einfach melden.
Ich ertappe mich aktuell immer mal wieder dabei auf die Release Process Seite von FreeBSD 11 zu schauen. Mit immer mal wieder meine ich 1 / 2 mal am Tag.
https://www.freebsd.org/releases/11.0R/schedule.html
Oh ich bin gerade total gespannt auf die neue Version. Auf den Testkisten habe ich die RCs ja schon angetestet und ich lese ganz brav die current-liste (was es nicht besser macht). Jetzt wurde der RC3 Build ja vom 26.08 auf den 14.09 verschoben, das hat natürlich den Rest ebenfalls geschoben *schnief* 28.09 ist nun also erst einmal der press release Termin. uhhh das ist schon übermorgen *freu*.
Ich habe auch ganz brav wieder Geld gegeben: https://www.freebsdfoundation.org/donate/
Auf was ich besonders warte? Ohh auf 1000 Dinge der neuen Version aber besonders auf ein, vielleicht etwas dummes, Detail. trim auf zfs mit geli.
Wann habt ihr eigentlich das letzte mal etwas gespendet und sei es nur 5€??
Dear Sebastian van de Meer, The FreeBSD Foundation would like to thank you for your generous donation of $200.00 on September 26, 2016. It's people like you that make it possible for us to continue supporting the FreeBSD Project and community worldwide. We are incredibly grateful for all the support we receive from you and so many individuals and organizations that value FreeBSD. The FreeBSD Foundation is a 501(c)3 non-profit organization dedicated to supporting and promoting the FreeBSD Project and community worldwide. The Foundation gratefully accepts donations from individuals and businesses. Donations are used to fund and manage development projects, educating the public and promoting FreeBSD, sponsoring BSD conferences and summits, providing travel grants to FreeBSD developers, protecting FreeBSD IP and providing legal support to the Project, and purchasing hardware to build and improve FreeBSD Project infrastructure. The FreeBSD Foundation is entirely supported by donations. For information regarding our goals, projects and use of collected funds, please visit our web site: www.FreeBSDFoundation.org. No goods or services of any value were or will be transferred to you in connection with this donation. Please keep this written acknowledgment of your donation for your tax records. Thanks again for your support! Sincerely, Deb Goodkin Executive Director The FreeBSD Foundation
Siehe auch: FreeBSD auf dem Desktop
Fragen? Einfach melden.
Auf FreeBSD gibt es mehrere Wege, ZFS-Snapshots zu automatisieren. Ein bewährtes Tool ist zfs-auto-snapshot aus den Ports (sysutils/zfstools). Es orientiert sich an der Snapshot-Automatisierung von Solaris/OpenSolaris und kann auch konsistente Snapshots einer MySQL- oder PostgreSQL-Datenbank erstellen.
Hinweis: Seit FreeBSD 13 gibt es mit periodic(8) und dem ZFS-Periodic-Script eine eingebaute Alternative, die ohne zusätzliche Pakete auskommt. Für ältere Systeme oder mehr Kontrolle über die Retention bleibt zfstools eine gute Wahl.
Installation:
pkg install zfstools
Danach die Cronjobs in /etc/crontab eintragen:
# ZFS snapshots 15,30,45 * * * * root /usr/local/sbin/zfs-auto-snapshot frequent 4 0 * * * * root /usr/local/sbin/zfs-auto-snapshot hourly 24 7 0 * * * root /usr/local/sbin/zfs-auto-snapshot daily 7 14 0 * * 7 root /usr/local/sbin/zfs-auto-snapshot weekly 4 28 0 1 * * root /usr/local/sbin/zfs-auto-snapshot monthly 12
Falls zfs im Cronjob nicht gefunden wird, die PATH-Variable in der Crontab erweitern:
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
Jetzt noch die Snapshots für das gewünschte Dataset aktivieren:
zfs set com.sun:auto-snapshot=true zroot/usr/home
Mit der Crontab oben werden folgende Snapshots vorgehalten:
zfs list -r -H -t snapshot zroot/usr/home zroot/usr/home@zfs-auto-snap_hourly-2016-05-19-11h00 21,5M - 82,5G - zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-11h30 14,6M - 82,6G - zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-11h45 13,3M - 82,6G - zroot/usr/home@zfs-auto-snap_hourly-2016-05-19-12h00 14,0M - 82,7G -
Für konsistente Datenbank-Snapshots muss das Property auf dem Datenbank-Dataset speziell gesetzt werden — zfs-auto-snapshot friert die Datenbank dann vor dem Snapshot kurz ein:
# PostgreSQL zfs set com.sun:auto-snapshot=postgresql zroot/data/postgres # MySQL/MariaDB zfs set com.sun:auto-snapshot=mysql zroot/data/mysql
Wichtig: Snapshots auf demselben System sind kein Backup-Ersatz. Geht die Platte kaputt, sind die Snapshots mit weg. Für eine echte Sicherung die Snapshots per zfs send/recv auf ein zweites System replizieren.
Mehr zu ZFS: ZFS Compression und Deduplication. Details zu allen Snapshot-Optionen in der OpenZFS-Dokumentation. Fragen? Einfach melden.
Nach der Grundinstallation von FreeBSD hängt man auf der Konsole. Kein Fenstermanager, kein Browser, keine grafische Oberfläche. Für Serverleute normal, für Desktopnutzer erstmal irritierend. Hier die Schritte von der nackten FreeBSD-Installation zu einem funktionierenden MATE-Desktop mit deutschem Layout.

Ein Einzeiler holt alles was man für den Anfang braucht. MATE als Desktop, Xorg als Display-Server, LightDM als Login-Manager und die üblichen Anwendungen:
pkg install xorg mate mate-desktop lightdm lightdm-gtk-greeter \ firefox thunderbird pidgin vlc libreoffice gimp \ de-aspell de-hunspell cups cups-pdf sudo
In der /etc/rc.conf die nötigen Dienste aktivieren:
# Deutsche Konsolenschriftarten font8x8="iso15-8x8" font8x14="iso15-8x14" font8x16="iso15-8x16" # D-Bus für den Desktop dbus_enable="YES" # Grafischer Login lightdm_enable="YES" # Drucken über CUPS cupsd_enable="YES" lpd_enable="NO" # Temp-Verzeichnisse aufräumen clear_tmp_enable="YES" clean_tmp_X="YES" # Erweiterte Device-Regeln aktivieren devfs_system_ruleset="devfsrules_common"
FreeBSD setzt Sprache und Zeichensatz über Login-Klassen. In der /etc/login.conf eine neue Klasse anlegen:
german|German Users Accounts:\
:charset=UTF-8:\
:lang=de_DE.UTF-8:\
:tc=default:
Danach die Login-Datenbank neu bauen und dem Benutzer die Klasse zuweisen:
cap_mkdb /etc/login.conf
In vipw die Klasse german im fünften Feld eintragen:
kernel:*:1001:1001:german:0:0:Sebastian:/home/kernel:/usr/local/bin/fish
Datei /usr/local/etc/X11/xorg.conf.d/keyboard-de-nodeadkeys.conf anlegen:
Section "InputClass"
Identifier "KeyboardDefaults"
Driver "keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "de"
Option "XkbVariant" "nodeadkeys"
EndSection
Normale Benutzer brauchen Zugriff auf Laufwerke, USB-Geräte und Soundkarten. Die /etc/devfs.rules regelt das. Wer das Thema im Detail verstehen will: Im Beitrag zu CD/DVD-Brenner-Berechtigungen unter FreeBSD ist das ausführlicher erklärt.
[devfsrules_common=7] add path 'ada[0-9]\*' mode 666 add path 'da[0-9]\*' mode 666 add path 'cd[0-9]\*' mode 666 add path 'pass[0-9]\*' mode 666 add path 'xpt[0-9]\*' mode 666 add path 'ugen[0-9]\*' mode 666 add path 'usb/\*' mode 666 add path 'video[0-9]\*' mode 666 add path 'mmcsd[0-9]\*' mode 666 add path 'lpt[0-9]\*' mode 666 add path 'ulpt[0-9]\*' mode 666
Den Benutzer in die Gruppe wheel aufnehmen und per visudo die sudo-Berechtigung setzen:
pw groupmod wheel -m kernel
# visudo root ALL=(ALL) ALL kernel ALL=(ALL) ALL
In der /boot/loader.conf ein paar Module die auf einem Desktop sinnvoll sind:
# Neuer Grafik-Konsolentreiber kern.vty=vt # Kernel-Tuning kern.ipc.shmseg=1024 kern.ipc.shmmni=1024 kern.maxproc=10000 # SD-Kartenleser mmc_load="YES" mmcsd_load="YES" sdhci_load="YES" # FUSE (Dateisysteme im Userspace, z.B. NTFS) fuse_load="YES" # CPU-Temperatursensoren (Intel) coretemp_load="YES" # tmpfs und asynchrone I/O tmpfs_load="YES" aio_load="YES" # Unicode auf Wechselmedien libiconv_load="YES" libmchain_load="YES" cd9660_iconv_load="YES" msdosfs_iconv_load="YES" # Sound snd_driver_load="YES" # Linux-Kompatibilität linux_load="YES" # ZFS ARC begrenzen (hier 2 GB, an RAM anpassen) vfs.zfs.arc_max="2048M"
Die vfs.zfs.arc_max Einstellung ist wichtig. ZFS nutzt standardmäßig so viel RAM wie verfügbar für den Dateisystem-Cache. Auf einem Desktop mit 8 GB will man das begrenzen, damit für Anwendungen genug übrig bleibt.
Nach einem Neustart sollte LightDM den grafischen Login zeigen. MATE als Session auswählen, anmelden, fertig. Firefox, Thunderbird, LibreOffice und der Rest sind installiert und startbereit.
FreeBSD auf dem Desktop ist nicht so komfortabel wie ein Ubuntu. Dafür hat man ein sauberes ZFS, ein durchdachtes System und eine Dokumentation die ihresgleichen sucht. Wer sich darauf einlässt, wird es mögen.
Fragen? Einfach melden.
FreeBSD kann Linux-Binaries ausführen. Das ist nichts Neues. Aber ein komplettes Debian in einer Jail laufen lassen, mit apt-get und allem was dazugehört? Das geht auch. Die Jail nutzt den FreeBSD-Kernel, das Userland kommt von Debian GNU/kFreeBSD. iocage erstellt die Jail, debootstrap installiert das Debian-Basissystem hinein.
Hinweis: Debian GNU/kFreeBSD wurde nach Debian 8 (Jessie) eingestellt. Für aktuelle Setups ist linux_enable="YES" in der /etc/rc.conf mit einer regulären Linux-Jail der bessere Weg. Die hier gezeigte Methode funktioniert aber weiterhin mit älteren Debian-Versionen und zeigt das Prinzip.
iocage muss installiert und konfiguriert sein. Zusätzlich wird debootstrap benötigt:
pkg install debootstrap
Die Jail wird mit iocage angelegt. Die entscheidenden Parameter sind exec_start und exec_stop. Statt der üblichen FreeBSD-Init-Skripte werden die Debian-Runlevel aufgerufen:
iocage create -e tag=debian-jail01 \ exec_start="/etc/init.d/rc 3" \ exec_stop="/etc/init.d/rc 0"
Runlevel 3 startet die Dienste, Runlevel 0 fährt herunter. Den Mountpoint der neuen Jail auslesen:
iocage get mountpoint debian-jail01 # /iocage/jails/19e3594f-.../
debootstrap holt ein minimales Debian von den Mirrors und entpackt es in das Root-Verzeichnis der Jail. In diesem Beispiel Debian Wheezy:
debootstrap wheezy /iocage/jails/19e3594f-.../root/ # I: Retrieving Release # I: Retrieving Packages # I: Resolving dependencies of required packages... # I: Resolving dependencies of base packages... # [... ~150 Pakete werden heruntergeladen und entpackt ...] # I: Configuring adduser... # I: Configuring apt... # I: Base system installed successfully.
Das dauert ein paar Minuten. Am Ende steht ein komplettes Debian-Basissystem im Jail-Verzeichnis.
Debian braucht ein paar Dateisysteme die FreeBSD nicht automatisch in Jails mountet. Die fstab der Jail (nicht die im Debian) bekommt drei Einträge:
# /iocage/jails/19e3594f-.../fstab linsysfs .../root/sys linsysfs rw 0 0 linprocfs .../root/proc linprocfs rw 0 0 tmpfs .../root/lib/init/rw tmpfs rw,mode=777 0 0
linsysfs und linprocfs stellen die Linux-kompatiblen /sys und /proc bereit. Ohne die funktionieren viele Linux-Programme nicht. Das tmpfs für /lib/init/rw braucht Debians Init-System.
IP-Adresse und Hostname setzen:
iocage set vnet=off debian-jail01 iocage set ip4_addr="em0|192.168.1.46/16" debian-jail01 iocage set hostname="debian-jail01" debian-jail01 iocage set host_hostname="debian-jail01" debian-jail01
Die /etc/hosts im Debian-Dateisystem anpassen:
# /iocage/jails/19e3594f-.../root/etc/hosts 127.0.0.1 localhost debian-jail01 ::1 localhost ip6-localhost ip6-loopback debian-jail01
Beim ersten Start kommen ein paar Fehlermeldungen wegen mount_unionfs und fehlenden Verzeichnissen. Die sind harmlos und können ignoriert werden:
iocage start debian-jail01 # mount_unionfs: .../: No such file or directory # mount: .../root/usr/home: No such file or directory # * Starting 19e3594f-... (debian-jail01) # + Started (shared IP mode) OK # + Starting services OK
Konsole betreten:
iocage console debian-jail01 # GNU/kFreeBSD debian-jail01 10.2-RELEASE-p4 root@debian-jail01:~# apt-get update root@debian-jail01:~# apt-get install mc
apt-get funktioniert, Pakete lassen sich installieren, Dienste starten. Von aussen geht auch iocage exec debian-jail01 uname -a und zeigt den FreeBSD-Kernel mit GNU/kFreeBSD-Userland.
Das Stoppen funktioniert wie bei jeder anderen Jail:
iocage stop debian-jail01
Das hier ist kein Ersatz für eine richtige Linux-VM. Es ist ein Trick: Der FreeBSD-Kernel stellt die Jail-Isolation, Debian liefert das Userland. Nützlich wenn man ein bestimmtes Linux-Tool braucht das es für FreeBSD nicht gibt, oder wenn man testen will wie sich Software unter Debian verhält.
Für produktive Linux-Workloads auf FreeBSD ist heute eher eine reguläre Jail mit dem Linux-Kompatibilitätslayer oder gleich bhyve die bessere Wahl.
Fragen? Einfach melden.
Ein Notebook mit Full-Disk-Encryption verdient auch ein verschlüsseltes Backup. Plan: ZFS-Snapshots per zfs send auf eine USB-Platte schieben, die komplett mit geli verschlüsselt ist. Schlüssel und Passphrase sicher aufbewahren — fertig.
Hinweis: Seit OpenZFS 2.0 (FreeBSD 13+) gibt es native ZFS-Verschlüsselung (zfs create -o encryption=aes-256-gcm). Damit entfällt geli als Zwischenschicht. Auf älteren Systemen oder wenn man die gesamte Platte unabhängig vom Dateisystem verschlüsseln will, bleibt geli die richtige Wahl.
Platte einstecken und per dmesg das Device identifizieren — in diesem Fall da0. Dann mit gpart eine neue GPT-Partitionstabelle anlegen und eine Partition erstellen.
geli braucht einen Schlüssel aus Zufallsdaten:
dd if=/dev/random of=./backup-key bs=256 count=1
Mit diesem Schlüssel die verschlüsselte Partition einrichten:
geli init -s 4096 -K ./backup-key -l 256 /dev/da0s1
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/da0s1.eli and
can be restored with the following command:
# geli restore /var/backups/da0s1.eli /dev/da0s1
Partition öffnen:
geli attach -k ./backup-key /dev/da0s1 Enter passphrase:
Auf der geöffneten geli-Partition (da0s1.eli) den ZFS-Pool erstellen:
zpool create usb-backup /dev/da0s1.eli zpool list NAME SIZE ALLOC FREE CAP HEALTH zroot 460G 184G 276G 40% ONLINE usb-backup 928G 296K 928G 0% ONLINE
Initiales Vollbackup per zfs send -R (rekursiv, alle Datasets und Snapshots):
zfs send -R zroot@auto-2015-05-23-21-00-00 | zfs recv -u usb-backup/notebook
Die Option -R sendet alles rekursiv. Die Option -u beim Empfänger verhindert, dass die Datasets auf der USB-Platte gemountet werden. Bei allen folgenden Backups muss nur noch die Differenz zwischen zwei Snapshots übertragen werden.
Drei Schritte in der richtigen Reihenfolge:
sync zpool export usb-backup geli detach /dev/da0s1
Wichtig: Den Schlüssel (backup-key) an einem dritten Ort aufbewahren — weder auf dem Notebook noch auf der Backup-Platte. Ohne Schlüssel und Passphrase sind die Daten nicht wiederherstellbar.
Mehr zu ZFS-Backups: Automatische ZFS-Snapshots und ZFS send/recv Fehler beheben. Fragen? Einfach melden.
Brennprogramme wie xfburn melden unter FreeBSD gerne, dass kein Laufwerk gefunden wurde oder die Berechtigungen nicht stimmen. Als root funktioniert es, als normaler Benutzer nicht. Das Problem sind nicht die Berechtigungen auf /dev/cd0, sondern auf dem zugehörigen SCSI-Passthrough-Device.
Brennprogramme greifen über das CAM-Subsystem (Common Access Method) auf den Brenner zu. Dafür muss das Modul atapicam geladen sein. In der /boot/loader.conf:
atapicam_load="YES" hw.ata.atapi_dma="1"
Die erste Zeile macht den ATA-Brenner als SCSI-Gerät sichtbar, die zweite aktiviert DMA für ATA-Geräte.
Mit camcontrol sieht man welches pass-Device zum Brenner gehört:
camcontrol devlist # Ausgabe: #at scbus0 target 0 lun 0 (ada0,pass0) # at scbus1 target 0 lun 0 (cd0,pass1)
Der Brenner ist cd0 mit dem Passthrough-Device pass1. Ein Blick auf die Berechtigungen zeigt das Problem:
ls -la /dev/cd0 # crw-rw-rw- 1 root operator ... /dev/cd0 ls -la /dev/pass1 # crw------- 1 root operator ... /dev/pass1
/dev/cd0 ist für alle lesbar und schreibbar, aber /dev/pass1 ist nur für root zugänglich. Die Brennsoftware braucht aber genau dieses Device.
Zum Testen reicht ein chmod 0666 /dev/pass1. Damit die Berechtigungen nach einem Neustart erhalten bleiben, den Eintrag in /etc/devfs.conf hinterlegen:
# /etc/devfs.conf perm /dev/cd0 0666 perm /dev/pass1 0666
Die Device-Nummer von pass kann sich ändern, wenn USB-Geräte dazukommen oder die Boot-Reihenfolge wechselt. Im Zweifelsfall vorher mit camcontrol devlist prüfen.
Siehe auch: FreeBSD auf dem Desktop
Fragen? Einfach melden.
© 2026 -=Kernel-Error=- — RSS
Theme von Anders Norén — Hoch ↑