Archiv Januar 2014

Donnerstag, 30. Januar 2014

Mit dem Flachbettscanner eines Brother MFC-9450CDN unter Windows 7 mehrere Seiten als PDF-Datei scannen

Verwendet man das Brother Control Center, besteht die Möglichkeit nicht, mehrere Seiten mit dem Flachbettscanner des Multifunktionsgerätes im Netzwerk zu scannen.

Brother ist sich dessen bewusst und verweist in seiner Knowledgebase auf diese Problematik:

Scanning from the Flad bed scanner glass

To scan multiple pages into one file, you need to use the ScanSoft™ PaperPort™ or Presto! PageManager that was installed during the MFL-Pro Suite installation.

Quelle: Scan multiple pages into one file instead of each scan being saved as a separate file.

Der Druckerhersteller empfiehlt, die mit der Treiber-CD mitgelieferte Software Paper Port 11SE zu installieren und zu verwenden. Da mein Kunde die CD des vor mehr als 5 Jahren angeschafften Druckers nicht mehr finden konnte, standen wir vor einem grösseren Problem.

Glücklicherweise wird bei der Treiberinstallation unter Windows 7 auch ein Scanner-Treiber installiert, weshalb der Druckerscanner über das Netzwerk per TWAIN-Schnittstelle angesprochen werden kannn. Dieser Standard ermöglicht es, beliebige Scanner-Software mit dem Gerät einzusetzen.

Ein erster Versuch mit Windows Fax and Scan schlug trotz einigen Ratschlägen im Netz fehl, da diese Software einerseits keine PDF-Dateien produzieren kann und andererseits auch nicht mehrere Bildscans zu einem mehrseitigen Bild zusammenfügen kann (selbst bei der Verwendung des TIFF-Modus).

Glücklicherweise nahm ich auf drängen des Kunden noch einen letzten Anlauf und suchte nach quelloffener Software, welche für Windows geschrieben wurde und den TWAIN-Standard unterstützt. Und siehe da:

Not Another PDF Scanner 2

Wenige Minuten nach der Installation und Konfiguration konnte der Kunden dutzende Seiten aus einem Buch einscannen, ohne vorher Kopien anzufertigen und den ADF zu verwenden. Und der Clou an der ganzen Geschichte: Die Oberfläche der Software ist radikal vereinfacht. Insbesondere im Vergleich zu diesen GUI-Monstern, welche die MFC-Hersteller uns heute noch andrehen.

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. Januar 2014

Danke, Spettacolo und valora retail!

Seit Dezember 2013 sind Stephanie und ich Besitzer eines prozentbuchs Bern, einer Sammlung von Konsumationsgutscheinen für Restaurants, Take-Aways und sonstige Freizeitangebote (Danke für den Hinweis, Schwester!).

Vor unserer Sylvesterreise nach Paris mit dem TGV von Bern via Basel wollten wir uns mit zwei Focaccia-Sandwiches zum Preis von einem eindecken. Leider kam es zu zwei Komplikationen:

Was ist denn eigentlich eine Konsumation?

Die Spettacolo-Verkäuferin war zuerst der Meinung, dass der Gutschein — entgegen dem Aufdruck — nur gegen Kaffeegetränke eingelöst werden kann („Konsumation“ heisst für mich Konsumation, und nicht Kaffee). Nachdem wir sie dazu bewogen hatten, den Gutschein erneut zu lesen, durften wir dann doch noch zwei Sandwiches auslesen.

Was bedeutet denn eigentliche Zwei für Eins?

Wir erhielten die gewärmten Focaccias ausgehändigt und mussten den reduzierten Betrag bezahlen. Meine Freundin studierte dabei die Quittung und stellte erstaunt fest, dass ein Focaccia voll sowie das zweite Focaccia zum halben Preis verrechnet wurde. Wir wiesen die Verkäuferin auf das Missverständnis hin: Auf dem Gutschein stünde „2 für 1“ und nicht „2 für 1.5“. Sie wollte nichts von unserer Argumentation wissen. Da wir wegen der Abfahrt des Zuges im Zeitdruck waren, liess ich die Sache vorerst auf sich bewenden, nahm mir aber vor, diese offensichtliche Täuschung des Kundes zur Sprache zu bringen.

prozentbuch

Noch während der Zugfahrt am 30. Dezember 2013 verfasste ich auf meinem iPhone deshalb eine E-Mail-Nachricht an Prozentbuch und legte das Photo der Quittung bei.

Eine erste Antwort erhielten wir noch am selben Tag um 14:13 Uhr. Der Ansprechpartner Tancredi Gaffuri teilte uns mit, dass die Beschwerde an spettacolo weitergeleitet wurde. Dann herrschte Funkstille.

Am 15. Januar 2014 nahm ich deshalb erneut mit Herrn Gaffuri Kontakt auf und bat ihn, in dieser Angelegenheit tätig zu werden. Ich erwartete von ihm die Klärung des Sachverhalts (mit Blick auf all die anderen Prozentbuch-Kunden, welche diesen Gutschein noch im HB Bern einlösen werden) sowie eine Gutschrift auf den zuviel bezahlten Betrag und die Umtriebe.

Herr Gaffuri bestätigte mir, dass mein Anliegen erneut an Spettacolo weitergeleitet wurde. Er belehrte mich zudem, dass Prozentbuch keine Entschädigungen auszahle, da . Super: Im Grund beschränkt sich das Unternehmen hinter dem Prozentbuch also darauf, Verträge mit den Restaurateuren auszuhandeln, das Gutscheinheftli zu drucken und an Kunden auszuliefern. Sobald man aber ein Problem mit einem Anbieter hat, hält sich der Verkäufer des Heftchens vornehm aus der Angelegenheit raus. Es würde mich nicht wundern, wenn wir dereinst noch im Beobachter oder K-Tipp oder im Kassensturz von dieser Firma hören werden …

valora retail

Ich stellte mich zunehmend auf eine grosse Schlammschlacht ein und erwartete, hart für eine Entschuldigung und eine Entschädigung zu kämpfen. Doch die Überraschung folgte wenige Tage später per Briefpost:

Spettacolo gehört der valora retail, wie ich mittlerweile weiss. Am 20. Januar sendete uns Herr Dogu ein persönliches Schreiben und versicherte uns, dass das Verkaufspersonal erneut geschult wurde und solche Fehler nicht mehr passieren würden. In der Beilage stellte man uns als Wiedergutmachung zwei Gutscheine für je einen Kaffee zu.

Danke, valora retail! Das ist eine vorbildliche, wenn auch etwas zögerliche Beantwortung von solchen Problemen.

Tags: , , , , ,
Labels: Leben

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. Januar 2014

Shell-Script-Befehl auf STDOUT ausgeben und danach ausführen

Viele meiner Scripts sind mit hoher Verbosität programmiert, damit ich während der Entwicklung weiss, wo allfällig die Ausführung abbricht. Hierzu gehört auch, dass ich komplexe Befehle vor der Ausführung ausgebe. Damit kann ich den Befehl kopieren und beim Debugging manuell auf der Kommandozeile ausführen, um vielleicht weitere Hinweise auf das Problem zu erhalten.

Doch wie macht man das, wenn man bspw. bei rsync Pfadangaben mit Leerschlägen drin hat, die vom Tool dann auch effektiv erkannt und verarbeitet werden sollen? Hier die Lösung:

...
$SOURCE="/Users/mario/Pictures/iPhoto Library/"
$DEST="/Volume/Sicherungs Ordner mit vielen Leerzeichen/"
...
COMMAND="rsync $OPTS \"$SOURCE\" \"$DEST\""
...
echo "Executing '$COMMAND' ..."
...
eval $COMMAND
...

Die ganze Chose steht und fällt mit eval. Wird nur $COMMAND ausgeführt, stolpert rsync über die ordentlich mit Anführungszeichen versehenen Pfade mit Leerzeichen.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. Januar 2014

Shell-Scripte mit vielen Optionen

Komplexe Shell-Scripte, welche ein Unix-Tool mit unzähligen Optionen aufrufen, muss man ab und zu debuggen. Damit dies möglichst einfach funktioniert, habe ich mir angewöhnt, die Optionen so zu notieren, damit ich jede einzelne Option mit einem Tastendruck auskommentieren kann:

...
OPTS=""
OPTS="$OPTS --verbose"
OPTS="$OPTS --archive"
OPTS="$OPTS --no-owner"
OPTS="$OPTS --no-group"
#OPTS="$OPTS --delete" # WILL DESTROY EVERYTHING! DO NOT UNCOMMENT
OPTS="$OPTS --progress"
...
rsync $OPTS "$SOURCE" "$DESTINATION"
...

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. Januar 2014

Das Mac OS X Home-Verzeichnis mit rsync über SSH auf eine Synology Diskstation sichern

Nachdem ich den schlüsselbasierten Login hingekriegt hatte, stand ich bereits wieder vor dem nächsten Problem: Mein rsync-Script zur Sicherung meines Mac OS X Home-Verzeichnis in einen Unterordner auf meinem Home-Verzeichnis auf dem Synology NAS brach mit folgender Fehlermeldung ab:

...
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
ERROR: module is read only
...

Wieso denn das? Mit dem Synology-Konto meines Raspberry Pi klappt die ganze Chose problemlos!

Mit den Hinweisen unter Rsync over ssh: “ERROR: module is read only” suddenly appeared wurde ich auf den richtigen Pfad gelenkt: Ich musste meinem Benutzer mittels des Synology Web-GUIs Schreibrechte auf den Homes-Ordner geben:

  1. Control Panel
  2. Users
  3. %BENUTZER% auswählen
  4. Edit
  5. Privileges Setup
  6. homes
  7. [x] Read/Write
  8. OK

Seither klappt die rsync-Synchronisierung. Ob ich aber damit eine Sicherheitslücke geöffnet habe?

Tags: , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. Januar 2014

Sich schlüsselbasiert per SSH auf einer Synology Diskstation einloggen

Im Grunde ein einfaches Unterfangen, welches im Internet auf unzähligen Seiten dokumentiert ist. Kurzfassung: Auf dem eigenen Arbeitsrechner einen privaten und öffentlichen Schlüssel erstellen, auf der Synology Diskstation den SSH-Zugang aktivieren, eine Login-Shell einrichten und dort dann unter ~/.ssh/authorized_key den öffentlichen Schlüssel ablegen.

Was ich vor einigen Monaten mit meinem Raspberry Pi erfolgreich und innert kurzer Zeit hingebracht habe, wollte mich gestern während eineinhalb Stunden auf Trab halten. Neu wollte ich auch meinen persönlichen Account mit einem schlüsselbasierten SSH-Zugang ausstatten. Doch während der schlüsselbasierte Login mit dem Raspberry Pi-Konto problemlos funktionierte, wollte es mit dem privaten Konto einfach nicht klappen, obwohl die Konfiguration identisch war.

Lösung

Die nach unzähligen Pröbelversuchen eruierte Ursache: Das Home-Directory meines Benutzers war nicht mit den korrekten Berechtigungen versehen:

VAULT> ls -l /volume1/homes/     
...
drwxrwxrwx    6 mario    users         4096 Jan 26 10:42 mario
...

Nachdem ich folgenden Befehl ausgeführt hatte, klappte es plötzlich:

$ chmod 755 /volume1/homes/mario

Hierbei handelt es sich um eine im Grunde gut gemeinte Sicherheitsvorkehrung auf Unix-Systemen. Denn wenn andere Benutzer den Public Key eines anderen Benutzers ersetzen könnten, könnten sie sich anschliessen unter dessen Kontext einloggen.

Siehe auch der Beitrag SSH and home directory permissions auf Stackexchange.

Hintergründe

Ein grosses Problem dieser Synology-Box ist es, dass auf ihr ein abgespecktes Linux läuft, welches einerseits die gängigsten Debug-Optionen nicht zur Verfügung stellt (bspw. ein sauberes Logging der Aktivitäten von sshd), andererseits über eine schier unüberschaubare verschachtelte Konfiguration verfügt.

sshd_config

Insgesamt habe ich auf der Kiste drei sshd_config Konfigurationsdateien gefunden:

  • /etc/ssh/sshd_config
  • /etc.defaults/ssh/sshd_config
  • /usr/syno/etc.defaults/ssh/sshd_config

Welche ist nun die richtige? Und welche bleibt auch bei einem Update oder Neustart mit meinen Konfigurationsanpassungen bestehen? Ich weiss es bis heute nicht.

sshd neu starten

Auch hierfür gibt es mehrere Möglichkeiten. Im Netz habe ich zwei Befehle gefunden:

  • # killall sshd
  • # /usr/syno/etc.defaults/rc.d/S95sshd.sh restart

Wenn ich diese Befehle ausgeführt habe, bin ich natürlich schnurstracks aus der SSH-Session geflogen — logisch. Doch bei der Verwendung von killall hat man sich soeben gerade vollständig vom NAS ausgesperrt.

Glücklicherweise gibt es über das Web-GUI des NAS die Möglichkeit, SSH wieder zu starten:

  1. Control Panel
  2. Terminal
  3. [x] Enable SSH service

Was ich zudem auch realisiert habe: Wenn ich SSH über das GUI neu starte, wird /etc/ssh/sshd_config neu eingelesen. Wenn ich es mit den Kommandozeilenbefehlen neu starte, wird die Konfigurationsdatei irgendwie nicht beachtet …

