Datenhaufen zu IT und Elektronik.

Kategorie: ZFS Filesystem (Seite 1 von 3)

FreeBSD 13: Unverschlüsseltes ZFS-Dataset in verschlüsseltes Dataset migrieren​

Bild der Bücher FreeBSD Mastery ZFS und FreeBSD Mastery Advanced ZFS

Mit FreeBSD 13 lässt sich die native ZFS Verschlüsselung direkt nutzen. Dabei muss man zwischen einem komplett verschlüsselten zpool und verschlüsselten Datasets unterscheiden. Hat man einen komplett verschlüsselten zpool, bedeutet es nicht, dass damit auch alle Datasets verschlüsselt sein müssen, so wie es auch nicht bedeutet, dass man Datasets nur verschlüsseln kann, wenn auch der komplette ZFS Pool verschlüsselt ist.

Wer nun also sein FreeBSD auf Version 13 gehoben hat, möchte ggf. einzelne ZFS Datasets verschlüsseln. In der Praxis trifft dieses sicher oft auf Jails zu. Diese liegen in der Regel in eigenen ZFS Datasets und mit dem folgenden Beispiel lassen sich diese und andere Datasets nachträglich verschlüsseln.

Im Beispiel haben wir den Pool zroot und in diesem das Dataset varta. Weder der zpool noch das Dataset sind aktuell verschlüsselt:

root@testtest:/ # zfs list zroot/varta
NAME          USED  AVAIL     REFER  MOUNTPOINT
zroot/varta   100M  12.0G      100M  /zroot/varta
root@testtest:/ # zfs get encryption zroot/varta
NAME         PROPERTY    VALUE        SOURCE
zroot/varta  encryption  off          default
root@testtest:/ #

Aktiviert man bei ZFS Dinge wie Komprimierung oder Deduplikation sind diese immer nur ab dem Moment der Aktivierung und bis genau zur Deaktivierung aktiv. Dieses hat viele Vorteile aber auch Nachteile. So greift dieses nur für Daten, welche neu geschrieben werden. Möchte man dieses nachträglich auf alle Daten anwenden, muss man die Daten komplett neu schreiben. Dieses lässt sich am einfachsten und schnellsten per zfs send und zfs receive erledigen. Wenn man also sein bestehendes Dataset verschlüsseln möchte, dann geht dieses faktisch nicht, sondern man erstellt im Grunde ein neues verschlüsseltes Dataset und schreibt seine Daten dort rein.

Bevor wir nun mit der Migration starten, müssen wir noch eine Kleinigkeit wissen…. Zum Verschlüsseln der Daten benötigen wir noch ein Geheimnis, einen Schlüssel/Key. Dieser kann bei ZFS in verschiedenster Form und an verschiedensten Orten liegen. So könnte man den Key zur Ver- und Entschlüsselung auf einen USB-Stick ablegen. Nur wenn dieser auch im System steckt usw. usw.. Der eingängigste Weg ist sicher ein Passphrase welches per prompt abgefragt wird. Will man sein verschlüsseltes Dataset öffnen, wird man nach einem Kennwort gefragt, welches sich das System bis zum nächsten Reboot oder dem manuellen „Schließen“ des Datasets merkt. Diesen Zustand wollen wir nach der Migration, in diesem Beispiel, erreichen.

Zur Verdeutlichung erstellen wir kurz ein neues verschlüsseltes Dataset:

root@testtest:/ # zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt zroot/enc-beispiel
Enter passphrase:
Re-enter passphrase:

Damit haben wir ein neues Dataset welches sofort benutzt werden kann, alles was wir in dieses legen, ist verschlüsselt.

root@testtest:/ # zfs list zroot/enc-beispiel
NAME                 USED  AVAIL     REFER  MOUNTPOINT
zroot/enc-beispiel   200K  12.0G      200K  /zroot/enc-beispiel

Schauen wir in die Optionen des Datasets ist die Verschlüsselung aktiviert und der Schlüssel wird per Prompt vom Benutzer abgefragt:

root@testtest:/ # zfs get encryption,keylocation,keyformat zroot/enc-beispiel
NAME                PROPERTY     VALUE        SOURCE
zroot/enc-beispiel  encryption   aes-256-gcm  -
zroot/enc-beispiel  keylocation  prompt       local
zroot/enc-beispiel  keyformat    passphrase   -

Wie immer wird das Dataset sofort eingehangen:

root@testtest:/ # mount |grep enc-beispiel
zroot/enc-beispiel on /zroot/enc-beispiel (zfs, local, noatime, nfsv4acls)

Nach einem reboot, wird das Dataset nicht automatisch eingehangen, da ZFS den Schlüssel nicht hat. Wenn wir es nun einhängen und ZFS anweisen, den Schlüssel zu laden (Option -l), dann werden wir zur Eingabe des Kennwortes aufgefordert und können das Dataset im Anschluss wieder nutzen:

root@testtest:~ # mount | grep enc-beispiel
root@testtest:~ # zfs get encryption,keylocation,keyformat zroot/enc-beispiel
NAME                PROPERTY     VALUE        SOURCE
zroot/enc-beispiel  encryption   aes-256-gcm  -
zroot/enc-beispiel  keylocation  prompt       local
zroot/enc-beispiel  keyformat    passphrase   -
root@testtest:~ # mount | grep enc-beispiel
root@testtest:~ # zfs mount -l zroot/enc-beispiel
Enter passphrase for 'zroot/enc-beispiel':
root@testtest:~ # mount | grep enc-beispiel
zroot/enc-beispiel on /zroot/enc-beispiel (zfs, local, noatime, nfsv4acls)

Gut gut… So viel zu den Basics. Damit ist nun auch klar, warum im nun folgenden zfs send / zfs reveive Beispiel, der Schlüssel einen Umweg nehmen wird. Denn durch das pipen kommen wir so schlecht an die stdin heran, um das Passphrase einzugeben 😉 Wir sind nun also wieder zurück bei unserem unverschlüsselten Dataset varta und dessen Migration in einen verschlüsselten Zustand. Als erstes legen wir nun das gewünschte Passphrase in einer Datei ab:

root@testtest:~ # echo 'Tolles-Kennwort' > /kennwort.txt
root@testtest:~ # cat /kennwort.txt 
Tolles-Kennwort

Ebenfalls erstellen wir einen snapshot vom Dataset varta, welchen wir zur Migration nutzen:

root@testtest:~ # zfs snapshot zroot/varta@migration
root@testtest:~ # zfs list -t snapshot
NAME                    USED  AVAIL     REFER  MOUNTPOINT
zroot/varta@migration     0B      -      100M  -

Jetzt kann die eigentliche Migration starten:

root@testtest:~ # zfs send zroot/varta@migration | zfs receive -F -o encryption=on -o keyformat=passphrase -o keylocation=file:///kennwort.txt zroot/en-varta
root@testtest:~ # zfs list zroot/varta zroot/en-varta
NAME             USED  AVAIL     REFER  MOUNTPOINT
zroot/en-varta   100M  11.8G      100M  /zroot/en-varta
zroot/varta      100M  11.8G      100M  /zroot/varta
root@testtest:~ # zfs list -t snapshot
NAME                       USED  AVAIL     REFER  MOUNTPOINT
zroot/en-varta@migration   112K      -      100M  -
zroot/varta@migration        0B      -      100M  -

Das ist schnell und einfach, oder? Natürlich liegt nun noch immer das Passphrase offen in einer Datei im root des Systems. Wir müssen nun also den Ort des Schlüssels auf prompt ändern:

root@testtest:~ # zfs get keylocation zroot/en-varta
NAME            PROPERTY     VALUE                 SOURCE
zroot/en-varta  keylocation  file:///kennwort.txt  local
root@testtest:~ # zfs set keylocation=prompt zroot/en-varta
root@testtest:~ # zfs get keylocation zroot/en-varta
NAME            PROPERTY     VALUE        SOURCE
zroot/en-varta  keylocation  prompt       local

Damit kann die Datei mit dem Passphrase gelöscht werden:

root@testtest:~ # rm /kennwort.txt

Ebenfalls kann nun auch das unverschlüsselte Dataset weg:

root@testtest:~ # zfs destroy -r zroot/varta

Wenn man nun möchte, kann man das neue Dataset natürlich an die gleiche Stelle mounten oder direkt komplett gleich dem alten benennen:

root@testtest:~ # zfs rename zroot/en-varta zroot/varta

Damit ist die Migration fertig und das Dataset ist verschlüsselt:

root@testtest:~ # zfs list zroot/varta
NAME          USED  AVAIL     REFER  MOUNTPOINT
zroot/varta   100M  11.9G      100M  /zroot/varta
root@testtest:~ # zfs get encryption,keylocation,keyformat zroot/varta
NAME         PROPERTY     VALUE        SOURCE
zroot/varta  encryption   aes-256-gcm  -
zroot/varta  keylocation  prompt       local
zroot/varta  keyformat    passphrase   -

Es sieht nun nach sehr viel aus, ist es aber nicht und es lässt sich sogar automatisieren.

Fragen? Dann fragen!

TRIM für SSDs im ZFS-Pool unter Linux aktivieren: So funktioniert’s​

Speicherzellen eine SSD sind nicht unendlich beschreibbar. Irgendwann sind sie „kaputt“. Damit dieses möglichst spät passiert, hat jede SSD eine interne Logik, um Schreibzugriffe möglichst gut auf Speicherbereiche zu verteilen. Im optimalen Fall wird jeder Speicherbereich gleich oft zum Schreiben benutzt. Damit dieses möglichst gut funktioniert, muss die SSD wissen, welche Speicherbereiche wirklich frei sind. Diese Information kann die SSD fast nur vom Filesystem selbst bekommen. Damit die Info weitergeleitet wird, gibt es TRIM https://de.wikipedia.org/wiki/TRIM.

ZFS bietet diese Möglichkeit natürlich auch und dieses ebenfalls unter Linux. Im zpool nennt sich diese Option autotrim und um zu prüfen ob es aktiviert ist, hilft folgender Befehl:

$ zpool get autotrim bpool rpool
NAME   PROPERTY  VALUE     SOURCE
bpool  autotrim  off        local
rpool  autotrim  off        local

Wie man sehen kann, gibt es die beiden ZFS Pools mit den Namen bpool und rpool. Auf beiden ist autotrim deaktiviert. Zum Aktivieren ist folgender Befehl nötig:

$ zpool set autotrim=on bpool
$ zpool set autotrim=on rpool

Wenn man nun prüft, ob es aktiviert ist:

$ zpool get autotrim bpool rpool
NAME   PROPERTY  VALUE     SOURCE
bpool  autotrim  on        local
rpool  autotrim  on        local

Sollte man dieses bestätigt bekommen.

Einen kleinen Tipp habe ich darüber hinaus zusätzlich noch. Wenn eine SSD an den Strom angeschlossen wird, ohne dass ein „Computer“ angeschlossen ist, fallen viele SSD in eine Art Wartungs- / Reparaturmodus. Dann sortieren SSDs selbstständig ihre Speicherzellen um. Wenn also einmal etwas in den ersten Speicherbereich geschrieben wurde, ist dieses nicht gleichbedeutend, dass es für immer in nur diesem Bereich liegen bleibt. Im laufenden Betrieb wird dieses verschoben, wenn die SSD (wie beschrieben) nur am Strom angeschlossen ist forciert man dieses zusätzlich bei vielen SSDs. Einfach 2 / 3 Stunden „laufen“ lassen… Hin und wieder lassen sich über diesen Weg „tote“ SSDs wiederbeleben. Alles funktioniert natürlich mit TRIM viel besser 😀

Frage? Dann fragen..

Linux Mint 20.1: Verschlüsselten ZFS-Root-Pool während der Installation einrichten​

Zu ZFS und warum man es haben will, muss ich hier sicher nicht mehr viel schreiben. Ebenfalls wird sich niemand mehr die Frage stellen, warum man seine Festplatte verschlüsseln möchte.

ABER wenn man nun Linux, ZFS und Verschlüsselung kombinieren möchte, dann gibt es etwas, worüber es sich zu schreiben lohnt. Wie man nun also sehr einfach unter sein Linux Mint >= 20.x einen native encryptet zfs root pool bekommt, darum geht es hier.

Linux ZFS Encryption enter password.

Linux Mint bringt seit Version 20 bereits alles mit um dieses ohne besonderen Aufwand zu erledigen. Natürlich ging es bereits schon früher, nur war es dann fast nur über den Weg möglich, die Festplatte inkl. Grub vollständig von Hand vor und während der Installation selbst fertig zu machen. Dieses ist… Sagen wir mal… „Für den erweiterten Anwender schon fast nicht zu machen“.

Zurück zu Linux Mint 20.x!

Wie erwähnt bringt diese Version alles Nötige mit, nur der Installer ist noch nicht ganz so weit und man muss ihm mit zwei Kleinigkeiten unter die Arme greifen. Einmal muss man die nötigen Pakete im Live-System nachinstallieren. Also einfach die gewünschte Version von Linux mit downloaden und davon booten. Ist man im Live-System angekommen, öffnen man ein Terminal und wirft die Installation der Pakete mit folgendem Befehl an:

sudo aptitude -y install libzfs2linux zfs-initramfs zfsutils-linux zfs-zed

Möchte man nun einfach nur sein Linux Mint auf einem ZFS Pool installieren, ist man schon fertig. Einfach den Installer starten und beim Punkt, auf welche Festplatte man sein neues System installieren möchte auf Advanced features… klicken und unten auf EXPERIMENTAL: Erase disk and use ZFS. Fertig ist!

Möchte man noch seinen zroot Pool verschlüsseln fehlt noch die zweite Kleinigkeit. Da der Installer den Wunsch und somit ebenfalls das Kennwort zur Verschlüsselung des ZFS Pools nicht abfragt, muss man es dem Installer mitgeben, bevor er mit seiner Arbeit startet. Dazu bleibt man im Terminal und editiert das Installerscript wie folgt:

sudo vi /usr/share/ubiquity/zsys-setup

Hier sucht man nun die Sektion, in welcher es ums Anlegen der ZFS Pools geht ?zpool create wäre eine gute Suche 😉

Hat man dieses gefunden (derzeit sollte es genau zwei Mal im Installerscript auftauchen) setzt man einfach vor das zpool create des rpools ein:

echo 'SUPER-SECURE' | 

Die Hochkomma bleiben dabei stehen und ihr ersetzt SUPER-SECURE durch euer gewünschtes Kennwort, was sich natürlich schon jeder gedacht hat. Damit wird dem zpool create rpool später im Installationsprozess euer Kennwort übergeben.

Fehlen nur noch die Optionen beim Erstellen des Pools, damit er ihn auch verschlüsselt. Dafür bitte folgendes vor die Zeile -O mountpoint=/ -R „${target}“ rpool „${partrpool}“ eintragen:

-O encryption=aes-256-gcm \
-O keylocation=prompt \
-O keyformat=passphrase \

Am Ende sieht der Ausschnitt also beispielhaft wie folgt aus:

echo 'Kennwort!' | zpool create -f \
        -o ashift=12 \
        -O compression=lz4 \
        -O acltype=posixacl \
        -O xattr=sa \
        -O relatime=on \
        -O normalization=formD \
        -O mountpoint=/ \
        -O canmount=off \
        -O dnodesize=auto \
        -O sync=disabled \
        -O encryption=aes-256-gcm \
        -O keylocation=prompt \
        -O keyformat=passphrase \
        -O mountpoint=/ -R "${target}" rpool "${partrpool}"

Das war es auch schon. Jetzt, wie gewohnt den Installer starten und schon wird man nach dem Reboot aufgefordert seinen ZFS Pool mit einem Kennwort zu entschlüsseln. Oh, geht natürlich so mit EFi und lagacy und überhaupt….

Ob alles so funktioniert hat, wie man es sich vorstellt, lässt sich direkt nach dem ersten Boot ins neue System prüfen. Einfach Terminal öffnen und mittels folgender Befehle prüfen, ob die Verschlüsselung aktiviert ist und sich auch sauber durch den Pool bis zu den Benutzerdaten weiter vererbt hat:

test@test-VirtualBox:~$ sudo zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
bpool  1,38G  97,3M  1,28G        -         -     0%     6%  1.00x    ONLINE  -
rpool  26,5G  4,46G  22,0G        -         -     3%    16%  1.00x    ONLINE  -
test@test-VirtualBox:~$ sudo zpool get feature@encryption
NAME   PROPERTY            VALUE               SOURCE
bpool  feature@encryption  disabled            local
rpool  feature@encryption  active              local
test@test-VirtualBox:~$ sudo zfs get encryption rpool/USERDATA/test_9d9i92
NAME                        PROPERTY    VALUE        SOURCE
rpool/USERDATA/test_9d9i92  encryption  aes-256-gcm  -
test@test-VirtualBox:~$

Hier noch Bilder zum Klicken, das mögen ja viele.

Fragen? Dann fragen…

FreeBSD: Native ZFS Encryption einrichten und nutzen

FreeBSD portierte bisher seinen ZFS Zweig von Illumos. Dieses wechselt nun zu ZFS on Linux. Was es für mich so spannend macht ist der Verschlüsselungssupport. ZFS on Linux bietet diesen bereits und somit wird er wohl auch bald für FreeBSD zur Verfügung stehen 🙂

Gerade eben lese ich eine E-Mail von Kris Moore auf der FreeBSD-Current Mailingliste. In der E-Mail werden zwei ISO Images genannt welche es ermöglichen FreeBSD mit ZFS on Linux zu testen. \o/ Natürlich ist es nicht die Version welche am Ende „drin“ sein wird und es ist nichts was man auch nur im Ansatz produktiv einsetzten kann/sollte. ABER testen soll man es ja und ich möchte unbedingt mal die Verschlüsselung sehen!

Daher habe mich mir die gepatchte FreeBSD13 Version einmal herunter geladen: https://pkg.trueos.org/iso/freebsd13-zol/FreeBSD13-ZoL-20190418-x64.iso

Zuletzt habe ich den Einsatz unter Solaris beschrieben. Nun also einmal ganz kurz und knapp in FreeBSD 🙂

Erstellen eines neuen Datasets:

root@freebsd13-zol:~ # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase usbpool/test01
Enter passphrase:
Re-enter passphrase:

Als Art der Verschlüsselung habe ich hier aes-256-gcm gewählt und der Schlüssel soll als passphrase von mir eingegeben werden. Nachdem ich mein passphrase eingegeben habe wird das neue Dataset erstellt und direkt für mich ein gehangen, wie man es gewohnt ist:

root@freebsd13-zol:~ # zfs list usbpool/test01
NAME             USED  AVAIL     REFER  MOUNTPOINT
usbpool/test01    99K   899G       99K  /usbpool/test01
root@freebsd13-zol:~ # zfs get encryption usbpool/test01
NAME            PROPERTY    VALUE        SOURCE
usbpool/test01  encryption  aes-256-gcm  -
root@freebsd13-zol:~ # zfs get mounted usbpool/test01
NAME            PROPERTY  VALUE    SOURCE
usbpool/test01  mounted   yes      -

Da ein passphrase von mir jeweils eingegeben werden muss, kann dieses Dataset bei einem reboot oder impot/export nicht automatisch eingehangen werden.

root@freebsd13-zol:~ # zpool export usbpool
root@freebsd13-zol:~ # zpool import usbpool
root@freebsd13-zol:~ # zfs get mounted usbpool/test01
NAME            PROPERTY  VALUE    SOURCE
usbpool/test01  mounted   no       -

Daher muss ich dieses von Hand anstoßen.

root@freebsd13-zol:~ # zfs mount -l usbpool/test01
Enter passphrase for 'usbpool/test01':
root@freebsd13-zol:~ # zfs get mounted usbpool/test01
NAME            PROPERTY  VALUE    SOURCE
usbpool/test01  mounted   yes      -

Genau so habe ich es mir gewünscht. Schnell, einfach und unkompliziert. Ob es ebenfalls über Snapshots send/recv und mit Keyfiles usw. so arbeitet wie ich es mir wünsche, werde ich nun probieren können!

Ein verschlüsseltes Dataset anlegen zu können, erfreut mich aber jetzt schon sehr!

Fragen? Dann fragen 🙂


Update

Um Fragen zu beantworten. Ja, die Userland Tools und das Kernelmodul sind bereits in den Ports. Will man es auf einem FreeBSD 12.x RELEASE bauen funktioniert dieses nicht:

root@test:/usr/ports/sysutils/zol-kmod # make install clean
===>  zol-kmod-2019041800 needs FreeBSD 12/13 with AES-CCM support.
*** Error code 1

Stop.
make: stopped in /usr/ports/sysutils/zol-kmod

Es funktioniert sauber mit FreeBSD 13 CURRENT und dem FreeBSD 12 STABLE. CURRENT ist bei FreeBSD immer die nächste Version. Die RELEASE Versionen sind die stabilen Versionen welche auch nur noch Security und Bugfixes bekommen. Die STABLE Verstion bekommt zudem noch „Veränderungen“ mit. Ganz grob kann man es also mit Stable, Testing, Unstable bei Debian vergleichen 🙂

Der AES-CCM Support ist also nur in FreeBSD 13 CURRENT und in FreeBSD 12 STABLE im Kernel aktiviert. Man kann also nun zum Testen auf die 13 wechseln, auf die 12 Stable gehen, auf das nächste RELEASE warten, seinen Kernel neu bauen oder eines der ISOs oben probieren. Jetzt ist auch klar, warum ich die ISOs so empfehlenswert fand/finde 😀 Vor allem da das FreeBSD 12 ISO das FreeBSD 12.0-RELEASE-p3 ist und man so schon seine Produktivumgebung testen kann!

Typ-2-Hypervisor BHYVE von FreeBSD: Virtualisierung leicht gemacht

Aus euch bekannten Gründen nutze ich selbst auf meinen Desktops und Notebooks FreeBSD als OS. Zugegeben…. An bestimmten Stellen ist es ganz ohne Microsoft Systeme nicht ohne Einschränkungen möglich bestimmte Dinge zu erledigen. Echtes Word oder Excel lässt sich nur bis zu einem bestimmten Punkt „ersetzten“ vor allem wenn alle anderen damit arbeiten. Zwischen Outlook / Evolution oder OWA gibt es auch größere Unterschiede. Das Citrix XenCenter existiert so wie viele andere Software nur als Windows Version bei welcher es keinen Spaß macht diese durch Wine zu schieben….. Wie löst man dieses Problem? Richtig, mit einer VM in VirtualBox! Darf man ein Windows 10 Pro virtualisieren? Ja und nein… Man muss schon auf die passende Lizenz achten! Ähnlich ist es mit VirtualBox, hier ist der kostenlose Einsatz im Unternehmen an bestimmte Einschränkungen gekoppelt.

Alles kein Grund es nicht so zu machen. Die Windows und VirtualBox Lizenzen sind nicht unglaublich teuer und selbst mit den VirtualBox Einschränkungen könnte man sicher in vielen Fällen leben. FreeBSD kommt aber seit Version 10.0 mit einem eigenen Typ-2 Hypervisor mit dem Namen bhyve (gott ich vertippe mich immer bei dem Wort). Jetzt habe ich damit natürlich sehr neugierig experimentiert. Aber schnell gemerkt das es als VirtualBox Ersatz noch etwas Zeit benötigt. Für den täglichen FreeBSD Servereinsatz hatte ich keine Verwendung, hier lebe ich mit den jails 🙂 Inzwischen sind wir bei FreeBSD 11.1 und die Version 11.2 steht vor der Tür. Meine Windows VM hatte ebenfalls irgendein Problem mit welchem ich mich nicht beschäftigen wollte (ja ich vernachlässige sie sehr), also stand eh mal eine neue an. Mit den Basis Tools von bhyve lässt sich eine VM einrichten und nutzen. Ich würde es sogar empfehlen um die Idee dahinter zu verstehen. Für den normalen täglichen Umgang sollte man aber lieber ein Verwaltungstool nutzen. Für meinen neuen Test habe ich dieses mal auf vm-bhyve gesetzt. Weil… Na weil es in den Ports und ebenfalls direkt als binary über pkg zu bekommen ist. Ok ok, ich habe ebenfalls das Wiki in meine Überlegung einbezogen…

Im Wiki findet sich der Quickstart und ähm, ja das ist wirklich alles genau so nutzbar:

1. pkg install vm-bhyve [grub2-bhyve uefi-edk2-bhyve]
2. zfs create pool/vm
3. echo 'vm_enable="YES"' >> /etc/rc.conf
4. echo 'vm_dir="zfs:pool/vm"' >> /etc/rc.conf
5. vm init
6. cp /usr/local/share/examples/vm-bhyve/* /mountpoint/for/pool/vm/.templates/
7. vm switch create public
8. vm switch add public em0
9. vm iso ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-bootonly.iso
10. vm create myguest
11. vm [-f] install myguest FreeBSD-10.3-RELEASE-amd64-bootonly.iso
12. vm console myguest

Für meine Windows VM habe ich nur ein paar Dinge leicht anfassen müssen.

Die ISO hatte ich bereits auf meinem System liegen und schnell mit folgendem Aufruf „importiert“:

vm iso /home/kernel/Download/windoof-iso.iso

Das virtualisierte Windows benötigt am Ende noch Treiber für die Netzwerkkarte. Dabei passt der virtio-net Driver den ich erst heruntergeladen und dann direkt importiert habe:

fetch https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.149-1/virtio-win-0.1.149.iso
vm iso /home/kernel/Download/virtio-win-0.1.149.iso

Dann die eigentliche VM aus dem mitgelieferten Template erstellen:

vm create -t windows -s 200G windoof

Durch das Template kommt die VM mit 2 CPUs und 2GB RAM. Die Systemplatte hat durch meine Option -s 200G eine Größe von 200GB. Da ich die Installation aber irgendwie durchführen muss und ich gerne doch 4 CPUs mit 8GB RAM hätte änderte ich die Konfiguration der VM direkt wie folgt ab:

vm configure windoof

uefi="yes"
cpu=4
memory=8G
graphics="yes"
graphics_port="5999"
graphics_listen="127.0.0.1"
graphics_res="1280x1024"
graphics_wait="auto"
xhci_mouse="yes"
network0_type="virtio-net"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
uuid="c36583eb-739e-11e8-8176-ecf4bb47c54c"
network0_mac="58:9c:fc:01:41:8a"

So und nun nur noch VM starten und ISO „einlegen“:

vm install windoof windoof-iso.iso

Nun einfach mit einem VNC Viewer der Wahl mit 127.0.0.1:5999 verbinden und Windows installieren. Nachher wieder über vm install die ISO mit den Netzwerktreibern „einlegen“ und Windows einfach dort die Netzwerkkartentreiber suchen lassen, klappt prima. Ich habe dann einfach für meinen Benutzer rdp aktiviert und verbinde mich für alles Zukünftige einfach über rdp mit der VM. Fertig is 🙂

An / aus / snapshot usw. läuft alles über vm. So zum Beispiel auch die Übersicht über alle laufenden VMs:

vm list
NAME            DATASTORE       LOADER      CPU    MEMORY    VNC                  AUTOSTART    STATE
windoof    default         uefi        4      8G        -                    No           Running (10638)

Im Grunde absolut selbsterklärend, oder? Bei mir rennt nun seit einigen Tagen die VM so und ich brauche kein VirtualBox mehr \o/ Fragen? Dann Fragen 🙂

Read- und Write-Latency mit ioping messen: So geht’s

Um die Performance von irgendwelchen Datenträgern / Netzlaufwerken usw. zu messen gibt es sehr viele verschiedene Tools. bonnie++ ist hier ein gutes Beispiel. Möchte man nur „mal schnell“ die read-/write latency messen und ein paar grobe Infos zu den IOPs haben kann ich hier ioping empfehlen.

Ein Beispiel zum messen der read latency:

➜  ~ ioping -s 256k -T 120 -D -c 20 ./
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=1 time=16.0 us (warmup)
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=2 time=35.7 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=3 time=45.8 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=4 time=46.3 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=5 time=43.4 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=6 time=46.8 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=7 time=41.2 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=8 time=41.7 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=9 time=47.7 us (slow)
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=10 time=42.4 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=11 time=41.8 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=12 time=41.1 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=13 time=48.8 us (slow)
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=14 time=47.1 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=15 time=42.8 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=16 time=47.9 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=17 time=50.5 us (slow)
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=18 time=52.8 us (slow)
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=19 time=44.6 us
256 KiB <<< ./ (zfs tanksmeer/usr/home): request=20 time=45.3 us

--- ./ (zfs tanksmeer/usr/home) ioping statistics ---
19 requests completed in 853.7 us, 4.75 MiB read, 22.3 k iops, 5.43 GiB/s
generated 20 requests in 19.0 s, 5 MiB, 1 iops, 269.2 KiB/s
min/avg/max/mdev = 35.7 us / 44.9 us / 52.8 us / 3.85 us

ioping liest hier jeweils 256k (-s 256k), ignoriert alles was länger brauch als die angegebene Zeit (-T 120), macht es als direct IO ohne cache (-D), dieses insg. 20 mal in Folge (-c 20) und einfach im aktuellen Pfad (./).

Die Zusammenfassung ist ähnlich wie bei ping 🙂

Ein Beispiel zum messen der write latency:

➜  ~ ioping -s 256k -T 120 -D -W -c 20 ./
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=1 time=27.0 us (warmup)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=2 time=54.4 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=3 time=60.6 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=4 time=65.5 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=5 time=57.8 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=6 time=74.0 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=7 time=65.5 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=8 time=65.3 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=9 time=70.9 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=10 time=70.7 us
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=11 time=2.65 ms (slow)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=12 time=71.8 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=13 time=64.5 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=14 time=77.0 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=15 time=63.3 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=16 time=67.4 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=17 time=51.6 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=18 time=82.9 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=19 time=81.5 us (fast)
256 KiB >>> ./ (zfs tanksmeer/usr/home): request=20 time=56.2 us (fast)

--- ./ (zfs tanksmeer/usr/home) ioping statistics ---
19 requests completed in 3.86 ms, 4.75 MiB written, 4.93 k iops, 1.20 GiB/s
generated 20 requests in 19.0 s, 5 MiB, 1 iops, 269.5 KiB/s
min/avg/max/mdev = 51.6 us / 202.9 us / 2.65 ms / 577.9 us

Richtig… Hier ist nur ein -W dazu gekommen!

So lässt sich schnell und einfach ein Eindruck über die aktuelle Performance von einem „Filesystem“ erlangen. Einfach um zu sehen ob es sich unter Last anders verhält oder ähnliches.

Viel Spaß und bei Fragen, einfach fragen.

ZFS send/recv Fehler: ‚Cannot receive incremental stream‘ – Lösung

Tach auch… Heute mal wieder etwas zum Thema ZFS (anscheinend wohl im Moment gefragt…)

Wenn man ZFS Volumes abgleichen möchte hilft einem bekanntermaßen ja zfs send / revc. Möchte man noch eine gewisse Historie am Ziel oder es handelt sich um recht große Volumes, dann freut man sich sehr über die Möglichkeit nur die Differenz zwischen zwei Snapshots abgleichen zu müssen.

Als kleines Beispiel:

Ich habe eine FreeBSD Jail für subsonic. In dieser liegen einfach die gesamten Mediafiles, was weiß ich.. Sagen wir mal 100GB. Vom Volume werden dann automatisch per zfsutils snapshots erstellt. Die wöchentlichen snapshots davon möchte ich nun gerne per SSH auf ein anderes System schieben, einfach um die Daten so „gesichert“ zu haben. Jedes System steht dann vielleicht noch in der Colocation in einem anderen DataCenter. Einmal die Woche 100GB abgleichen, das sind dann im Monat 400GB (ja, viel ist anders aber es ist ein reales Beispiel).

Initial pumpt das Skript nun also die 100GB rüber. Ich schreib mal den Befehl ohne Variablen zur besseren Lesbarkeit, ok?

zfssend@system01:~ # zfs send zroot/jails/subsonic@zfs-auto-snap_weekly-2015-06-14-00h14 | ssh zfsrecv@system02 zfs recv zroot/backup/bsd02/subsonic

So jetzt habe ich also auf der zweiten Kiste eine 1a Kopie der Jail. Ab dem Moment muss ich nun nur noch die Differenz zum nächsten Snapshot übertragen mit einem:

zfssend@system01:~ # zfs send -i zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-12-00h14 zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-19-00h14 | ssh zfsrecv@system02 zfs recv zroot/backup/bsd02/subsonic

Dieses funktioniert natürlich nur so lange die Daten im Ziel nicht verändert werden. Klar wie bei jeder Datensicherung die auf Inkrementen beruht. Ändere ich eines sind die nachfolgenden nicht mehr konsistent. Wie könnte nun so eine Änderung passieren? Ganz einfach ich renne in dem Filesystem herum und ändere Daten oder lege neue an. Was viele übersehen ist etwas wie atime. Also das einfache speichern der Information: Wann wurde die Datei zuletzt angefasst. Dieses würde schon als Änderung reichen um folgendes zu bekommen:

zfssend@system01:~ # zfs send -i zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-12-00h14 zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-19-00h14 | ssh zfsrecv@system02 zfs recv zroot/backup/bsd02/subsonic
cannot receive incremental stream: destination zroot/backup/bsd02/subsonic has been modified
since most recent snapshot
warning: cannot send 'zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-19-00h14': signal received

Und nun ist Essig mit der schönen Sicherung und man muss wieder Initial alles rüber schieben? Jain… Natürlich kann man dem zfs recv einfach mitteilen die Änderung zu ignorieren. Denn der snapshot ist dem Ziel ja bekannt. Also kann man dem Ziel sagen: der bestehende snapshot zählt, ignoriere als was danach passiert ist und gleiche das Delta zum aktuellen ab:

zfssend@system01:~ # zfs send -i zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-12-00h14 zroot/jails/subsonic@zfs-auto-snap_weekly-2017-03-19-00h14 | ssh zfsrecv@system02 zfs recv -F zroot/backup/bsd02/subsonci

Ein -F ist hier also unser Freund. Hat man alles sauber geskriptet und ebenfalls nicht vergessen im Ziel hin und wieder die alten snapshots aufzuräumen, sollte man damit schon eine ganz brauchbare Datensicherheit haben!

Viel Spaß!

FreeBSD 11 kommt…

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

FreeBSD und ZFS – automatische Snapshots

Es gibt auf FreeBSD mehrere Möglichkeiten um ZFS Snapshots zu automatisieren. Ich selbst nutze sehr gerne die zfstools (sysutils/zfstools). Dieses orientiert sich nämlich an der Automatisierung von Solaris / Opensolaris. Liegt mir am nächsten und kann sogar konsistente Snapshots einer MySQL oder auch PostgreSQL erstellen.

Die zfstools sind als binary oder aus den Ports flott installiert:

root@errorlap ~> pkg install zfstools

Nach der Installation füttert man noch schnell seine /etc/crontab:

# 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

Ggf. muss die Path Variable in der crontab noch erweitert werden:

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

Fehlt nur noch dieses ebenfalls im jeweiligen ZFS Volume zu aktivieren. Auf meinem Notebook reicht es mir für das Homevolume:

root@errorlap ~> zfs set com.sun:auto-snapshot=true zroot/usr/home

Ab diesem Moment werden nun ZFS Snapshots für mein(e) home(s) erstellt. Im Standard werden dabei folgende Snapshots vorgehalten:

– Ein Snapshot alle 15 Minuten, dabei werden 4 Snapshots vorgehalten.
– Ein Snapshot jede Stunde, dabei werden 24 Snapshots vorgehalten.
– Ein Snapshot jeden Tag, dabei werden 7 Snapshots vorgehalten.
– Ein Snapshot jede Woche, dabei werden 4 Snapshots vorgehalten.
– Ein Snapshot jeden Monat, dabei werden 12 Snapshots vorgehalten.

Für meine Zwecke ist diese absolut ausreichend. Über diesen Weg komme ich sehr schnell und einfach wieder an einen alten Stand 🙂

kernel@errorlap ~> 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	-
zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-12h15	12,6M	-	83,9G	-
zroot/usr/home@zfs-auto-snap_frequent-2016-05-19-12h30	13,7M	-	83,9G	-

Möchte man eine Datenbank damit „sichern“ muss dieses speziell für das Datenbankvolume angegeben werden:

root@errorlap ~> zfs set com.sun:auto-snapshot=postgresql DATASET

Im Grunde muss es nicht erwähnt werden…. Aber eine Datensicherung auf dem gleichen System ist keine echte Datensicherung 😛 Man könnte jetzt aber diese Snapshots mit einem zfs send  verbinden und somit die Snapshots replizieren.

FreeBSD auf dem Desktop: Grundinstallation mit MATE Desktop

Ja, meine Posts schlafen in der letzten Zeit etwas 🙁

Um wieder etwas zu schreiben und auch ein paar Wünschen entgegen zu kommen, hier nun etwas zu FreeBSD auf dem Desktop. Das Windows und MAC Benutzer immer etwas irritiert auf die fertige Grundinstallation von einem FreeBSD schauen wundert sicher nicht. Linux Benutzer schauen aber oft ebenfalls etwas „überrascht“….

FreeBSD als Serversystem, damit können sich Linuxuser ja noch einlassen…. Aber als Desktop? Dinge wie VPN, LAN oder WLAN plötzlich wieder selbst konfigurieren müssen… Oder dem Benutzer erst die Rechte zu geben um eine CD brennen zu können, das kennen auch Linuxuser kaum noch. In dieser usability hängt FreeBSD auch noch ein paar Jahre hinter Linux. Nun kann man sich darüber streiten! 2016 sollten bestimmte Dinge einfach gegeben sein. Ich persönlich empfinde es aber als sehr angenehm. Früher habe ich lange mit einem Opensolaris auf dem Desktop gearbeitet. Dieses ist inzwischen leider vollständig von FreeBSD verdrängt worden. Opensolaris ist einfach inzwischen ZU weit weg um auf einem Desktop sinnvoll betrieben zu werden 🙁

Ein FreeBSD bietet mir noch immer das gute alte Unixgefühl, ich habe direkt ein sauberes ZFS unter den Füßen und die für mich wichtigen Anwendungen laufen alle sauber und Problemlos unter FreeBSD und mit so einem Ubuntu bin ich noch nie richtig warm geworden. Ich würde selbst bei einem Linuxdesktop am Ende wieder bei einem Gentoo oder ähnlichem landen.

Screenshot vom FreeBSD Desktop

Es sollte aber um die Grundinstallation gehen, nein nicht mit Screenshots bis zum Login…. Ich meine eher den Punkt zwischen der fertigen FreeBSD 10.3 Installation und einem grafischen Desktop.

Der grafische Desktop soll am Ende deutsch sprechen, ein Mate sein, Firefox, Pidgin, Evolution und VLC bieten, sowie einen grafischen Login per SLIM. Also eine ordentliche Startbasis um FreeBSD einmal auf dem Desktop probieren zu können. Oh.. Wer es noch einfacher möchte kann ebenso auf PCBSD zurückgreifen. Ein wunderbares Projekt (viele der deutschen Übersetzungen sind von mir *lach*)! Um mehr mit FreeBSD zu machen dennoch nicht der perfekte Start. Es ist nicht immer SO stabil wie ich es erwarten würde und nimmt dem User dann doch etwas zu viel ab. Kommt den Erwartungen von Linuxusern dafür sehr nahe!

Zurück zum Thema..

Ist die Grundinstallation vom FreeBSD erledigt, hängt man auf dem root Login in der Konsole. Wenn ich nun von einer funktionstüchtigen Internetverbindung ausgehe, bringt einen folgendes zu einem Desktop:

root@errorlap:~ # pkg install mate-desktop mate xorg pidgin evolution firefox libreoffice-i18n de-aspell de-hunspell gimp cups cups-pdf gutenprint-cups icedtea-web openjdk8 xchat cream sudo

Als erstes wird FreeBSD versuchen sich den aktuellen Quellenstand aus dem Internet zu holen. Im Anschluss wird es beginnen die nötigen Pakte zu laden und zu installieren. Die Zeile ist dabei selbsterklärend, oder?

Ist die Installation durch müssen ein paar Einstellungen vorgenommen werden!

Mit dem vi füttert man nun die Datei /etc/rc.conf mit folgenden Informationen:

# Use German (ISO8859-15) console fonts
font8x8="iso15-8x8"
font8x14="iso15-8x14"
font8x16="iso15-8x16"

#dbus and hald for our Desktop
dbus_enable="YES"
hald_enable="YES"

#Activate slim
slim_enable="YES"

# Disable line printer daemon
lpd_enable="NO"

# Enable CUPS
cupsd_enable="YES"

# Clean temporary files.
clear_tmp_enable="YES"
clean_tmp_X="YES"

#activate new devfsrules
devfs_system_ruleset="devfsrules_common"

Ich gehe es mal der Reihe nach durch. Da keymap=“german.iso.kbd“ bereits in der rc.conf gesetzt sein sollte fehlen nur noch die richtigen Schriftarten in der Konsole um alles passen darstellen zu können. Dbus und hald sorgt dafür das unser Desktop am Ende mit allem so wunderbar sprechen kann. Damit slim auch beim Boot gestartet wird muss es aktiviert werden. Drucken wollen wir über cups und zur Sicherheit deaktivieren wir die Konkurrenz. Desktops müllen immer alles gerne voll, temp aufräumen kann da helfen. Um mit unserem Benutzer auf verschiedene Hardware zugreifen zu können, muss er die Rechte bekommen. Dieses wird später über erweiterte devfsrules gesetzt. Damit diese angewendet werden, muss es aktiviert werden!

Wir wollen später deutsch sprechen am einfachsten lässt sich dieses den einzelnen Logins mitgeben, wenn diese Information einfach angepasst für den einzelnen Benutzer mitgegeben wird. Unter FreeBSD legt in der /etc/login.conf Verschiedene „Logingruppen“ an und weißt diese dann später den jeweiligen Benutzern zu, wenn sie greifen sollen.

german|German Users Accounts:\
      :charset=UTF-8:\
      :lang=de_DE.UTF-8:\
      :tc=default:

Diese Änderung muss dem System noch bekannt gemacht werden:

root@errorlap:~ # cap_mkdb /etc/login.conf

Dem jeweiligen Benutzer kann man es nun einfach per vipw zuweisen:

kernel:supertoller-pw-hash:1001:1001:german:0:0:Sebastian van de Meer:/home/kernel:/usr/local/bin/fish

Wie zu erkenne ist, nutzt ich als shell derzeit gerne fish! Solltet ihr ebenfalls mal ausprobieren. Ich mag sie 🙂

xorg soll am Ende ebenfalls eine deutsche Tastatur anbieten, also bitte folgende Datei erstellen:

/usr/local/etc/X11/xorg.conf.d/keyboard-de-nodeadkeys.conf

Section "InputClass"
	Identifier	"KeyboardDefaults"
	Driver		"keyboard"
	MatchIsKeyboard	"on"
	Option		"XkbLayout" "de"
	Option		"XkbVariant" "nodeadkeys"
EndSection

Was fehlt noch? Oh ja, Benutzerrechte für die Hardware:

/etc/devfs.rules

[devfsrules_common=7]
add path 'ad[0-9]\*'		mode 666
add path 'ada[0-9]\*'	mode 666
add path 'da[0-9]\*'		mode 666
add path 'acd[0-9]\*'	mode 666
add path 'cd[0-9]\*'		mode 666
add path 'mmcsd[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 'usbctl'		mode 666
add path 'usb/\*'		mode 666
add path 'lpt[0-9]\*'	mode 666
add path 'ulpt[0-9]\*'	mode 666
add path 'unlpt[0-9]\*'	mode 666
add path 'fd[0-9]\*'		mode 666
add path 'uscan[0-9]\*'	mode 666
add path 'video[0-9]\*'	mode 666
add path 'tuner[0-9]*'  mode 666
add path 'dvb/\*'		mode 666
add path 'cx88*' mode 0660
add path 'cx23885*' mode 0660 # CX23885-family stream configuration device
add path 'iicdev*' mode 0660
add path 'uvisor[0-9]*' mode 0660

Ebenfalls verständlich und logisch, richtig? Japp 😀

Wie unter Linux sollte der Benutzer in der Gruppe wheel sein um per su zum root wechseln zu können (nur falls mal jemand sucht..). Ebenfalls haben wir zwar sudo installiert, der Benutzer sollte aber noch per visudo die Möglichkeit bekommen es zu benutzen:

##
## User privilege specification
## 
root ALL=(ALL) ALL
kernel ALL=(ALL) ALL
root@errorlap:~ # pw groupmod wheel -m kernel

Im Grunde sollte es damit schon einen nutzbaren Desktop geben. Wer noch weitergehen möchte, ich habe da noch ein paar Dinge in meiner /boot/loader.conf die helfen könnten:

# Use new graphical console driver
kern.vty=vt

# Devil worship in loader logo
loader_logo="beastie"

# Boot-time kernel tuning
kern.ipc.shmseg=1024
kern.ipc.shmmni=1024
kern.maxproc=10000

# Load MMC/SD card-reader support
mmc_load="YES"
mmcsd_load="YES"
sdhci_load="YES"

# Filesystems in Userspace
fuse_load="YES"

# Intel Core thermal sensors
coretemp_load="YES"

# In-memory filesystems
tmpfs_load="YES"

# Asynchronous I/O
aio_load="YES"

# Handle Unicode on removable media
libiconv_load="YES"
libmchain_load="YES"
cd9660_iconv_load="YES"
msdosfs_iconv_load="YES"
snd_driver_load="YES"


cuse4bsd_load="YES"
linux_load="YES"
drm_load="YES"
drm2_load="YES"
iicbus_load="YES"

# Tune ZFS Arc Size - Change to adjust memory used for disk cache
vfs.zfs.arc_max="2048M"

Im Grunde findet sich aber für alles eine recht gute Anleitung. Auch wenn man jetzt Nvidia Karten nutzen möchte oder Virtualbox braucht! Ein wirklich ganz wichtiger Punkt für ein BSD (egal ob FreeBSD / NetBSD usw…) ist die Dokumentation. Wie auch bei einem Solaris oder beim guten alten Unix ist die Dokumentation nicht nur vollständig, sondern auch aktuell, richtig, ausführlich und sehr gut! Bei Linux ist die Dokumentation auch… sagen wir mal „ok“ ABER sie ist nicht immer vollständig, nicht immer aktuell, auch gerne mal nicht ganz korrekt und nicht immer so ausführlich, wie sie sein sollte.

Beim nächsten mal dann vielleicht wirklich etwas zu nvidia, virtualbox, den Ports oder ähnliches!

So long…

« Ältere Beiträge

© 2025 -=Kernel-Error=-

Theme von Anders NorénHoch ↑