Archiv März 2016

Sonntag, 27. März 2016

Sismics Docs installieren

Als Projekt für das Oster-Wochenende habe ich mir die Installation eines Dokumentenmanagementsystems (DMS) vorgenommen. Ziel ist es, die von mir seit Jahren gescannten Einkaufsbelege sauber in einem Archiv abzulegen und die Belege anschliessend mit meiner selbstprogrammierten Buchhaltungs-Applikation (PHP/MySQL) zu verknüpfen.

Nach einem wenig erfolgsversprechenden Umweg über Alfresco (zu gross, zu komplex, beansprucht zu viele Ressourcen) landete ich schlussendlich bei Sismics Docs, auch wenn dieses in einer Übersicht quelloffener DMS aus dem Jahr 2010 nicht erwähnt wird. Die Screenshots haben mich überzeugt, die Software zu installieren und herunterzuladen.

Da ich mich nicht mit Java-Applikationen auskenne, liefere ich hier eine Installationsanleitung. Sie richtet sich an Personen, welche ausreichend Linux-Erfahrung haben, anstelle aus der Java- aber aus der PHP/MySQL-Ecke kommen.

Repository auschecken

Als erstes legen wir uns eine lokale Kopie des Git-Repositories an:

# mkdir /usr/local/bin/sismics
cd /usr/local/bin/sismics
git clone https://github.com/sismics/docs.git .

To Dock or not to Dock

Unter den Dateien des Repositories finden sich Hinweise darauf, dass der Entwickler Docker zu verwenden scheint; u.a. existieren im Wurzelverzeichnis des Repositories die Dateien Dockerfile, build.sh und run-service.sh.

Ich konnte das Teil mit Docker aber nicht zum Laufen bringen. Dies aus mehreren Gründen:

i686

Der kräftigere meiner beiden Linux-Server, welcher im Elternhaus läuft, hat Debian i686 installiert, ein 32-bit Linux. Docker erfordert x86_64 (64-bit). Ein forciertes Upgrade tönt nach digitalem Selbstmord.

Die Bit-Architektur überprüfen kann man dies mit folgendem Befehl:

$ uname -m
x86_64

Docker installieren

Der Intel NUC, welcher in unserer Mietwohnung im Netzwerk hängt, hat ein x86_64 Linux am Laufen. Deshalb führte ich dort die Installation gemäss der offiziellen Anleitung aus.

Vorgängig musste ich noch herausfinden, welche Debian-Version ich installiert hatte:

# lsb_release -da
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 8.3 (jessie)
Release:	8.3
Codename:	jessie

Quelle: Check what Debian version you are running on your Linux system

Jessie! Anschliessend folgte ich der offiziellen Anleitung:

# apt-get install apt-transport-https ca-certificates
# apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
# echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list
# apt-get update
# apt-get install docker-engine
# service docker start
# docker run hello-world

Bingo, Docker läuft.

Image nicht gefunden

Leider funktioniert die Generierung des Images für das Sismics Docs nicht:

# cd /usr/local/bin/sismics
# docker build -t sismics:0.1 .
Sending build context to Docker daemon 14.35 MB
Step 1 : FROM sismics/debian-java7-jetty9
Pulling repository docker.io/sismics/debian-java7-jetty9
Error: image sismics/debian-java7-jetty9 not found

Mit dem Switch -t definiert man das Paket und den Tag (vgl. Docker — build.

*seufz* Okey, dann halt kein Docker.

Manuelle Installation

Nun gut, da wir den Docker-Weg nicht beschreiten können, verlassen wir den Intel NUC und wenden uns wieder dem kräftigeren Server zu.

Pakete

Damit man schon nur die Testumgebung des DMS hockriegt, benötigt man folgende Pakete:

# apt-get install maven tesseract-ocr openjdk-7-jdk

Testinstallation bauen

Sobald die Pakete auf dem Rechner liegen, bauen wir uns die Testinstallation:

# cd /usr/local/bin/sismics/docs-parent
# mvn clean -DskipTests install
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Docs Parent ........................................ SUCCESS [  7.114 s]
[INFO] Docs Core .......................................... SUCCESS [01:37 min]
[INFO] Docs Web Commons ................................... SUCCESS [ 47.086 s]
[INFO] Docs Web ........................................... SUCCESS [ 30.833 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:02 min
[INFO] Finished at: 2016-03-27T09:52:29+00:00
[INFO] Final Memory: 34M/94M
[INFO] ------------------------------------------------------------------------

Testinstallation starten

Nun starten wir die Testinstallation, um zu sehen, ob alles wie gewünscht funktioniert:

# cd /usr/local/bin/sismics/docs-web
mvn jetty:run
...
[INFO] Started ServerConnector@b40c2f{HTTP/1.1}{0.0.0.0:8080}
[INFO] Started @23372ms
[INFO] Started Jetty Server

Sobald diese Anzeige erscheint, können wir mit einem Web-Browser auf den Applikationsserver zugreifen:

10.1.2.3:8080/docs-web/src/

Das Standardpasswort des Administrator-Kontos lautet admin, wie eine Suche durch den Quellcode offenbart:

$ ack passw
...
docs-core/src/main/java/com/sismics/docs/core/constant/Constants.java
19:     * Administrator's default password ("admin").
...

Java Advanced Imaging

Die Web-Oberfläche funktioniert, man kann Dateien hochladen — doch ausgerechnet das erste PDF produzierte folgende Fehlermeldung im Log der Applikation:

Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed

Diese Tools installiert man sich folgendermassen:

$ cd /tmp
$ wget "https://install-java-jai-imageio.googlecode.com/files/install-java-jai-imageio"
# bash /tmp/install-java-jai-imageio

Quelle: Install Java Advanced Imaging ImageIO Tools on a Linux Machine

ACHTUNG: Bitte den Inhalt aller aus dem Netz heruntergeladenen Bash-Scripts gründlich prüfen, bevor man sie unter dem root-Account ausführt.

Weitere Pakete installieren

Rückblickendes Ziel meines Sonntagsprojekts war es, die Applikation unter dem Java-Applikationsserver Jetty persistent zum Laufen zu bringen. Hierzu bauen wir uns ein sog. war-File. Damit das auch sauber funktioniert, benötigen wir folgende Pakete:

# apt-get install nodejs npm
# ln -s /usr/bin/nodejs /usr/bin/node
# npm install -g grunt-cli

Wir sehen, ob alle nötigen Komponenten da sind, wenn folgende Befehle einen Wert zurückgeben:

$ which node
/usr/bin/node
$ which grunt
/usr/local/bin/grunt

Insbesondere das node-Binary ist zwingend nötig — bei den ersten Kompilationsversuchen erschien folgende Fehlermeldung …

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Docs Web 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ docs-web ---
[INFO] Deleting /usr/local/bin/sismics/docs-web/target
[INFO] 
[INFO] --- maven-antrun-plugin:1.8:run (default) @ docs-web ---
[INFO] Executing tasks

building:
     [exec] /usr/bin/env: ‘node’: No such file or directory
     [exec] Result: 127
[INFO] Executed tasks
[INFO] 
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ docs-web ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 1 resource
[INFO] Copying 1 resource
...

… und ich endete mit einem nur halbwegs funktionsfähigen .war, weil bestimmte nodejs-Komponenten fehlten:

building:
     [exec] /usr/bin/env: ‘node’: No such file or directory
     [exec] Result: 127

Der oben angelegte Symlink löst dieses Problem:

...
building:
     [exec] Running "clean:dist" (clean) task
     [exec] 
     [exec] Running "ngmin:dist" (ngmin) task
     [exec] ngminifying src/app/docs/app.js, src/app/docs/controller/Login.js, src/app/docs/controller/Main.js, src/app/docs/controller/Navigation.js, src/app/docs/controller/document/Document.js, src/app/docs/controller/document/DocumentDefault.js, src/app/docs/controller/document/DocumentEdit.js, src/app/docs/controller/document/DocumentModalPdf.js, src/app/docs/controller/document/DocumentModalShare.js, src/app/docs/controller/document/DocumentView.js, src/app/docs/controller/document/DocumentViewActivity.js, src/app/docs/controller/document/DocumentViewContent.js, src/app/docs/controller/document/DocumentViewPermissions.js, src/app/docs/controller/document/FileModalView.js, src/app/docs/controller/document/FileView.js, src/app/docs/controller/settings/Settings.js, src/app/docs/controller/settings/SettingsAccount.js, src/app/docs/controller/settings/SettingsDefault.js, src/app/docs/controller/settings/SettingsGroup.js, src/app/docs/controller/settings/SettingsGroupEdit.js, src/app/docs/controller/settings/SettingsLog.js, src/app/docs/controller/settings/SettingsSecurity.js, src/app/docs/controller/settings/SettingsSecurityModalDisableTotp.js, src/app/docs/controller/settings/SettingsSession.js, src/app/docs/controller/settings/SettingsUser.js, src/app/docs/controller/settings/SettingsUserEdit.js, src/app/docs/controller/settings/SettingsVocabulary.js, src/app/docs/controller/tag/Tag.js, src/app/docs/controller/usergroup/GroupProfile.js, src/app/docs/controller/usergroup/UserGroup.js, src/app/docs/controller/usergroup/UserProfile.js, src/app/docs/directive/Acl.js, src/app/docs/directive/AuditLog.js, src/app/docs/directive/File.js, src/app/docs/directive/ImgError.js, src/app/docs/directive/InlineEdit.js, src/app/docs/directive/SelectRelation.js, src/app/docs/directive/SelectTag.js, src/app/docs/filter/Filesize.js, src/app/docs/filter/Newline.js, src/app/docs/filter/Shorten.js, src/app/docs/service/Tag.js, src/app/docs/service/User.js, src/app/share/app.js, src/app/share/controller/FileModalView.js, src/app/share/controller/FileView.js, src/app/share/controller/Main.js, src/app/share/controller/Share.js, src/app/share/controller/ShareModalPdf.js, src/app/share/filter/Filesize.js, src/app/share/filter/Newline.js
     [exec] 
     [exec] Running "concat:docs" (concat) task
     [exec] File "dist/docs.js" created.
     [exec] 
     [exec] Running "concat:share" (concat) task
     [exec] File "dist/share.js" created.
     [exec] 
     [exec] Running "less:dist" (less) task
     [exec] File dist/less.css created.
     [exec] 
     [exec] Running "concat:css" (concat) task
     [exec] File "dist/style.css" created.
     [exec] 
     [exec] Running "cssmin:dist" (cssmin) task
     [exec] File 'dist/style/style.min.css' written.
     [exec] Uncompressed size: 165398 bytes.
     [exec] Compressed size: 31032 bytes gzipped (139383 bytes minified).
     [exec] 
     [exec] Running "uglify:docs" (uglify) task
     [exec] File dist/docs.min.js created.
     [exec] 
     [exec] Running "uglify:share" (uglify) task
     [exec] File dist/share.min.js created.
     [exec] 
     [exec] Running "copy:dist" (copy) task
     [exec] Created 23 directories, copied 53 files
     [exec] 
     [exec] Running "remove:dist" (remove) task
     [exec] 
     [exec] Running "cleanempty:src" (cleanempty) task
     [exec] Cleaning dist/locale...OK
     [exec] Cleaning dist/lib...OK
     [exec] 
     [exec] Running "htmlrefs:index" (htmlrefs) task
     [exec] 
     [exec] Running "htmlrefs:share" (htmlrefs) task
     [exec] 
     [exec] Running "replace:dist" (replace) task
     [exec] 
     [exec] Done, without errors.
...

Quelle: run npm command gives error „/usr/bin/env: node: No such file or directory“

.war kompilieren

Nun ist alles da, um das .war zu kompilieren:

# cd /usr/local/bin/sismics/docs-web
# mvn -Pprod -DskipTests clean install
...
[INFO] Installing /usr/local/bin/sismics/docs-web/target/docs-web-1.0-SNAPSHOT.war to /root/.m2/repository/com/sismics/docs/docs-web/1.0-SNAPSHOT/docs-web-1.0-SNAPSHOT.war
[INFO] Installing /usr/local/bin/sismics/docs-web/pom.xml to /root/.m2/repository/com/sismics/docs/docs-web/1.0-SNAPSHOT/docs-web-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.935 s
[INFO] Finished at: 2016-03-27T10:37:55+00:00
[INFO] Final Memory: 28M/68M
[INFO] ------------------------------------------------------------------------

Jetty installieren und das .war bekanntmachen

Als nächstes installiert man Jetty:

# apt-get install jetty9

Sobald Jetty existiert, kopiert man das vorhin kompilierte .war in folgendes Verzeichnis:

# cp /root/.m2/repository/com/sismics/docs/docs-web/1.0-SNAPSHOT/docs-web-1.0-SNAPSHOT.war /usr/share/jetty9/webapps/dms.war

ACHTUNG: Es gibt auch ein Verzeichnis /usr/share/jetty/webapps/; Jetty ignoriert dieses aber (meiner Meinung nach). Das .war gehört nicht hierhin.

Datenverzeichnis anlegen

# mkdir /var/docs
# chmod 777 /var/docs

Jetty neu starten

# service jetty9 start

Sismics Docs aufrufen

Sobald Jetty läuft, öffnet man den Browser wieder:

10.1.2.3:8080/dms/

Man loggt sich ein, ändert das Admin-Passwort, erstellt weitere User, lädt ein Testdokument hoch, loggt sich wieder aus — und dann stoppt man Jetty testhalber wieder um sicherzugehen, dass die Daten und Konfiguration auch einen Stop des Applikationsservers überlegen:

# service jetty9 stop
# service jetty9 start

Nun sollte man sich mit dem soeben gesetzten Admin-Passwort einloggen können und das vorher hochgeladene Dokument sehen.

Fertig! Nun kann der Spass beginnen.

Die API-Dokumentation habe ich leider noch nicht gefunden …

Tags: , , , , , , , , ,
Labels: Uncategorized

1 Kommentar | neuen Kommentar verfassen

Sonntag, 20. März 2016

Ookla Speedtest für Fiber7 respektive Init7 konfigurieren

Damit der Ookla Speedtest bei mir sauber funktioniert, habe ich mir ein Benutzerkonto angelegt und folgende Einstellungen gemacht:

Ookla Speedtest Fiber7 Settings

Von grösster Wichtigkeit ist es, folgenden Server als Standardserver auszuwählen:

Winterthur [CH] - Init 7

(Gemäss dem HTML-Quellcode handelt es sich um den Server mit der Ookla-ID 3026)

Nur so testet man die theoretisch verfügbare Geschwindigkeit zwischen dem eigenen Router, der Telefonzentrale, in welche das Fiber- respektive das Kupferkabel führt, und dem ISP-internen Netzwerk.

Auf der Test-Oberfläche ist dann der Button „BEGIN TEST. YOUR PREFERRED SERVER“ zu wählen:

Ookla Speedtest Begin Test Preferred Server

Nachtrag

Noch einfacher geht es für uns Linux-Geeks von der Kommandozeile. Ein findiger Zeitgenosse scheint das Ookla Speedtest-Protokoll reverse engineered und seine Erkenntnisse in einem Python-Script zusammengefasst zu haben.

Nachdem man das Script heruntergeladen und ausführbar gemacht hat, misst man die Geschwindigkeit zum Init7/Fiber7-Speedtest-Server folgendermassen:

$ ./speedtest-cli --server 3026
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Init7 (Switzerland) Ltd. (85.195.234.162)...
Hosted by Init 7 (Winterthur) [117.24 km]: 3.615 ms
Testing download speed........................................
Download: 584.35 Mbit/s
Testing upload speed..................................................
Upload: 498.04 Mbit/s

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

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 20. März 2016

Gigabit FTTH mit Asus RT-AC66U? Hände weg von DD-WRT!

Ende Januar 2016 wurde unsere Wohnung mit Fiber to the Home (FTTH) von Fiber7 (einer Tochter von Init7) erschlossen. Das konkurrenzlos günstige Angebot umfasst eine symmetrische 1 Gbit/s-Anbindung für weniger als 65 CHF pro Monat.

Die Verbindung zum Internet stelle ich mit einem Asus RT-AC66U und dem optischen Wandler TP-Link MC220L her. Auf dem Asus RT-AC66U lief bis letzte Woche DD-WRT mit dem Release r26332 vom 22. Februar 2015.

Von Powerline zu Ethernet-Kabel

Da ich mich beim Besuch der Elektriker von BKW ISP AG dazu entschied, den OTO im Wohnzimmer installieren zu lassen (die Alternative wäre das Büro gewesen), stellte sich mir das Problem, dass ich bis vor kurzem die maximale ISP-Geschwindigkeit nicht testen konnte: In der Stube betreibe ich einige Multimedia-Geräte wie den TV, den Apple TV sowie einen UniFi AP-PRO. Nur der UniFi WLAN-Access Point verfügt über einen Gigabit-Ethernet-Port — doch mit dem Access Point lässt sich die maximale Performance des Internetanschlusses nur schlecht testen.

Ein Geschwindigkeitstest mit der von Fiber7 empfohlenen Apple TV-App Ookla Speedtest zeigte Durchsätze von annähernd 100 MBit/s — sowohl für den Up- wie auch Downstream. Durchaus realistisch, wenn man bedenkt, dass der Apple TV nur mit einer Fast Ethernet-Schnittstelle ausgestattet ist.

Erst als ich von Digitec das lange vergriffene Wirewin Netzwerkkabel (25m, Weiss, STP, Kat. 6, Flachband) Kabel geliefert bekam, konnte ich das Büro direkt mit einem Cat 6-Netzwerkkabel erschliessen. Ich schaffte es, das Kabel der Fussleiste entlang und unter zwei Türleisten hindurch zu verlegen und so die zwei Gigabit-Switches TP-LINK SG1016D (Büro) und ZyXEL GS1100-8HP (Stube, mit PoE) miteinander zu verbinden.

In der Zwischenzeit verwendete ich ein Powerline-Produkt namens Devolo dLAN 500 duo+, um Stube und Büro über die Stromverkabelung zu verbinden. Der Frevel an der Sache: Ganze 50 MBit/s brachte ich so über die Leitung.

Erster Speedtest

Nun also waren der Mac mini und der iMac mit Gigabit-Ethernet an den Internet-Router angebunden. Voller Spannung startete ich den ersten von Init7 gehosteten Ookla Speedtest vom Mac mini aus — und erhielt mehrmals in der Folge folgende Messwerte zu Gesicht:

Ookla Speedtest Fiber7 DD-WRT

Was zum Teufel? Verkauft mir Fiber7 vielleicht nur ein Zehntel des angepriesenen Durchsatzes?

Netzwerkkabel testen

Um das Problem einzugrenzen, teste ich als erstes das soeben verlegte Netzwerkkabel: Auf dem Mac mini startete ich iperf im Server-Modus:

$ iperf -s

Dann ging ich ins Wohnzimmer und verband einen Toshiba-Laptop mit integriertem Gigabit-Port an den Switch im TV-Schrank und lud mir iperf in der Version 2.0.5-3 auf den Rechner. Ich öffnete eine Kommandozeile und führte folgenden Befehl aus:

$ iperf -c 10.1.2.3

Der Mac mini zeigte darauf folgende Durchsätze an:

------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
[ 4] local 10.1.2.3 port 5001 connected with 10.1.2.4 port 56432
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 721 MBytes 604 Mbits/sec
...

Am Ethernet-Kabel von der Stube ins Büro konnte es also definitiv nicht liegen.

Direkt am Router

Ich schloss den Laptop per Kabel direkt an den Router an und führte den Oookla-Geschwindigkeitstest erneut durch: Auch hier wieder der „mickrige“ Durchsatz in der Grössenordnung von Fast Ethernet (100 Mbit/s). Lag das Problem allenfalls am Geschwindigkeitstest, bspw. am Server von Fiber7?

Ookla Geschwindigkeitstest testen

Ich machte mich auf die Suche nach einem im Internet verfügbaren iperf-Server und wurde auf der iperf-Web-Site fündig: Public iPerf3 servers. Ich wählte debit.k-net.fr, installierte auch noch iperf 3 und führte dann den Test aus:

$ iperf -c debit.k-net.fr

Auch bei dieser Aktion kam ich nicht nur annähernd in die Nähe der erwarteten 1 Gbit/s. Somit war für mich bewiesen, dass das Problem zwischen Router und dem ISP liegen musste. Doch wo genau?

DD-WRT

Langsam aber sicher wuchs in mir das Misstrauen gegenüber der Frickelware DD-WRT. Was, wenn die Open Source-Firmware die Performance des Routers einbrechen liess?

Ich informierte mich im Netz über die offizielle Firmware des Routers und durfte erfreut feststellen, dass das letzte Update kürzlich, am 28. Januar 2016, veröffentlicht worden war. Nach einer kurzen Recherche stiess ich auch auf die vom User „Merlin“ modifizierte Version der Firmware. Ich entschied mich, den Firmware-Wechsel zu wagen und zog Asuswrt-Merlin in der Version RT-AC66U_380.57_0 dem offiziellen Firmware von Asus vor.

Frühlingsputz: DHCP und VPN

Bevor ich aber das Vorhaben startete, entschied ich mich angesichts eines im April bevorstehenden Routerwechsels zwei Funktionalitäten vom Router weg auf einen Linux-Server zu verlagern: Den DHCP-Server sowie ein OpenVPN Site-to-Site-VPN zu meinem Elternhaus. Wie ich erst zu dem Zeitpunkt realisierte, gehört solche Funktionalität nicht auf einen Consumer-Router, sondern auf einen schicken, kleinen Linux-Server (Intel NUC), welcher ein „anständiges“ Linux, ausreichend Speicherplatz und Subversion-Anbindung möglich macht.

Asuswrt-Merlin

Wie in einem Artikel auf DD-WRT beschrieben, setzte ich den Router über das DD-WRT auf die Werkseinstellungen zurück. Anschliessend lud ich über das Web-Interface die Firmware (.trx) auf den Router und wartete den Transfer sowie die Installation ab. Der Router kam problemlos hoch und erschien nun mit der neuen, standardmässigen Oberfläche.

Nach einem erneuten NVRAM-Reset funktionierte auch die Konfiguration: Das NVRAM voller DD-WRT-Variablen wurde beim Rücksetzen nämlich irgendwie nicht gelöscht und überschritt plötzlich das maximal mögliche Volumen von 65 KB, weshalb die Routeroberfläche subtile Fehlfunktionen und Fehlermeldungen aufwies.

1 GBit/s!

Nachdem ich die Konfiguration des Routers abgeschlossen hatte, führte ich voller Spannung den nächsten Speedtest durch. Hatte sich der Aufwand, der mich fast das gesamte Wochenende gekostet hatte, gelohnt?

Ookla Speedtest Fiber7 Asuswrt-Merlin

Beruhigt lehnte ich mich in den Bürosessel zurück und feierte innerlich der Beginn des nächsten Breitbandzeitalters.

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

4 Kommentare | neuen Kommentar verfassen

Freitag, 11. März 2016

Ist Dune der Vater von Alien, Star Wars und Terminator?

It’s like a Hollywood failed movie project. In the end, they decide not to move forward with the project, shutting it down. The employees then go off to different companies, taking those ideas with them, using them in unrelated movie projects. That’s the story told in the award-winning documentary Jodorowsky’s Dune, which ties that production to other unrelated movies, like Alien, Star Wars, and Terminator.

Quelle: Can the Apple code be misused?

Tags: , , , ,
Labels: Unterhaltung

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. März 2016

Apple meldet „Die Transaktion kann für den ausgewählten Standort nicht ausgeführt werden“

Vor einigen Wochen habe ich mir mit Seriennummern von allen je von mir gekauften Apple-Geräten dutzende Netzteilstecker bestellt. Apple hat diesen Rückruf lanciert, weil das Unternehmen realisiert hat, dass ältere Stecker den Qualitätskriterien nicht genügen und die Besitzer im schlimmsten Fall durch einen Stromschlag töten können.

Die für die Abwicklung des Rückrufs von Apple programmierte Web-Seite lässt aber zu wünschen übrig: Nachdem man den ersten Netzteilstecker bestellt hat, muss man den Browser komplett schliessen. Ansonsten sieht man sich folgender Fehlermeldung gegenüber, wenn man die zweite Seriennummer absenden will:

Apple Transaktion Standort

PS: Die Pakete sind übrigens immer noch nicht bei meinem Arbeitgeber eingetroffen. Auf der Status-Seite von Apple steckt der Prozess bei Schritt 2 von 3 fest: „Ersatzversand wird bearbeitet“. Bestellt habe ich die Netzteilstecker am 9. Februar …

Tags: , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. März 2016

Der Tagi-Webmaster sollte seinen produktiven Server besser konfigurieren

display_errors = On gehört nun einfach wirklich nicht auf den Produktionsserver. Anfänger.

Tagesanzeiger Exception

Tags: , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. März 2016

Bedeutung der LEDs eines TP-LINK MC220L

Seit Ende Januar 2016 ist unsere Wohnung mit 1 GBit/s FTTH von Fiber7 gesegnet. Ich betreibe dazu einen Asus RT-AC66U-Router mit DD-WRT an einem TP-LINK MC220L. Vereinfacht gesagt wandelt das TP-LINK-Gerät die Lichtsignale vom OTO herkommend in elektrische Ethernet-Signale um.

Bei der Aufschaltung unseres Anschlusses musste ich zwei Dinge beachten:

Einerseits spricht der TP-LINK MC220L ausschliesslich mit Gigabit-Ethernet-Anschlüssen. Zu Testzwecken wollte ich einen uralten Apple AirPort Express an den Wandler anschliessen, doch auf Grund des 100 MBit/s-Ethernet-Ports des AirPorts war kein Uplink zu finden. Zum Glück erfuhr ich recht schnell von diesem „Feature“.

Andererseits erstellte ich mir aus dem Online verfügbaren PDF-Handbuch des Wandlers folgenden Screenshot, um die LEDs zu deuten:

TP-LINK MC220L LEDs

Die Verbindung funktioniert (bei mir), wenn die LEDs PWR, LINK FX sowie LINK TP ständig leuchten und die LED TP RX entweder ebenfalls ständig leuchtet oder zumindest blinkt.

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

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. März 2016

Die SZU und die Verspätungen

Im Sommer 2015 arbeitete meine Frau einige Wochen bei einem Kunden in der Stadt Zürich, welcher in der Nähe der Sihltal Zürich Uetliberg (SZU)-Linie angesiedelt war. Wunderbar, dachten wir uns, und synchronisierten unsere Heimfahrt nach Bern im SBB Intercitye entsprechend.

Leider mussten wir rasch feststellen, dass die SZU zur Rush Hour ihre Fahrpläne in den wenigsten Fällen einhält: Als ich auch am zweiten Tag in Folge ohne die bessere Hälfte im IC nach Hause fahren musste, gaben wir das Vorhaben auf.

Eine Google-Recherche fand denn auch auf Anhieb Medienartikel, die die Ursache hinter den Verspätungen erläuterten: Die Linie ist eingleisig.

Andererseits sei das SZU-Netz auch verspätungsanfällig, weil es nur eine Fahrbahn gebe. «Müssen verspätete Züge an Kreuzungsstellen abgewartet werden, hat dies Auswirkungen auf Züge, die eigentlich pünktlich unterwegs waren.»

Quelle: SZU-Züge sind ständig verspätet

Ich konnte mir das Schmunzeln denn auch nicht verkneifen, als ich einige Monate später dann folgenden Tweet las:

SZU SBB Verspätung

Ein wahrer Züri-Insider … und ein #firstWorldProblem.

Nachtrag

Der Tagi scheint das Thema jeweils jährlich im Winter wiederzukauen — nun ist der Artikel für den Winter 2016/17 erschienen: Ständig verspätet auf den Uetliberg

Tags: , , , , ,
Labels: Funny

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. März 2016

Little Snitch-Firewall meldet verdächtigen Domain-Namen wegen nicht mehr aktueller Reverse IP-Auflösung

Als ich gestern meine lokale Oracle Java-Installation aktualisieren wollte, stutzte ich einige Sekunden, als mir die Software-Firewall Little Snitch folgende Warnung anzeigte:

m2.feiwi.tv

Erst als ich mir die Details zum Internet-Host anzeigen liess, beruhigte sich mein Puls wieder: Die IP-Adresse 77.109.137.184 gehört zum Akamai CDN, scheint aber früher einmal für m2.feiwei.tv registriert gewesen zu sein. Ich nahm das Risiko auf mich und erlaubte die temporäre Freigabe von Verkehr zu diesem Internet-Host.

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 1. März 2016

monit 5.16-2 strauchelt bei HTTP-Checks

Seit einem apt-get dist-upgrade auf einem meiner Debian-Server meldete die Überwachungslösung monit Probleme mit dem periodischen Check der Verfügbarkeit von HTTP-Servern:

...
[CET Mar 1 19:28:18] error : 'printer.schloesslistrasse.local' failed protocol test [HTTP] at [10.1.2.3]:80/script/cookieCode.js [TCP/IP] -- HTTP: Error receiving data -- Resource temporarily unavailable
...

(Die URL hatte ich im Zuge des Debugging ergänzt, da ich zuerst nicht sicher war, ob monit eine allfällige HTTP 403er-Meldung sauer aufstossen würde — ohne aktiviertem Browser-JavaScript wird die Seite im wwwroot aber anstandslos ausgeliefert)

Ein zweiter Debian-Server hatte mit exakt denselben Checks keine Probleme. Der kleine, aber feine Unterschied: monit 5.9-1+deb8u1 (jessie, stable) zeigt das Fehlverhalten nicht, während 5.16-2 (sid, unstable) mit HTTP-Checks strauchelt. Doch das realisierte ich leider erst viel, viel später.

Zuerst machte ich mich im Quellcode der Anwendung schlau:

static void check_request(Socket_T socket, Port_T P) {
        int status, content_length = -1;
        char buf[512];
        if (! Socket_readLine(socket, buf, sizeof(buf)))
                THROW(IOException, "HTTP: Error receiving data -- %s", STRERROR);

Quelle: Monit / src / protocols / http.c

Das half dann doch weniger als erwartet zur Problemlösung bei.

Als nächste schraubte ich die Geschwätzigkeit der Installation hoch, indem ich in /etc/init.d/monit die Konfigurationsoption MONIT_OPTS anpasste:

...
DAEMON=/usr/bin/monit
CONFIG=/etc/monit/monitrc
NAME=monit
DESC="daemon monitor"
#MONIT_OPTS=
MONIT_OPTS="-vv"
PID="/run/$NAME.pid"
...

Viel mehr gab das Log unter /var/log/monit dann aber doch nicht preis:

...
[CET Mar 1 19:33:55] debug : Socket test failed for [10.1.2.3]:80 -- HTTP: Error receiving data -- Resource temporarily unavailable
[CET Mar 1 19:33:55] error : 'printer.schloesslistrasse.local' failed protocol test [HTTP] at [10.1.2.3]:80/script/cookieCode.js [TCP/IP] -- HTTP: Error receiving data -- Resource temporarily unavailable
[CET Mar 1 19:33:55] debug : -------------------------------------------------------------------------------
[CET Mar 1 19:33:55] debug : /usr/bin/monit() [0x8062c37]
[CET Mar 1 19:33:55] debug : /usr/bin/monit(LogError+0x27) [0x8063097]
[CET Mar 1 19:33:55] debug : /usr/bin/monit(Event_post+0x243) [0x805f573]
[CET Mar 1 19:33:55] debug : /usr/bin/monit() [0x807373f]
[CET Mar 1 19:33:55] debug : /usr/bin/monit(check_remote_host+0x16b) [0x8075bfb]
[CET Mar 1 19:33:55] debug : /usr/bin/monit(validate+0x2e9) [0x8073e99]
[CET Mar 1 19:33:55] debug : /usr/bin/monit(main+0x505) [0x8051d95]
[CET Mar 1 19:33:55] debug : /lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xde) [0xb728670e]
[CET Mar 1 19:33:55] debug : /usr/bin/monit() [0x8052293]
[CET Mar 1 19:33:55] debug : -------------------------------------------------------------------------------
...

Nach viel Pröbeln hatte ich dann doch endlich die Erkenntnis, dass es wohl nicht die beste Idee war, ein als unstable markiertes Paket zu verwenden. Doch wie downgraden? Ganz einfach:

# apt-get install monit=1:5.9-1+deb8u1

Quelle: How to Downgrade a Package via apt-get?

Damit das Paket aber beim nächsten apt-get dist-upgrade nicht mit der fehlerhaften Version überschrieben wird, musste ich noch folgenden Befehl ausführen:

# apt-mark hold monit

Quelle: PinningHowto

Seither wird meine INBOX nicht mehr mit Warnungen geflutet.

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen