Linux

Freitag, 27. Mai 2011

Schwarze Schafe automatisiert finden

Ich stand vor kurzer Zeit vor dem Problem, wie man schnell voneinander abgeschriebenen Text in Protokollen finden kann. Die Protokolle wurden alle im Word-Format abgegeben. Dafür gibt es ein paar nette Helfer, die ich hier vorstellen möchte:
  1. Antiword wandelt .doc in einfache Textdateien um
  2. cat_open_xml.pl ist ein Perl-Skript für die gleiche Aufgabe bei .docx
  3. Das Paket similarity-tester kann sehr einfach Textfiles vergleichen
Und hier ein kleines Skript zur Automatisierung. Es geht davon aus, dass das Perl-Skript und die Word-Dateien im gleichen Verzeichnis liegen. Namensähnlichkeiten zum Tagesgeschehen sind natürlich nur Zufall.
#!/bin/bash
#Das Gutti-Skript: Wir finden Duplikate

#Aufräumen
rm *.txt

#Störende Leerzeichen entfernen
for i in *\ *
        do mv "$i" "${i// /_}"
done

#.doc umwandeln
for i in *.doc
        do antiword $i >& $i.txt
done

#.docx umwandeln
for i in *.docx
        do ./cat_open_xml.pl $i >& $i.txt
done

#Texte vergleichen und nach Ähnlichkeit in Prozent auflisten
sim_text -e -s -p -T *.txt
Natürlich muss man Treffer noch manuell nachkontrollieren.

Donnerstag, 23. September 2010

Mini-VDR auf Seagate Dockstar - Teil 3

Es ist soweit, der VDR kann installiert werden. Das geht dank der Debian-Paketverwaltung sehr einfach.
     apt-get install vdr vdradmin-am vdr-plugin-live vdr-plugin-streamdev-server vdr-plugin-epgsearch w-scan
Hierbei installiert man eine Konfigurationsoberfläche und die einfache Benutzeroberfläche VDR-Live mit. w-scan wird benutzt, um automatisch die Sender zu suchen. Bevor es richtig los geht, sind noch ein paar wenige Dinge zu erledigen. Der VDR erwartet einen Ordner unter
     /var/lib/video.00
zum Speichern der Aufnahme. Da der Mountpoint vom NAS ganz wo anders liegt, muss ein symbolischer Link gesetzt werden und gegebenenfalls müssen noch die Zugriffsrechte angepasst werden:
     ln -s /tank/Video/tvrecordings/ /var/lib/video.00
     chown vdr:vdr /tank/Video/tvrecordings
Nun zu den Konfigurationsdateien. Im Folgenden die Dateien mit den entsprechend zu setzenden Optionen:
     /etc/default/vdr
          ENABLED=1 #VDR wird beim Booten mitgestartet
     /etc/default/vdradmin-am
          ENABLED=1
     /var/lib/vdradmin-am/vdradmind.conf
          PASSWORD = passwort #entsprechend anpassen
          USERNAME = benutzer #Login-Name für die Konfigurationsoberfläche
     /var/lib/vdr/plugins/streamdev/streamdevhosts.conf
          192.168.0.0/24        # any host on the local net (Hier muss das eigene Subnetz angepasst werden)
Jetzt ist es fast geschafft! Es fehlt nur noch ein Sendersuchlauf.
     w_scan -ft -c DE > /var/lib/vdr/channels.conf
Hierbei ist zu beachten, dass mit DE Voreinstellungen für Deutschland benutzt werden. Dieser Sendersuchlauf kann etwas dauern. Dann kann es losgehen. Daumen drücken und:
     /etc/init.d/vdr start
Geschafft! Nun steht unter http://SERVER-IP:8001 die Konfigurationsoberfläche und unter http://SERVER-IP:8008 die Oberfläche des Live-Plugins bereit.

Login

Außer Aufnehmen kann der VDR auch live Streamen:
     mplayer http://SERVER-IP:3000/1
Die letzte Zahl ist die Kanalnummer. Umgeschaltet wird durch einfaches Hochzählen.

So, das war es. Mit etwas Erfahrung braucht man nur eine Stunde, ein wenig günstige Hardware, und man hat einen kleinen, lautlosen und stromsparenden VDR.

Mini-VDR auf Seagate Dockstar - Teil 2

So, nun der zweite Teil auf dem Weg zum Mini-VDR. Da unser Dockstar weder eine grafische Ausgabe noch DVD-Laufwerk hat, entfallen Aufgaben wie Filme abspielen und Fernsehen direkt anzeigen. Hier geht es also nur um Aufnahme und Streaming.
Bei der Aufnahme ist eins wichtig: Speicherplatz. Und davon auch nicht zu knapp. Die einfachste Lösung wäre es, eine externe Festplatte anzuschließen. Wie das funktioniert ist im Blog ModMyDock beschrieben. Ich bin aber einen anderen Weg gegangen und habe eine Netzwerkfreigabe meines NAS eingebunden. Dadurch bleibt der VDR wirklich klein und keine zusätzliche Festplatte muss laufen. Um auf eine NFS-Freigabe zugreifen zu können, sind folgende Schritte nötig:
     apt-get install nfs-common portmap
Dann muss ein Mountpoint festgelegt werden, welchen ich für alle Benutzer beschreibbar mache, um Problemen vorzubeugen. Die Sicherheit ist hier wirklich zu vernachlässigen, auf dem Gerät existiert ja nur der root-Account. Anschließend wird dieser noch in die
     /etc/fstab
eingetragen.
     mkdir /tank
     chmod a+rwx /tank
     nano /etc/fstab
Hier am Ende der Datei eintragen:
     NAS-IP:/Pfad/zur/Freigabe        /tank     nfs     defaults        0       0
Mit
     mount -a
wird diese Datei neu eingelesen und ein
     ls /tank/
sollte den Inhalt der Freigabe anzeigen.
Nun fehlt aber noch eine weitere Voraussetzung vor der eigentlichen VDR-Installation. Der eingesteckte DVB-T-Stick benötigt sehr wahrscheinlich noch eine Firmwaredatei. Ob und welche findet man mit
     dmesg
heraus. Danach ist wahrscheinlich etwas Recherche nötig, wo die entsprechende Datei zu finden ist. In meinem Fall (Hauppauge Nova-T Stick) geht die Installation wie folgt:
     wget http://tom.mercelis.be/blog/sites/default/files/dvb-usb-dib0700-1.20.fw
     mv dvb-usb-dib0700-1.20.fw /lib/firmware/
Anschließend sollte mit
     reboot
neu gestartet werden. Anschließend sollte
     dmesg
ausgeben ob der Stick betriebsbereit ist. Jetzt noch die nötige Antenne anschließen und dann geht es im nächsten Teil mit dem eigentlichen VDR weiter.

Mittwoch, 22. September 2010

Mini-VDR auf Seagate Dockstar - Teil 1

Momentan das Trendgerät für alle Bastler, die Seagate FreeAgent Dockstar. Dieses Gerät, welches eigentlich dafür gedacht ist, Seagate-Festplatten über einen Onlineservice verfügbar zu machen, ist mit etwas Glück schon für 20€ zu bekommen. Interessant wird es dadurch, dass darauf ein recht einfach zugängliches Linux läuft.

Ich konnte natürlich nicht widerstehen und habe mir so ein Ding besorgt. Nur was damit anfangen? Da ich noch einen alten Hauppauge DVB-T-Stick habe, bietet sich ein kleiner VDR geradezu an. Die Installation wird massiv erleichtert durch die Debianportierung von Jeff Doozan. Von ihm stammen auch die ersten Schritte dieser Anleitung:

