Archiv Februar 2016

Mittwoch, 24. Februar 2016

Eine interne Smokeping-Installation über Apache Reverse Proxy verfügbar machen

Heute morgen (US Pacific-Zeit) habe ich mir einige Minuten Zeit genommen, um eine Smokeping-Installation auf dem Linux-Server (nennen wir ihn BETA) in meiner Wohnung in Bern über einen Linux-Server im Elternhaus in Neuenegg zugänglich zu machen. Nur der Apache 2.4 Web-Server auf dem Linux-Server im Elternhaus (nennen wir ihn ALPHA) ist öffentlich aus dem Internet zugänglich.

Wenn Smokeping auf einem bestehenden Server bereits installiert, konfiguriert und aufrufbar ist, ist dieses Vorhaben äusserst simpel:

Als erstes laden wir auf ALPHA die benötigten zwei Proxy-Module:

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/proxy.conf .
# ln -s ../mods-available/proxy_http.conf .

Weiter erstellen wir ebenfalls auf ALPHA einen virtuellen Host mit folgenden Angaben:

<VirtualHost *:80>
	ServerName smokeping-beta.bern.homeip.net
	ServerAdmin info@eMeidi.com
	
	ProxyPass	/	http://10.1.2.3/
	
	<Location />
		AuthName		"Eyes Only"
		AuthType 		Digest
		AuthUserFile		/etc/apache2/auth/users.digest
		AuthDigestProvider	file
		AuthDigestDomain	/
		
		Require			valid-user
	</Location>
</VirtualHost>

Diese Angaben legen wir unter /etc/apache2/sites-available ab und nennen die Datei beispielsweise smokeping-bern. Schlussendlich aktivieren wir diese folgendermassen:

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/smokeping-bern

Anschliessend starten wir auf ALPHA den Web-Server neu:

# apache2ctl graceful

Damit Smokeping in der Folge sauber mit allen relativen Pfaden funktioniert, aber auch die Bilder (RRDtool-Graphen) angezeigt werden, rufe ich die Web-Site auf einem beliebigen Computer mit Internetverbindung folgendermassen auf:

http://smokeping-beta.bern.homeip.net/smokeping/smokeping.cgi

WICHTIG: Damit nur authentifizierte Personen auf diesen Reverse Proxy zugreifen können, schütze ich den gesamten Virtual Host mit Benutzernamen und Passwort. Dies ist deshalb auch wichtig, weil meine Konfiguration alle Anfragen auf den Virtual Host an den anderen Server weiterleitet — habe ich in anderen Unterverzeichnissen noch andere Applikationen laufen, wären diese ebenfalls über den Reverse Proxy ansprechbar. Das ist nicht schön, aber momentan als Quick & Dirty-Lösung akzeptabel.

Tags: , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Montag, 22. Februar 2016

China: Zu viele Dollars in den Büchern, zu wenig Ausgabemöglichkeiten

Instead of buying U.S. Treasury securities, China would prefer to buy American companies, just like U.S. investors are buying Chinese industry. But America’s government won’t permit China even to buy gas station companies.

Quelle: The Federal Reserve and the Global Fracture

14 Prozent Rendite — nähme ich auch gerne:

Part of the flood of dollar credit is used to buy shares of foreign companies yielding 15 to 20 percent, and foreign bonds. These dollars are turned over to foreign central banks for domestic currency. But central banks are only able to use these dollars to buy U.S. Treasury securities, yielding about 1 percent.

Labels: Asien, USA, Wirtschaft

Keine Kommentare | neuen Kommentar verfassen

Montag, 22. Februar 2016

Schwangerschaften von Mitarbeiterinnen vorhersagen: In den USA Wirklichkeit

To determine which employees might soon get pregnant, Castlight recently launched a new product that scans insurance claims to find women who have stopped filling birth-control prescriptions, as well as women who have made fertility-related searches on Castlight’s health app.

Quelle: Bosses Tap Outside Firms to Predict Which Workers Might Get Sick

Schöne neue Welt. Würde man diesen Ansatz perfektionieren, würde man die App direkt mit SAP HR koppeln und noch am selben Tag die Kündigung aussprechen. Dem Shareholder würde es gefallen.

Tags:
Labels: Arbeit, Gesellschaft, USA

Keine Kommentare | neuen Kommentar verfassen

Montag, 22. Februar 2016

Die ultimative Mehrheitspolitik

Natürlich kann man sich an das Credo Oskar Lafontaines halten, wonach man immer die Mehrheit auf seiner Seite hätte, wenn man Politik nur für Rentner, Arbeitslose und sozial Schwache macht.

Quelle: Beck flucht nur linken Falschfahrern hinterher

Tags:
Labels: Politik

Keine Kommentare | neuen Kommentar verfassen

Montag, 15. Februar 2016

Hip Hop-Song in JeruZalem (2015)

Gestern entdeckten wir auf unserem Apple TV das Poster des Horrorfilms JeruZalem (2015). Als wir uns voller Interesse den Trailer des Streifens aus Israel anschauten, hörte ich bald einmal den fetten Hip Hop-Beat aus den Lautsprechern dröhnen (im nachfolgenden Trailer ab der 11. Sekunde bis ca. 26 Sekunden):

In einer Arbeitspause wollte ich heute Morgen der Sache auf den Grund gehen und den Künstler ausfindig machen, welcher sich mit diesem Song verewigt hat. Da ich aber weder YouTube-Filme schauen, noch die Lautsprecher für Shazam aufdrehen wollte, fand ich nach einer kurzen Google-Suche folgenden Dienst, welcher versprach, mir die manuelle Shazam-Erkennung abzunehmen:

MooMa.sh

Leider schlug der Dienst für diesen Trailer nur folgenden Song vor — nicht das, was ich gesucht hatte (immerhin der Beat tönte ähnlich):

Ich musste also trotzdem bis heute Abend warten, damit ich den Song mit Shazam auf meinem iPhone erkennen konnte. Und siehe da, innert eines Bruchteils einer Sekunde erschien folgende Angabe auf dem Bildschirm: Saz (Sameh Zakout) — Hip Hop. Und YouTube führt den Song ebenfalls:

Mittlerweile habe ich mir prompt das ganze Album Min Youm („Since That Day“?) des Künstlers gekauft — es findet sich im Schweizer iTunes-Store.

Sameh Zakout ist übrigens Palästinenser, nicht wie von mir ursprünglich vermutet jüdischer Israeli.

Tags: , , , , , ,
Labels: Leben

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 14. Februar 2016

New York Times-Videos herunterladen

Heute wollte ich mir ein informatives Video der New York Times herunterladen, in welchem die Entdeckung von Gravitationswellen erläutert wird: Gravitational Waves Detected, Confirming Einstein’s Theory

Leider wird das Video gestreamt und kann nicht wie früher als komplettes MP4 heruntergeladen werden.

Mit Safaris Develop > Show Page Resources Menu war es mir dann aber rasch möglich, im Ordner „Other“ den Aufruf einer m3u8-Videoplaylist zu beobachten:

NYTimes m3u8
image-6531

Bewaffnet mit dieser URL und der Unterstützung des geliebten ffmpeg konnte ich dann das Video streamen und im MP4-Format ablegen:

$ ffmpeg -i "http://vp.nyt.com/video/2016/02/13/38248_1_out-there-g-waves_wg_hls/master.m3u8" -strict -2 video.mp4
ffmpeg version 2.8.3 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libsoxr --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-indev=jack --disable-outdev=xv --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --enable-vda --enable-videotoolbox --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
[http @ 0x7fa8b1710060] No trailing CRLF found in HTTP header.
[http @ 0x7fa8b1710ba0] No trailing CRLF found in HTTP header.
[http @ 0x7fa8b153de80] No trailing CRLF found in HTTP header.
[http @ 0x7fa8b1536cc0] No trailing CRLF found in HTTP header.
[http @ 0x7fa8b2809660] No trailing CRLF found in HTTP header.
[http @ 0x7fa8b290fa60] No trailing CRLF found in HTTP header.
Input #0, hls,applehttp, from 'http://vp.nyt.com/video/2016/02/13/38248_1_out-there-g-waves_wg_hls/master.m3u8':
  Duration: 00:04:37.00, start: 10.000000, bitrate: 0 kb/s
  Program 0 
    Metadata:
      variant_bitrate : 3900747
    Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709/bt709/unknown), 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Metadata:
      variant_bitrate : 3900747
    Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 51 kb/s
    Metadata:
      variant_bitrate : 3900747
  Program 1 
    Metadata:
      variant_bitrate : 426834
    Stream #0:2: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 426x240 [SAR 1:1 DAR 71:40], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Metadata:
      variant_bitrate : 426834
    Stream #0:3: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 51 kb/s
    Metadata:
      variant_bitrate : 426834
  Program 2 
    Metadata:
      variant_bitrate : 1039878
    Stream #0:4: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Metadata:
      variant_bitrate : 1039878
    Stream #0:5: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 51 kb/s
    Metadata:
      variant_bitrate : 1039878
  Program 3 
    Metadata:
      variant_bitrate : 1652921
    Stream #0:6: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, smpte170m/smpte170m/unknown), 854x480 [SAR 1:1 DAR 427:240], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Metadata:
      variant_bitrate : 1652921
    Stream #0:7: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 51 kb/s
    Metadata:
      variant_bitrate : 1652921
  Program 4 
    Metadata:
      variant_bitrate : 2674660
    Stream #0:8: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709/bt709/unknown), 1280x720 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Metadata:
      variant_bitrate : 2674660
    Stream #0:9: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 51 kb/s
    Metadata:
      variant_bitrate : 2674660
  Program 5 
    Metadata:
      variant_bitrate : 97776
    Stream #0:10: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 51 kb/s
    Metadata:
      variant_bitrate : 97776
[libx264 @ 0x7fa8b402d000] using SAR=1/1
[libx264 @ 0x7fa8b402d000] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x7fa8b402d000] profile High, level 4.0
[libx264 @ 0x7fa8b402d000] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'video.mp4':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc
    Metadata:
      variant_bitrate : 3900747
      encoder         : Lavc56.60.100 libx264
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      variant_bitrate : 3900747
      encoder         : Lavc56.60.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[http @ 0x7fa8b2b04620] No trailing CRLF found in HTTP header.rate=   0.2kbits/s dup=1 drop=0    
