Ich wollte nur [...] und dann ist das Universum explodiert.

Projects
Books
Archive
About









    Permalink
  1. BitCoin | Debian Daemon Script für poclbm-mod

    Man muss Dinge über Hirnschäden von Menschen lesen die Nachts guten Gewissens neben einem 4 Grafikarten im SLI-Verbund schlafen und zugleich die Bedenken von sinnierenden Typen die an den Limitierungen von 21 Billionen maximal möglichen BitCoins zweifeln. Umweltverschmutzung ist natürlich auch ein Thema. Klar. Gerechtfertigter Weise.

    Wenn Ihr mich fragt, schiesst die BitCoin Mining Gesellschaft am Ziel vorbei. Separate Rechner betreiben schiesst am Ziel vorbei. Hunderte von Euros für neue Grafikkarten ausgeben um 5 MegaHashes/s mehr rechnen zu können schiesst am Ziel vorbei. Euro’s für BitCoins bezahlen schiesst sowieso am Ziel vorbei. Man kann BitCoins meines Erachtens auch benutzen ohne Kopfstände zu machen. Immer wenn der Rechner sowieso gerade läuft, mit der Hardware die man zur Verfügung hat.

    Aus diesem Grund habe ich ein kleines Skript gebastelt. Einen Start-Stop-Daemon für /etc/init.d/. Es startet automatisch wenn mein Rechner hochfährt und hört auf wenn ich Ihn herunterfahre. Ganz einfach

    $ wget -O /etc/init.d/bitcoin https://gist.github.com/raw/1007794/bitcoin.sh
    $ chmod +x /etc/init.d/bitcoin
    $ update-rc.d bitcoin defaults

    https://gist.github.com/1007794

    Ich möchte aber dazu sagen, dass ich dies Funktionstüchtigkeit des Skripts nicht auf anderen Rechnern/Betriebssystemen getestet habe. Vor Benutzung also bitte lesen, verstehen ggf. anpassen. Außerdem wird ein Account bei einem Mining Pool benötigt und der Mining Client an sich (poclbm-mod). Während ich diesen Post geschrieben habe, hat mein BitCoin Mining Client entspannt auf meiner Geforce 8600 GS mit nahezu niedlichen 950 KiloHashes/s vor sich hin gemined.


  2. Permalink
  3. Persönlicher Eindruck | Chemnitzer Linux Tage 2011

    Nachdem mich die Vorträge letztes Jahr so beeindruckt haben, hab ich mich auch dieses Jahr wieder entschieden die Linux Tage in Chemnitz zu besuchen. Durch einen Ausfall im Debian Team, hatte mir mein Kollege angeboten anstelle des ausgefallenen Mitglieds bei Debian mitzufahren. Was sich im Endeffekt als sehr nice herausstellte.

     

    Freitag

    Freitag war relativ entspannt. Ankunft und Aufbau des Debian Standes, mexikanisches Essen und danach Treffen mit Ben und Bier auf der Opening Party in der Mensa. Die Turnmatten in der Turnhalle waren auch kuschlig :)

    Samstag

    • Frühstück @ Catering-Tage – Sehr leckere Sachen.
    • 1. Vortrag: Storage – Aber richtig von Martin Gerhard Loschwitz. Fand ich persönlich interessant, gerade der iSCSI-DRBD-Ansatz um FibreChannel zu ersetzen gefiel mir sehr gut.
    • 2. Vortrag: Provokante Thesen zur IT-Administration von Peer Heinlein Ja, Herr Heinlein. Der Autor des Buchs, welches mich durch die LPIC-1 Prüfung geführt hat sinnierte auf eher komödiantische Art über die typischen Eigenschaften der IT-Dienstleistungsbranche. Hat allerdings Spaß gemacht zuzuhören.
    • Danach Pause. Erstmal durch die Stände gestöbert, die mittlerweile so gut wie vollzählig anwesend waren. Währenddessen ausgeknobelt, ob der nächste Vortrag Icinga oder Configs mit Git verwalten wird.
    • 3. Vortrag: Konfigurationsdateien mit Git verwalten von Julius Plenz. Mit bash-it benutze ich ja bereits eine Lösung die für mich zur Verwaltung Teile meines /home gut funktioniert. Aber es schadet ja nie, sich andere Taktiken anzusehen und daraus zu lernen. Genau das habe ich auch erreicht. Julius hatte ein sinnvolles zwei Branches Modell, mit denen er lokale und globale Änderungen seiner Konfigurationsdateien verwaltet. Disziplin und etwas Aufwand sind dafür allerdings nötig. (http://chemnitzer.linux-tage.de/2011/vortraege/folien/782-config-management.pdf)
    • Hungerbedingt verpasste ich den Vortrag über von C.  Klostermann über Professionelle IT Dokumentation – Anforderungen aus rechtlicher Sicht Mittagsbuffet schaffte aber Abhilfe.
    • 4. Vortrag: Von H. Uhlig Dem Hack keine Chance: LAMP sicher betreiben: erwieß sich grade als Administrator von Shared Hosting Systemen als hilfreich und informativ.
    • 5. Vortrag: A. Scherbaum: Datenbanken von MySQL zu PostgreSQL portieren: Hierzu muss ich sagen, dass ich mir den Ansatz etwas Administrativer vorgestellt habe. Die Feinheiten der Möglichkeiten fernab vom SQL Standart von MySQL und PostgreSQL wurden aber schön ausgeführt und beschrieben. Persönlich aber muss ich gestehen, nicht sagen zu können ob PostgreSQL (abgesehen von dieser Oracle Sache) besser ist als MySQL. Es scheint eben anders zu sein.
    • 6. Vortrag: P. Heinlein: SPF, DKIM und Greylisting – Was bringen Absender-Authentifizierung und der neue Spam-Schutz? : Nochmal Herr Heinlein, diesmal über SPF und DKIM als Spam-Schutz sinnierend. Aufklärend auf jedenfall, da ich die beiden Funktionen garnicht kannte und gegen Ende noch 2-12 Worte über Greylisting. Alles in Allem Runde Sache
    • 7. Vortrag: T. Winde: Mit dem Midnight Commander Freiheit leben: Hauptsächlich hat mich Jan’s Vorliebe für MC in diesen Vortrag getrieben. Es war schön zu sehen, nicht nur Vorträgen von Business-Guys auf den Linux Tagen zu sehen. Ein fast schon “goldiger” Vortrag eines älteren Taxi-Unternehmers, der mir trotz geringem Lernerfolg irgendwie gefiel.
    • Social Event: Wunderbares Buffet mit reichlich zu trinken und zu Essen. Hat im Endeffekt genau dem gedient, für was es gut war. Bier, Essen & Social’n.

     

    Sonntag

    • 8. Vortrag: Sonntag begann nach einer  weiteren Turnhallen-Nacht mit einem Vortrag von S. Kemter: Höher, Schneller, Weiter – openSUSE 11.4 : Der auch als Buergermeister von Karl-Tux-Stadt.de bekannte Redner, gab sich größte Mühe im Einsteigerforum das neue openSUSE, sowie die LTS, stable und unstable Linien vorzustellen.
    • 9. Vortrag: Von Andreas Tille Ein Jahr OpenStreetMap: Im Einsteigerforum ging es dann für mich auch gleich weiter mit einem (für mich komplett unbekannten) Thema. OpenStreetMap und seine Anwendung. Andreas, der selbst erst ca. 1 Jahr mit OpenStreetMap arbeitet, klärte die Zuhörer über all das auf, was er gerne von Anfang an über das Projekt gewusst hätte. War sehr schön gemacht und hat mir super gefallen. Dem ansonsten überfüllten Raum scheinbar auch.
    • 10. Vortrag: H. Voß Erstellung großer und größter Dokumente mit dem Satzsystem TeX: Ich muss sagen das meine Definition von “große Dokumente” ca. 1000 Seiten vor dem begonnen hatte die der Redner als große Dokumente definierte. Wenn so ein LaTeX Dokument mal länger läuft, als ein Kaffee hält, ist es eben viel :)
    • Mittags ließ ich mich dann von Julius (vom Git-Vortrag) nochmal einen Schritt in Zsh einführen, da sich am Social-Event rausgestellt hat, das er der Autor von Zsh beim OpenPress Verlag ist. Gab ehrlichgesagt vieles, bei dem ich nicht schlecht geschaut hab. … Wenn ich noch Zeit fände mir das alles einzuprägen… :)
    • 11. Vortrag: J. Kubieziel: Tor Bridges — Eine Brücke für freie Information: Danach ließ ich mich dann über die Risiken und Nebenwirkungen von Tor-Bridges aufklären. War sehr aufschlussreich. Langfristiges Interesse == unvermeidbar ;)
    • Stand abbauen – Ab nach Hause ;)

    Im großen und ganzen war es wirklich sehr schön und interessant, viele Leute und Projekte näher kennenzulernen. Die Zahl der Projekte die mich interessieren ist wiedermal gewachsen, die Zahl für die ich die Energie/Zeit habe mich auseinanderzusetzen bleibt aber leider wie immer gleich.

    Und gerade als ich mich daran gewöhnt habe, dass am Rednerpult intelligente Leute stehen die Ahnung haben von dem was Sie tun, muss ich wieder in die Schule. Bäm Montag.


  4. Permalink
  5. Charset | UTF8 für Apache, PHP, MySQL, Debian und WordPress

    Nachdem ich die Migration meines Blogs auf meinen neues Stück Blech größtenteils abgeschlossen hatte, wurde ich wieder an den Charset Wirr-Warr von IT-Systemen erinnert. Um meinem Blog seine Umlaute wieder zu beschaffen habe ich folgende Änderungen an verschiedenen Stellen eingespielt. Vorzugsweise immer in den entsprechenden conf.d/ Verzeichnissen, da die Änderungen evtl. beim nächsten Upgrade überschrieben werden könnten.



    Apache2 Charset
    vim /etc/apache2/conf.d/charset
    AddDefaultCharset UTF-8

    PHP5 Charset
    $ vim /etc/php5/apache2/conf.d/charset.ini
    [PHP]
    default_charset = "utf-8"
    [mbstring]
    mbstring.language = utf-8
    mbstring.internal_encoding = utf-8
    mbstring.http_input = utf-8
    mbstring.http_output = utf-8

    MySQL Charset
    $ vim /etc/mysql/conf.d/character
    [client]
    default-character-set = utf8
    [mysqld]
    default-character-set = utf8
    character-set-server = utf8
    collation-server= utf8_general_ci
    init_connect = ‘SET collation_connection = utf8_general_ci’
    init_connect = ‘SET NAMES utf8′
    [mysqldump]
    default-character-set = utf8
    [mysqlimport]
    default-character-set = utf8
    [mysql]
    default-character-set = utf8

    Debian WordPress Config
    $ vim /etc/wordpress/config-blog.url.php
    define('DB_CHARSET', 'utf8');
    define('DB_COLLATE', '');
    define('WPLANG', 'de_DE.UTF-8');

    Debian Locales
    $ dpkg-reconfigure locales

    Sollte ich es mal wieder brauchen, les ich hier nach.


  6. Permalink
  7. Twitter OAuth | Twidge reanimieren

    Da Twitter ja glorreicher Weise das Auth-Verfahren für Dritt-Software umgestellt hat, funktioniert mein Twitter-Logfile nun nicht mehr. Wie so manch anderer Client oder Schnittstelle. Die in Debian-Stable ausgelieferte Version 0.99.3 von Twidge unterstützt noch kein OAuth. Das mag jetzt niemandes Schuld sein. Denn warscheinlich liegt es weder am Author der Software, noch am Packaging. Wohl eher an der Zeit die ein Debian Paket braucht, um von Testing o. Unstable in Stable zu gelangen. Was auch gut so ist.

    Da ich Twidge aber auch außerhalb des Logfiles sehr gerne benutze, behob ich das Problem durch Installieren der Testing-Version. Zu finden unter http://packages.debian.org/squeeze/twidge

    $ twidge -v
    [...]
    This is Twidge, version 0.99.4. Copyright (c) 2008 John Goerzen

    $ wget http://ftp.de.debian.org/debian/pool/main/t/twidge/twidge_1.0.5_i386.deb

    $ dpkg -i twidge_1.0.5_i386.deb
    Vorbereiten zum Ersetzen von twidge 0.99.4 (durch twidge_1.0.5_i386.deb) ...
    Entpacke Ersatz für twidge ...
    dpkg: Abhängigkeitsprobleme verhindern Konfiguration von twidge:
    twidge hängt ab von libffi5 (>= 3.0.4); aber:
    Paket libffi5 ist nicht installiert.
    dpkg: Fehler beim Bearbeiten von twidge (--install):
    Fehler traten auf beim Bearbeiten von:
    twidge

    $ aptitude install libffi5
    Die folgenden NEUEN Pakete werden zusätzlich installiert:
    libffi5
    Die folgenden teilweise installierten Pakete werden konfiguriert:
    twidge
    Richte libffi5 ein (3.0.7-1) ...
    Richte twidge ein (1.0.5) ...
    Aktueller Status: 0 kaputt [-1].

    Die aktuelle Version von Twidge wäre also somit installiert. Zwar mit dpkg, aber wenigstens wird nachher bei neuereren Versionen geupdated :). Twidge stellt jetzt einen (wie ich finde) hervorragend gelösten Konfigurationsweg für die neue OAuth.

    $ twidge setup
    Please cut and paste this URL and open it in a web browser
    Click Allow when prompted. You will be given a numeric
    key in your browser window. Copy and paste it here.
    https://api.twitter.com/oauth/authorize?oauth_token=xxx
    Authorization key: 123456789
    Successfully authenticated!
    Twidge has now been configured for you and is ready to use.

    Hat irgendwie fast ein bisschen was von Wizard ;). Im Endeffekt sind es aber nur ein paar kleine Schritte:

    • Url öffnen
    • “App” autorisieren oder “Erlauben”
    • App-Authkey kopieren
    • Twidge vorwerfen

    Danach kann man das Internet wieder mit dem eigenen daily Nonsense füllen. Mit einem CLI-Client :). Was mich nebenbei noch fasziniert hat: http://packages.ubuntu.com/search?lang=de&searchon=names&keywords=twidge . Es gibt Twidge für Ubuntu also für Jaunty, Karmic und Maverick. Warum nicht für Lucid? Ich konnte es in meinen Quellen in Xubuntu (Lucid) auch nicht finden.


  8. Permalink
  9. Bash | Futurama Zitate aus slashdot.org HTTP-Header auslesen

    Bin heute morgen über ein Easter-Egg von Slashdot.org gestolpert. HTTP-Header:

    $ curl -Is slashdot.org
    HTTP/1.1 200 OK
    Server: Apache/1.3.41 (Unix) mod_perl/1.31-rc4
    SLASH_LOG_DATA: shtml
    X-Powered-By: Slash 2.005001
    X-Fry: You'll barely regret this.
    X-XRDS-Location: http://slashdot.org/slashdot.xrds
    Cache-Control: no-cache
    [...]

    Bei so ziemlich jeder Anfrage steht an der Stelle ein neues Zitat. Da ich sowieso total auf Futurama stehe, dachte ich mir ich baue die Zitate als Welcome-Message in meine Rechner ein:

    $ curl -Is slashdot.org | sed -n '5p' | sed 's/^X-//'
    Bender: OK, but I don't want anyone thinking we're robosexuals.
    $ curl -Is slashdot.org | sed -n '5p' | sed 's/^X-//'
    Fry: I can burp the alphabet. A, B, D ... no, wait ...

    Wenn ich aber bei allen meinen Rechnern die Zeile einbinde, hat das irgendwie ein bisschen was von DOS-Attacke. Muss ja nicht sein. Mit einem Einzeiler hab ich mir die Quotes erstmal alle besorgt:

    target="/path/to/file/018" ; while true ; do quote="$(curl -Is slashdot.org |sed -n '5p' |sed 's/^X-//')" ; if [ $(grep "$quote" $target |wc -l) -lt 1 ]; then echo $quote >> $target ; echo $quote ; sleep 1 ; fi ; done

    Hier gibt’s alle Quotes die der Einzeiler bis jetzt gesammelt hat: http://zwetschge.org/paste/018

    Futurama Quotes beim Login unter Ubuntu:

    $ wget http://zwetschge.org/paste/018 -O ~/.futurama
    $ vi ~/.bashrc
    quotes="$HOME/.futurama"
    if [[ $- == *i* ]]; then
    echo " "
    rnd=$((RANDOM % $(cat $quotes | wc -l)+3)) ; sed -n "${rnd}p" $quotes
    fi

    Einloggen oder Shell starten sieht dann wie folgt aus:

    $ ssh user@host
    user@host password:
    Linux host 2.6.32-22-generic #33-Ubuntu SMP Wed Apr 28 13:27:30 UTC 2010 i686 GNU/Linux
    Ubuntu 10.04 LTS
    [...]
    You have new mail.
    Bender: You can't count on God for jack! He pretty much told me so himself.
    user@host:~$


  10. Permalink
  11. Explain | Shell-Kommandos visualisiert erklären

    Neulich bin ich über das github Profil von Peter Hofmann gestolpert. Darin befand sich ein Projekt, welches ich sehr interessant fand.

    Explain versucht Shell Kommandos zu erklären und zu visualisieren. Gerade für Blogs oder andere Dokumentationen finde ich das mehr als sinnvoll. Es erstellt aus einem simpel gestricktem Markdown File eine ASCII-Art ähnliche Erläuterung des Kommandos. Beispielsweise:

    $ ./explain.py command.markdown
    find . -iname '*.png' -exec echo '<br><img src="{}">' \; > gallery.html
    \__/ | \___________/  \________/ \___________________/ |  \___________/
      |  |       |             |               |           |        |
      |  |       |             |               |           |        \- Ausgeben nach
      |  |       |             |               |           |           gallery.html
      |  |       |             |               |           |
      |  |       |             |               |           \- find Syntax Ende.
      |  |       |             |               |
      |  |       |             |               \- mit folgendem Inhalt aus.
      |  |       |             |
      |  |       |             \- und führe echo
      |  |       |
      |  |       \- alle Dateien die mit .png enden
      |  |
      |  \- im aktuellen Verzeichnis
      |
      \- Finde (via find)

    (PlainText: http://zwetschge.org/paste/015)

    Die Syntax des Files das zur Deklaration der Ausgabe dient:

    find . -iname '*.png' -exec echo '<br><img src="{}">' \; > gallery.html
    ---- ! -------------  ---------- --------------------- ! -------------
    
    Finde (via find)
    
    im aktuellen Verzeichnis
    
    alle Dateien die mit .png enden
    
    und führe echo
    
    mit folgendem Inhalt aus.
    
    find Syntax Ende.
    
    Ausgeben nach gallery.html

    Die Trennzeichen  sind via Parameter austauschbar und auch ansonsten tut das kleine Python Script seinen Job hervorragend. Sollte demnächst mal wieder ein Kommando erläutert werden müssen, werde ich definitiv darauf zurückgreifen. Weitere Beispiele auch unter:

    [1] http://www.uninformativ.de/?section=news&ndo=single&newsid=118
    [2] http://github.com/vain/explain


  12. Permalink
  13. RegExp | Domainendungen

    Heute mal etwas weniger spektakulär. Das ist lustig, wenn ich sowas schreibe. Denn es impliziert, dass es hier schon mal etwas spektakuläres gab. Reingefallen.

    Heute wollte ein Kunde mit etwas mehr Domains wissen, welche verschiedenen TLDs genau dabei sind. Hatte auch kostentechnische Gründe. Jedenfalls wollte ich nach dem exportieren nicht wirklich die Liste durchgehen und rausschreiben.

    Wie beschreibe ich also Domains in Regular Expressions?

    ^.*\.(.*)
    Würde das Format beschreiben. Im Grunde alles was nach dem ersten Punkt einer Zeile kommt in $1 ablegen (durch () markiert). Kämen keinen doppelten Domains wie .co.uk in die Quere und Subdomains kommen nicht aus der Domainliste. Ziemlich low-level-regexp.

    cat KundenDomainliste.txt | sed -e 's/^.*\.\(.*\)/\1/'
    Gibt die komplette Domainliste (nur mit TLDs) aus. Sonderzeichen wie ( ) müssen für die Bash noch escaped werden. Desweiteren noch den Ausdruck auf den die Beschreibung zutrifft durch 1 ersetzen. Wurden aber nicht weniger Domains.

    cat KundenDomainliste.txt | sed -e 's/^.*\.\(.*\)/\1/' | uniq | sort
    Die Ausgabe von sed an uniq zu übergeben, behebt diesen Umstand. Um noch alphabetisch zu sortieren diese Ausgabe wiederrum an sort übergeben. Nett.

    Raus kommt eine Liste von Domainendungen:
    .au
    .co.uk
    .com
    .de
    .hu
    .it

    usw…
    Übrigens bin ich mir der Ironie bewusst, cat zu benutzen. Useless use of cat


  14. Permalink
  15. roborobo | selfmade robot

    Robot-icon
    Auf dem Weg durch die Filesysteme meiner Rechner/Laptops/Server kam ich immer wieder in Situationen, in denen ich gerne Files (die mir wichtig waren) an einer bestimmten Stelle aufheben wollte. Ich hab über die Monate bzw. fast schon Jahre hin immer andere Systeme, Praktiken und Plätze entwickelt in denen ich diese Configs und ähnliches ablege. Über kurz oder lang ist aber jede dieser Methoden zu aufwändig oder zu unstrukturiert. Wenn ich Konfigurationsdateien von Daemons editierte, kopierte ich vorher die alten Files an eine bestimmte Stelle. Ziemlich Standart. Der Vorgang ist an sich ziemlich mühsam. Wirr liegen irgendwo irgendwelche Files rum.

    Vor ein paar Wochen habe ich dann angefangen mir ein kleines Helferlein zu coden. Anfangs war dieses Helferlein nur für mich gedacht und demnach relativ speziell. Ich nannte ihn “roborobo”.

    Was er tut ? Ich gebe meinem Helfer einfach das File “in die Hand”. Alles andere erledigt er.

    File hinzufügen
    $ roborobo /etc/postfix/main.cf

    Alle bekannten Files updaten:
    $ roborobo

    Er nimmt das File an, ordnet es ein und sichert es in seinem Verzeichnis mit dem kompletten Verzeichnispfad nach Baumstruktur-Art. Außerdem prüft roborobo jetzt jede Stunde anhand der sha1sum ob sich in dem File seit der letzten Prüfung etwas getan hat. Falls Veränderungen da sind, wird das File mit neuem Datum wieder abgespeichert. Das sieht ungefähr so aus:

    .roborobo/
    |-- etc
    |   |-- hosts
    |   |   |-- hosts-20100409-1348
    |   |   `-- hosts-20100409-1651
    |   `-- network
    |       `-- interfaces
    |           |-- interfaces-20100409-1654
    |           `-- interfaces-20100409-1655

    Ich brauche mich somit um _nichts_ mehr kümmern. Gebe dem “kleinen” die Files die mir wichtig sind und er passt darauf auf. Fühlt sich irgendwie an wie ein Backup-Daemon ;)

    Jedenfalls, habe ich roborobo jetzt für den Einsatz auf jedem beliebigen System umgebaut und in ein Debianpaket gebastelt. Dokumentation erstellt, Config-Dateien ausreichend selbsterklärend gestaltet usw.

    Wer sich dafür interessiert oder mal testen mag:

    roborobo-Debianpaket bei Github
    roborobo-Projekt auf Github
    Alles nochmal bei meinem privaten Git-Server auf git.zwetschge.org

    Content:

    roborobo
    |-- DEBIAN
    |   `-- control
    |-- etc
    |   |-- cron.d
    |   |   `-- roborobo
    |   `-- roborobo
    |       |-- roborobo.conf
    |       `-- roborobo.path
    `-- usr
        |-- bin
        |   `-- roborobo
        `-- share
            |-- doc
            |   `-- roborobo
            |       |-- changelog
            |       `-- copyright
            `-- man
                `-- man1
                    `-- roborobo.1
    

    Das ganze wie alles was ich tue, unter GPLv3. Viel Spass damit ;)


  16. Permalink
  17. Nagios | Von sprechenden Druckern, Verpflichtungen und SNMP

    Logo_Nagios

    Ich teile mir in meiner Funktion als Auszubildender mit einem Kollegen die ehrenvolle Aufgabe, ab und an den Papierstand unserer 4-Fächer Ricoh Drucker bei Gelegenheit zu “überwachen”. Im vorbeigehen sozusagen. Nun, das ganze ist ein etwas undankbarer Job – denn egal wie oft man zum Kontrollieren kommt – es kommt immer der Moment in dem nichts mehr im Fach / den Fächern ist, wenn Kollegen 200 Seiten am Stück ausdrucken.

    Um an diesem Umstand etwas zu ändern kam uns neulich eine “Notification”-Idee. In der Beschreibung des Druckers steht “SNMP-fähig”. Das Simple Network Management Protokoll bietet allerlei Möglichkeiten Informationen von Routern, Switches, Server oder Desktoprechnern abzufragen. In unserem Fall bietet auch der Drucker diese Möglichkeiten. Nach kurzer Recherche, scheint es etwas wie OIDs / MIBs für Drucker zu geben. Eine Liste dieser OIDs lässt sich mit snmpwalk ausgeben.

    snmpwalk -Os -c public -v 1 192.168.1.200

    Herauskommt eine _Menge_ an Informationen, mit der man erst mal umzugehen wissen muss. Nach etwas suchen, fiel mir folgender Block ins Auge:

    mib-2.43.8.2.1.10.1.1 = INTEGER: 55
    mib-2.43.8.2.1.10.1.2 = INTEGER: 385
    mib-2.43.8.2.1.10.1.3 = INTEGER: 55
    mib-2.43.8.2.1.10.1.4 = INTEGER: 385
    mib-2.43.8.2.1.10.1.5 = INTEGER: 0
    mib-2.43.8.2.1.11.1.1 = INTEGER: 0
    mib-2.43.8.2.1.11.1.2 = INTEGER: 0
    mib-2.43.8.2.1.11.1.3 = INTEGER: 0
    mib-2.43.8.2.1.11.1.4 = INTEGER: 0
    mib-2.43.8.2.1.11.1.5 = INTEGER: 9
    mib-2.43.8.2.1.12.1.1 = ""
    mib-2.43.8.2.1.12.1.2 = STRING: "Briefbogen"
    mib-2.43.8.2.1.12.1.3 = ""
    mib-2.43.8.2.1.12.1.4 = ""
    mib-2.43.8.2.1.12.1.5 = ""
    mib-2.43.8.2.1.13.1.1 = STRING: "Tray 1"
    mib-2.43.8.2.1.13.1.2 = STRING: "Tray 2"
    mib-2.43.8.2.1.13.1.3 = STRING: "Tray 3"
    mib-2.43.8.2.1.13.1.4 = STRING: "Tray 4"

    Kurzes systematisches Trial-and-Error am Papierfach des Druckers und Kontrolle der Veränderungen der SNMP-Ausgabe brachten mehr Aufschluss. Es schien also so als würde ein Teil der SNMP-Ausgabe die geschätzten Werte an Papier im Drucker zurückliefern.

    Genau genommen die OIDs :
    mib-2.43.8.2.1.10.1.1
    mib-2.43.8.2.1.10.1.2
    mib-2.43.8.2.1.10.1.3
    mib-2.43.8.2.1.10.1.4

    Damit lässt sich arbeiten. Für jedes Papierfach des Druckers eine OID-Nummer. snmpget lässt ein Gerät explizit nach einer OID fragen, oder ihren Descriptor.

    snmpget -v1 -Cf -c public 192.168.1.200 mib-2.43.8.2.1.10.1.1
    SNMPv2-SMI::mib-2.43.8.2.1.10.1.1 = INTEGER: 385

    Im ersten Fach sind also 385 Blätter. Schätzungsweise. So ist es also möglich den aktuellen Stand der Papierfächer abzufragen, ohne aufstehen zu müssen. Das war schonmal was. Aber wie das jetzt mit Benachrichtigung laufen lassen? CronJob? Nagios! Wo sonst httpd’s, smb-Freigaben, Erreichbarkeiten oder sonstige Dienste abgefragt und monitored werden, ließen sich auch die Papierfächer einbinden.

    Zuerst die Drucker als Hosts einbinden, die Nagios überwachen soll:

    /etc/nagios3/conf.d/host-printer1.intern.cfg
    define host {
            host_name  printer1.intern.firma.de
            alias       printer1
            address     192.168.1.200
            use         generic-host
            }

    Jetzt kennt Nagios den Host. Weiss aber weder was dort überwacht werden soll, noch mit welchem Plugin und ab welchem Schwellwert es Alarm schlagen soll. Nagios enthält ein Plugin für SNMP-Abfragen. Zu finden unter /usr/lib/nagios/plugins/check_snmp. Diesem Plugin kann ich die selben Fragen stellen wie mit snmpget. Einzige Veränderung: Schwellwerte für Warning (-w) und Critical (-c) müssen mitgegeben werden. Ich erstellte also einen sogenannten “Check”.

    /etc/nagios3/conf.d/z_check_papertray:
    define command{
             command_name    check_papertray
             command_line    /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o mib-2.43.8.2.1.10.1.$ARG2$ -w '$ARG3$': -c '$ARG4$':
    }

    Die -H Hostadresse wird aus der angegebenen Adresse im Hostfile gewonnen in dem der Check später als “Service” eingebunden wird. Außerdem noch jede Menge Argumente die auf den ersten Blick vielleicht verwirren.

    Argument1: Community für die SNMP-Anfrage. In dem Fall “public”
    Argument2: Fachnummer mit der die OID ergänzt wird.
    Argument3: Warning-Wert bei dem Nagios Alarm schlägt.
    Argument4: Critical-Wert bei dem Nagios Alarm schlägt.

    In der Hostdatei kann der definierte Check jetzt als Service eingebunden werden.

    define service {
            use                             generic-service
            host_name                      printer1.intern.firma.de
            service_description             PAPERTRAY 1 DinA4
            check_command                   check_papertray!public!1!150!56
            }

    Das ganze 4 mal. Für jedes Papierfach einmal. check_command ist dabei der ausschlaggebende Punkt. Nagios zieht aus jedem Wert nach ! seine Argumente. Community public, Fach 1, Schwellwert Warning 150 und Critical 56 oder kleiner.

    Wenn dann alles funktioniert, sieht das aus wie folgt:

    nagios

    Und im Falle eines Falles. Emails:

    ** PROBLEM Service Alert 2: printer1/PAPERTRAY 1 DinA4 is CRITICAL **

    ***** Nagios *****
    Notification Type: PROBLEM
    Service: PAPERTRAY 1 DinA4
    Host: printer1
    Address: 
    
    192.168.1.200
    
    State: CRITICAL
    Date/Time: Thu Apr 1 16:30:42 CEST 2010
    ACK by:
    Comment:
    Additional Info:
    SNMP CRITICAL - *0*

    Schön, denn wir werden jetzt immer benachrichtigt wenn kein Papier mehr im Fach ist, oder es bereits aufgefüllt wurde. Und Chef fands auch gut :)


  18. Permalink
  19. Event | Chemnitzer Linux-Tage

    logo2010

    Ein Stück weit, darf hier ruhig auch etwas Privates einziehen. Am Sonntag 14. März war ich zum ersten Mal zu Besuch bei den Chemnitzer Linuxtagen. Die knappen 2 Stunden mit dem Auto habe ich morgens um halb 8 auf mich genommen :) Ich muss sagen ich war relativ begeistert.

    IMG_0215

    Nach der Ankunft, sah ich mich erst etwas in der Halle um, besuchte Jan am Debian-Stand und liess mich erstmal von durchweg freundlichen Projektvertretern in ihr (mir meistens bereits bekanntes) Projekt einführen.

    IMG_0213

    Darauf folgte eigentlich ein Marathon aus Vorträgen. Durch einen Umstand konnte ich mich leider nur Sonntags den Vorträgen unterziehen. Aber trotzdem gefielen mir die, die ich sah, sehr gut.

    1. Anonymität im Internet (TOR, i2P und grundsätzliches zu Daten)
    2. Virtual System Cluster mit KVM und Pacemaker (B1-Systems. Für mich teils interessant für Arbeit. Thema Virtualisierung)
    - Mittagspause-
    3. Auf dem Weg zum Intrusion Detection System der nächsten Generation (IDS war ein bisschen Unglücklich gewählt. Sehr theoretisch im Bezug auf Social Engineering)#
    4. MySQL Backups – Best Practices (Ein Referent mit polnischer Herkunft klärte mich über grösstenteils alle Backuplösungen auf. Hot / Cold / Txt / Binary / Differentiell)
    5. Computerviren und Linux (Sehr sehr nice gewesen. Haufen neue Erkenntnisse gehabt)

    Im generellen auch netten Kontakt mit den unterschiedlichsten Linux-Anwendern gehabt. Linux@Grundschule Linux@HP und ähnliches.
    Werd ich nächstes Jahr gerne wieder besuchen. Vielleicht sogar das ganze WE.


Older »