Bevor man das neue Gerät anschließt, sollte man verhindern, dass es eine Verbindung zum Internet hat. Es bestünde die Möglichkeit, dass die Dockstar eine neue Firmware laden könnte. Und das würde den ersten Schritt nur komplizierter machen. Nun, nach Anschließen sucht man die IP, am besten am Router oder mit Nmap. Dann mit ssh einloggen:
     ssh root@DOCKSTAR-IP
     Passwort: stxadmin 
Zweite Voraussetzung ist ein größerer USB-Stick, der mit einer Linuxpartition und als zweites mit einer Linux-Swappartition formatiert werden muss. Dabei sollte die Linuxpartition schon größer als 0,5GB sein. Swap sollte mit 256MB auskommen. Nun den USB-Stick anschließen, dann kann es losgehen:
     cd /tmp 
     wget http://jeff.doozan.com/debian/dockstar.debian-squeeze.sh 
     chmod +x dockstar.debian-squeeze.sh 
     export PATH=$PATH:/usr/sbin:/sbin 
     ./dockstar.debian-squeeze.sh 
(Stand September 2010)
Man sollte während der Installation die Pogoplug-Services deaktivieren. Der Rest kann dann schon etwas dauern. Nach einem Reboot kann man sich nun in das neue Debiansystem einloggen:
     ssh root@DOCKSTAR-IP
     Passwort: root 
Dabei kann die IP durchaus variieren. Das Passwort sollte man dann möglichst schnell ändern:
     passwd
Dann sollte man die Paketlisten mit
     apt-get update
aktualisieren. Wenn man nicht mit vi arbeiten mag, kann man nano nachinstallieren:
     apt-get install nano
Ein kleiner Nachteil des Geräts, es hat keine Hardwareuhr. Das wird jetzt ausgeglichen:
     dpkg-reconfigure tzdata
Richtige Zeitzone auswählen und dann
     apt-get install ntp cron
     ntpdate -u ntp.ubuntu.com
Dies sollte automatisch geschehen:
um das zu automatisieren:
     nano /etc/crontab
und am Ende der Datei eintragen:
     @hourly ntpdate -u ntp.ubuntu.com > /dev/null 2>&1 
     @reboot ntpdate -u ntp.ubuntu.com > /dev/null 2>&1 
Optional ist nun der nächste Schritt, dem Gerät eine feste IP geben:
     nano /etc/network/interfaces
Anschließend die Datei ändern auf
     auto lo eth0
     iface lo inet loopback
     iface eth0 inet static
             address IP-ADRESSE
             netmask NETMASK
             gateway GATEWAY
Wichtig, mit den eigenen Werten ersetzen! Nach einem Neustart sollte die IP dann passen. Beim nächsten mal geht es dann weiter mit der Installation und Konfiguration.

Freitag, 4. September 2009

libnotify - einfach und praktisch

Durch Hack A Day bin ich heute auf das kleine Programm libnotify gestoßen. Dieses erlaubt sehr einfach Benachrichtigungen auf dem Desktop auszugeben. Schnell ergeben sich einige Einsatzszenarien:
  1. Systemüberwachung:
    Sehr einfach ist die Ausgabe des syslogs oder von anderen Logdateien. Das geht sicher auch eleganter, aber diese wenigen Zeilen zeigen wie einfach libnotify funktioniert:
    #!/bin/bash
    
    X="EIN"
    syslog="leer"
    syslogalt="leer"
    dmsg="leer"
    dmsgalt="leer"
    publicip="leer"
    publicipalt="leer"
    
    while [ "$X" == "EIN" ] ; do
    
            syslog=$(tail -n 1 /var/log/syslog)
            if [ ! "$syslog" = "$syslogalt" ]; then
                    notify-send -i $HOME/skripte/syslog.png "syslog:" "$syslog"
            fi
            syslogalt="$syslog"
            sleep 5
            dmsg=$(tail -n 1 /var/log/dmesg)
            if [ ! "$dmsg" = "$dmsgalt" ]; then
                    notify-send -i $HOME/skripte/dmesg.png "dmesg:" "$dmsg"
            fi
            dmsgalt="$dmsg"
            sleep 5
            publicip=$(lynx -dump http://checkip.dyndns.org)
            if [ ! "$publicip" = "$publicipalt" ]; then
                    notify-send -i $HOME/skripte/ip.png "Neue IP-Adresse:" "$publicip"
            fi
            publicipalt="$publicip"
            sleep 5
    done
    
    Sehr primitiv und nichts für den Dauereinsatz, aber es funktioniert. Übrigens, unter skripte/ liegen bei mir auch die Icons für die Notifications.
  2. Irssi-Highlights remote:
    Was mich viel mehr begeistert, ist eine andere Möglichkeit. Wie viele, lasse ich Irssi remote in Screen laufen um es nicht immer neu starten zu müssen. Das macht leider die Ausgabe von Highlights als Notification schwieriger und beeinträchtigt so den Nutzen. Durch ein einfaches Skript lässt sich dies aber auch hier lösen:
    #!/bin/bash
    
    ssh server "tail -n 10 $HOME/.irssi/fnotify; > $HOME/.irssi/fnotify; tail -f $HOME/.irssi/fnotify" |
            sed -ru "
                    s/&/\&/g;
                    s//\>/g;
                    s%(#[a-zA-Z]+ )<([^>]{0,10})>%\1\2 %g;" |
            while read heading message
            do
                    notify-send -i "$HOME/skripte/irssi.png" -- "${heading}" "${message}"
            done
    
    Vorlage für dieses Skript war dieses hier. Damit es funktioniert, wird das Irssi-Skript fnotify benötigt, welches in .irssi/scripts/ liegen muss und in Irssi mittels /run fnotify.pl gestartet wird.

Donnerstag, 16. Juli 2009

Pidgin Nachrichtenweiterleitung über DBus

Eigentlich hat alles damit angefangen, dass ich mir ein "Googlephone" G1 gekauft habe. Dieses hat echt gute Features und durch eine gewisse Anbindung an die Googledienste auch Push-Funktionen, wie Googlemail. Ich bin mir nicht sicher, aber ich vermute, dass auch Google Talk auf dem G1 als Push-Dienst funktioniert.
Beim Hören eines Podcasts kam ich auf die Idee, mir Systemnachrichten über Google Talk auf das Handy schicken zu lassen. Als erstes ist mir dann aber etwas Anderes eingefallen. Es wäre schön, dass, wenn man sich vom Rechner entfernt, die eintreffenden IMs weitergeleitet werden würden. Wenn man dann dringend erreicht werden muss, merkt man das auch.
Eigentlich gleicht man damit nur nicht vorhandene Fähigkeiten der proprietären Protokolle gegenüber jabber aus. Aber wer nutzt schon jabber... (leider)
Lange Rede, kurze Zusammenfassung: Ich wollte eine Weiterleitung von IMs auf jabber (Google Talk). Von DBus hatte ich schon mal gehört, daher hab ich über die DBus-Anbindung von Pidgin versucht. Im Netz habe ich einige passende Codefragmente gefunden, die allesamt in Python geschrieben waren. Ich hab es dann auch mit Python versucht, obwohl ich davon nicht viel Ahnung habe. Und hier ist das zusammengestückelte Skript zur Nachrichtenweiterleitung:
#!/usr/bin/env python

# Version: 0.2

import sys
import os
import xmpp
import time
import urllib
import urllib2
import dbus
import gobject
import dbus.glib
from dbus.mainloop.glib import DBusGMainLoop

def sendToJabber(text):
	tojid = 'Empfängeradresse'
	jidparams={}
	jid=xmpp.protocol.JID('Benutzername@server.domain')
	cl=xmpp.Client(jid.getDomain(),debug=[])
	jidparams['username']="Benutzername Sender"
	jidparams['password']="Passwort"
	jidparams['resource']="away-forward"
	
	
	con=cl.connect()
	if not con:
    		print 'could not connect!'
    		sys.exit()
	print 'connected with',con
	auth=cl.auth(jidparams['username'],jidparams['password'],resource=jidparams['resource'])
	if not auth:
    		print 'could not authenticate!'
    		sys.exit()
	print 'authenticated using',auth

	id=cl.send(xmpp.protocol.Message(tojid,text))
	print 'sent message with id',id

	time.sleep(1)


def onSessionIdleChanged(state):
    global away
    if state:
	away=1
    else:
	away=0

def receivedMessage(account, sender, message, conversation, flags):
    buddy = purple.PurpleFindBuddy(account, sender)
    alias = purple.PurpleBuddyGetAlias(buddy)
    text = alias + ": " + message
    if away == 1:
        sendToJabber(text)




away=0
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(receivedMessage, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg")
bus.add_signal_receiver(onSessionIdleChanged, 'SessionIdleChanged', 'org.gnome.ScreenSaver')
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")


loop = gobject.MainLoop()
loop.run()
Der Knackpunkt bei der Sache ist die Abfrage, ob der Benutzer abwesend ist. Ich habe es gelöst, indem das Skript den away-Status von Pidgin abfragt. Dazu habe ich mir einen extra Status angelegt, der bei kurzer Abwesenheitszeit automatisch eingestellt wird. Dabei wird dann auch automatisch das Google Talk-Konto abgemeldet, um eine unendliche Nachrichtenschleife vermieden wird. Da ich noch Twitgin für Twitter nutze, melde ich dieses damit auch automatisch ab, um nicht diese Nachrichten auch noch weitergeleitet zu bekommen. Leider gibt DBus den Status nicht unter dem bei Pidgin eingestellten Namen weiter, sondern unter einer Nummer. Diese muss man erst einmal herausfinden. Dafür ist die Zeile "print status". Startet man das Skript im Terminal, gibt dies den aktuellen Pidginstatus aus. Den Richtigen (den für abwesend) muss man dann in der nächsten Zeile eintragen.
Der Rest ist recht selbsterklärend, man benötigt nur die Adresse des Ziel-Google-Talk-Kontos und die Zugangsdaten eines zweiten jabber-Kontos zum Nachrichten senden.

Leider gibt es in Google Talk einen Bug beim Nachrichtenempfang (nicht alle werden angezeigt), aber man erhält jede Nachricht als Benachrichtigung. Und hoffentlich wird der Fehler in Android bald behoben!

Update: Das mit den Statusnummern hat sich als unzuverlässig erwiesen. Daher hab ich auf den Idle-Status von Gnome umgeschwenkt (schon im Code ergänzt).

Dienstag, 28. April 2009

Nach 231 langen Tagen..

muss mein AP doch leider ausgeschaltet werden.


root@OpenWrt:~# uptime
11:15:57 up 231 days, 11:49, load average: 0.00, 0.00, 0.00

Mittwoch, 1. April 2009

1. April

Sogar mein Betriebssystem will mich in den April schicken:

Wanda tot?

Montag, 26. Januar 2009

Günstige Möglichkeit mobil online zu sein

Schon länger hab ich mir gewünscht bei Bedarf immer und überall online gehen zu können. Bisher haben mich vor allem die Kosten abgehalten. Locker 100€ für ein entsprechendes UMTS-Modem und 25€ im 2 Jahresvertrag pro Monat waren mir immer viel zu viel.
Aber ich habe gar keine so hohen Ansprüche, große Downloads mache ich zuhause an der schnellen Leitung und Surfen mag ich auch nicht unbedingt. Wichtig sind mir eher Email, ssh und IM. Das alles zeigt dass ich weder große Geschwindigkeiten, noch ein großes Trafficvolumen brauche. Dann musste das ganze doch auch günstiger gehen.
Und in der Tat, das geht es.
Bei Ebay gibts die Novatel Merlin U530 PCMCIA-Karte recht günstig (mit ein bisschen Glück sogar unter 30€). Diese ist zwar recht langsam, unterstützt UMTS nur bis 384 kb/s, aber große Geschwindigkeiten waren ja eh nicht nötig. Dann fehlt nur noch der geeignete Zugang.
Das Problem ist, dass die gängigen Verträge immer 2 Jahre laufen und eigentlich viel zu groß und teuer sind. Mit langsamer Geschwindigkeit, nicht sehr häufiger und vor allem unregelmäßiger Nutzung macht ein Vertrag keinen Sinn. Als Alternative habe ich Simyo gewählt. Der Grund war, dass Simyo ein Prepaidangebot anbietet, mit dem man für 9,90€ 30 Tage lang ohne Zeitbegrenzung und bis zu 1GB Traffic online gehen kann. Das war es dann, diese Option musste es sein.
Die Inbetriebnahme unter Linux war leider nicht ganz so trivial wie gewünscht. Ich hatte gehofft, einfach den Networkmanager nutzen zu können. Leider wird die Karte zwar erkannt, aber nicht so eingebunden wie es der Networkmanager gerne hätte. Statt /dev/ttyUSB* wird die Karte als /dev/ttyS2 angesprochen.
So hat es dann bei mir geklappt:
modprobe usbserial vendor=0xaf0 product=0x5000
Ich hab den Eindruck dass nach Laden des Moduls mit diesen Parametern die Verbindung schneller ist.
gcom -d /dev/ttyS2
Nach Eingabe dieses Befehls muss man die PIN von Simyo angeben. Dann wechselt das rote Blinken der Karte zu einem blauen Blinken.
umtsmon
Mit umtsmon kann man sich dann endgültig einwählen, die LED hört auf zu Blinken und die Verbindung funktioniert! Dafür muss man nur ein minimales Profil mit den Angaben APN: internet.eplus.de, Benutzernamen und Passwort einzurichten.

Montag, 7. April 2008

Probleme mit der NSLU2 - oder auch nicht

Das war wohl der gegen die Steckdosenleiste tretende Bruder *g*

User Status

Du bist nicht angemeldet.

Suche

 

Aktuelle Beiträge

VDR 1.7 auf Dockstar
weiss jemand wie man die abhängigkeit lösen kann vdr-plugin-xinelibout put...
karsten (Gast) - 16. Apr, 10:20
Umzug
Nach ganzen sechs Jahren ist hier nun Schluss und der...
Barahir - 3. Jan, 21:11
Ich hab versucht das...
Ich hab versucht das Verzeichnis anzupassen, das hat...
Barahir - 15. Nov, 13:22

Charts Lieblingskünstler - Diese Woche

RSS Box

Das Manifest des Web 4.
Torsten - 20. Jan, 20:45
Ein Klick mehr
Frei nach Archimedes: Gib mir einen Klick mehr, und...
Torsten - 13. Aug, 10:30
Nerd ist…
…wenn deine Wohnung von Steckdosenleistenschalterl ichtern...
Torsten - 12. Mai, 14:38
Die Instant-Messenger-Rekursio n
Wenn WhatsApp behauptet, das Klopapier sei ausverkauft,...
Torsten - 15. Mär, 13:03
Nerd ist…
… social distancing like a pro.
Torsten - 10. Mär, 19:16
Bluetooth-Ethik
„Ich — in der Hölle? Warum? Ich bin Ingenieur!“ „Ein...
Torsten - 26. Aug, 10:15
Weltkulturerbe Diskette
Wir sollten die Diskette zum UNO-Weltkulturerbe machen....
Torsten - 12. Aug, 09:33
Cloud – Deutsch: Jetzt lesen
Fürs Wörterbuch Cloud – Deutsch: „Jetzt...
Torsten - 22. Jul, 09:16
Cloud – Deutsch: Kontakte
Fürs Wörterbuch Cloud – Deutsch: „Wirf...
Torsten - 21. Jul, 14:09
KI 2.0
2025 stellten die Forscher ihre Forschungen zur Künstlichen...
Torsten - 3. Dez, 08:39

Status

Online seit 6378 Tagen
Zuletzt aktualisiert: 16. Apr, 10:20