Ich versuche für einen Kunden seit nun mehr rund zwei Wochen erfolglos Domains per KK zu übernehmen. Doch EVANZO tut wirklich alles, um seiner schlechten Reputation zu entsprechen und blockiert. Allen Anschein nach hilft es tatsächlich nur gegen EVANZO die juristische Keule auszupacken. Zwar finde ich es sehr unschön sich positiv auf Anwälte und Justiz zu beziehen, allerdings scheint es mir in unserer derzeitigen Gesellschaftsform keinen anderen Ausweg zu geben, wenn ein Anbieter eine Domain nicht freigeben möchte.
Es gibt nichts…
EVANZO! – Clevere hosten woanders
Bei Billighoster EVANZO kam es häufig zu Störungen und Ausfällen. Bei einem meiner Kunden war alleine in diesem Jahr der Mailserver zusammengerechnet einige Tage nicht erreichbar. Störungsmeldungen per E-Mail werden meiner Erfahrungen nach vom technischen Support rigoros ignoriert – ob absichtlich oder aufgrund Versagens der eigenen Mailserver, sei einmal dahingestellt. So bleibt nur der Weg über die kostenpflichtige Supporthotline. Die Qualität der Hotline lässt noch mehr zu wünschen übrig als die instabilen Server des Hosters: Die Mitarbeiter gaben sich bei meinen zahlreichen Anrufen durchweg inkompetent und unfreundlich. Doch der Dialog von heute Nachmittag stellt alles bisher dagewesene in den Schatten.
Tom: Der Mailserver mail.domain.tld* ist mal wieder nicht erreichbar.
Mitarbeiter: Da brauche ich erst einmal ihre Kundennummer.
Tom: Leider habe ich die nicht griffbereit. Das Problem ist auch nicht vertragsspezifisch. Der Server bedient auch andere Kunden und ist nicht verfügbar.
Mitarbeiter: Dann kann ich ihnen nicht helfen.
Tom: Warum können Sie nicht den Server mail.domain.tld als ausgefallen/gestört melden?
Mitarbeiter: Ok, ich werde das ausnahmsweise überprüfen. Bitte nennen Sie mir die Zugangsdaten zu einer Ihrer E-Mailadressen.
Tom: Warum das?
Mitarbeiter: Wollen Sie, dass ich Ihnen helfe?
Tom: Ja!
Mitarbeiter: Dann nennen Sie mir die Zugangsdaten.
Tom: Nein!
Mitarbeiter: Bitte nicht in diesen Ton, sonst muss ich das Gespräch beenden.
Tom: Wie bitte? Weil ich mich weigere Ihnen die Zugangsdaten zu einem E-Mailaccount zu nennen?
Mitarbeiter: Wenn ich ihnen helfen soll, müssen sie meinen Anweisungen folgen.
Tom: Sie benötigen keine Zugangsdaten um die Erreichbarkeit eines Mailserver zu überprüfen.
Mitarbeiter: Wenn Sie das so genau wissen, warum rufen Sie dann an?
Tom: Ich kann via telnet mail.domain.tld 25 feststellen, ob der Server antwortet oder nicht.
Mitarbeiter: Das ist eine unzulässige Nutzung unserer Server.
Tom: …
Mitarbeiter: Sie müssen schon ein zugelassenes E-Mailprogramm wie Outlook verwenden.
Tom: …
Mitarbeiter: Hallo?! Sind sie noch da.
Tom: Ja. Aber so kommen wir nicht weiter. Bitte melden Sie die Server als ausgefallen.
Mitarbeiter: Dazu muss ich erst überprüfen, ob sie Ihr E-Mailprogramm richtig eingestellt haben. Wenn sie kein richtiges E-Mailprogramm verwendet haben, kann ich ihnen auch nicht helfen.
*Echte Adresse ersetzt.
Ab diesem Punkt fehlten mir die Nerven diesen sinnlosen Dialog fortzuführen. Ich setzte eine Frist, um eine Lösung für den ausgefallenen Mailserver zu finden. Die Frist ist natürlich lange verstrichen und der Mailserver weiterhin nicht erreichbar. Dafür ist nun auch der Webserver ausgefallen.
Ich werde morgen meinen Kunden zu einer außerordentlichen Kündigung unter Auferlegung der Kosten für die Ausfallzeit raten. 
MySQL mit Ruby unter Mac OS X
Möchte man eine MySQL-Datenbank mit Ruby ansprechen, muss unter UNIX-artigen Betriebsystemen den Datenbanktreiber manuell kompilieren.
Dazu genügt es die jeweils aktuelle Version von http://www.tmtm.org/downloads/mysql/ruby/ zu laden und zu kompilieren. Derzeit aktuell ist Version 2.7.3 .
Das Archiv ist mit tar xzvf mysql-ruby-2.7.3.tar.gz schnell entpackt. Danach wechseln wir ins Verzeichnis mysql-ruby-2.7.3 konfigurieren das Modul: 
sudo ruby extconf.rb --with-mysql-include=/usr/local/mysql/include --with-mysql-lib=/usr/local/mysql/lib --with-mysql-dir=/usr/local/mysql  --with-mysql-config=/usr/local/mysql/bin/mysql_config
Ich habe MySQL unter /usr/local/mysql installiert – der Pfad muss unter Umständen angepasst werden. Wo MySQL installiert ist, lässt sich z.B. mit einem which mysql in Erfahrung bringen.
Der bekannte Einzeiler sudo make && make install erledigen den Rest. 
Mit einem kleinen Script lässt sich die Installation testen:
require "mysql"
begin
  Mysql.new("localhost","dbuser","geheim")
  puts "Klappt! :)" 