[hls,applehttp @ 0x7fa8b3000000] No longer receiving playlist 1
[hls,applehttp @ 0x7fa8b3000000] No longer receiving playlist 2
[hls,applehttp @ 0x7fa8b3000000] No longer receiving playlist 3
[hls,applehttp @ 0x7fa8b3000000] No longer receiving playlist 4
[hls,applehttp @ 0x7fa8b3000000] No longer receiving playlist 5
[http @ 0x7fa8b153dea0] No trailing CRLF found in HTTP header.trate= 129.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b1710a60] No trailing CRLF found in HTTP header.trate= 934.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a06800] No trailing CRLF found in HTTP header.trate=1266.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b290f640] No trailing CRLF found in HTTP header.trate=1687.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b1602500] No trailing CRLF found in HTTP header.trate=1430.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b1408e60] No trailing CRLF found in HTTP header.trate=1839.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b2949ac0] No trailing CRLF found in HTTP header.trate=2542.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b17134c0] No trailing CRLF found in HTTP header.trate=2730.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a03260] No trailing CRLF found in HTTP header.trate=2688.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b1718b20] No trailing CRLF found in HTTP header.trate=2669.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b153a500] No trailing CRLF found in HTTP header.trate=2726.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b1533700] No trailing CRLF found in HTTP header.trate=3060.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b2948ac0] No trailing CRLF found in HTTP header.trate=3412.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b17143a0] No trailing CRLF found in HTTP header.trate=3669.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b1403ae0] No trailing CRLF found in HTTP header.trate=3883.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b03b00] No trailing CRLF found in HTTP header.trate=4061.9kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a022a0] No trailing CRLF found in HTTP header.trate=4163.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b152e620] No trailing CRLF found in HTTP header.trate=4201.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b062c0] No trailing CRLF found in HTTP header.trate=4589.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b1401ee0] No trailing CRLF found in HTTP header.trate=4955.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b294dde0] No trailing CRLF found in HTTP header.trate=5290.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b290fa60] No trailing CRLF found in HTTP header.trate=5383.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b1534d80] No trailing CRLF found in HTTP header.trate=5476.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a03960] No trailing CRLF found in HTTP header.trate=5499.9kbits/s dup=1 drop=0    
[http @ 0x7fa8b1535ce0] No trailing CRLF found in HTTP header.trate=5433.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b074e0] No trailing CRLF found in HTTP header.trate=5348.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b294cda0] No trailing CRLF found in HTTP header.trate=5295.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b1713180] No trailing CRLF found in HTTP header.trate=5206.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b1403900] No trailing CRLF found in HTTP header.trate=5077.6kbits/s dup=1 drop=0    
[http @ 0x7fa8b1712340] No trailing CRLF found in HTTP header.trate=4959.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b1605f40] No trailing CRLF found in HTTP header.trate=4834.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b1536700] No trailing CRLF found in HTTP header.trate=4884.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b1534300] No trailing CRLF found in HTTP header.trate=4905.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b1534320] No trailing CRLF found in HTTP header.trate=4854.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b294fb40] No trailing CRLF found in HTTP header.trate=4758.6kbits/s dup=1 drop=0    
[http @ 0x7fa8b1401a00] No trailing CRLF found in HTTP header.trate=4719.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b16048e0] No trailing CRLF found in HTTP header.trate=4656.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b2803680] No trailing CRLF found in HTTP header.trate=4603.5kbits/s dup=1 drop=0    
[http @ 0x7fa8b1606b40] No trailing CRLF found in HTTP header.trate=4587.9kbits/s dup=1 drop=0    
[http @ 0x7fa8b1402a00] No trailing CRLF found in HTTP header.trate=4594.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a03c60] No trailing CRLF found in HTTP header.trate=4618.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b1403a20] No trailing CRLF found in HTTP header.trate=4624.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b294c9e0] No trailing CRLF found in HTTP header.trate=4669.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a03da0] No trailing CRLF found in HTTP header.trate=4708.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b1404820] No trailing CRLF found in HTTP header.trate=4697.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b1604620] No trailing CRLF found in HTTP header.trate=4695.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b153a0c0] No trailing CRLF found in HTTP header.trate=4719.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a032e0] No trailing CRLF found in HTTP header.trate=4712.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b28056a0] No trailing CRLF found in HTTP header.trate=4757.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b2805680] No trailing CRLF found in HTTP header.trate=4802.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a027a0] No trailing CRLF found in HTTP header.trate=4848.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b28066c0] No trailing CRLF found in HTTP header.trate=4901.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a03680] No trailing CRLF found in HTTP header.trate=4898.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b294b8c0] No trailing CRLF found in HTTP header.trate=4900.6kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b0afe0] No trailing CRLF found in HTTP header.trate=4900.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b1602440] No trailing CRLF found in HTTP header.trate=4900.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a062e0] No trailing CRLF found in HTTP header.trate=4935.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b1717840] No trailing CRLF found in HTTP header.trate=4923.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b280c880] No trailing CRLF found in HTTP header.trate=4914.9kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a02340] No trailing CRLF found in HTTP header.trate=4849.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b1602b00] No trailing CRLF found in HTTP header.trate=4797.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b10f20] No trailing CRLF found in HTTP header.trate=4750.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b2808620] No trailing CRLF found in HTTP header.trate=4713.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b1404980] No trailing CRLF found in HTTP header.trate=4892.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b14044a0] No trailing CRLF found in HTTP header.trate=5097.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a04ea0] No trailing CRLF found in HTTP header.trate=5236.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b1536d40] No trailing CRLF found in HTTP header.trate=5251.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b294ade0] No trailing CRLF found in HTTP header.trate=5216.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a01d80] No trailing CRLF found in HTTP header.trate=5159.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b15371e0] No trailing CRLF found in HTTP header.trate=5116.1kbits/s dup=1 drop=0    
[http @ 0x7fa8b2953fc0] No trailing CRLF found in HTTP header.trate=5068.9kbits/s dup=1 drop=0    
[http @ 0x7fa8b2954100] No trailing CRLF found in HTTP header.trate=5021.2kbits/s dup=1 drop=0    
[http @ 0x7fa8b2804b60] No trailing CRLF found in HTTP header.trate=4988.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b2948fc0] No trailing CRLF found in HTTP header.trate=4956.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b2805bc0] No trailing CRLF found in HTTP header.trate=4937.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b1567be0] No trailing CRLF found in HTTP header.trate=4907.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b16030e0] No trailing CRLF found in HTTP header.trate=4892.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b2950600] No trailing CRLF found in HTTP header.trate=4893.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b0e9c0] No trailing CRLF found in HTTP header.trate=4882.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b1405380] No trailing CRLF found in HTTP header.trate=4892.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b1712340] No trailing CRLF found in HTTP header.trate=4891.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a03180] No trailing CRLF found in HTTP header.trate=4888.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b171d040] No trailing CRLF found in HTTP header.trate=4883.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b1717520] No trailing CRLF found in HTTP header.trate=4867.7kbits/s dup=1 drop=0    
[http @ 0x7fa8b153de80] No trailing CRLF found in HTTP header.trate=4864.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b1402a40] No trailing CRLF found in HTTP header.trate=4849.4kbits/s dup=1 drop=0    
[http @ 0x7fa8b14026a0] No trailing CRLF found in HTTP header.trate=4878.3kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b09980] No trailing CRLF found in HTTP header.trate=4861.0kbits/s dup=1 drop=0    
[http @ 0x7fa8b1710980] No trailing CRLF found in HTTP header.trate=4841.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b2a024c0] No trailing CRLF found in HTTP header.trate=4829.8kbits/s dup=1 drop=0    
[http @ 0x7fa8b2b0d080] No trailing CRLF found in HTTP header.trate=4812.2kbits/s dup=1 drop=0    
frame= 8280 fps= 19 q=-1.0 Lsize=  161479kB time=00:04:36.20 bitrate=4789.2kbits/s dup=3 drop=0    
video:156761kB audio:4396kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.199356%
[libx264 @ 0x7fa8b402d000] frame I:124   Avg QP:19.52  size: 97053
[libx264 @ 0x7fa8b402d000] frame P:4102  Avg QP:22.58  size: 27562
[libx264 @ 0x7fa8b402d000] frame B:4054  Avg QP:24.78  size:  8739
[libx264 @ 0x7fa8b402d000] consecutive B-frames: 26.8% 20.0% 10.9% 42.3%
[libx264 @ 0x7fa8b402d000] mb I  I16..4: 14.0% 61.1% 24.9%
[libx264 @ 0x7fa8b402d000] mb P  I16..4:  2.8%  5.4%  1.2%  P16..4: 40.5%  9.3%  4.3%  0.0%  0.0%    skip:36.4%
[libx264 @ 0x7fa8b402d000] mb B  I16..4:  0.1%  0.2%  0.2%  B16..8: 41.5%  2.5%  0.4%  direct: 1.2%  skip:54.0%  L0:49.9% L1:48.4% BI: 1.8%
[libx264 @ 0x7fa8b402d000] 8x8 transform intra:57.5% inter:60.3%
[libx264 @ 0x7fa8b402d000] coded y,uvDC,uvAC intra: 47.1% 38.5% 6.2% inter: 12.1% 9.3% 0.2%
[libx264 @ 0x7fa8b402d000] i16 v,h,dc,p: 26% 31% 13% 30%
[libx264 @ 0x7fa8b402d000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 18% 33%  4%  5%  4%  5%  3%  5%
[libx264 @ 0x7fa8b402d000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 18% 25%  8%  8%  6%  8%  5%  6%
[libx264 @ 0x7fa8b402d000] i8c dc,h,v,p: 63% 21% 11%  4%
[libx264 @ 0x7fa8b402d000] Weighted P-Frames: Y:16.9% UV:11.9%
[libx264 @ 0x7fa8b402d000] ref P L0: 63.1% 15.1% 16.2%  5.3%  0.3%
[libx264 @ 0x7fa8b402d000] ref B L0: 86.4% 12.3%  1.4%
[libx264 @ 0x7fa8b402d000] ref B L1: 95.8%  4.2%
[libx264 @ 0x7fa8b402d000] kb/s:4648.19

Tags: , , , ,
Labels: Uncategorized

1 Kommentar | neuen Kommentar verfassen

Freitag, 5. Februar 2016

UniFi Controller unter Debian installieren

Dank den .deb-Paketen, welche der Hersteller zur Verfügung stellt, eine Sache von wenigen Minuten.

/etc/apt/sources.list

Hier fügt man folgende Zeile ein:

...
deb http://www.ubnt.com/downloads/unifi/debian unifi5 ubiquiti

Quelle: Updated UniFi Repo info/APT howto

Aktualisierung: stable mit unifi5 ersetzt (Juni 2016; Dank an Joachim, siehe Kommentar unten)

apt-get

Als erstes liest man die Paketlisten neu ein:

# apt-get update

Sollte es zu Probleme mit dem GPG-Schlüssel kommen, könnten folgende Befehle helfen:

# apt-key adv --keyserver keyserver.ubuntu.com --recv C0A52C50
# apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

Anschliessend installiert man das Paket:

# apt-get install unifi
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
 binutils ca-certificates-java default-jre-headless java-common jsvc libasyncns0 libboost-filesystem1.55.0 libboost-program-options1.55.0
 libboost-system1.55.0 libboost-thread1.55.0 libcommons-daemon-java libflac8 libgoogle-perftools4 libice6 libnspr4 libnss3 libogg0
 libpcrecpp0 libpcsclite1 libpulse0 libsctp1 libsm6 libsnappy1 libsndfile1 libtcmalloc-minimal4 libunwind8 libv8-3.14.5 libvorbis0a
 libvorbisenc2 libx11-xcb1 libxtst6 lksctp-tools mongodb-clients mongodb-server openjdk-7-jre-headless tzdata-java x11-common
Suggested packages:
 binutils-doc default-jre equivs java-virtual-machine pcscd pulseaudio icedtea-7-jre-jamvm libnss-mdns sun-java6-fonts fonts-dejavu-extra
 fonts-ipafont-gothic fonts-ipafont-mincho ttf-wqy-microhei ttf-wqy-zenhei fonts-indic
The following NEW packages will be installed:
 binutils ca-certificates-java default-jre-headless java-common jsvc libasyncns0 libboost-filesystem1.55.0 libboost-program-options1.55.0
 libboost-system1.55.0 libboost-thread1.55.0 libcommons-daemon-java libflac8 libgoogle-perftools4 libice6 libnspr4 libnss3 libogg0
 libpcrecpp0 libpcsclite1 libpulse0 libsctp1 libsm6 libsnappy1 libsndfile1 libtcmalloc-minimal4 libunwind8 libv8-3.14.5 libvorbis0a
 libvorbisenc2 libx11-xcb1 libxtst6 lksctp-tools mongodb-clients mongodb-server openjdk-7-jre-headless tzdata-java unifi x11-common
0 upgraded, 38 newly installed, 0 to remove and 5 not upgraded.
Need to get 305 MB of archives.
After this operation, 467 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Fertig!

UniFi Controller

Den Controller öffnet man nun, indem man folgende URL aufruft:

  • localhost:8443 (auf dem Server selber, aber wer von euch betreibt einen Linux-Server schon mit einem GUI?)
  • 192.168.44.44:8443 (oder welche IP der UniFi-Controller auch immer im heimischen LAN erhalten hat)

Nachtrag

Die PDF-Anleitung „Install and configure a Debian based UniFi controller“ findet sich bei einer Google-Suche zuoberst, sie ist aber veraltet. Insbesondere der Hinweis auf folgende Paketquelle funktionierte bei mir nicht mehr:

deb http://www.ubnt.com/downloads/unifi/distros/deb/debian debian ubiquiti

Die Fehlermeldung lautete:

W: Failed to fetch http://dl.ubnt.com/unifi/distros/deb/debian/dists/debian/ubiquiti/binary-amd64/Packages 404 Not Found

E: Some index files failed to download. They have been ignored, or old ones used instead.

Tags: , ,
Labels: Linux

6 Kommentare | neuen Kommentar verfassen

Freitag, 5. Februar 2016

Einen UniFi Controller von einem Server auf einen anderen migrieren

Mit Blick auf den Mitte Januar 2016 bestellten Glasfaser-Anschluss von Fiber7 habe ich mich entschieden, das heimische WLAN aufzurüsten (nicht zuletzt, weil ich den Router wegen des Glasfaseranschlusses in der Stube nicht am selben Ort betreiben möchte wie den Wireless Access Point). Hierzu habe ich die WLAN-Funktionalität meines Asus RT-AC66U deaktiviert und mir danach einen Ubiquiti UniFi AP-Pro n450 angeschafft, mitsamt eines PoE-Switches von TP-Link.

Eine Besonderheit des UniFi-Access Points ist es, dass er selber keine Web-Oberfläche zur Konfiguration anbietet, wie es Consumer-Geräte sonst tun (auch eine Router-Funktionalität sucht man vergebens). Stattdessen benötigt man den sog. UniFi Controller, eine auf Java und MongoDB basierende Software, die auf einem Rechner im heimischen LAN installiert werden muss. Die Software muss übrigens nicht ständig laufen — wenn man die Konfiguration des APs abgeschlossen hat, benötigt der AP keine ständige Verbindung mehr zum Controller. Ich entschied mich gegen diese Lösung, da ich den Controller jederzeit zugriffsbereit und funktionstüchtig haben möchte — man weiss ja nie. Ausserdem zeichnet die Software in dem Modus Vitalparameter des APs und der WLAN-Netzwerke auf.

Zuerst hatte ich den UniFi Controller auf meiner „Workstation“, einem Mac mini, installiert, welcher ständig läuft. Da mir dabei nie wirklich wohl war, entschied ich mich, den alten Raspberry Pi 1 auszugraben und den Controller darauf zu installieren. Das ist insofern etwas weniger trivial als bei einem x86-Server, weil die ARM-CPU andere Softwarepakete benötigt (insbesondere MongoDB). Ich habe es dank Anleitungen im Internet trotzdem hingekriegt (das Material wird dereinst zu einem eigenständigen Blog-Artikel verwurstet). Da ich anschliessend auch Smokeping auf dem Raspberry Pi installierte und mir die Performance zur Generierung der RRDtool-Graphen überhaupt nicht mehr reichte, entschied ich mich diese Woche, auf einen (gebrauchten) Intel Next Unit of Computing NUC DC3217IYE zu migrieren. Mitkommen sollte auch der UniFi Controller.

Da ich das Spielchen bereits einmal gemacht hatte, hier die im Grunde recht triviale Anleitung (Kurzfassung):

  1. In den alten UniFi-Controller einloggen und unter Settings > Maintenance > Backup > Download Backup ein aktuelles Backup herunterladen
  2. Den neuen UniFi-Controller auf dem neuen Server installieren (Anleitungen für Raspberry Pi und Debian folgen dereinst)
  3. Mit dem Browser auf den neuen UniFi-Controller verbinden
  4. Auf dem Homescreen des neuen UniFi-Controllers im Abschnitt „Alternatively you can restore from a previous backup“ die soeben generierte Backup-Datei auf „Choose File“ ablegen und warten (auf dem Raspberry Pi dauerte das Einlesen des Backups mehrere Minuten, unter dem NUC wenige Sekunden)
  5. Login auf den neuen UniFi-Controller — WLAN sollte Rot leuchten
  6. Login auf den Server des alten UniFi-Controllers und diesen Controller stoppen (service stop unifi)

UniFi Controller Import Backup
image-6517

Soweit so gut. Als nächstes muss man sich per SSH auf den Access Point verbinden — bei mir völlig ohne Interaktion, da ich den Access Point mit meinem SSH Public Key ausgestattet habe:

$ ssh unifi

Anschliessend startet man das CLI des lokalen Management Utility:

# mca-cli

Dort gibt man folgenden Befehl ein:

$ set-inform http://10.0.1.12:8080/inform

Wechselt man nun in den Browser zur Web-Oberfläche des neuen UniFi-Controllers, leuchtet WLAN grün — der Access Point wurde in der Zwischenzeit erkannt.

Voila, that’s it!

PS Eins: In Anleitungen im Netz liest man gelegentlich, dass man den AP im Web-GUI noch „adoptieren“ und danach noch einmal den set-inform-Befehl ausführen müsse — bei mir klappte dies auch ohne.

PS Zwei: Der alte UniFi-Controller lief unter 4.7.6, der neue läuft unter 4.8.12. Beim Import der Backup-Konfiguration gab es keine Probleme.

Tags: , , , , , , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Freitag, 5. Februar 2016

Einem Benutzer unter Debian volle sudo-Rechte geben

Eigentlich ganz simpel:

# visudo /etc/sudoers

Danach sucht man folgenden Abschnitt und ergänzt unterhalb der Zeile, die mit root beginnt, den gewünschten Benutzer:

...
# User privilege specification
root	ALL=(ALL:ALL) ALL
user	ALL=(ALL:ALL) ALL
...

Fertig! Ab sofort kann sich der Benutzer beispielswiese mittels

$ sudo su -

zum Superuser auf dem Debian-Server machen.

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen