Mittels bash und diff Duplikat-Bilder finden

von   Keine Kommentare

Wir nutzen eine Eye-Fi Karte, um Schnappschüsse, die wir im Alltag machen, direkt auf unseren zentralen Netzwerkspeicher übertragen zu bekommen. Also keinerlei händisches Speicherkarte in das Notebook stecken. Und v.a. werden die Bilder dadurch auch automatisch zeitnah im Backup gesichert.

Die Eye-Fi Karte bietet eine Funktion „endless Memory“ und realisiert das darüber, dass die ältesten Bilder auf der Karte automatisch gelöscht werden, wenn diese zuvor erfolgreich per Funk übertragen wurden. Natürlich geht das nur, wenn man die „Server“-Software unter Windows oder Mac laufen hat. Server in Anführungszeichen, da damit die Windows oder Mac-Software gemeint ist, in Ihrer Funktion, Bilder entgegenzunehmen aber in einer Server-Funktion arbeitet.

Ich nutze aber eben weder die Windows- noch die Mac-Software sondern das Rifec genannte Perl Skript, um es auf unserem „Server“, auch bekannt als Netbook, dauerhaft laufen zu haben. Somit entfällt die Funktion, Bilder auf der Karte zu löschen, da das seitens des Perl-Skripts nicht unterstützt wird.
Was bleibt ist also ein Datenbestand an Bildern auf der Eye-Fi Karte und die per Wlan übertragenen Bilder auf der Linux-Kiste.

Händisch will man das aber nicht unregelmäßig aussortieren, wenn man mal die Eye-Fi SD-Karte in das Netbook steckt. Daher habe ich mir ein kleines Bash-Skript geschrieben, was nach allen Bildern (bereinigt von „IMG_“ und „.JPG“-Dateiendung) des aktuellen Ordners in einem konfigurierten Verzeichnis sucht und jedes Suchergebnis mittels diff vergleicht. Standardmäßig spuckt es nur aus, ob Duplikate gefunden wurden und optional kann man die Bilder im Start-Ordner, der entweder die Eye-Fi Karte oder eben ein Temp-Ordner für auszusortierende Bilder ist, auch löschen lassen.

Da mit diff tatsächlich nur identische Dateien gefunden werden und ich die Funktionalität ausgiebig getestet habe, bin ich ziemlich sicher, dass wirklich nur Duplikate gelöscht werden. Daher steht als nächstes an, dass dieses Skript automatisch gestartet wird, wenn die Eye-Fi Karte eingesteckt wird.

Eine Erweiterung in der Zukunft könnte sein, statt simplem diff, den JPEG-Header zu ignorieren und mittels Jhead nur das Bild zwischenzuspeichern und dieses zu vergleichen, um auch Duplikate zu finden, die sich lediglich im Header (z.B. Uhrzeit-Anpassungen) unterscheiden.

Übrigens das Skript spuckt sogar in bunt aus, ob Duplikat oder nicht 😉

#!/bin/bash
PICPATH="/path/to/images"
LG="\033[01;32m"
LR="\033[01;31m"
CN="\033[00;00m"
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

param="$1"
for img in *.*
do
        echo -e "\n*** $img ***"
        img_number=`echo $img | sed -e "s/IMG_//gi" -e "s/\.JPG//gi"`
        dupe_found="no"
        for found in `find $PICPATH -iname "*$img_number*"`
        do
                diff -q "$img" "$found" > /dev/null
                if [ $? == 0 ]
                then
                        dupe_found="yes"
                        echo -e $LG"identisch:\t$CN $found"
                else
                        echo -e $LR"verschieden:\t$CN $found"
                fi
        done
        if [ "$dupe_found" == "yes" ]
        then
                echo "At least one dupe found. Executing 'rm $img'"
                if [ "$param" == "-d" ]
                then
                       echo "Deleting/rm ing $img"
                       rm $img
                else
                        echo "Only testing not deleted."
                fi
        fi
done
IFS=$SAVEIFS

Natürlich ist die Nutzung auf eigene Gefahr und ich übernehme gar nichts, sollte doch was falsches gelöscht werden 😉
Ein Hinweis noch: Das Skript muss natürlich in einem Ordner außerhalb des PICPATH gestartet werden, die zu untersuchenden potentiellen Duplikate dürfen sich also nicht innerhalb des PICPATH befinden, ansonsten werden natürlich genau die Bilder gefunden, nach denen man gerade suchen lässt…


Tags: , , , ,

Sonos unter Linux nach dem 3.7, 3.8 und 4.0 Update

von   1 Kommentar

Letzte Woche (egal ob saudische oder deutsche Woche ;)) gab es mal wieder die Information von Sonos, dass es ein Update für das Multi-Room-Audio System geben würde. Dieses Mal sollte der Desktop-Player eine Generalüberholung bekommen. Da klingelten bei mir auch direkt die Alarmglocken. Wir sind hier mit unserem unter Linux und Wine laufenden Sonos-Controllern wohl eher nicht das was man als Durchschnittsnutzer bezeichnen würde. In den Kommentaren unter dem Ankündigungs-Blog-Post hieß es zwar, dass auch der neue Controller unter Wine laufen würde, aber man weiß ja nie.

Un so kam es dann auch, dass der neue Controller sich nicht installieren lassen wollte. Irgendwas damit, dass Mono in Version 2.8 gebraucht wird. Aber auch die Installation dessen half nichts. Zumal Mono ja eigentlich .NET für Linux bereitstellen soll, es also wenig Sinn macht, dass Sonos 3.7 unter Wine Mono benötigt.

Bei ein wenig googeln fand ich dann aber glücklicherweise einen Beitrag im Sonos Forum, der beschreibt, wie man dem Controller in Version 3.6 bei bringt, sich für einen Controller der Version 3.7 zu halten. Kurz gesagt den String der Versions-Nummer gegen die beim Update-Check verglichen wird durch den aktuellen ersetzen.

Langfassung:

  1. Die Ip eines Sonos Zoneplayer mit: http://ip-des-players:1400/status/VERSION aufrufen und die Versionsnummer notieren (bei mir 17.5-51200). Bei mir war das 17.4-5200.
  2. In $HOME/.wine/drive_c/Programme/Sonos/pc…dll mittels vim -b (oder jedem anderen Editor in Binär-Modus) nach der alten Zeichenkette 16.7-48310 suchen und durch die aus dem ersten Schritt ersetzen.
  3. Desktop-Controller in Version 3.6 starten und sich darüber freuen, dass er auch mit den Zoneplayern in Version 3.7 klarkommt.

Schöner wäre es natürlich, würde Sonos entweder einen nativen Controller für Linux rausbringen oder aber der Controller würde problemlos mit Wine laufen. Zu hoffen bleibt auch, dass bei zukünftigen Updates dieser Workaround noch funktioniert.

UPDATE 14. Dezember 2012: Zwischenzeitlich gab es weitere Updates durch Sonos. Die neuen Version-Strings waren bei mir 19.3-53220 und der aktuellste ist 19.4-59140 (Sonos 3.8.3). Auch damit funktioniert der 3.6.1 Windows Controller via Wine unter Linux noch.

Update 14. Februar 2013: Sonos veröffentlichte die Tage Version 4.0 und nach dem Ersetzen von 19.4-59140 durch die jetzt aktuelle Version 21.4-61160 geht der alte 3.6.1 er Windows Controller nach wie vor auch unter Linux mit der 4er Version auf den Sonos Geräten.

Update 13. Juni 2013: Seit einiger Zeit ist die Sonos Version 4.1 draußen und auch diesmal kann durch das Ersetzen des im letzten Update genannten String 21.4-61160 durch den jetzt aktuellen 22.0-65180 auch der alte Linux-Controller noch zur Zusammenarbeit überredet werden.


Tags: , , ,

Windows 7 NACH Ubuntu Installation

von   Keine Kommentare

Wer sich mit der Thematik „Windows neben Ubuntu Linux betreiben“ schon Mal beschäftigt hat, dürfte wissen, dass das stressfreiste ist, zuerst Windows zu installieren und sich danach um Ubuntu zu kümmern. Nachdem wir uns im Dezember ein Netbook Samsung NC10 mit vorinstalliertem Windows 7 zugelegt hatten, war auch genau das mein Plan. Möglicherweise war es ein Bedienfehler oder vielleicht auch ein Bug im Installer von Ubuntu, jedenfalls war nach der Ubuntu Installation vom Windows nichts mehr vorzufinden. Die komplette Platte des Netbooks war plötzlich ein Ubuntu.

Da Windows 7 nach unserem Gefühl (oder einfach nur der Anzeige nach) eine wesentlich längere Laufzeit hatte als das nun installierte Ubuntu (11h zu 6h), wollten wir zumindest für die mobile Nutzung erneut ein Windows 7 installiert haben. Dem steht prinzipiell auch nichts im Wege. Einiger Stolpersteine auf dem Weg dahin gab es aber doch, daher dieser Eintrag.

1. Windows 7 ISO
Am einfachsten besorgt man sich die Kopie „seines“ Windows von easytopias Linkliste Windows 7 ISO Direkt Download Links. Natürlich braucht man auch nach erfolgreichem Download des ISOs eine gültige Lizenz.

2. Festplatte einteilen
Parallel zum ISO Download – der kann bei > 2GB eine Weile dauern – bootet man am besten mit einer Ubuntu Live CD und started GParted. Damit kann man dann eine Partition für Windows freischaufeln (so 30GB, um Platz zu haben). Funktionierte bei mir mit einer EXT4 Partition problemlos. Dauerte aber auch eine Weile.

3. Bootfähigen USB-Stick mit Windows 7 erzeugen
An dieser Stelle befand sich dann auch der erste Fallstrick. Mit Unetbootin hatte ich beim ersten Versuch erfolgreich einen USB Stick erzeugt von dem das Windows Setup startete. Um, nach einem Rechner-Absturz, sicher zu stellen, dass der USB-Stick vollständig war, wollte ich den Prozess mit Unetbootin einfach nochmal wiederholen. Funktionierte aber nicht mehr. Ich bekam lediglich einen Stick mit „default“ Bootoption die versuchte den ubnkern mit ubninit zu starten. Das kann mit einem Windows eher nicht so funktionieren, weil das eher für ein Linux gedacht ist. Nach einigem hin und her, half die Anpassung der sysconfig.cfg im root des USB-Sticks mit folgendem Schnipsel:

LABEL WinPE
MENU LABEL Windows 7 PE
KERNEL /BOOT/grub.exe
APPEND –config-file=“find –set-root /SOURCES/BOOT.WIM;chainloader /BOOTMGR“
TEXT HELP
ENDTEXT

Es wird also nichts anderes gemacht als das Wurzelverzeichnis anzugeben und bootmgr zu starten. Letzterer ist der Einstieg ins Windows 7 Setup.

4. Windows 7 Installation
Ich wägte mich schon auf der sicheren Seite, da endete die Windows 7 Installation mit einer nicht bootfähigen Festplatte. Die Installation erneut ausgeführt, wieder die Partition aus Schritt 2. gewählt. Diesmal zur Sicherheit aber formatiert. Und siehe da, Windows startete nach der Installation erfolgreich durch…

5. Windows 7 erneut installieren
In Schritt 1 sollte man darauf achten, das richtige ISO auszuwählen. So ist der Prozessor in unserem NC10 zwar 64bit tauglich, aber für die Hardware gibt es seitens Samsung keine 64bit Treiber, weil Microsoft die Verwendung von Windows 7 auf Netbooks auf 32bit einschränkt. Manchmal verstehe ich deren Denke einfach nicht.

6. Grub Bootloader installieren
Nach der erfolgreichen Installation von Windows, bootet man am einfachsten wieder mit der Ubuntu Live CD und führt ein

sudo grub-install

aus. Dadurch erhält man die Möglichkeit wieder in das Ubuntu zu booten was zu Beginn auf der Platte war und in welches man jetzt auch direkt wechselt.

7. Grub aktualisieren
In selbigem angekommen, reicht ein

sudo update-grub2

um sicherzustellen, dass sowohl Ubuntu als auch Windows korrekt aus Grub gestartet werden können. V.a. bei letzterem hatte ich zwei Einträge, von denen aber nur einer funktionierte.

Fazit
Es ist definitiv einfacher Ubuntu nach Windows zu installieren, wenn man davon ausgeht, dass es ein Bedienungsfehler von mir war, wie das Windows von Ubuntu überschrieben wurde. Andererseits ist auch die nachträgliche Installation von Windows kein Hexenwerk.


Tags: , , ,

Google+ sowie Facebooks VideoChat

von   7 Kommentare

Eine kleine Zusammenfassung der Dinge, die mir an Google+ aufgefallen sind. Der Einfachheit halber in Pro und Contra eingeteilt 🙂

Pro:

  • Notifications und die Möglichkeit direkt zu interagieren, ohne zum jeweiligen Beitrag zu springen. Laut Post von Frank soll es wie bei FB schon eine Änderung des Favicons wie bei FB geben.
    google-plus-notification
    facebook-notify-favicon

    Funktioniert bei mir aber noch nicht.

  • Circles das einsortieren funktioniert wirklich leicht.
    google-plus-circles
  • asymetrische Kontakte wie bei Twitter. Funktioniert bei FB, ohne Bestätigen der Anfrage zwar auch, aber wirkt nicht so, als sei es gewollt.
  • Hangout als VideoChat auch in der Gruppe. Funktioniert auch unter Linux mit zwei/drei Klicks zum Installieren der Erweiterung.
  • Integration vom +1-Button in die Google Suche. Kann man auch als Bookmarks verwenden.

Contra:

  • Auswählen der Circles beim Posten finde ich noch umständlich.
    google-circles-auswahl
  • Von unterschiedlichen Leute gleiche gepostete Inhalte, werden nicht gruppiert -> unübersichtlich.
    doppelt-geshared
  • allgemein hätte ich G+ gerne etwas kompakter.
  • fehlender RSS-Feed für den Stream.
  • mir fehlt die Beschränkung auf 140 Zeichen. Führt meiner Meinung nach zu präziser formulierten Nachrichten zu denen alle gezwungen waren.
  • +1 auf Kommentare oder Posts werden auf der +1-Seite nicht angezeigt. Zudem wäre es klasse, würden die +1 auf einer externen Seite und +1 für einen Beitrag zu dieser externen Seite irgendwie gemeinsam geführt/nachvollziehbar gemacht. Das macht FB aktuell auch noch nicht.
  • fehlende Integration in Anwendungen. Wird vermutlich mit dem Öffnen einer API geschehen.

Facebooks VideoChat

Wie bei Pro erwähnt, funktioniert der VideoChat von Google+ namens Hangout einfach. Sowohl bei mir unter Ubuntu Linux, als auch was ich von vielen anderen gelesen habe. Dazu kommt, dass kostenlos ein Gruppen-Chat möglich ist, bei dem man auch noch zusammen ein Youtube-Video oder andere Dinge gemeinsam machen kann.

Das alles ist bei Facebooks gestern vorgesteller Skype Integration nicht möglich. Zum einen funktioniert Facebooks VideoChat unter Linux einmal nicht. Zum anderen sind nur 1:1 Kontakte möglich. Klingt für mich nach einem dicken Plus für Google+ (was für ein Wortspiel ;)).

Abgesehen davon bleibt aber noch zu testen, wie sich Hangout z.B. mit den Internet-Bedingungen hier in Saudi schlägt.


Tags: , , , , , , , , , , ,

Halbautomatisches Offsite-Backup mit rsync

von   Keine Kommentare

So mal wieder ein technischer Beitrag 🙂

Die Tage hörte ich von Datenverlust, durch einen Festplattenschaden einer externen Platte in der Familie. Das rief mir dann unsere Situation hier in den Kopf und dass alle unsere Bilder, die wir seit März 2010 gemacht haben, auf einer einzelnen externen Festplatte sind. Im Endeffekt kein wünschenswerter Zustand für den Fall eines technischen Defekts.

Wir kauften dann eine 2,5″ externe Platte, um auch mal eine Platte zu haben, die man leichter mitnehmen kann, da sie nur per USB an den Rechner gestöpselt wird.

Blieb nur noch die Frage nach einem regelmäßigen automatischen Backup, um dass man sich möglichst wenig kümmern muss. Klar war, dass die Backup-Platte ganz im Sinne einer Offsite-Lösung, in der Firma gelagert werden sollte, um auch im Falle eines Notfalls im Haus (Brand, usw.) gewappnet zu sein. Die Platte wird also nur einmal die Woche mitgenommen angestöpselt und am nächsten Tag geht sie zurück in die Firma.

Wenn die Platte im Haus an das unter Ubuntu laufende Netbook angestöpselt wird, löst eine UDEV-Regel, dass automatisch ein Backup mittels rsync gemacht wird:

ACTION==“add“, ATTRS{idVendor}==“1058″, ATTRS{idProduct}==“1023″, RUN+=“/home/crash/bin/ext_hdd_backup.sh“

Das aufgerufene Skript ist dabei nur ein Startskript, um das eigentliche Skript zu detachen. Mit einem einfachen „&“ im Aufruf der UDEV-Regel funktionierte das bei mir nicht. Ohne zu detachen/das Skript in den Hintergrund zu schieben, stoppt UDEV aber die Bearbeitung, so dass die Platte nicht eingebunden wird. Natürlich könnte man das Einbinden auch selbst übernehmen. Das Detachen fand ich aber einfacher.

#!/bin/bash
if ! /home/crash/bin/udevlock /home/crash/exthdd/exthdd.lock; then echo „Another instance running…“; exit 1; fi
touch „/home/crash/exthdd/exthdd`date„date +%N`“
/home/crash/bin/start_ext_hdd_backup.sh &

Udevlock ist ein kleines Skript, um udev entgegenzuwirken, das aufgerufene Skript mehrfach zu starten.
Im aufgerufenen Skript passiert dann das Backup per rsync:

#!/bin/bash
rsync=“/usr/bin/rsync“
rsync_cmd=“$rsync -a -P –delete-after –exclude=oldbart/* /media/SAMSUNGSTOR/ /media/Elements/“
while true
do
if [ -d „/media/Elements“ ]
then
rm /home/crash/dir_not_exists
if [ ! -f „/home/crash/rsync_running“ ]
then
touch /home/crash/rsync_running
su crash -c „$rsync_cmd“
rm /home/crash/rsync_running
rm /home/crash/exthdd/sync_started
fi
exit
else
touch /home/crash/dir_not_exists
fi
sleep 5
done

Durch die while-Schleife und das if wird geprüft, ob die Backup-Platte mittlerweile eingehängt ist. Sobald das der Fall ist, geht das Backup mittels rsync von Produktiv-Platte in Richtung Backup-Platte los. Bisher läuft das ziemlich gut und Befürchtungen die Daten auf der externen Platte hier könnten verloren gehen, haben sich mittlerweile erledigt. Fehlt nur noch die Daten der Notebooks auch auf die externe Platte zu spiegeln 😉


Tags: , , , ,