Verschachtelte Start-Scripts

Wie genau wird nun aber SSH gestartet? Die Synology-Ingenieure haben sich wohl gesagt: „Wieso einfach, wenn es auch kompliziert geht?“ und sich einige verschachtelte Scripts geleistet:

/usr/syno/etc.defaults/rc.d/S95sshd.sh liest einerseits /etc.defaults/rc.subr als auch /usr/syno/etc.defaults/rc.ssh.subr ein. Gestartet wird der SSH-Daemon dann aber, indem das Script /usr/syno/etc.defaults/rc.ssh aufgerufen wird. Dieses Script sourced das bereits erwähnte /usr/syno/etc.defaults/rc.ssh.subr erneut.

Konfigurationsdatei forcieren

Als mir das Debugging zu blöd wurde, habe ich mich entschieden, die Konfigurationsdatei ein für allemal in das eigentliche Startscript /usr/syno/etc.defaults/rc.ssh hartzukodieren:

...
$SSHD -f /etc/ssh/sshd_config
...

Debugging in syslog? Fehlanzeige

Wer denkt, dass einem folgende Zeilen beim Debugging in /etc/ssh/sshd_config weiterhelfen, liegt falsch:

...
SyslogFacility AUTH
LogLevel DEBUG
...

In /var/log/messages, der einzigen von zwei Log-Dateien in diesem Verzeichnis, welche bisher am heutigen Tag aktualisiert wurden, finden sich keine weiterführenden Infos, wieso sich der Benutzer mario nicht Schlüsseln einloggen darf.

Tags: , , , , , , , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Montag, 13. Januar 2014

Das PHP Error-Log von einem Cyon-Server täglich per E-Mail zusenden

Ein guter Web-Entwickler hält das PHP Error-Log seiner Web-Sites und -Applikationen stets im Auge. Ich persönlich habe mir zum Ziel gesetzt, dass nur ein leeres Log ein gutes Log ist. Dies bedeutet demzufolge, dass man auf Produktivsystemen sauberen Code ausliefert. Und sollten doch einmal Fehlermeldungen, Warnungen und Infos im PHP Error-Log auftauchen, gilt es diese zeitnah zu beheben.

Damit man eine Web-Präsenz, welche auf einem Cyon-Server mit SSH-Zugang läuft, überwachen kann, sind folgende Anpassungen nötig:

php.ini

Bei meinen Hostings befindet sich diese Konfigurationsdatei unter ~/etc/php_settings/default/php.ini. In dieser Datei sollten die folgenden Parameter gesetzt sein:

...
error_log = /home/%CYON-ACCOUNT%/var/log/php.err
...
error_reporting = E_ALL # Allenfalls auch & ~E_DEPRECATED
...

Dabei sollte man sicherstellen, dass das Verzeichnis /home/>benutzernamen>/var/log/ existiert und schreibbar ist.

mail-php-error-log.sh

Nachfolgendes Script sorgt dafür, dass der Inhalt der heutigen php.err per E-Mail an eine frei definierbare E-Mail-Adresse gesendet wird. Nach dem Versand wird die php.err kopiert und das Original danach gelöscht. Dem Dateinamen der Kopie wird dabei der aktuelle Tag des Jahres (1 bis 365) angehängt, womit wir eine Art automatisiertes logrotate durchführen:

#!/bin/sh

LOG="/home/%CYON-ACCOUNT%/var/log/php.err"

if [ ! -f "$LOG" ]
then
        echo "File '$LOG' not found"
        exit 1
fi

LINES=`cat "$LOG" | wc -l`

if [ $LINES -lt 1 ]
then
        exit 0
fi

#echo "Since log file is not empty ($LINES lines) I'm now posting its content to the webmaster"
cat "$LOG" | mail -s "php.err" logger@domain.tld
#echo "Would now be sending mail"

# Secret Sauce
DAYOFYEAR=$(date +%j)
cp "$LOG" "$LOG.$DAYOFYEAR"
rm "$LOG"

exit 0

Dieses Script habe ich in meinem Home-Folder abgelegt und mittels chmod 700 für meinen Benutzer ausführbar gemacht.

crontab

Schlussendlich richtet man sich noch einen Eintrag in crontab ein, damit das Script automatisiert einmal im Tag aufgerufen wird:

$ crontab -e

Der Inhalt dieser Datei lautet:

MAILTO="logger@domain.tld"
...
12 23 * * * /home/%CYON-ACCOUNT%/mail-php-error-log.sh

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen