Archiv ‘IT’

Samstag, 7. September 2013

Unter Mac OS X auf den Avocent SwitchView IP 1010 zugreifen

Seit mein privater Linux Entwicklungsserver im Juli auf Grund eines Ausfalls des Kabelmodems und einem Wackelkontakt des Switch-Netzteils länger als erwartet offline war, habe ich drei verschiedene Massnahmen ergriffen, damit solche Probleme nicht mehr auftreten können:

  • Der Server ist nun mit zwei Netzwerkkabeln mit dem Intranet verbunden; eines über den besagten Gigabit-Switch, eines direkt am Internet-Router
  • Der Server soll dereinst zudem noch mit einem ZYXEL NWD2205 Ultra Compact Wireless N USB Adapter NWD2205 WLAN Client (Affiliate-Link) als dritter Netzwerk-Fallback funktionieren; bisher hatte ich aber noch nicht Zeit, den USB-Stick zu konfigurieren (stecken tut er vorerst einmal an einem freien USB-Port)
  • Der Server hängt nun an einem iKVM-Switch, d.h. ein netzwerkbasiertes Gerät, welches das analoge Bild des VGA-Ausganges nimmt, es digitalisiert und per VNC an eine Client-Software weitergibt.

Letzte Massnahme dient uns dann, wenn der Server bspw. nach einem apt-get dist-upgrade nicht mehr hochkommt und keine Möglichkeit besteht, per SSH auf den Server zuzugreifen. Mit dem iKVM-Switch kann ich den Bootprozess aus der Ferne überwachen.

Ich habe mich über Ricardo.ch für 150 CHF mit einem (notabene völlig veralteten) Avocent SwitchView IP 1010 eingedeckt (Nachfolgemodell: Avocent SVIP1020 – 202 SwitchView IP, Affiliate-Link).

Gestern nun nahm ich mir die Zeit, um das Teil in das Intranet zu integrieren. Der Aufwand war leider grösser als erwartet, doch nun klappt der Zugriff von meinem Mac mini hier in Bern auf den iKVM-Switch in Neuenegg:

SVIP Viewer Mac OS X Wine

Nachfolgend sei das Vorgehen beschrieben:

Inbetriebnahme Hardware

Leider erhielt ich den iKVM–Switch per Ricardo.ch ohne das dem Gerät normalerweise beliegenden KVM-Kabel, welches PS/2-Schnittstellen und VGA-Anschluss vereint und vom Server zum Switch führt. Dumm gelaufen!

Jedenfalls war ich nicht bereit, zusätzlich noch ein Heidengeld für dieses Kabel auszugeben. Meine Shopping-Liste sah dementsprechend folgendermassen aus:

Den LCD-Monitor (15 Zoll) und die Mini-Tastatur (leider mit deutschem Layout) besass ich bereits. Beides schloss ich direkt an den iKVM-Switch an.

Werkseinstellungen und IP-Konfiguration

Zuerst setzte ich das Gerät auf Werkseinstellungen zurück, was dazu führte, dass es neu die IP 192.168.1.254 trug — in meinem Subnetz verwende ich aber 192.168.0! Ich verband deshalb mein MacBook Air mit einem Ethernetkabel mittels Apple USB-Ethernet-Adapter direkt mit dem iKVM-Switch. Anschliessend änderte ich die IP-Adresse meines MacBooks auf 192.168.1.1 und setzte dieselbe IP als Gateway.

Nun konnte ich den Web-Browser öffnen und auf https://192.168.1.254/ zeigen lassen. Mittels HTTP Basic Auth authentifiziert man sich als admin mit dem Passwort password (liebe Grüsse vom IT-Auditor). Bevor der Konfigurationsspass beginnen kann, muss man den Popup-Blocker des Browsers (bei mir für solche Fälle Firefox) deaktivieren.

Erst so gelangt man in die äusserst hässliche Java-Konfigurationsoberfläche. Die Netzwerkeinstellungen befinden sich unter

  1. Settings
  2. Global
  3. Network

Wer dem iKVM-Switch die IP-Adresse per DHCP übergeben will, findet in der Anzeige auch die MAC-Adresse des Gerätes. Wer auf Nummer sicher gehen will, konfiguriert die Adresse statisch, damit man auch beim Ausfall des DHCP-Servers auf das Gerät zugreifen kann. Mittels OK bestätigen, und schwups kann der Switch nun direkt mit dem Intranet verbunden werden.

In der weiteren Konfiguration deaktivierte ich unter

  1. Settings
  2. Global
  3. Sessions

die erzwungene SSL-Verschlüsselung ([ ] SSL connections only (must use https://) sowie [x] Allow Telnet and FTP connections. Ersteres bringt die Zertifikatswarnungen in den Web-Browsern weg, zweiteres eröffnet einem Telnet-Zugang auf das auf dem iKVM-Switch laufende FreeBSD-System. Natürlich sollte man die Aktivierung/Deaktivierung dieser Optionen in einem Unternehmensnetzwerk hinterfragen — im heimischen Netzwerk nehme ich die Sicherheitsrisiken gerne in Kauf.

Schlussendlich änderte ich auch noch das Administrator-Passwort und erstelle einen zusätzlichen Benutzer ohne Administrationsrechten.

VNC-Client in Gang bringen

Als der Switch auf den Markt gelassen wurde, sah die Systemlandschaft von iKVM-Benutzern noch deutlich anders aus als heute. Leider bietet der Switch nur eine Zugriffsmöglichkeit über den vpclient.exe, dem über die Web-Oberfläche zwei Sicherheitstoken mitgegeben werden. Folglich benötigt man nicht nur installiertes Java, sondern auch den Microsoft Internet Explorer und natürlich Windows, welche das Win32-Binary ausführen kann.

Glücklicherweise hat ein findiger Hacker (für mich nur via Google Cache erreichbar; lokales Backup) für das offenbar mehr oder weniger baugleiche APC AP5456 IP Gateway for Analog KVM ein bash Shell-Script entwickelt, mit welchem man die Tokens via cURL über die Web-Oberfläche des Switches abfrägt und damit die EXE-Datei aufruft (via wine).

wine

Zu Beginn sollte man Kaffee und Pop-Corn bereithalten, denn zuerst installiert man sich mit MacPorts das Paket wine:

# port install wine

Nach gefühlten vier Stunden Kompiliererei liegt wine als ausführbare Binärdatei vor.

vpclient.exe

Als nächstes lädt man sich vom Web-Server des iKVM-Switches die .cab-Datei herunter, welche die unter Windows ausführbare vpclient.exe und anderes Geschmäus enthält. Im Grunde kann man sich das weiter unten aufgeführte Script zu Nutze machen — aber etwas manuelle Arbeit schadet ja auch nichts. Deshalb logge ich mich per Telnet auf dem Switch ein und führe anschliessend folgenden Befehl aus, welcher mir den Namen der .cab-Datei nennt:

$ telnet 192.168.1.254
...
$ find /web -name "*.cab"
/web/vpclient4102.cab

Bei meinem iKVM-Switch mit Firmware-Version 1.0.5.6 und Build 04.09.07.1 handelt es sich um folgende URL:

192.168.1.254/vpclient4102.cab

ikvm.sh

Die .cab-Datei entpackt man danach in einem frei wählbaren Ordner; ich verwende hierzu The Unarchiver. Ins selbe Verzeichnis lädt man sich auch das Script von Chris, welches im oben genannten Cache vorgehalten wird. Der Vollständigkeit halber poste ich das Script hier auch noch:

#!/bin/bash

# A script to access an APC brand model AP5456 IP Gateway for Analog KVM 
# In Linux, using Wine

USERNAME="apc"
PASSWORD=""
KVM_SERVER=""

VIEWER_PATH=""

while [ -z "$KVM_SERVER" ]
do
    echo -n "FQDN of KVM Server (not including https://): "
    read KVM_SERVER
done

while [ -z "$USERNAME" ]
do
        echo -n "Username: "
        read USERNAME
done

while [ -z "$PASSWORD" ]
do
        echo -n "Password: "
        tput invis
        read PASSWORD
        tput sgr0
done

get_cab_name () {
    while read line
    do
        if [ "${line/'OBJECT CODEBASE'/}" != "$line" ]; then
            cab_name="${line##*'<OBJECT CODEBASE="'}"
            cab_name="${cab_name%%'"'*}"
            echo "$cab_name"
        fi
    done
}

get_cmd_args () {
    while read line
    do
        if [ "${line/PARAM/}" != "$line" ]; then
            ipaddr="${line##*'<PARAM NAME="ipaddr" VALUE="'}"
            ipaddr="${ipaddr%%'"'*}"

            sessionkey="${line##*'<PARAM NAME="sessionkey" VALUE="'}"
            sessionkey="${sessionkey%%'"'*}"

            encryptionkey="${line##*'<PARAM NAME="encryptionkey" VALUE="'}"
            encryptionkey="${encryptionkey%%'"'*}"
        fi
    done
    if [ -n "$sessionkey" ] && [ -n "$encryptionkey" ] && [ -n "$ipaddr" ]; then
        echo "-k $sessionkey -e $encryptionkey $ipaddr"
    fi

}

wine="`which wine`"
if [ -z "$wine" ]; then
    echo "Wine was not found, but is required.  Can not continue without it." >&2
    exit 1
fi

cd "`dirname $0`"
#If a path to vpclient.exe wasn't specified, and we can't find it, use /tmp
#as a place to download it to
if [ -z "$VIEWER_PATH" ] && ! [ -f "vpclient.exe" ]; then
    mkdir -p "/tmp/vpclient"
    VIEWER_PATH="/tmp/vpclient"
fi

#If a full path wasn't specified, prepend current working directory
if [ "${VIEWER_PATH:0:1}" != "/" ]; then
    VIEWER_PATH="`pwd`/$VIEWER_PATH"
fi

if ! [ -f "$VIEWER_PATH/vpclient.exe" ]; then

    cab_url="`curl -s --insecure --user "$USERNAME:$PASSWORD" "https://$KVM_SERVER/launch.asp" |get_cab_name`"
    cab_url="https://$KVM_SERVER/$cab_url"

    cabextract="`which cabextract`"
    if [ -z "$cabextract" ]; then
        echo "vpclient.exe was not found in $VIEWER_PATH" >&2
        echo "cabextract was not found either, so we can't download">&2
        echo -e "and extract vpclient.exe from it's CAB archive.\n" >&2
        echo "Error: user intervention required." >&2
        echo "----------------------------------" >&2
        echo "Download $cab_url" >&2
        echo "Unpack `basename $cab_url` into $VIEWER_PATH" >&2
        echo " -- OR -- " >&2
        echo "Install cabextract" >&2
        exit 1
    fi

    if ! [ -d "$VIEWER_PATH" ]; then
        echo "WARNING: Viewer Path specified is not valid." >&2
        echo "Path: $VIEWER_PATH" >&2
        echo -e "-------------------------------------------\n" >&2
        echo -n "Would you like me to create it? (y/N)?" >&2
        read answer
        shopt -s nocasematch
        if [ "$answer" = "y" ]; then
            mkdir -p "$VIEWER_PATH"
            if ! [ -d "$VIEWER_PATH" ]; then
                echo "Couldn't create: $VIEWER_PATH" >&2
                exit 1
            fi
        else
            exit
        fi
        shopt -u nocasematch
        
    fi

    cd "$VIEWER_PATH"
        curl -s --insecure --user "$USERNAME:$PASSWORD" "$cab_url" >"`basename $cab_url`"
        $cabextract -q "`basename $cab_url`" 2>/dev/null
fi


cmd_args="`curl -s --insecure --user "$USERNAME:$PASSWORD" "https://$KVM_SERVER/launch.asp" |get_cmd_args`"

cd "$VIEWER_PATH"

#Sanity check
if [ -f "./vpclient.exe" ]; then
    $wine "./vpclient.exe" $cmd_args
else
    echo "Failed, do it yourself: $wine vpclient.exe $cmd_args"
fi

Ich speichere es als ikvm.sh und mache es mit folgendem Befehl ausführbar:

$ chmod 755 ikvm.sh

Nachdem ich mich mit PPTP auf meinen Netgear WNDR3700-100PES RangeMax Router (Dual Band, Wireless-N,300 GigaBit) (Affiliate-Link) mit DD-WRT eingewählt habe (die Konfigurationsanleitung für die VPN-Lösung würde den Umfang dieses Blog-Posts sprengen), kann ich das Script starten (beim ersten Laden dauert es eine Ewigkeit, bis wine sich konfiguriert hat), gebe die IP-Adresse ein (192.168.0.5 reicht vollkommen aus) und die Zugangsdaten des Routers ein und erhalte innert Sekunden die Bildschirmanzeige des Servers auf den Monitor gezaubert.

Problembehandlung

Sobald alles sauber eingerichtet ist, sollte man den iKVM-Switch neu starten. Dies kann entweder physisch vor Ort oder aber über die Web-Oberfläche aus der Ferne geschehen:

  1. Tools
  2. Reboot Appliance

Ich habe zudem über Telnet auch noch einige Male /usr/bin/vps von Hand gestartet. Seither klappt jeder Verbindungsversuch auf Anhieb.

Erscheint ein pinkiger Hintergrund anstelle des Videobildes und friert wine anschliessend ein, sollte man den ganzen Prozess abschiessen und ikvm.sh erneut ausführen. Das Problem löst sich beim zweiten Aufruf.

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

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 15. August 2013

Mit imapfilter eingehende E-Mails verschieben — aber erst nach der Lektüre

In einem anderen Blog-Artikel habe ich vor einiger Zeit beschrieben, wie ich mich mittels imapfilter von den Filterregeln meiner Mailserverbetreiber losgelöst habe. Sollte ich mich jemals von der cyon GmbH abwenden, müsste ich die Filterregeln beim neuen Anbieter — falls überhaupt möglich — nicht erneut umständlich über eine Web-Oberfläche einprogrammieren.

In der Zwischenzeit habe ich realisiert, dass nachfolgender Befehl optimal ist, um Nachrichten automatisiert in der IMAP-Ordnerstruktur abzulegen — aber erst, nachdem ich die Nachrichten auch wirklich gelesen habe:

messages = mbox.INBOX:contain_from('email@domain.tld') * mbox.INBOX:is_seen()
messages:move_messages(mbox['IMAP-Folder'])

Der erste Befehl auf der ersten Zeile wählt E-Mails eines bestimmten Absenders aus. Das Asterisk („*“) bedeutet „AND“, während der zweite Teil des Ausdrucks die Bedingung macht, dass die E-mail-Nachricht als gelesen markiert ist.

Ich verwende einen solchen Filter beispielsweise, um Kalendereinladungen abzulegen, sobald ich diese bestätigt habe.

Tags: , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 29. Juni 2013

Die neue Welt nach Google Reader

Es ist vollbracht: Ich habe soeben alle meine Feeds unter Google Reader gelöscht, nachdem ich sie als OPML-Datei exportiert hatte.

Meine Feeds habe ich zu Feedbin gezügelt und habe mich nicht gescheut, den Jungs dort im Jahr einige paar Dollars für die Dienstleistung zu überweisen.

Mein initiales Setup zum Konsum von RSS Feeds sieht am 29. Juni 2013 folgendermassen aus:

Besonders geschmerzt hat der Umstand, dass Silvio Rizzis Reeder auf dem iPad weiterhin nur die Synchronisation mit Google Reader unterstützt. Ich musste mich deshalb schweren Herzens von dieser App trennen. Mr. Reader funktioniert tadellos mit Feedbin, aber das UI stört mich. Zu viele Schatten und Rundungen, wo doch der Trend bezüglich iOS-Applikationen klar Richtung flachem, skeumorph-losen Designs geht.

Tags: , , , , , , , ,
Labels: Blogosphäre, IT

2 Kommentare | neuen Kommentar verfassen

Samstag, 13. April 2013

Google Calendar zeigt selber entwickelte ICS-Feeds nicht mehr an

Heute habe ich festgestellt, dass meine selber entwickelten .ics-Feeds in Google Calendar nicht mehr angezeigt werden. Das Debugging ergab:

  1. Mein Server läuft, welcher die .ics-Dateien bereitstellt
  2. Mittels wget kann ich die .ics-Datei herunterladen
  3. Die Datei sieht in vim in Ordnung aus
  4. In access.log wird angezeigt, dass ein Google-Bot gelegentlich auf die Datei zugreift

Auf Grund einer Fehlermeldung des iCalendar Validator ist mir nun bewusst, dass in .ics-Kalenderdateien keine Unix-Zeilenumbrüche erlaubt sind (\n), sondern nur die MS DOS-Zeilenumbrüche (\r\n) unterstützt werden.

Nachdem ich in meiner ICS-Klasse folgende Zeile eingefügt habe, wird der Kalender in Google Calendar endlich wieder ordentlich angezeigt:

...
$out = str_replace("\n","\r\n",$out);

return $out
...

Nachtrag

In einem anderen ICS-Script verwende ich keine Klassen und spitze die Kalenderdaten nicht vorgängig in eine Variable ab. Ich habe das PHP-Script deshalb kurzerhand komplett auf MS DOS Zeilenendungen umgestellt:

sed s/$/^M/ unix.php dos.php

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 10. März 2013

Thunderbird effizient mit einem IMAP-Server und zehntausenden E-Mails verwenden

Neben der lokalen Ablage der Logs meines Linux-Servers unter /var/log leite ich Resultate von Cron-Läufen auch an eine E-Mail-Adresse auf einen in einem Rechenzentrum stehenden IMAP-Server weiter. Einerseits stelle ich so sicher, dass ich im Falle eines verheerenden Hacks auf dem IMAP-Server möglicherweise Informationen extrahieren kann, welche mir bei der Forensik helfen. Ob diese Lösung wirklich das Gelbe des Eis ist sei hier dahingestellt (heute würde ich mich wohl für eine Lösung wie Splunk entscheiden).

Nach langer Zeit habe ich heute wieder einmal per Web-Mail in diesen Account hineingeschaut und musst feststellen, dass sich in zwei IMAP-Ordnern je über 50’000 Mails angesammelt haben. Ich entschied mich, diese Ordner zu säubern. Hierzu verwendete ich aber nicht die vom Hoster angebotene Web-Mail-Lösung Roundcube, sondern Mozilla Thunderbird.

Nachfolgend einige Tipps, wie man mit der riesigen Flut an Mails umgeht:

Alle IMAP-Nachrichte herunterladen

Einerseits habe ich unter

  1. Thunderbird
  2. Preferences
  3. Advanced
  4. General
  5. Config Editor

den Wert von mail.server.default.check_all_folders_for_new auf true gesetzt. Ob dies etwas bewirkt, kann ich leider nicht sagen.

Andererseits habe ich auch bemerkt, dass man alle E-Mails in einem Ordner mittels Command-A auswählt und dann mittels Rechtsklick über die Option „Get Selected Messages“ herunterladen kann.

IMAP-Nachrichten auf dem Server durchsuchen

Unter

  1. Edit
  2. Find
  3. Search Messages…
  4. [x] Run search on server

In meinem Fall funktionierte diese Methode aber nicht; es wurden nur die Bodies derjenigen Mails durchsucht, welche sich bereits lokal auf meiner Festplatte befanden.

Zehntausende E-Mails rasch löschen

Nachfolgende Option verhindert, dass Thunderbird während Minuten nicht mehr reagiert, einen Spinning Beachball anzeigt und in Mac OS X‘ Activity Monitor rot als „not responding“ markiert wird:

  1. Tools
  2. Account Settings…
  3. Server Settings
  4. When I delete a message: (x) Remove it immediately

Dies verhindert, dass zu löschende Nachrichten von Thunderbird im Hintergrund in den Ordner „Trash“ verschoben werden, aus welchem man diese danach noch mittels „Empty Trash“ löschen muss.

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 6. März 2013

Wenn Subversion zwar updaten, aber nicht committen kann

Heute habe ich eines meiner Web-Projekte aktualisiert. Ich arbeitete dabei direkt auf dem produktiven Web-Server. Ein svn up klappte problemlos. Doch als ich die direkt auf dem Server neu erstellte robots.txt in das Repository einchecken wolle, kam es zu folgender Fehlermeldung:

$ svn ci -m "robots.txt fehlte"
svn: Commit failed (details follow):
svn: At least one property change failed; repository is unchanged
svn: Server sent unexpected return value (400 Bad Request) in response to PROPPATCH request for '//!svn/wbl/56ef405d-3812-4a6b-a62d-edae457cb0b0/1057'

Die Log-Daten meines Apache-Servers, welcher mittels WebDAV auch den Zugang zum SVN-Repository bereitstellt, vermeldeten folgendes:

access.log:

...
[SOURCE IP] - - [06/Mar/2013:20:08:56 +0100] "OPTIONS /repository HTTP/1.1" 401 772 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:56 +0100] "OPTIONS /repository HTTP/1.1" 200 1039 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:56 +0100] "PROPFIND /repository HTTP/1.1" 207 741 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:56 +0100] "MKACTIVITY /!svn/act/74bcecab-e942-418b-84e4-822ad8581d59 HTTP/1.1" 201 758 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:57 +0100] "CHECKOUT /!svn/vcc/default HTTP/1.1" 201 777 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:57 +0100] "PROPPATCH //!svn/wbl/74bcecab-e942-418b-84e4-822ad8581d59/1058 HTTP/1.1" 400 478 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
[SOURCE IP] - [USER] [06/Mar/2013:20:08:57 +0100] "DELETE /!svn/act/74bcecab-e942-418b-84e4-822ad8581d59 HTTP/1.1" 204 302 "-" "SVN/1.6.17 (r1128011) neon/0.28.2"
...

