Eclipse Mirror anlegen

Man kenn es ja, ab und an braucht’s ein Update der Eclipse Plugins.
Dann werden 23 mal die JBoss Tools runtergeladen und 47 mal die Juno-Updates für die Scala IDE.

Kann man so machen, muss man aber nicht.

Die Eclipse stellt mit P2 nämlich einen ziemlich coolen Mechanismus bereit, um Update Sites zu spiegeln.
Das habe ich mir gestern mal hergenommen und ein Script gebaut, dass sämtliche (mir) wichtigen Update Sites spiegelt und auf meinem internen Web Server bereitstellt.
Ich will auch meinen Beitrag zur Bandbreitenschonung leisten ;-)

Weiterlesen

openSUSE: Redmine Update auf 1.4.6

Redmine steht ab sofort in der aktuellen Version 1.4.6 für die aktuellen openSUSE-Versionen zur Verfügung.
Das RPM ist mit SQLite unter openSUSE 12.1 getestet.

Die Version 1.4.6 von Redmine setzt Rails 2.3.14, Rack 1.1.1 sowie RubyGems <= 1.8 voraus. Außerdem wird für Redmine 1.4.x noch Ruby OpenID benötigt, dass in der Version 2.1.8 ebenfalls in meinem Repository verfügbar ist.

Wichtig: Wenn Redmine aus den openSUSE Repositories installiert werden soll, muss das das Repository home:gerritbeine:ruby eine höhere Priorität haben, als das Repository devel:languages:ruby:extensions. Höhere Priorität bedeutet einen niedrigeren Zahlenwert in der Repository-Verwaltung!

Die aktuelle Rails Version kann aus dem Ruby-Repository des Build Service bezogen werden.

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

openSUSE: Redmine 2.0.4 zum Testen verfügbar

Redmine steht ab sofort in der aktuellen Version 2.0.4, für die aktuellen openSUSE-Versionen zur Verfügung. Ich freue mich über Feedback und Tests des Packages, das als Package redmine2 auf dem Repository http://download.opensuse.org/repositories/home:/gerritbeine:/ruby/ installiert werden kann.

Die Version 2.0.4 von Redmine setzt Rails 3.2.6 und Rack 1.1.1 sowie RubyGems <= 1.8 voraus.

Die aktuellste Rails Version kann dabei aus dem Ruby-Repository des Build Service bezogen werden.

Redmine 2.0.4 wird die letzte Version von Redmine 2.0 sein, zukünftig wird nur noch Redmine 2.1 weiterentwickelt werden. Die Probleme mit dem Startscript, die bei Version 2.0.3 aufgetreten sind, sind hoffentlich gefixt.
Dennoch bitte ich um Tests und Feedback.

Sobald das Paket stabil ist, werde ich das Update auf Version 2.1.3 angehen und die Konfiguration für mod_passenger vorbereiten.

openSUSE: Redmine Update auf 1.4.5

Redmine steht ab sofort in der aktuellen Version 1.4.5 für die aktuellen openSUSE-Versionen zur Verfügung.
Das RPM ist mit SQLite unter openSUSE 12.1 getestet.

Die Version 1.4.5 von Redmine setzt Rails 2.3.14 und Rack 1.1.1 sowie RubyGems <= 1.8 voraus.

Die aktuellste Rails Version kann dabei aus dem Ruby-Repository des Build Service bezogen werden.

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.

Vorträge auf der FrOSCon 2012

In diesem Jahr wurden gleich zwei Vorträge von mir für die FrOSCon angenommen.

Im ersten Vortrag beschäftige ich mich unter dem Titel SNMP Applied mit der Planung, Konfiguration und Integration von SNMP in Monitoring-Systeme. Nach der aktuellen Planung wird dieser Vortrag am 25.08.2012 von 15:15 bis 16:15 im HS5 zu hören sein.

Am Sonntag, dem 26.08.2012, geht es um 10:00 im HS2 los mit einem Vortrag zum Thema OpenLDAP: A developer’s perspective. Hier gehe ich auf die Möglichkeiten ein, OpenLDAP für mehr als nur Authentifizierung und Adressbücher zu nutzen. Denn OpenLDAP bietet durchaus einige Fähigkeiten, die ihn durchaus zu Konkurrenten einige NoSQL Datenbanken machen.

Ich freue mich schon auf die diesjährige FrOSCon und hoffe auf zahlreiche Besucher.


FrOSCon 2012

Die FrOSCon findet diesmal am Wochenende vom 25. und 26.08. statt – wie üblich in der Hochschule Bonn-Rhein-Sieg.

openSUSE: Redmine 2.0.3 zum Testen verfügbar

Redmine steht ab sofort in der aktuellen Version 2.0.3, für die aktuellen openSUSE-Versionen zur Verfügung. Ich freue mich über Feedback und Tests des Packages, das als Package redmine2 auf dem Repository http://download.opensuse.org/repositories/home:/gerritbeine:/ruby/ installiert werden kann.

Die Version 2.0.3 von Redmine setzt Rails 3.2.5 und Rack 1.1.1 sowie RubyGems <= 1.8 voraus.

Die aktuellste Rails Version kann dabei aus dem Ruby-Repository des Build Service bezogen werden.