rescue StandardError
  puts "Klappt nicht. :("   
end 	suPHP
Tobit FaxWare auf HylaFAX migriert
Gestern habe ich einen Tobit-Faxserver auf HylaFAX migriert, weil mit der alten Tobit FaxWare die Integration in Exchange nicht so recht gelingen wollte und zudem die FaxWare-Lizenz nicht mehr alle Arbeitsplätze abdeckte. Außerdem lief die Tobit-Software noch auf Netware, was die Netzwerkinfrastruktur im Unternehmen unnötig verkomplizierte. Der Windowseigene Faxdienst lässt sich zwar elegant an Exchange anbinden, doch seine sonstigen Limitationen (pro Faxmodem nur eine MSN und in der SBS2003-Variante werden maximal vier Modems unterstützt) disqualifizierten ihn als Alternative zur bestehenden Tobit-Installation.
Faxe gehen nun als E-Mail ein und lassen sich ebenfalls via E-Mail mit faxnummer@faxserver verschicken. Winprint HylaFAX bietet darüber hinaus die Möglichkeit Faxe aus jeder Anwendung zu versenden, die einen Drucker ansprechen kann.
Heute werde ich noch daran arbeiten das bis 1997 zurückreichende Faxarchiv ohne FaxWare bereitzustellen.
Es macht wirklich große Freude kommerzielle closed Source Lösungen auf Open Source umzustellen – insbesondere dann, wenn es nach der Umstellung runder läuft als vorher.
bye bye mod_php
Ich habe meine PHP-Apache-Installationen von mod_php auf php_cgi umgestellt. Anlass zu diesem Schritt gab mir, dass ich keine befriedigende Lösung gefunden habe, um beim Schreibzugriff auf Dateien mit PHP Berechtigungskonflikte zwischen Apache und dem User, dem die Dateien eigentlich gehören sollten, auszulösen. Auch war mir schon lange ein Dorn im Auge, dass mod_php nicht mit Threads umgehen kann und dazu zwingt zum ineffizienten Prefork-Modus zurückzukehren. Damit fällt eine wesentliche Verbesserung von Apache2 gegenüber 1.3 weg.
Und nicht zuletzt erscheint es mir in Hinblick auf die Serversicherheit keine gute Idee zu sein PHP mit den weitreichenden Befugnissen des Apache laufen zu lassen – zumal Restriktionen wie open_basedir leicht umgangen werden können.
PHP als FastCGI einzubinden stellt zwar einen etwas höheren Konfigurationsaufwand gegenüber mod_php dar, der jedoch mit Lösung der oben genannten Probleme belohnt wird.
Sobald ich mal wieder ein Quentchen mehr Zeit finde, werde ich ein Mini-Tuorial für Debian 4 an dieser Stelle veröffentlichen. Momentan bin ich noch damit befasst den Geschwindigkeitsunterschied zwischen mod_php und der FastCGI-Variante zu messen.
wget aufbohren: dotfiles per –mirror mitkopieren
Ich benutze GNU wget gerne um verschiedene Websites per FTP mit dem Parameter --mirror zu spiegeln. Leider werden dabei versteckte Dateien (so genannte dotfiles) wie etwa .htaccess nicht berücksichtigt. Nach eingehendem Studium der manpage stellte ich enttäuscht fest, dass wget tatsächlich keine Option zur Lösung des Problem vorsieht.
Aber zum Glück lässt sich GNU wget als Open-Source-Software an die eigenen Bedürfnisse anpassen, so dass ich folgenden q&d Patch „entwickelte“.
— wget-1.10.2_orig/src/ftp-basic.c     2005-06-19 15:47:10.000000000 +0200
+++ wget-1.10.2/src/ftp-basic.c 2007-04-21 14:17:33.000000000 +0200
@@ -977,7 +977,7 @@
   uerr_t err;
   /* Send LIST request.  */
–  request = ftp_request („LIST“, file);
+  request = ftp_request („LIST -a“, file);
   nwritten = fd_write (csock, request, strlen (request), -1.0);
   if (nwritten < 0)
     {
[/code]
wget ftp://ftp.gnu.org/pub/gnu/wget/wget-1.10.2.tar.gz
tar -xzf wget-1.10.2.tar.gz
patch -p0 < wget-1.10.2_dotfiles 
./configure
make
make install
Es genügt also LIST -a anstatt LIST an den FTP-Server zu senden, um wget zu überreden auch dotfiles rekursiv zu kopieren.
Der Patch ist – wie gesagt – ein übler Hack, der mir zur schnellen Lösung eines Problems dienen solle. Für mich funktioniert er gut. Perspektivisch wäre es jedoch wünschenswert durch einen Parameter zwischen LIST und  LIST -a wählen zu können. Nach meiner mündlichen Diplomprüfung werde ich das sauber implementieren und als Feature vorschlagen.    
EDIT 16:40: Hier gibt es einen sauberen Patch, allerdings nur für Version 1.9.1. Doch es sollte nicht allzu schwer fallen ihn auf die aktuelle Version zu portieren.
Professionell personalisierte Bulkmails
IP verloren? ARP hilft!
Beim Konfigurieren einer LaCie Ethernet Disk lief irgendwas schief und das Gerät war über die konfigurierte IP nicht mehr ansprechbar. Für solche Fälle sieht LaCie eine Option vor das Gerät mittels Restore-CD auf Werkseinstellungen zurückzusetzen. Diese Lösung ist jedoch in zweierlei Hinsicht problematisch: Zum einem werden dabei nicht nur alle Einstellungen zurückgesetzt, sondern auch alle Daten gelöscht! Zum anderen wird dazu ein externes USB-CD-Laufwerk von Nöten, dass auch nicht immer vorhanden ist.
Für den stattlichen Preis jenseits 1000 Euro für die 2TB-Variante, darf man Komfort erwarten. Ganz abgesehen davon, dass ein Konfigurationsutility offensichtlich zu Abstürzen neigt, die gleich die gesamte Konfiguration des Netzwerkinterface zerschießen. 
Doch zum Glück lässt mit ein wenig KnowHow die IP-Adresse wiederherstellen, ohne Konfiguration und Daten zu löschen:
Zuerst die LaCie über Crossoverkabel direkt an einen Rechner anschließen, dann mit arp -s IP_ADDR MAC_ADDR einen statischen ARP-Eintrag zu erzeugen. Wobei IP_ADDR eine freie IP-Adresse im Subnetz des Rechners ist und MAC_ADDR die MAC-Adresse der LaCie (findet sich auf dem Typenschild).
Nun ist es wieder möglich über die gewählte IP auf das Webinterface zuzugreifen und dauerhaft eine IP zu konfigurieren.
Prinzipiell funktioniert das mit jedem TCP/IP-Gerät, das über eine MAC-Adresse verfügt.
Allerdings verwundere ich mich darüber, dass LaCie den Aufwand betreibt die Network Disk mit PS/2-Anschlüssen und einen VGA-Ausgang zu versehen, aber über die so erreichbare Konsole keine Option vorsieht das Netzwerkinterface zu konfigurieren.

