Eduard Prezer Logo
DJ Fotografie Über mich Links Blog Gästebuch Impressum

Blog

Budget HeimServer / NAS auf Basis eines Gigabyte MJ11-EC1 Boards

Da mein alter Heimserver auf HP Microserver N40L Basis schon seit mehr als 10 Jahren zuverlässig seinen Dienst verrichtet, habe ich mir in letzter Zeit oft Gedanken über eine Ablösung gemacht. 

Kriterien wie ausreichend ECC-Ram und eine zeitgemäße Rechenleistung standen dabei von vorneherein fest, da ich weiterhin bei FreeNAS bzw. mittlerweile "TrueNAS" bleiben möchte. 
Ursprünglich habe ich eigentlich mit einem System auf Basis eines Intel i3 oder Xeon E3 geliebäugelt und hier die Preise beobachtet. Leider fangen brauchbare Mainboards mit genügend Festplattenanschlüssen preislich erst bei ca. 250-350€ an und einen passenden Prozessor benötigt man dann auch noch. Eine separate PCIe HBA (PCIe SATA Controller) wollte ich vermeiden da dies direkt ab Werkszustand schon einen erhöhten Strombedarf bedeutet und das Gerät eigentlich 24/7 laufen soll. 

Passende Hardware

Durch Zufall bin ich darauf aufmerksam geworden dass ein deutscher Händler wiederaufbereitete Mainboards (Gigabyte MJ11-EC1) für knapp 70€ anbietet, welche wie perfekt auf meine Anforderungen passen. Ursprünglich kommen diese Mainboards wohl von Gigabyte G431-MM0 Server Systemen, welche eigentlich für GPU-Rechencluster eingesetzt werden. Durch die nativ vorhanden 8 SATA/SAS Ports eignet es sich allerdings auch super als Basis für eine NAS bzw. einen Heimserver.

Das besondere an diesem Gigabyte MJ11-EC1 Mainboard ist dass es von Haus aus folgendes bietet:

  • 8x SATA 6G (davon 4 über einen SFF-8654 4i SlimSAS Anschluss), hotswap fähig
  • 2x Gigabit LAN mit Intel Chipsatz (I210-AT)
  • 4x DIMM Slots (max 128GB) die sowohl als Registed ECC als auch Unbuffered ECC betrieben werden können
  • AMD EPYC 3151 CPU (4-Core/8-Thread 45W TDP), welche relativ sparsam aber auch Leistungsfähig genug ist um auch Virtualisierungsaufgaben zu meistern
  • M.2 SSD-Steckplatz für OS oder ZFS Cache
  • PCIe x8 über einen SFF-8654 8i SlimSAS Anschluss (für zukünftige 2,5/5/10GBit Netzwerkkarte oder ähnliches)
  • IPMI Management (KVM Zugriff übers Netzwerk) mit dediziertem LAN Port

Hardwarezusammenstellung (Einkaufsliste)

  • Gigabyte MJ11-EC1 (ca. 70€ generalüberholt ram-koenig)
  • Kingston Server Premier DIMM 32 GB, DDR4-2666, CL19-19-19, ECC - KSM26ED8/32MF (ca. 79€ preisvergleich) - (1 unbuffered ECC Modul verbraucht weniger als 1 RDIMM)
    oder alternativ: Crucial 16GB DDR4-2133 ECC RDIMM 1.2V CL15 CT16G4RFD4213 auf ebay
  • be quiet! SFX Power 3 450W (ca. 66€ preisvergleichHat sich leider als Enttäuschung herausgestellt. Verbraucht im Idle zu viel Strom (~30W mit 1 ECC Modul und einer M.2 SSD).
  • SeaSonic 300W SSP-300SFG 80+Gold (ca. 70€ preisvergleich) - ca 24W im Idle mit 1 32GB ECC Modul und einer M.2 SSD
  • 4x SATA auf 4x SATA Kabelpeitsche (ca. 13€ amazon) - (Günstiger und besser zu verlegen als 4 einzelne SATA Kabel)
  • SFF-8654 4i auf 4xSATA 6G (ca. 18€ amazon)
  • Jonsbo N3 schwarz, Mini-ITX Gehäuse, 8x 3,5" Fesplatten Einschübe mit SATA/SAS Backplane und Platz für ein SFX Netzteil (ca. 156€ preisvergleich)

Alles in allem mit ~ 406€ (zzg. SSDs/HDDs) ein hervorragender Preis für einen Heimserver der folgende Erwartungen erfüllen soll:

Erwartungen

  • Performanter und zuverlässiger Betrieb von TrueNAS Scale
  • Performante Bereitstellung von Speicher via SMB/Samba Protokoll und diverse andere Protokolle
  • Virtualisierung von Applikationen auf Docker/Kubernetes Basis
  • Bis zu 8 konventionelle mit 6Gbit/s angebundene 3,5" SATA Festplatten
  • Eine M.2 SSD als Systemlaufwerk oder SSD-Cache möglich
  • 3 noch freie RAM Slots. Maximal 128GB RAM möglich
  • Zukünftig eine Option zur Hardware-Erweiterung per PCIe x8 über einen SFF-8654 8i Adapter

Aufbau und Inbetriebnahme

Das Board kommt zunächst mit dem ATX24 Adapterstecker und dem Original Server Lüfter (nicht unbedingt Leise). Nach Sichtprüfung und provisorischen Anschluss an ein Netzteil, folgt erstmal der obligatorische Memtest über ein USB Stick.
Zu beachten ist dass die blauen Bänke immer zuerst bestückt werden müssen. Steht so auch in der Mainboard Anleitung. 

Erfreulicherweise sind bei diesem Board die SATA Anschlüsse so durchnummeriert wie sie auch verbaut sind. Aus Richtung der RAM Bänke aus gesehen nummerisch aufsteigend.

Eine M.2 in voller 80mm Länge passt direkt aufs Board. 

Leider passt die Belegung der Front Panel Anschlüsse des Jonsbo N3 Gehäuse nicht direkt zum Mainboard, so dass man hier eigene PIN Header basteln muss.

Momentan ist noch provisorisch ein übrig gebliebener 120mm Lüfter mit nur einer Schraube befestigt.
Ich werde mir hier noch überlegen ob ich einen passenderen Lüfter und vielleicht einen 3D-gedruckten Lüfteradapter (60mm auf 120mm) umbaue.
Eigentlich ist der 120er auch mit nur einer Schraube ziemlich fest drauf da er hinten auf den Ports zufälligerweise absolut Plan aufliegt und kühlt so auch noch gut die SSD mit.

Updates und Grundeinstellungen

IPMI / BMC

Für das IPMI / BMC hingegen gibt es eine aktualisierte Version (12.61.17). Den download direkt von Gigabyte findet man hier

Im entpackten Archiv einfach die Datei "rom.ima_enc" aus dem Ordner "fw" über IPMI unter Maintenance > Firmware Update hochladen.

BIOS

Für das BIOS gibt es leider kein Update auf der Herstellerseite. Auf meinen beiden gekauften Mainboards war die Version F09 aufgespielt.
Ich habe diese vorsichtshalber mal gesichert und hier bereitgestellt: Original BIOS MJ11-EC1 Version F09

BIOS Einstellungen

In den Werkseinstellungen ist SMT (Multithreading) deaktiviert (nur 4 physische CPU-Kerne aktiv).
Unter AMD CBS die Option SMTEN auf Enabled aktiviert SMT. Damit lassen sich alle 8 logischen CPU-Kerne/Threads nutzen.

Gegebenenfalls nicht benötigte Netzwerkkarten lassen sich deaktivieren

C-States (automatisches runter-takten von CPU Kernen) aktivieren (nur C1 bis C3 vorhanden)

Optionale BIOS Einstellungen

Nicht benötigte Optionen und Optionen für die das Board gar keine Anschlüsse verbaut hat deaktivieren
SDKarte MMC

Installation

Ich habe mich dazu entschlossen die M.2 SSD sowohl für das FreeNAS System als auch Datenpool für spätere Applikationen/VMs zu nutzen. Dazu habe ich folgende Anleitung benutzt.

Zusammengefasst ruft man vor Installation die Shell auf und modifiziert das Installationsskript so dass es nur 16GB statt 100% des vorhandenen Platzes nutzt. und führt dieses Skript anschließend aus.

sed -i 's/sgdisk -n3:0:0/sgdisk -n3:0:+16384M/g' /usr/sbin/truenas-install
/usr/sbin/truenas-install

Im Anschluss an die Installation kann man dann mit parted, oder einem grafischem Tool wie gparted eine zusätzliche ZFS Partition Partition erstellen, und in TrueNAS als Datenpool nutzen.

Beheben von Problemen nach der Installation

TrueNAS läuft auf dem Board erstmal nicht ganz fehlerfrei. Dazu müssen zunächst zwei mit der Epyc Plattform zusammenhängende Probleme behoben werden:

AER: Multiple Corrected error received: 0000:00:1c.4
AER: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
....

midclt call system.advanced.update '{ "kernel_extra_options": "pci=noaer" }'

  • Hotplug/Hotswap funktioniert erst bei setzen der richtigen lpm policy Kernel Optionen. (Details siehe Thomas Krenn Wiki

midclt call system.advanced.update '{"kernel_extra_options": "ahci.mobile_lpm_policy=0"}'

Zum setzen beider Optionen gleichzeitig:

midclt call system.advanced.update '{"kernel_extra_options": "pci=noaer ahci.mobile_lpm_policy=0"}'

Anschließend Neustart. Die so gesetzen Kernel Optionen sind in TrueNAS persistent und überstehen Neustarts!

Stromsparoptionen und Optimierungen

Damit das System so wenig Energie wie möglich unnötig verbraucht habe ich verschiedene Stromsparoptionen ausprobiert.
Mit den folgenden Optionen auf einen Idle Verbrauch von 22 bis 22,9W gekommen.
Dabei waren insgesamt drei 12V Lüfter am System angeschlossen, eine 1TB PM981a M.2 nvme SSD sowie die 32GB ECC RAM aus der Einkaufsliste verbaut.

Kernel Optionen

  • ahci.mobile_lpm_policy=2 erlaubt die höchsten Stromspareinstellungen an den SATA Anschlüssen, welche die EPYC Embedded Plattform beherrscht.
  • pcie_aspm=force erzwingt die Aktivierung von "Active-state power management" für alle PCIE Verbindungen.
  • pcie_aspm.policy=powersave setzt die powersave policy für alle PCIE Verbindungen.
    verursacht wohl Probleme mit manchen per pcie angebundenen Komponenten. u.a. stößt hier die zweite Intel Netzwerkkarte auf solche Fehler
    pcie_aspm=force sollte man sich in dem Fall wohl auch sparen.

Um alle Optionen mit dem Fix von weiter Oben unter Truenas Scale zu setzen:

midclt call system.advanced.update '{"kernel_extra_options": "pci=noaer ahci.mobile_lpm_policy=2"}'

Powertop, CPU gouverner und Zenstates

Zusätzlich habe ich mehrere Kommandos in TrueNAS unter Init Scripts hinterlegt die nach Systemstart ausgeführt werden:

  • cpupower frequency-set -g powersave setzt den CPU gouverner auf powersave, was maximale Einsparung bringt. Möchte man etwas dynamischer auf stärkere Lasten reagieren empfielt sich allerdings der ondemand gouverner!
  • powertop -c --auto-tune ermittelt nach systemstart automatisch mögliche Optimierungen und setzt diese
  • /root/ZenStates-Linux-master/zenstates.py -p 2 -f 24 -d 8 -v 94 && /root/ZenStates-Linux-master/zenstates.py -p 1 -f 30 -d 8 -v 80 
    Setzt mithilfe eines Python Scripts angepasste Power States für die CPU welche sowohl die Frequenz als auch die Spannung verringern. (Quelle)
    P1 = 1,2 Ghz, vCore = 0.75000 (Original 1,9Ghz)
    P2 = Idle 0,9 Ghz, vCore = 0.62500 (Original 1,2Ghz)
    Das ZenStates-Linux Script muss dazu heruntergeladen und entpackt werden. Am einfachsten geht dies mit:
    wget "https://github.com/r4m0n/ZenStates-Linux/zipball/master/" -O temp.zip && unzip temp.zip && rm temp.zip

Links und weiterführende Informationen


Datum: 15.12.2023     Zuletzt aktualisiert: 24.01.2024
Tags: truenas, MJ11-EC1, MJ11-EC0, scale, ecc, Jonsbo, mobile_lpm_policy, aer, Multiple Corrected error received, install, server, nas, epyc

Namensänderung

Da ich im Oktober geheiratet habe und einen anderen Namen angenommen habe, erhält diese Webseite eine neue Domain (stoeckle.li sowie stöckle.li).

Alte Links auf prezer.de werden automatisch umgeleitet.


Datum: 16.11.2023     Zuletzt aktualisiert: 16.11.2023
Tags: namensänderung, prezer, stöckle, stoeckle

VirtualBox lässt sich nicht auf MacOS 10.14.6 installieren und starten

Nach manchen Sicherheitsupdates, so auch bei 10.14.6 passiert es wohl dass sich VirtualBox (und auch andere Software) nicht mehr installieren lässt. Dieser Artikel zeigt eine funktionierende Lösung die man leider sonst kaum findet.

Üblicherweise bekommt man folgende Fehler zu sehen:

Kernel Driver Not Installed (rc=-1908)

Die Installation ist aufgrund eines Fehlers fehlgeschlagen

Nachdem die üblichen Lösungen wie "Erlauben von Drittherstellersoftware über Einstellungen > Sicherheit" oder "Setzen von Berechtigungen über die Kommandozeile" nicht weiterhelfen muss man etwas tiefer suchen und findet schließlich irgendwann Log-Meldungen wie:

Error making temporary directory: 1
Memory allocation failure.
Unable to stage kext (/Library/Application Support/VirtualBox/VBoxDrv.kext) to secure location.

Der Fehler liegt hier also nicht in mangelnden Berechtigungen oder falsch signierten Dateien von VirtualBox sondern an fehlerhaften Ordnerberechtigungen seitens Apple. (Quelle)

  • /private/var/db/KernelExtensionManagement/Staging Die Berechtigungen sollten 755 bzw. rwxr-xr-x sein und die Ordner müssen das Flag "restricted" haben.
  • /private/var/db/KernelExtensionManagement Die Berechtigungen sollten 755 bzw. rwxr-xr-x sein und die Ordner müssen das Flag "restricted" haben. Zusätzlich muss die Attribute com.apple.rootless gesetzt sein.

Eine Ausgabe folgender Kommandos sollte eigentlich so aussehen:

sh-3.2# ls -laO /private/var/db/KernelExtensionManagement/
total 0
drwxr-xr-x@   3 root  wheel  restricted   96  1 Sep 15:24 .
drwxr-xr-x  100 root  wheel  sunlnk     3200 22 Okt 12:08 ..
drwxr-xr-x    2 root  wheel  restricted   64 22 Okt 18:46 Staging
sh-3.2# xattr -l /private/var/db/KernelExtensionManagement/
com.apple.rootless: KernelExtensionManagement

Um fehlerhafte Berechtigungen wieder zu beheben muss der Mac im Recoverymodus neu gestartet werden. Hierzu müssen bei einem Neustart die cmd⌘ + R Tasten gleichzeitig gedrückt werden, bis der Recovery Modus gestartet ist. Im Recovery Modus muss über die Obere Leiste im Unterpunkt Dienstprogramme ein Terminal geöffnet und folgende Kommandos eingegeben werden:

chmod 755 /private/var/db/KernelExtensionManagement/
chmod 755 /private/var/db/KernelExtensionManagement/Staging
chflags restricted /Volumes/Macintosh\ HD/private/var/db/KernelExtensionManagement
chflags restricted /Volumes/Macintosh\ HD/private/var/db/KernelExtensionManagement/Staging
xattr -w com.apple.rootless /private/var/db/KernelExtensionManagement

Nach einem Neustart lässt sich VirtualBox (und andere) Software wieder wie gewohnt installieren und nutzen. Kernel Erweiterungen (kext) werden wieder erfolgreich geladen und funktionieren wie gewohnt.

 

 


Datum: 22.10.2020     Zuletzt aktualisiert: 22.10.2020
Tags: kext kernelextension VBoxDrv.kext Apple MacOS OSX VBox VirtualBox Oracle Fehler fehlgeschlagen Installation VB5E2TV963 spctl kext-consent Gatekeeper restricted KernelExtensionManagement secure

Per nginx reverse proxy auf FreeNAS 11.2 zugreifen

Wer versucht auf FreeNAS 11 (11.1 oder 11.2) per nginx reverse proxy zuzugreifen bekommt zwangsläufig die Meldung "Connecting to NAS... Make sure the NAS system is powered on and connected to the network.".
Das liegt daran dass FreeNAS in der neuen Version, abfragen über eine neue Webservice API abfertigt, welche über eine separate Verbindung läuft.

Über folgende nginx Konfiguration funktioniert der Zugriff wieder wie gewohnt:

location /  
{          
    proxy_set_header X-Real-IP  $remote_addr;   
    proxy_set_header X-Forwarded-For $remote_addr;  
    proxy_set_header Host $host;  
    proxy_pass http://xxx.xxx.xxx.xxx:80; # Interne IP und Port des FreeNAS Servers
# WebSocket support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

}


Datum: 02.07.2019     
Tags: FreeNAS, 11.1, 11.2, nginx, reverseproxy, reverse, proxy

Bauen von opcua mit open62541 für Qt 5.12 (MinGW) auf Windows

Über den Standard Installer (in der Opensource Variante) von Qt ist opcua leider nicht direkt verfügbar. Um damit zu arbeiten ist es daher nötig die Komponente manuell zu kompilieren und zu installieren. Immerhin ist seit Qt 5.12 open62541 direkt integriert, so dass hier kein zusätzlicher Aufwand benötigt wird.

Voraussetzungen:

  • Qt 5.12 ist installiert (z.B. über den Qt Installer)
  • Eine perl Umgebung ist installiert. (Überprüfen mit "perl -v". Falls nicht vorhanden einfach das Perl Paket von http://strawberryperl.com/ installieren )

Anschließend benötigt man die Kommandozeileneingabe für Qt 5.12. Zu finden unter "Start > Qt" (Siehe Screenshot) und führt darin folgende Kommandos aus.

git clone https://code.qt.io/qt/qtopcua.git
cd qtopcua
git checkout 5.12
mkdir build
cd build
qmake ..
mingw32-make
mingw32-make install

 


Datum: 17.01.2019     Zuletzt aktualisiert: 18.01.2019
Tags: mingw, windows, open62541, opc, ua, opcua, perl, build, bauen, kompilieren

App Empfehlungen für Android

Mail Client - Aqua Mail

Nachdem ich gefühlt drei dutzend Mail Clients aus dem Play Store intensiv getestet habe, bin ich bei AquaMail endlich fündig geworden. Dieser Mailclient bietet sehr viele Funktionen und Einstellungen, hat ein ansprechendes Design und ist zuverlässig. Ausserdem teilt er die Mail Zugangsdaten nicht mit dubiosen Cloud Servern, welche die E-Mail Adresse dann an noch dubiosere Spamversender weiterverteilen wie es leider eine vielzahl von Android Mail Clients tun (getestet). Kostenlos und Werbefrei (bis zu 2 Mail Accounts).

https://play.google.com/store/apps/details?id=org.kman.AquaMail

 

IMAP Notitzen ala "Apple Notes" (auf eigenem IMAP Server) - ImapNotes2

Wer vom iPhone kommt und einen Ersatz für die "Notitzen" App sucht, die einfach nur Texte als Notitz auf dem eigenem Mail / IMAP Server ablegen und synchronisieren kann, ist bei dieser App genau richtig. Sie ist zwar nicht die schönste und modernste aber tut genau das was sie soll ohne irgend einen extra Cloud Account o.ä. zu benötigen. Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=com.Pau.ImapNotes2

 

iTunes Remote für Android - Retune

Ein toller Ersatz für die App iTunes Remote von Apple. Hiermit ist es möglich sich mit iTunes (auf einem Mac oder PC) zu koppeln und anschließend fernzusteuern (Musik Wählen, Abspielen, Pausieren, Lautstärke Ändern, Bewertung hinzufügen). Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=com.squallydoc.retune

 

Musik Synchronisation - Synctunes Ultimate

Diese Praktische App (in Verbindung mit dem passendem PC/Mac Programm) synchronisiert komplette iTunes Playlisten mit dem Android Smartphone drahtlos über Wifi schnell und zuverlässig. Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=itunes.android.synctunesultimate

 

Wetter - Klara weather

Sehr schöne Wetterapp die Nicht nur Zahlenwerte anzeigt, sondern übersichtliche schöne Diagrame daraus generiert. Auch als Widget sehr nützlich. Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=org.androworks.klara

Wetter - WarnWetter

Die Wetterapp vom Deutschen Wetterdienst. Genauere Wetterdaten gibt es nirgendwo. Zudem gibt diese App auch automatische Unwetterwarnungen. Kostenlos bei Nutzung der Unwetterwarnungen Funktion.

https://play.google.com/store/apps/details?id=de.dwd.warnapp

 

Sprachen - dict.cc Wörterbuch

Wörterbuch bei dem sich das Vokabular  (diverse Sprachen) auch offline herunterladen lässt und so im Urlaub auch ohne Internetverbindung zur verfügung steht.Kostenlos und Werbefinanziert (offline keine Werbung).

https://play.google.com/store/apps/details?id=cc.dict.dictcc

 

Sprachen - Duolingo: Sprachkuse umsonst

Eine sehr liebevoll gestaltete und mit hochwertigen Inhalten Übungsapp für diverse Sprachen. Super als Einstieg in die Sprache oder für das Urlaubsvokabular.Kostenlos und Wervefinanziert aber dezent.

https://play.google.com/store/apps/details?id=com.duolingo

 

Virtual Reality / Astronomie (Sternenkarte) - Planets

Eine Wunderschöne App mit Virtual Reality Sternenkarte. Immer nützlich wenn man wissen möchte welche Sternenbilder gerade zu sehen sind. Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=org.qcontinuum.planets

 

Fotografie - DOF Calculator

Ein funktionaler DOF Rechner. Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=com.cunningdogsoftware.dofcalculator

 

Fotografie - SunPosition Map

Sehr nützliche App um die Richtige Belichtung für Landschaftsfotos zu Planen oder den genauen Zeitpunkt der "blauen Stunde" zu erfahren. Kostenlos und Werbefrei.

https://play.google.com/store/apps/details?id=com.principiaprogramatica.sunpositionmap

 

 

Wer weitere App Empfehlungen hat (bevorzugt Werbefrei  oder Opensource) darf sie gerne melden. Ich freue mich immer über nützliche Tipps abseits des Spams den man sonst im Playstore findet.

 


Datum: 12.04.2018     Zuletzt aktualisiert: 25.10.2020
Tags: empfehlunge, empfehlungen, tipps, tips, app, apps, playstore, android, anwendung, werbefrei, umsonst, free, kostenlos

Let's Encrypt und automatische Erneuerung der Zertifikate mit Nginx Reverse Proxy (Openmediavault).

Falls ihr Let's Encrypt unter Openmediavault und gleichzeitig das "nginx (websites)" Plugin als Reverse Proxy nutzt, kann es sein, dass ihr bereits auf das Problem gestoßen seid, dass die Zertifikate nicht in der Lage sind sich selbst zu erneuern.
Das liegt daran, dass Let's Encrypt für jede Domain temporäre Daten zur Kommunikation mit dem Let's Encrypt Dienst unter der URL http://euredomain.tdl/.well-known/acme-challenge/ bereitstellt. Doch euer Reverse Proxy leitet diese Anfragen um, womit der Let's Encrypt Dienst die Daten nicht erfolgreich abrufen kann.
Zum Glück lässt sich dies relativ einfach beheben.

Zunächst schaut man sich nochmal die Let's Encrypt Config im Openmediavault Plugin an und notiert sich "WebRoot":

Nun füge man an oberster Stelle der jeweiligen Konfiguration für den Namensbasierten nginx Server folgenden Code ein (WebRoot entsprechend anpassen):

location /.well-known/acme-challenge/ {
  alias /var/www/openmediavault/.well-known/acme-challenge/;
}

Damit werden alle Anfragen auf das Unterverzeichnis /.well-known/acme-challenge/ zu dem Ort umgeleitet, an dem Let's Encrypt tatsächlich die benötigten Daten ablegt.

 


Datum: 12.10.2017     Zuletzt aktualisiert: 12.10.2017
Tags: openmediavault, omv, ssl, letsencrypt, lets, encrypt, acme, nginx, reverseproxy, reverse, proxy, challange, well-known, webroot, alias

Odroid XU4 und Plex Media Server Transcoding unter Openmediavault 2

Nach einigen Updates seitens Openmediavault und dem Plugin Repository omv-extras funktionert das Transkodieren mit Plex Media Server 0.9.12.4 zunächst einmal nicht mehr. Grund dafür ist, dass der Plex Transcoder glibc bzw. libc6 in Version 2.15 oder neuer benötigt. Openmediavault 2 basiert aber auf Debian Wheezy, wofür es momentan libc6 nur in Version 1.13 gibt. Der plexmediaserver aus dem omv-extras Repository wird zwar mit dem passendem Modul libm-2.19.so ausgeliefert, dieses läuft allerdings nicht auf Debian Wheezy bzw. Openmediavult Stone Burner 2.x.

Faktisch ist das Transcodieren auf dem Odroid XU4 unter Openmediavault 2.2.14 mit Plex 0.9.12.4 möglich.
Dazu müssen folgende Änderungen durchgeführt werden:

Achtung, damit das Transcodieren auf dem Odroid XU4 funktioniert, muss nach wie vor die plex.js angepasst werden. Siehe dazu die beiden anderen Anleitungen Odroid XU4 und Plex Media Server Transcoding mit Openmediavault und nginx Reverse-Proxy für Plex Media Server.

Zunächst muss man sich die richtige libc6 besorgen (libc6-armhf-cross_2.15-0ubuntu9cross1.82_all.deb for 12.04 LTS) und dessen Inhalt In einen vorher erstellen Ordner extrahieren. (Alternativ die benötigte Datei direkt libm-2.15.so)

mkdir libc6-2.15-ubuntu
dpkg -x libc6-armhf-cross_2.15-0ubuntu9cross1.82_all.deb libc6-2.15-ubuntu/

Nun Kopiert man die benötigte libm-2.15.so in das richtige Verzeichnis für Plex Media Server und setzt den Symbolischen-Link.

cp libc6-2.15-ubuntu/usr/arm-linux-gnueabihf/lib/libm-2.15.so /usr/lib/plexmediaserver/
ln -s /usr/lib/plexmediaserver/libm.so.6 /usr/lib/plexmediaserver/libm-2.15.so 

Nun Muss man die beiden Transcoder nur noch überreden die richtige Bibliothek zu verwenden. Dazu bennen wie die Binärdateien um und erstellen kleine Scripte die auf die Originale verweisen.

mv "Plex New Transcoder" "Plex New Transcoder Original"
mv "Plex Transcoder" "Plex Transcoder Original"


vi "Plex New Transcoder"

mit folgendem Inhalt:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver/
exec /usr/lib/plexmediaserver/Resources/Plex New Transcoder Original "$@"


vi "Plex Transcoder"

mit folgendem Inhalt:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/plexmediaserver/
exec /usr/lib/plexmediaserver/Resources/Plex Transcoder Original "$@"

Rechte anpassen

chmod a+x "Plex New Transcoder" "Plex Transcoder"

Anschließend Plexmediaserver Neustarten und Filme geniesen =)

service plexmediaserver restart


Datum: 17.05.2017     Zuletzt aktualisiert: 18.05.2017
Tags: Heimserver, Plex, Transcode, Openmediavault, Odroid, XU-4, ARM, Stoneburner, Stone Burner, Wheezy, Debian, pms, plexmediaserver

nginx Reverse-Proxy für Plex Media Server

Möchte man seinen lokalen Plex Media Server auch von außen zugreifbar machen, geht dies am besten über einen Reverse-Proxy. 
Der folgende Teil meiner nginx Konfiguration, sorgt für reibungslosen betrieb auf meinem Odroid XU4. Man beachte dass hier der Rumpf mit den Listenern auf Port 80/443 fehlt. Sowie die Umleitung von Port 80 auf 443.

#Die folgende Regex Regel setzt eine Alias für die Datei plex.js. 
#Dies ist nötig, um Plex Transcoding auf ARM-basierter Hardware 
#zu aktivieren. (Die referenzierte plex.js muss ebenfalls modifiziert werden)
location ~ ^/web/js/plex.js(.*)$
{
  alias /usr/lib/plexmediaserver/Resources/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js;
}

location / {
#Die folgenden Regeln sorgen dafür, dass ihr automatisch auf /web/index.html umgeleitet werdet
#Umleiten, wenn kein OPTIONS request
  if ($request_method != OPTIONS ) {
    set $test A;
  }
  if ($http_x_plex_device_name = '') {
    set $test "${test}B";
  }
  if ($arg_X-Plex-Device-Name = '') {
    set $test "${test}C";
  }
  if ($test = ABC) {
    rewrite ^/$ https://$http_host/web/index.html;
  }

#Folgende Adresse:Port, ist die Adresse eures lokalen PlexMediaServers
  proxy_pass http://127.0.0.1:32400;
  proxy_set_header    Host            $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  
  proxy_redirect      off;
  proxy_buffering     off;
  
  proxy_http_version      1.1;
  proxy_set_header        Upgrade         $http_upgrade;
  proxy_set_header        Connection      "upgrade";
  proxy_read_timeout      36000s;         # Timeout nach 10 Stunden

#Setzt eine HTTP Authentifizierung
  auth_basic "Bitte Anmelden";
  auth_basic_user_file /etc/nginx/htpasswd;
}

Die hier gezeigte Konfiguration verwendet auth_basic zur einfachen HTTP Authentifizierung. Dies ist nur empfehlenswert, wenn man über SSL(443) auf Plex zugreift. Das auth_basic_user_file kann dabei mithilfe einer der folgenden Befehle generiert werden. Weitere Informationen zu Auth Basic

htpasswd -nbd myName myPassword

openssl passwd -crypt myPassword

 

Datum: 20.02.2017     Zuletzt aktualisiert: 02.03.2017
Tags: nginx, Reverse-Proxy, reverseproxy, plex, Plex-Media-Server, PMS, rewrite, ssl, internet-zugriff, web-zugriff

Odroid XU4 mit Zalman ZM-NB47J Kühlkörper und runtertakten der GPU

Der Standard Kühlkörper des Odroid XU4 Boards ist leider alles andere als gut. Doch zum Glück lässt sich dieser tauschen, wobei es wirklich gute Alternativen gibt. Ich habe selbst eine weile recherchiert und bin am ende beim Zahlman ZM-NB47J Chipsatzkühler hängen geblieben. Diesen findet man allerdings leider fast nur noch bei eBay.

Zahlman ZM-NB47J Kühlkörper

Dieser etwas betagte Zahlman ZM-NB47J Chipsatzkühler, aus früheren Zeiten in denen Mainboards noch eine Northbridge hatten, ist der perfekte Ersatz, da er verstellbare Befestigungen und eine ordentliche Kühlleistung hat. Da dieser Kühler schon lange nicht mehr produziert wird, sollte man mit der mitgelieferten Wärmeleitpaste aufpassen. Diese kann sehr alt und eingetrocknet sein. Besser sollte man sich eine Tube frische, elektrisch nicht leitende Wärmeleitpaste besorgen.

Die Montage des Kühlers ist in der beiliegenden Anleitung hinreichend gut beschrieben.
Fertig montiert sieht der Kühlkörper so aus:

Die Kühlleistung mit dem Zahlman Kühlkörper ist so gut, dass sich die Temperatur im normalem Betrieb irgendwo zwischen 40°C und 50°C einpendelt (Passiv ohne Belüftung). Den Standart Lüfter habe ich trotzdem angeschlossen gelassen und am Kühler befestigt, falls die Temperatur unter Volllast doch mal zu hoch sein sollte. Der Lüfter läuft erfahrungsgemäß erst irgendwo bei knapp 60° an. Wer die PWM Lüftersteuerung trotzdem manuell anpassen möchte, kann hier nachlesen wie das funktioniert.

Runtertakten der Odroid XU4 GPU

Betreibt man das Odroid XU4 Board als Server, also ohne Bildschirmausgabe, macht es nicht viel Sinn die Mali-T628 Grafik permanent auf maximaler Frequenz mit 600MHz laufen zu lassen (Standartverhalten). 
Wie hier (auf English) beschrieben, lässt sich die Grafikkarte dauerhaft auf den Minimaltakt heruntertakten. Dabei senkt man nicht nur die Taktrate der Grafikeinheit auf minimale 177MHz, sondern auch die Betriebsspannung. Somit sinkt die Betriebstemperatur nochmal um ein paar Grad und verringert den Stromverbrauch.

Um die Änderung durchzuführen sollte man sicherstellen, dass das Paket sysfsutils installiert ist:

apt-get install sysfsutils

Anschließend editiert man die Datei /etc/sysfs.conf und ergänzt diese um folgende Zeile:

devices/11800000.mali/dvfs_max_lock = 177

Ob die Änderung erfolgreich war, lässt sich mit folgenden Befehlen ausführen (davor, danach):

cat /sys/devices/11800000.mali/clock
cat /sys/devices/11800000.mali/vol

 

Ein typischer Temperaturverlauf mit dem Zalman Kühler und heruntergetakteter GPU sieht anschließend so aus:


Datum: 30.09.2016     Zuletzt aktualisiert: 15.01.2019
Tags: Odroid, XU4, Zalman, ZM-NB47J, Kühlkörper, Chipsatzkühler, Kühlung, Temperatur, Lüfter, Lüftersteuerung, Mali-T628, Frequenz, GPU, Grafik

Odroid XU4 und Plex Media Server Transcoding mit Openmediavault

Die Vermutung liegt nahe, dass die Hardware des Odroid XU4 mit seinem 8-Kern ARM Prozessor dazu in der Lage ist Videomaterial on-the-fly mithilfe des Plex Media Servers zu Transkodieren. Installiert man sich die ARM Variante des Plex Media Servers (z.B. als openmediavault plugin), ist das Transcodieren allerdings ab werk erst einmal deaktiviert. Hier zeigt der Plex Media Server die Fehlermeldung "Der server ist nicht leistungsfähig genug um videos zu konvertieren". Mithilfe einiger kleiner Modifikationen, lässt sich Plex allerdings doch dazu überreden auf einem Odroid XU4 zu Transkodieren.

Diese Anleitung funktioniert exemplarisch mit Openmediavualt 2.2.7 und Plex Media Server Version 0.9.12.4

Vorraussetzungen

Zunächst sollte man sicherstellen dass das Paket libexpat1 installiert ist:

sudo apt-get install libexpat1 -y

Modifikationen

Nun müssen wir die zu modifizierenden Dateien (plex.js und index.html) lokalisieren. Wir wechseln dazu ins root Verzeichnis und suchen nach der Datei plex.js. Die Ausgabe dazu sollte in etwa so aussehen.

# cd /
# find -name plex.js
./usr/lib/plexmediaserver/Resources/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js
./media/cdd7bebd-29e1-44d5-84e4-6c126ba92770/plexmediaserver/Library/Application Support/Plex Media Server/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js
./export/root/plexmediaserver/Library/Application Support/Plex Media Server/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js

Unter /usr/lib/plexmediaserver liegen die eigentlichen Dateien die wir modifizieren möchten. Unter /export/root/plexmediaserver liegt eine Art Cache dieser Dateien der momentanen Plex Media Server Konfiguration. Unter /media liegt euer Backup der Plex Media Server Konfiguration falls ihr das konfiguriert habt.

Für die Modifikation reicht es die Dateien in  /usr/lib/plexmediaserver und /export/root/plexmediaserver/ zu modifizieren. Die index.html liegt dabei immer ein Verzeichnis weiter oben im Verzeichnis "Resources".

In der plex.js suchen wir nach der Funktion validateTranscoder:function und fügen direkt nach der "{" Klammer "return false;" ohne Zeilenumbrüche oder Leerzeichen ein.
Das Ergebnis sollte in etwa so Aussehen

[...]validateTranscoder:function(e,t){return false;[...]

In der index.html suchen wir nach der Zeile 

<script id="plex-script" src="js/plex.js?hash=3d1c5d7&version=2.4.9"></script>

und ändern diese zu 

<script id="plex-script" src="js/plex.js"></script>

Plex Media Server überschreibt normalerweise die Dateien unter /export/root/plexmediaserver/, womit unsere Modifikationen bei änderung der Plex Einstellungen wieder weg wären. Um dies zu verhindern entziehen wir plex die Schreibrechte für die Dateien index.html und plex.js indem wir den Dateibesitzer auf root stellen und plex somit nur noch leserechte hat.
Achtung: Diese Modifikation kann unter Umständen Probleme nach Software Updates für Plex verursachen.

# cd "/export/root/plexmediaserver/Library/Application Support/Plex Media Server/Plug-ins/WebClient.bundle/Contents/Resources"
# ls -la index.html js/plex.js
-rw-r--r-- 1 plex nogroup    2409 Sep 15 11:11 index.html
-rw-r--r-- 1 plex nogroup 2156175 Sep 15 11:14 js/plex.js
# chown root index.html js/plex.js
# ls -la index.html js/plex.js
-rw-r--r-- 1 root nogroup    2409 Sep 15 11:11 index.html
-rw-r--r-- 1 root nogroup 2156175 Sep 15 11:14 js/plex.js

Um die Änderungen zu Übernehmen müssen wir den Plex Media Server Dienst nur noch neu starten.

service plexmediaserver restart

Nachtrag: Bei einem Reboot werden wohl seitens Plex komischerweise die geänderten Dateien in /media sowie /export überschreiben. Ich habe keine effektive Möglichkeit gefunden dies zu Unterbinden. Allerdings kann man, wenn man Plex sowieso über einen nginx Reverseproxy bereitstellt auf die modofizierte plex.js verweißen. Mithilfe der Regex Regel muss man nicht mal mehr die index.html ändern.

location ~ ^/web/js/plex.js(.*)$
{
  alias /usr/lib/plexmediaserver/Resources/Plug-ins/WebClient.bundle/Contents/Resources/js/plex.js;
}

Leistungsfähigkeit

Die Leistung des Odroid XU4 Boards reicht auf jeden Fall um ein 1080p 4:2:0 high h264 Kodiertes Video mit einer Bitrate von über 2000kpbs und 5.1dts Sound im MKV Container on-the-fly in Webfähige 720p 3Mbps zu Transkodieren. Dabei pendelt sich die durchschnittliche CPU Last auf etwa 50-60% ein. Das sollte gerade so reichen um auch zwei parallele Streams mit Quellmaterial in dieser Qualität zu Transkodieren. Zur Veranschaulichung hier nochmal die Darstellung der CPU Auslastung aus Openmediavault während des Transcodierens.

 


Datum: 16.09.2016     Zuletzt aktualisiert: 15.01.2019
Tags: Heimserver, Plex, Transcode, Openmediavault, Odroid, XU-4, ARM

Sicherheit von Passwörtern - Ein kleiner Ratgeber

Passwörter verwendet jeder von uns mehrmals täglich. Meistens ohne sich viel Gedanken um die Sicherheit zu machen. Dieser kleine Ratgeber soll helfen sich sichere Passwörter auszudenken und sich auch merken zu können.

Schlecht:

  • länge bis zu 6 Zeichen
  • Wörter, Namen und Bezeichnungen die im Sprachgebrauch oder Wörterbüchern Vorkommen.
  • Zahlen wie Geburts-, Jahresdaten oder Hausnummern (z.B. 1987)
  • Wörter die sich aus dem eigenem Namen, Spitznamen, Benutzernamen oder anderen personenbezogenen Bezeichnungen zusammensetzen (z.B. Dr., Chef)

Gut:

  • länge ab 8, besser 10  oder 12 Zeichen
  • augenscheinlich zusammenhangslose Buchstaben in Groß- und Kleinschreibung.
  • Ziffern oder Zahlen die sich nicht direkt mit Ihnen in Verbindung bringen lassen (Geburtsdaten, Alter, Hausnummer o.ä.)
  • Sonderzeichen wie ^@°!"§$%&/()=?#+-_.:,;'*~><|. Am besten nicht nur am Ende oder Anfang des Passworts

Niemals Passwörter verwenden, welche man bereits woanders mal gesehen hat (die Beispiele auf dieser Seite)

Tipp 1 - Passwörter aus Sätzen:

Am einfachsten kann man sich gute Passwörter ausdenken, indem man die Anfangs- oder Endbuchstaben eines Satzes verwendet, den man sich leicht merken kann. Man sollte jedoch darauf Achten dass der Satz kein bekanntes Zitat oder eine Redewendung ist.

Bespiele für Passwörter aus Sätzen mit 10 Stellen:
IsjMu8:25a = Ich stehe jeden Morgen um 8:25 auf
MAim33JeO! = Mein Auto ist mit 33 Jahren ein Oldtimer!
Msabm3,8%F = Milch schmeckt am besten mit 3,8% Fett
!Nv13Jan.H = ! Nicht vergessen 13 Jan. Hochzeitstag (hat auch den Nebeneffekt dass man ihn wirklich nicht vergisst)
Wisfbi5,6L = Wenn ich sparsam fahre brauche ich 5,6 Liter

Tipp 2 - Ersetzen von Zeichen:

Um die Sicherheit zu erhöhen kann man einzelne Begriffe oder Zeichen durch ähnlich aussehende Zeichen oder Ziffern ersetzen.
Beispiele:
aus "und" wird "&" oder "+"
aus "Ein" oder "eines" wird "1"
aus "s" wird "5"
aus "l" wird "1"
aus "K" wird "|<"
aus "a" wird "@"

Tipp 3 - Passwort Varianten:

Um sich nur ein Passwort merken zu müssen und trotzdem für alle Dienste ein eigenes Passwort verwenden zu können, kann man den Namen des Dienstes zum kleinen bestandteil des Passworts machen. So hat man den Vorteil, dass das eigene Passwort weiterhin weitestgehend sicher bleibt falls das Passwort bei einem Dienst ausgespäht wird. Man sollte jedoch nur so wenig (max. 2 Zeichen) für diesen Bestandteil verwenden, dass man es sich selbst merken kann. Sonst könnte jemand der solch ein Passwort erbeutet leicht auf das Schema schließen dass man verwendet.

Beispiel 1 für Passwort "IsjMu8:25@ = Ich stehe jeden Morgen um 8:25 auf" und zweistelligem Bestandteil:
IsjMu8:25@eb - Passwort für Ebay
IsjMu8:25@Am - Passwort für Amazon
IsjMu8:25@Wi - Passwort für Windows

Beispiel 2 für Passwort "Wi5fbi5,6L = Wenn ich sparsam fahre brauch ich 5,6L" und einstelligem Bestandteil und zusätzlichem Sonderzeichen =:
e=Wi5fbi5,6L - Passwort für Ebay
A=Wi5fbi5,6L - Passwort für Amazon
W=Wi5fbi5,6L - Passwort für Windows

Tipp 4 - Passwörter Wechseln:

Natürlich empfiehlt es sich auch lange und sichere Passwörter hin und wieder zu wechseln. 
Bei einem geschickt gewählten Passwort wie "Wisfbi5,6L = Wenn ich sparsam fahre brauche ich 5,6 Liter" kann man beispielsweise monatlich das Passwort seinem aktuellem Spritverbrauch anpassen. Oder man zählt bei "MAim33JeO! = Mein Auto ist mit 33 Jahren ein Oldtimer!" jedes Jahr eins weiter. Bei kritischen Passwörtern sollte man sich jedoch ein komplett neues Passwort überlegen.

Weitere nützliche Informationen und Hinweise zu diesem Thema gibt es beim Bundesamt für Sicherheit in der Informationstechnik:
https://www.bsi-fuer-buerger.de/BSIFB/DE/Empfehlungen/Passwoerter/Umgang/umgang_node.html


Datum: 03.02.2016     Zuletzt aktualisiert: 02.03.2017
Tags: Ratgeber, Sicherheit, Passwort, Passwörter, sicher, Kennwort, Kennwörter, Tipps, Tip

Letzencrypt für https Verbindungen zu Openmediavault 2.1 verwenden

Diese Anleitung ist veraltet, denn seit kurzem ist letsencrypt direkt über das Repository von omv-extras.org als Openmediavault Plugin verfügbar. 
Mit Letsencrypt bekommt man kostenlose SSL Zertifikate die von allen gängigen Browsern und Geräten als vertrauenswürdig eingestuft werden. Damit lässt sich mit wenig Aufwand Verschüsselte Kommunikation realisieren. In diesem Fall mit einem openmediavualt Server.
Mehr Informationen unter: letsencrypt.org

Voraussetzungen:

  • funktionierende openmediavault Installation
  • funktionierender dyndns-Dienst ob mit eigener Domain oder gratis (z.B. no-ip.org).
  • Funktionierende Weiterleitung mit Port 80 und 443 vom Router des Internetanschlusses zum openmediavault Server

Schritt 1: Selbst signiertes SSL-Zertifikat in openmediavault erstellen und SSL aktivieren (System>Zertifikate>SSL)

Schritt 2: Installation von Letsencrypt

Wechselt zunächst in das Verzeichnis in welchem ihr letsencrypt Installieren möchtet. In meinem Fall verwende ich einfach ~ (Home) von root. Anschließend lässt sich letsencrypt direkt von github installieren.

cd ~
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Schritt 3: Zertifikat erstellen und anfragen

Bei diesem Schritt wird auf eurer lokalen Maschine ein privater Schlüssel erstellt und ein öffentliches Zertifikat bei Letsencrypt angefragt, welches automatisch auf eurer Maschine gespeichert wird.

Um mehrere Subdomains gleich mitzubekommen einfach mit -d die benötigten Domains angeben.

letsencrypt-auto certonly --webroot -w /var/www/openmediavault/ -d meinhomeserverxyz.no-ip.com -d www.meinhomeserverxyz.no-ip.com -d cloud.meinhomeserverxyz.no-ip.com

Nach erfolgreicher erstellung wird folgende Meldung angezeigt. Notiert oder merkt euch den Speicherort für euer neues Zertifikat.

 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/meinhomeserverxyz.no-ip.com/fullchain.pem. Your cert will
   expire on 2016-03-03. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If like Let's Encrypt, please consider supporting our work by:
   Donating to ISRG / Let's Encrypt:  https://letsencrypt.org/donate
   Donating to EFF:  https://eff.org/donate-le

Letzter Schritt 4: Selbst signiertes Zertifikat und dessen Schlüssel durch Symbolischen Link auf das Letsencrypt Zertifikat ersetzen und nginx neustarten.

Hinweis: Die ID im Dateinamen ist bei jedem System unterschiedlich.

Vorhandenes Zertifikat und dessen Schüssel umbenennen.

mv /etc/ssl/certs/openmediavault-23d764ab-3546-47eb-9bed-e2cecaf1488b.crt /etc/ssl/certs/openmediavault-23d764ab-3546-47eb-9bed-e2cecaf1488b.crt.old
mv /etc/ssl/private/openmediavault-23d764ab-3546-47eb-9bed-e2cecaf1488b.key /etc/ssl/private/openmediavault-23d764ab-3546-47eb-9bed-e2cecaf1488b.key.old

Symbolische Links erstellen

ln -s /etc/letsencrypt/live/meinhomeserverxyz.no-ip.com/fullchain.pem  /etc/ssl/certs/openmediavault-23d764ab-3546-47eb-9bed-e2cecaf1488b.crt
ln -s /etc/letsencrypt/live/meinhomeserverxyz.no-ip.com/privkey.pem /etc/ssl/private/openmediavault-23d764ab-3546-47eb-9bed-e2cecaf1488b.key

Nginx Config neu einlesen

service nginx reload

Wenn ihr in Zukunft euer Zertifikat erneuern möchtet einfach nochmal das Kommando aus Schritt 3 ausführen. Dies kann man auch automatisiert in einem Cronjob alle 89 Tage machen (Das Zertifikat von Letsencrypt läuft nach 90 Tagen ab).


Datum: 07.12.2015     Zuletzt aktualisiert: 15.01.2019
Tags: letsencrypt, openmediavault, omv, omv-extras, plugin, dyndns, ssl, tls, verschlüsselung, encryption

WOL mit FreeNAS 9.10 und HP Microserver N40L

Der Standard Netzwerktreiber (genau genommen Kernel Extension) von FreeNas unterstützt leider kein WOL (Wake-on-LAN) mit einem HP Microserver N40L / N36L / N54L. Mithilfe des Netzwerktreibers aus der ähnlichen, ebenfalls auf FreeBSD basierten Distribution Nas4Free, kann man diese Funktion jedoch Nachrüsten.

Die Folgende Anleitung funktioniert mindestens für FreeNAS-9.3-STABLE-201506042008 bis FreeNAS-9.10.2-U6 (561f0d7a1) und den HP Microserver N40L / N36L / N54L. 

  1. Download der (10.3) NAS4Free-Iso von http://sourceforge.net/projects/nas4free/files/ oder alternativ direkt die benötigte Kernel Extension für FreeNAS 9.10 (weiter bei Schritt 4)
  2. Entpackt die ISO (7Zip) oder Mountet diese.
  3. Sichert euch die Datei /boot/kernel/if_bge.ko.gz. Dies ist der Netzwerktreiber den wir für die FreeNAS Anpassung benötigen.
  4. Entpackt die if_bge.ko.gz und kopiert die if_bge.ko auf eure FreeNAS Maschine.
  5. Schaltet euch per SSH auf euer FreeNAS System oder öffnet die "Shell" der Weboberfläche.
  6. Mountet das Root Dateisystem mit Sreibrechten.
    mount -uw /
  7. Kopiert die Kernel Extension in das Verzeichnis /boot/kernel/
    cp if_bge.ko /boot/kernel
  8. Setzt die erforderlichen Rechte
    chmod 555 /boot/kernel/if_bge.ko
  9. Setzt den richtigen File Owner und die Gruppe
    chown root:wheel /boot/kernel/if_bge.ko
  10. Seit FreeNAS 9.10 enthält der Kernel fest eingebaut das modul if_bge. Deshalb muss unseres umbenannt werden. Am einfachsten wir benennen es in "if_bge_wol.ko" um
    mv /boot/kernel/if_bge.ko /boot/kernel/if_bge_wol.ko
  11. Erstellt einen angepassten Parameter (Tunable) per Weboberflächeunter "System > anpassbare Parameter" mit folgenden Optionen:
    Veränderbar: if_bge_wol_load
    Wert: YES
    Typ: Loader
    Kommentar: Wake on LAN (dies ist optional und frei wählbar)
  12. Abschließend muss euer FreeNAS System (eventuell auch mehrmals) neugestartet werden. Falls es nach mehreren Neustarts nicht klappt Schritt 10. Wiederholen und nochmals Neustarten.

Nach Erfolgreicher Durchführung erscheint bei Ausführen von ifconfig folgende Ausgabe. Man beachte die Option "WOL_MAGIC".

[root@nas ~]# ifconfig bge0                                                                                                         
bge0: flags=8843 metric 0 mtu 1500                                                          
        options=c219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>

Dies ermöglicht euch nun euer FreeNAS System nach Herunterfahren per Wake-on-LAN Paket und seiner MAC Adresse aufzuwecken.
Unter Linux beispielsweise erfolgt dies mit folgendem Befehl, wobei die MAC Adresse entsprechend angepasst werden muss.
wakeonlan 99:AA:BB:CC:DD:EE


Datum: 28.11.2015     Zuletzt aktualisiert: 23.10.2020
Tags: HP, Microserver, N40L, N36L, N54L, WOL, Wakeonlan, Wake-on-LAN, WOL_MAGIC

Web-Projekte - Anpassungen von Originalcode richtig trennen 

Zur besseren Übersicht und Versionskontrolle lassen sich Webprojekte die auf fertigem Code basieren mithilfe symbolischer Verknüpfungen besser trennen.

Richtig benennen und Entpacken

Bei Verwendung von Softwarequellen sollte man diese in Ordner mit einheitlicher Benennung entpacken bzw. nach dem Entpacken umbenennen:
/%SOFTWAREQUELLENNAME%-%VERSION%/
 
So ist immer ersichtlich welche Version eingesetzt wird.
 
Mit dem Parameter -C bzw. -d lässt sich direkt beim Entpacken angeben, in welchen Zielordner entpackt werden soll.
 
TAR-Archive:
tar xf archiv.tar ​-C ZIELORDNER
TAR-Bzip2-Archive:
tar xjf ARCHIVNAME.tar.bz2 -C ZIELORDNER​
TAR-GZ-Archive:
tar xzf ARCHIVNAME.tar.gz -C ZIELORDNER​
ZIP-Archive:
unzip ARCHIVNAME.zip -d ZIELORDNER​​
Beispiele:
tar xjf owncloud-5.1.0.tar.bz2 -C owncloud-5.1.0/
unzip typo3-7.1.zip -d /typo3-7.1

​​​Anpassungen vom Standard Softwarecode trennen

Möchte man folgende Datei anpassen

/cmssystem-3.4.7/module/modul.php

erstellt man sich eine Kopie in einem separatem Ordner

/custom-cmssystem-3.4.7-kundexy/module/modul.php

und erstellt dann einen symbolischen Link im Originalpfad auf die modifizierte Datei mit:

ln -s /Pfad_1/echte_Datei /Pfad_2/Symlink
ln -s /custom-cmssystem-3.4.7-kundexy/module/modul.php /cmssystem-3.4.7/module/modul.php

​Dadurch lassen sich die Anpassungen die im Ordner /custom.... liegen, sauber trennen, sichern und beispielsweise mit Subversion oder Git versionieren, ohne den sowieso separat verfügbaren Quellcode mit zu sichern.


Datum: 30.06.2015     Zuletzt aktualisiert: 24.02.2017
Tags: symbolic link, symbolische Links, Archive, Archiv entpacken, Linux

nginx als Reverseproxy

Besitzt man nur eine öffentliche IP-Adresse und möchten mehrere Webseiten/Web-Applikationen über diese bereitstellen, kommt man an einem Reverse Proxy nicht vorbei. Eine einfache und schlanke Lösung bietet hier der nginx Webserver.

In diesem Beispiel Betreiben wir zwei Subdomains mit jeweils eigenen SSL Zertifikaten. Beide stellen über Port 443 Web-Applikationen bereit. Der nginx Server übernimmt hierbei auch die SSL-Verschlüsselung (SSL-Offloading). Die Server sind in diesem Beipiel im internen Netz über 192.168.0.8 Port 80 und 192.168.0.9 Port 8080 erreichbar.

Die nachfolgende nginx Konfiguration ist unter Beachtung der mit # vorangeführten Kommentaren selbsterklärend.

# Ein Listener auf Port 80 sorgt dafür, dass Anfragen an http automatisch über ein HTTP 301 an https umgeitet werden
server {                                                                                                                         
        listen 80;                                                                                                               
        server_name app1.domain.tld app2.domain.tld;  # Hier sind alle betriebenen Domains/Subdomains einzutragen. Auch eine Wildcard *.domain.de ist möglich.
        return 301 https://$server_name$request_uri;                                                        
      }                                                                                                                                 
# Web-Applikation 1
server {                                                                                                                          
        listen 443 ssl;                                                                                 
        server_name app1.domain.tld; # Domain für die erste Web-Applikation  

        ssl on;  
        ssl_certificate /usr/local/etc/nginx/openssl/certs/app1.domain.tld.combo.pem; # Zertifikatsbundle für erste Web-Applikation           
        ssl_certificate_key /usr/local/etc/nginx/openssl/private/app1.domain.tld.nopass.key; #Zertifikatsschlüssel für erste WebApplikation        
       
        # Manche Web-Applikationen leiten einen auf http:// um. Die nachfolgende Anweisung leitet http:// anfragen an Port 443 auf https:// um
        error_page 497 = https://$server_name:$server_port$request_uri;  

        location /  
               {          
                proxy_set_header X-Real-IP  $remote_addr;   
                proxy_set_header X-Forwarded-For $remote_addr;  
                proxy_set_header Host $host;  
                proxy_pass http://192.168.0.8:80; # Interne IP und Port   
               }
# Web-Applikation 2
server { 
        listen 443 ssl; 
        server_name app2.domain.tld; # Domain für die erste Web-Applikation

        ssl on; 
        ssl_certificate /usr/local/etc/nginx/openssl/certs/app2.domain.tld.combo.pem; # Zertifikatsbundle für zweite Web-Applikation 
        ssl_certificate_key/usr/local/etc/nginx/openssl/private/app2.domain.tld.nopass.key; #Zertifikatsschlüssel für zweite WebApplikation# Manche Web-Applikationen leiten einen auf http:// um. Die nachfolgende Anweisung leitet http:// anfragen an Port 443 auf https:// um
        error_page 497 = https://$server_name:$server_port$request_uri;
                         
        location /                           
               {                               
                proxy_set_header X-Real-IP  $remote_addr;    
                proxy_set_header X-Forwarded-For $remote_addr;   
                proxy_set_header Host $host;                    
                proxy_pass http://192.168.0.9:8080; # Interne IP und Port  
               }                                        
}

Datum: 22.04.2015     Zuletzt aktualisiert: 15.01.2019

ECC RAM oder nicht?

Manchmal nimmt man ein System in Betrieb und ist sich nicht ganz sicher, ob die ECC Fehlerkorrektur des Arbeitsspeichers läuft oder nicht.
Bei unixoiden Systemen kann man dies folgendermaßen herausfinden.

Konsolen Kommando dmidecode -t 17 zeigt an, was Speichertechnisch am System eingebunden ist.

[...]
Handle 0x0016, DMI type 17, 28 bytes
​Memory Device
        Array Handle: 0x0014
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 8192 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM0
        Bank Locator: BANK0
        Type: Other
        Type Detail: Synchronous
        Speed: 1333 MHz
        Manufacturer: Manufacturer00
        Serial Number: SerNum00
        Asset Tag: Not Specified
        Part Number: ModulePartNumber00
        Rank: Unknown
[...]

In diesem Fall wird angezeigt: Data Width = 64bits und Total Width = 72 bits. Also 64 Bits und 8 Bits Parität. Das bedeutet ECC wird verwendet.

Schaut man auf einem anderem System ohne ECC steht dort bei Data Width und Total Width derselbe Zahlenwert.

Achtung: Softwaretechnisch ist es für Software/Betriebssysteme nicht relevant ob der Speicher ECC unterstützt/nutzt oder nicht. 
Deshalb gibt es im Consumer-Hardwarebereich leider immer wieder BIOS/Chipsätze die dem Betriebssystem erst gar nicht verraten ob ECC genutzt wird. Hier hat man leider keine andere Wahl, als dem Mainboard blind zu vertrauen. Professionelle Serverhardware dagegen gibt diese Information an das System weiter.


Datum: 22.04.2015     Zuletzt aktualisiert: 02.03.2017
Tags: ECC, Error Correction, RAM, Arbeitsspeicher, dmidecode, Server