Virtual Box VDI unter Mac OS X mounten

Diese Woche hatte ich mal wieder einen Grund, mit FreeDOS zu arbeiten.
Viele Leute hassen DOS, ich fühle mich jedes Mal an meine ersten Gehversuche am PC erinnert…

Auf jeden Fall ist die Installation von FreeDOS unter Virtual Box eine wahre Freude.

Anschließend hatte ich aber das Problem, die Daten, die ich in der virtuellen Maschine benötige, auch hinein zu bekommen.
Unter Unix gibt’s ja N+1 Möglichkeiten, wer aber schon mal versucht hat, unter DOS TCP/IP zu betreiben, weiß, dass das wenig Spaß macht.

Also habe ich mich nach Alternativen umgeschaut und bin auf die Möglichkeit gestoßen, VDIs mit hdutil unter MacOS X zu mounten.
Weiterlesen

Fragen über Fragen: Test-Werkzeuge in agilen Projekten

Warum testet man Software?
Man will Sicherheit gewinnen, dass die Funktionalitäten, die man realisieren möchte, korrekt umgesetzt sind.

Warum fühlt sich Test Driven Development so gut an?
Es erlaubt, in extrem kurzen Zeitabständen Feedback über die geleistete Arbeit zu erhalten.

Das können, so glaube ich, alle unterschreiben, die in agilen Projekten unterwegs sind.

Für kaum eine andere Tätigkeit im Bereich der Software-Entwicklung interessieren sich die Management-Etagen so sehr wie für das Testen. Ich frage mich schon lange, warum das so ist. Vielleicht liegt es daran, dass “grüne” Tests Sicherheit vermitteln. Ebenso wie eine hohe Anzahl von Tests. In jedem Fall kann es nicht daran liegen, dass durch Tests der Business Value gesteigert wird.
Es kann hunderte grüner Testfälle geben, ohne das ein Projekt deshalb erfolgreich ist. Erfolgreich ist ein Projekt aber nur, wenn die Software läuft. Und Software bekommt man am besten – und am schnellsten – zum Laufen, in dem man schnelles, nachvollziehbares Feedback erhält. Wie beim Test Driven Development.

Warum also werden viele Testwerkzeuge danach ausgewählt, dass sich wunderbare Reports erstellen lassen, Test-Templates und Test-Prozesse abgebildet werden, das Test-Management der Test-Designs für die Test-Spezifikationen, die während der Test-Analyse enstehen und innerhalb der Test-Ausführung nach der Test-Automatisierung die Grundlage für Testfälle bilden?
Warum schaut man nicht einfach, wie man schnelles Feedback ohne lange Deployment-Zyklen realisieren kann.
Warum macht man sich in diesem, für den Erfolg so entscheidenden Bereich, von proprietären Tools abhängig, die nur einen Bruchteil dessen leisten, was benötigt wird?
Warum setzt man nicht ausschließlich auf Werkzeuge, die einem Entwickler in weniger als 3 Minuten Feedback geben ohne einen gigantischen Testprozess starten zu müssen?
Warum setzt man im 21. Jahrhundert, einer Zeit, in der Kommunikation zwischen Individuen hoch geschätzt wird und als wertvoll erkannt ist, auf Werkzeuge, die Tester in Teams ausgrenzen und eher am Testen hindern?

Im Agilen Manifest steht als erster Grundsatz: “Individuals and interactions over processes and tools”.
Warum ist es so schwer, diesem Grundsatz bei der Auswahl von Test-Tools zu folgen?

Das alles interessiert mich wirklich sehr.

PPTP Server mit LDAP Authentifizierung

Für VPN Verbindungen bevorzuge ich eigentlich OpenVPN, das ich auch in vielen Konstellationen seit langer Zeit einsetze. Leider gibt es einige Geräte, die OpenVPN nicht unterstützen.
Diese Geräte unterstützen aber meistens Microsofts PPTP, das zwar bei weitem nicht so sicher ist, aber von einigen Geräten als einziges Protokoll unterstützt wird.
Als begeisterter LDAP-Nutzer konnte ich es natürlich nicht lassen, den pptpd mit einer LDAP-Authentifizierung zu konfigurieren.
Weiterlesen

VMware ESXi mit Nagios überwachen

Den VMware ESXi 5 mit Nagios zu überwachen ist ein Kinderspiel – wenn man die notwendigen Kniffe kennt.

Damit ich sie nicht vergesse, schreibe ich sie hier als Artikel in mein Blog :-)

Vorbereitung des ESXi-Servers

Zunächst ist es notwendig, einen User zu erstellen, mit dem sich der Nagios authentifizieren kann. Das passiert ganz altmodisch mit

 useradd -s /bin/true monitoring -g users

Dabei sollte man die Shell auf /bin/true setzen, um ein Login über SSH oder an der Konsole zu verhinden. Der User muss auf jeden Fall in der Gruppe users sein, sonst funktioniert der Zugriff über die Web Services nicht. Der nächste Schritt ist das Setzen eines Passwortes für den Benutzer, das passiert mit dem Befehl

 passwd monitoring

Der passwd-Befehl von VMware generiert ein ziemlich langes, kryptisches Passwort, das man direkt verwenden kann. Beide Kommandos weisen darauf hin, dass sie deprecated sind und man an ihrer Statt vim-cmd verwenden soll. Die Anlage funktioniert aber auf diesem Weg nach wie vor wunderbar.
Weiterlesen

wget: Download automatisch fortsetzen

wget ist vermutlich das Werkzeug Nummer 1, wenn es um das Herunterladen von Dateien via HTTP oder FTP geht.

Wenn man wget mit einer schlechten Internetverbindung nutzt oder der Server, von dem man lädt nicht optimal arbeitet, kommt es bei großen Dateien hin und wieder zur Meldung “stalled” und wget setzt den Download nicht fort.
Nach immerhin 15 Minuten bricht wget dann in der Regel den Download ab oder versucht, die Datei erneut herunter zu laden.

Dieses Verhalten von wget kann man durch die Optionen -c (continue), –read-timeout und –tries beeinflussen.
Die Option -c bewirkt, dass wget einen begonnenen Download fortsetzt. Damit muss man nicht die komplette Datei noch einmal von Anfang an herunter laden, sondern beginnt dort, wo der Download abgebrochen ist.
Mit –read-time=X kann man wget sagen, dass es nach X Sekunden ohne dass Daten empfangen wurden, einen Timeout liefern und den Download beenden soll. Die Option –tries=X bewirkt wiederum, dass ein Download, der wegen eines Timeouts beendet wurde, erneut versucht wird. Setzt man X auf 0, versucht wget es immer wieder, egal wie oft der Download unterbrochen wird.

Mit der folgenden Kommandozeile bringt man wget dazu, nach 2 Sekunden “stalled” den Download neu zu starten und dort fortzusetzen, wo der vorhergehende Versuch hängen geblieben ist:

wget -c --read-timeout=2 --tries=0 URL

ProFTPD gegen LDAP authentifizieren

Der ProFTPD hat sich etwas zickig, wenn es um eine Authentifizierung via PAM und LDAP geht. Auch wenn pamtester bestätigt, dass die PAM-Konfiguration funktioniert, meint ProFTPD nur lapidar: “no such user found”.
Aber ProFTPD bietet erfreulicherweise noch einen anderen Weg, eine Authentifizierung via LDAP vorzunehmen: mod_ldap.

Die Konfiguration von mod_ldap ist denkbar trivial.
Zunächst wird mod_ldap.c als einziges Modul für die Anweisung AuthOrder eingetragen.
Mit LoadModuel mod_ldap.c wird das Modul geladen und wie folgt konfiguriert:

  • LDAPServer HOSTNAME – der Server, gegen den die Authentifizierung erfolgen soll
  • LDAPAuthBinds on – die Authentifizierung erfolgt durch einen Aufruf von bind mit dem Passwort
  • LDAPDoAuth on BASE FILTER – Basis für die Suche nach Nutzern und Filter
  • LDAPAliasDereference always – Aliase immer auflösen, empfehlenswert, wenn man Aliase verwendet, sonst nicht nötig
  • LDAPDoUIDLookups on BASE – Basis für die Suche nach Nutzern
  • LDAPDoGIDLookups on BASE – Basis für die Suche nach Gruppen

Hier noch eine Beispielkonfiguration:

<Global>
# ...
  AuthOrder mod_ldap.c
# ...
</Global>

LoadModule mod_ldap.c

<IfModule mod_ldap.c>
  LDAPServer localhost
  LDAPAuthBinds on
  LDAPDoAuth on "ou=people,ou=ahost,ou=hosts,dc=my-domain,dc=com" \ "(&(uid=%v)(objectclass=posixAccount))"
  LDAPAliasDereference always
  LDAPDoUIDLookups on "ou=people,ou=ahost,ou=hosts,dc=my-domain,dc=com"
  LDAPDoGIDLookups on "ou=group,ou=ahost,ou=hosts,dc=my-domain,dc=com"
</IfModule>

SNMP Applied @ FrOSCon

Mein Vortrag zu SNMP auf der FrOSCon ist vorbei, die Folien stelle ich per slideshare zur Verfügung.

Sehr interessant waren die Anmerkunden einiger erfahrener SNMP-Anwender aus dem Publikum.
Eine Anmerkung bezog sich darauf, dass für den Versand von SNMP Traps UDP zum Einsatz kommt und man damit keine Garantie hat, dass die Traps tatsächlich ankommen. Das muss man natürlich beachten, es gibt aber durchaus Möglichkeiten, damit umzugehen.
Eine Möglichkeit ist, die Trap wie folgt zu versenden:

snmptrap -v 2c -c public -Ci 172.16.166.129 "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification  netSnmpExampleHeartbeatRate i 123456

Die Angabe von -Ci bewirkt, dass snmptrap eine Bestätigung vom Trap-Empfänger erwartet und die Trap wiederholt, falls diese ausbleibt. Das kann dann dazu führen, dass die Trap mehrfach versendet wird, was aber im Austausch für die gewonnene Sicherheit durchaus zu verschmerzen ist.
Eine andere Möglichkeit besteht darin, bei Net-SNMP und Net::SNMP in Perl, die Trap über TCP zu versenden.
Dazu ist folgende Änderung an der snmptrapd.conf notwendig:

# Traps für die community public annehmen
authCommunity log,execute,net public

# Traps über TCP Port 162 annehmen
snmpTrapdAddr TCP:162
# Traps über UDP Port 162 annehmen
snmpTrapdAddr UDP:162

# Traps mit SNMPTT weiter verarbeiten
traphandle default /usr/sbin/snmptthandler

snmptrapd nimmt jetzt Traps sowohl via UDP als auch via TCP an.
Der Aufruf von snmptrap ändert sich dann wie folgt:

snmptrap -v 2c -c public TCP:172.16.166.129:162 "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification  netSnmpExampleHeartbeatRate i 123456

Und die empfangene Trap wird im Log so aussehen:

2012-08-25 17:59:06 <UNKNOWN> [TCP: [172.16.166.1]:51457->[0.0.0.0]:0]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (24312703) 2 days, 19:32:07.03 SNMPv2-MIB::snmpTrapOID.0 = OID: NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification     NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatRate = INTEGER: 1234569

Wie man die Traps TCP-basiert mit Perl versenden kann, ist in der Dokumentation zu Net::SNMP im Abschnitt zu Transport Domain Arguments beschrieben.

Allgemein möchte ich zum Thema Monitoring empfehlen, immer ein separates, privates Netz zu verwenden, mit unabhängiger Verkabelung und eigenen Switches (das gleiche mache ich in Produktionsumgebungen immer auch noch einmal für Backups). Damit hat man eine bessere Kontrolle darüber, was in diesem Monitoring-Netz passiert und ist im Monitoring nicht durch hohe Belastung auf dem Produktions-Netz eingeschränkt.
Was man ebenfalls beachten sollte ist, dass der Versand von Monitoring-Benachrichtigungen über E-Mails auch seine Tücken hat. Oftmals wird nicht beachtet, dass eine sofortige Zustellung von E-Mails nicht garantiert ist. Die Standard-Einstellung von Postfix, was die Queue-Lifetime einer E-Mail angeht, ist 5 Tage (siehe postconf(5)) und bei Qmail vergehen sogar 7 Tage, bevor man sicher sein kann, dass die E-Mail zugestellt wurde – oder nicht.
Bei SMS kann man immerhin Zustellberichte anfordern, aber die müssen auch erstmal wieder verarbeitet werden…

Fakt ist: möchte man SNMP Traps über UDP versenden, sollte man wissen, was man tut.

Für das Feedback im Vortrag und die angeregte Diskussion möchte ich mich bei meinen Zuhörern bedanken.

Firefox Bookmark Backups konvertieren

Manchmal ist es notwendig, die Bookmarks eines alten Firefox-Profil in ein neues Profil zu übernehmen. Schlecht, wenn man dann nur noch die Sicherungsdateien hat, die als JSON abgespeichert werden. Importiert man diese mit Firefox, werden alle anderen Lesezeichen überschrieben. Das ist ärgerlich und überhaupt nicht elegant.
Ein Backup der Lesezeichen in einen Ordner zu kopieren, ist aber im Firefox nun mal nicht vorgesehen.

Da ich genau dieses Problem hatte, habe ich ein kleines Perl-Script geschrieben, das die eine JSON-Datei einliest und diese in der HTML-Bookmark-Format ausgibt.
Weiterlesen