Freenas 8.2.x: Beta, neue Funktionen, Plugin-System

Transmission als Plugin in FreeNAS
Transmission als Plugin in FreeNAS
Freenas 8.2 liegt derzeit in einer zweiten Beta-Version vor und soll voraussichtlich im Mai final erscheinen. Wesentliche Änderung neben des wechsels auf FreeBSD 8.2 als Unterbau ist die Unterstützung von Plugins, sodass verschiedene Software (darunter auch minidlna für Medien-Support). Ein Upgrade von einer bestehenden Freenas 8.0.4-Installation soll problemlos möglich sein, von der Verwendung der Beta-Version auf einer produktiven Maschine mit Daten ist abzuraten.

Ich habe mir das neue System schon einmal angeschaut. Plugins werden als PBI-Dateien verteilt, zuerst muss jedoch das Plugin-System aktiviert werden. Eine Anleitung dazu gibt es im Freenas-Wiki, weswegen ich das hier nicht noch einmal ausführe. Derzeit gibt es nur drei Plugins: minidlna (für DLNA-Support), transmission (als Bittorrent-Client) und firefly als iTunes-Server (auch wenn die Versionen anscheinend nicht mehr weiter entwickelt wird).

Ich habe zuerst einmal versucht, transmission einzurichten – aber anscheinend gibt es allgemein noch Probleme, zumindest in meiner Testinstallation (realisiert via VirtualBox 4.1.10) hat es nicht funktioniert (kein Zugriff auf transmission), was allerdings auch an der Installation selbst liegen kann. Das wird man auf einem Live-System sehen müssen – aber gerade bei einem NAS sollte man nicht mit dem Betriebssystem herumspielen, wenn einem die Daten lieb sind 😉

Transmission als Plugin in FreeNAS

Freenas 8.0.x Multimedia: DLNA einrichten

Im Gegensatz zu Freenas 0.7.x bringt Freenas 8.0.x bisher keinen DLNA-Spport. Dies hat sich jetzt zwar mit dem „Multimedia“-Build. Vom regulären Freenas kann ohne weiteres auf „Multimedia“ geupdatet werden (auch wenn vorher die gleiche Version eingesetzt wurde, z.B. von Freenas 8.0.3-p1 auf 8.0.3-p1-Multimedia. Wenn das geschafft ist (also eine Variante mit Multimedia-Support läuft) muss DLNA nur noch aktiviert werden – eingesetzt wird minidlna.

Zuerst muss das System auf dem USB-Stick (oder wo auch immer Freenas installiert ist), mit Schreibzugriff gemountet werden:

mount -wu /

Nun muss auf dem Datenpool ein entsprechendes Verzeichnis angelegt werden, in dem später die minidlna-Config untergebracht wird und wo die Caches für Vorschaubilder liegen etc. „pool“ muss dabei an die Gegenbenheiten des eigenen Systems angepasst werden (in meinem Fall heißt das Laufwerk „Daten“).

mkdir -p /mnt/pool/dlna/var/db/minidlna
cd /mnt/pool/dlna

Nun die Grundkonfiguration in das neu erstelle Verzeichnis kopieren und im Editor öffnen:

cp /conf/base/etc/local/minidlna.conf .
ee minidlna.conf

In der minidlna.conf gibt es verschiedene Einträge, für Bilder, Videos und Musik (oder einer Kombination daraus). Dort muss jeweils das richtige Verzeichnis angegeben werden sowie ein Name für den DLNA-Server konfiguriert werden (weitere Möglichkeiten kann man der Datei entnehmen), z.B.:

media_dir=V,/mnt/pool/movies
media_dir=A,/mnt/pool/music
media_dir=P,/mnt/pool/photos
friendly_name=Media Server

Um minidlna bei jedem Start zu laden, muss es in der rc.conf aktiviert werden:

cd /conf/base/etc
ee rc.conf

Dort den entsprechenden Eintrag von „NO“ auf „YES“ ändern:

minidlna_enable="YES"
minidlna_flags="-f /mnt/pool/dlna/minidlna.conf"

Das wars – wenn alles richtig gelaufen ist, taucht nach einem Neustart ein DLNA-Server im Netzwerk auf. Leider erkennt minidlna neue Dateien nicht automatisch und muss deshalb regelmäßig neu gestartet werden. Der Befehl dafür:

service minidlna restart

Ich habe mir das in einen Cronjob gepackt, einmal pro Tag um 04:30 ausgeführt wird – wenn man einen neu hinzugefügten Film sofort sehen will, muss man minidlna von Hand neu starten, lässt man den Cronjob jedoch häufiger laufen unterbricht das den Film/Musikgenuss. Ob dies in Zukunft geändert werden kann, ist noch offen. Außerdem soll es in zukünftigen Freenas-Version (ab 8.2.x) möglich sein, DLNA direkt über das Webinterface zu konfigurieren. Quelle für diese kurze Anleitung ist der entsprechende Thread im Freenas-Forum: dort wird auch beschrieben, wie man Bittorrent und iTunes-Support aktivieren kann.

Update:FreeNAS 8.2.0 ist erschienen, welches minidlna als Plugin mitbringt. Wie dies am besten Konfiguriert werden kann beschreibe ich im entsprechenden Blog-Eintrag: minidlna.conf-Tuning unter FreeNAS.

Update 2: Wer ein komplett neues FreeNAS-System aufsetzen will, findet vielleicht eine hilfreiche Anregung in meiner Einkaufsliste für ein NAS auf Basis des HP N40L Microservers. Für rund 500 Euro bekommt man ein erweiterbares System, welches genug Leistung für verschiedene Anwendungen hat – darunter auch einen minidlna-Server.

nginx: Expires für Bilder

Nachdem ich erst versucht habe, nginx dazu zu überreden, nur Bilder über einen entsprechenden „location“-Block mit einem expires-Header zu versehen. Das hat leider nicht geklappt (Ergebnis: Bilder wurden nicht mehr gefunden). Lösung: für die globale location entsprechend gesetzt greifen die expires-Header (jetzt bei mir auf 8d gestellt).

location / {
root /var/www;
try_files $uri $uri/ /index.php;
expires 8d;
}

Das greift zumindest in meinem Fall für Bilder und andere statische Dateien, insbesondere Bilder. Dynamische Dateien wie PHP-Scripte werden dadurch nicht beeinträchtigt. Insgesamt ist dieser Blog jetzt auf einem Page Speed Score von 82/100, was auch durch das aktivierte Browsercaching begünstigt wird. Nächster Plan: JavaScript ans Ende der Seite verbannen und Bilder in Sprites kombinieren (um die Zahl der Requests weiter zu senken).

Nginx: GZIP aktivieren

Um die Datenübertragung zu beschleunigen und den Datentransfer zu minimieren sollte GZIP für JavaScript, CSS und HTML-Dateien aktiviert werden.

Per default ist Gzip nicht für alle relevanten Mimetypes aktiviert, sodass dies in der nginx.conf nachgeholt werden sollte (im http-Bereich hinzufügen):

gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_proxied any;
gzip_buffers 16 8k;
gzip_types text/plain text/html text/css text/xml application/x-javascript application/xml application/xml+rss text/javascript;
gzip_vary on;

Danach sollte Googles Pagespeed-Test eine deutliche Verbesserung zeigen – fehlende GZIP-Komprimierung wird dort nach wie vor als wirklich kritisches Problem eingestuft, welches nach aktiviertem Gzip besser wird. Mein nächster Plan: Cache-Zeiten via expires zu aktivieren, was derzeit bei diesem WordPress-Blog noch dazu führt, dass kein CSS mehr geladen wird.

Mehr zum Thema nginx und php gibt es im entsprechenden Blogpost. Nginx läuft mit GZIP problemlos und vollkommen stabil.

[amazon_link asins=’1491924772,1785280333,B00X40K8M8,B01GI4C982,B01L17AQZ4′ template=’ProductCarousel‘ store=’techbloggernet-21′ marketplace=’DE‘ link_id=’7b653bdf-d937-11e7-9c10-df7e40eff9dd‘]

nginx + PHP unter Debian (+ W3TC)

nginx ist ein schneller Webserver, der sich auch als Reverse Proxy oder zum Streaming von Flash-Videos einsetzen lässt. Ursprünglich entwickelt für die Anforderungen einer russischen Suchmaschine setzen auch immer mehr Webprojekte auf nginx. Anders als beim bekannten Apache-Webserver ist die Konfiguration von nginx unter Debian nicht ganz so simpel – es müssen noch Dateien von hand angepasst werden. Dieser Beitrag beschreibt die Basis-Änderungen, die nötig sind, um PHP5 mit Xcache als FastCGI-Einbindung unter Debian zum laufen zu kriegen. Die gezeigten Einstellungen sollten immer an die eigene Umgebung angepasst werden.

Installation
Mit folgendem Befehl werden die passenden Pakete installiert:

apt-get install php5-cgi php5-xcache php5-mysql nginx

Der mysql-Server ist in unserem Fall auf einem anderen Server untergebracht, ansonsten müsste zusätzliche noch das entsprechende Paket installiert werden. Der nächste Schritt ist die Einrichtung des nginx, wir behaltet dort weitgehenden den Debian-Standard bei. Mit dem Befehlt

/etc/init.d/nginx start

wird überprüft ob die Konfiguration bis hier hin funktioniert und der Webserver korrekt startet.

Konfiguration

Ist dies der Fall, müssen noch einige Anpassungen an der PHP-Einstellung für den jeweiligen Host sein (der Default-Host wird in „/etc/nginx/sites-available/default“ konfiguriert).

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; #php läuft auf Localhost, Port 9000
#fastcgi_index index.php; #wird für diese Konfiguration nicht benötigt
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; #legt das Verzeichnis fest
include /etc/nginx/fastcgi_params;
}

In der fastcgi_params, die von Debian unter /etc/nginx angelegt wird, muss ebenfalls noch etwas geändert werden. Folgende Zeilen müssen auskommentiert werden:

#fastcgi_param SCRIPT_NAME $document_root$fastcgi_script_name;

Jetzt kann php-cgi alleine gestartet werden, um zu schauen ob alles funktioniert:

php-cgi -b 127.0.0.1:9000

Eine php-info-Datei in /var/www sollte jetzt Informationen zum installieren PHP zurückliefern. Gibt es die Meldung „no input file specified“ stimmt noch etwas mit den Verzeichnissen nicht. Funktioniert alles, kann das php-cgi-Startscript aus dem Nginx-Wiki übernommen werden und Einstellungen am XCache etc. vorgenommen werden. auch sollten wie im Wiki beschrieben Upload-Verzeichnisse geschützt werden, damit dort kein PHP ausgeführt werden kann.

Demnächst geht es hier weiter mit Redirects unter Nginx und Klartext-URLs mit WordPress (wie sie dieser Blog auch schon verwendet).