error.log:

[Wed Mar 06 19:48:10 2013] [error] [client [SOURCE IP]] Digest: uri mismatch -  does not match request-uri 

Unterwegs vom Produktionssystem zum Repository-Server kam es zu einem Problem, in welchem die Domain meines Servers aus der Request-URI entfernt wurde. Ich muss hierbei noch erwähnen, dass zwischen den beiden Servern ein (nicht transparenter) Proxy-Server mit Squid werkelt. Inwiefern dieser Server in den Vorgang gepfuscht hat, kann ich nicht sagen.

Nach langem Pröbeln habe ich es irgendwie hingekriegt. Die Lösung des Problems erscheint mir immer noch mysteriös — aber so sei es wohl manchmal halt: Nachdem ich einerseits folgende zwei Konfigurationsdateien umbenannt …

  • /etc/subversion/servers
  • ~/.subversion/servers

… und andererseits den Inhalt des Verzeichnisses

~/.subversion/auth/

komplett gelöscht hatte, klappte es mit dem Commit plötzlich problemlos.

Eine Vermutung habe ich: Da ich mich seit mehr als einem Jahr nicht mehr auf dem Server eingeloggt hatte, könnten unter auth noch Überreste der damals verwendeten HTTP Basic-Authentifizierung gespeichert gewesen sein. Mittlerweile bin ich auf HTTP Digest-Authentifizierung umgestiegen, um Passwörter im schlimmsten Fall nicht mehr im Klartext über ein öffentliches WiFi zu jagen. Indiz dafür ist, dass ich heute nach der Löschaktion gefragt wurde, ob ich das Passwort im Klartext auf dem Server speichern möchte (was ich abgelehnt habe).

Oder aber eine oder beide Konfigurationsdateien enthielten eine Option, welche die Übertragung der Informationen störte — bspw. der hardkodierte Proxy. Wieso die HTTP-Verbindung zum Repository-Server auch nach der Umbenennung der zwei Konfigurationsdateien weiter funktionierte, ist und bleibt schleierhaft. Wobei, jetzt kommt mir in den Sinn, dass die Admins dieses Netzwerks kurz vor meinem Weggang planten, einen transparenten Proxy einzurichten … Das könnte die Lösung sein.

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

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. März 2013

Arte-Videos herunterladen

Vor ein paar Tagen hat arte die Dokumentation Staatsgeheimnis Bankenrettung veröffentlicht. Man kann die Reportage unter dem genannten Link live anschauen.

Wer sich die Dokumentation aber auf die lokale Festplatte laden möchte, um sie danach beispielsweise mit Air Video Server und Air Video.app unter iOS auf den Apple TV zu streamen, muss auf der Kommandozeile aktiv werden:

  1. # port install rtmpdump
  2. Download von Florian Crouzats Shell-Script mittels
    $ wget http://files.floriancrouzat.net/ripArte-v0.9.sh
  3. $ chmod 755 ripArte-v0.9.sh
  4. $ ripArte-v0.9.sh "http://videos.arte.tv/de/videos/staatsgeheimnis-bankenrettung--7340782.html"
  5. Auswahl des vierten RTMP Streams (German High-definition RTMP, rtmp://artestras.fcod.llnwd.net/a3903/o35/mp4:geo/videothek/ALL/arteprod/A7_SGT_ENC_04_048116-000-A_PG_HQ_DE?h=24fceb3242c5803955ac67b8b44ce499)

Und das Resultat sieht folgendermassen aus:

...
340386.493 kB / 3129.09 sec (99.9%)
Download complete

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

3 Kommentare | neuen Kommentar verfassen

Dienstag, 8. Januar 2013

Swisscom MOBILE-EAPSIM-Einstellungen zurücksetzen

Irgendwann einmal im Laufe des letzten Jahres ging die Konfiguration meines geschäftlich genutzten iPhones kaputt — seither loggte sich das iPhone nicht mehr automatisch in die MOBILE-EAPSIM WLAN-Hotspots der Swisscom ein. Beim Inititiieren einer manuellen Verbindung mit den schweizweit an publikumskräftigen Orten verfügbaren WiFi-Access Points wurde ich aufgefordert, ein Passwort einzugeben — welches ich selbstverständlich nicht kenne.

Auch das Zurücksetzen der Netzwerkeinstellungen (auf Anraten der Spezial-Hotline unter 0900 333 221, via 4S und Swisscom EAPSIM verbinden und Kennworteingabe) brachte keine Abhilfe, worauf mir die Hotline-Mitarbeiterin anbot, eine .MOBILECONFIG-Datei zuzustellen, mit welcher ich diese spezifische Konfiguration meines Mobiltelefons zurücksetzen konnte.

Damit Hilfesuchende nicht denselben Interaktionsparcours mit Swisscom durchlaufen müssen, poste ich die Datei hiermit in die Public Domain. Swisscoms Juristen werden mir sicherlich bald sagen, ob ich das darf oder nicht …

EAPSIM.MOBILECONFIG

Disclaimer: Verwendung auf eigene Gefahr. Ich kann nicht dafür verantwortlich gemacht werden, wenn das iPhone nach dem Einspielen des Updates explodieren oder sich grün verfärben sollte.

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 24. November 2012

Text in PDFs greppen

Da haben also die SBB einen Wettbewerb online, welcher die Eingabe von Ticketnummern erfordert. Und gleichzeitig habe ich Quittungen von über SBB Mobile georderte Tickets für Geschäftsreisen auf meinem Computer abgelegt.

Was macht man da? Richtig, man filtert die PDFs nach den geforderten Ticket-Nummern, und zwar so:

pdftotext

Ich gehe davon aus, dass jeder Terminal.app-Hacker macports installiert hat

Man benötigt zuerst einmal das in xpdf enthaltene Tool pdftotext:

# port install xpdf-tools

Shell-Magic

Nachdem das Tool installiert ist, navigiert man in den Ordner, welcher die PDFs enthält und gibt folgenden Befehl ein:

$ for i in *.pdf; do pdftotext "$i"; done;

Die in PDFs enthaltenen Textzeichen werden extrahiert und automatisch in eine Textdatei mit Endung .txt gespeichert, welche denselben Basename trägt wie die PDF-Datei.

Nun kann ich problemlos greppen:

$ cat *.txt | grep "OT"

… und schon erhalte ich eine schöne Liste in der Form

OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000
OT 0000 0000 0000

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

1 Kommentar | neuen Kommentar verfassen

Sonntag, 18. November 2012

Adobe Source Code Pro: Quelloffene Programmierer-Schrift

Adobe überrascht für einmal und offeriert mit Source Code Pro eine quelloffene OTF-Schrift, welche speziell für Entwickler geeignet ist, welche eine leicht lesbare Monospace-Schriftart benötigen.

Wer das Ding kompilieren möchte, kann sich an Adobes Git-Repository vergnügen:

adobe / source-code-pro

Alle anderen laden sich das OTF-Binary von hier herunter:

Free Font Source Code Pro by Adobe

Nicht mit Apple Terminal

Leider unterstützt Apples Terminal.app unter Mac OS X 10.7 keine OTF-Fonts:

Terminal.app won’t display OpenType fonts (.otf)

Mist! Dann verwende ich die Schrift halt nur in TextMate … Als Ersatz kommt in Terminal.app Microsofts Consolas zum Einsatz.

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

Keine Kommentare | neuen Kommentar verfassen