Archive for the 'Linux' Category

Apache Logs

SSH
  1. root@iBitLive:~# find /var/www/ -maxdepth 4 -type f -name access.log -or -name error.log | xargs du -hc | tail -n1
  2. 6,7G insgesamt

Einige Wochen später, nach Konfiguration von logrotate.

SSH
  1. root@iBitLive:~# find /var/www/ -maxdepth 4 -type f -name access.log* -or -name error.log* | xargs du -hc | tail -n1
  2. 664M insgesamt

Apache2 mpm-itk und ulimits

Möglicherweise bin ich nicht der einzige, der Apache mit dem sehr empfehlenswerten mpm-itk verwendet. Mit mpm-itk kann man VirtualHosts auf eine schon fast zu einfache Weise unter verschiedenen Systembenutzern ausführen lassen. Einfach die Direktive AssignUserID user group in einem  <VirtualHost>-Abschnitt reicht schon aus, um alle Prozesse für diesen Prozess unter einem bestimmten User laufen zu lassen.

Leider funktionieren (zumindest unter Debian 6.0.1 ) bei diesen Usern dann die ulimits nicht mehr. Diese werden in der limits.conf in /etc/security/ definiert und sind manchmal sehr nützlich um Systembenutzer daran zu hindern, das System in die Knie zu zwingen. Da mpm-itk den setuid() Syscall zum Wechseln des Users benutzt, werden die ulimits des Apachen selbst aber ganz einfach vererbt. Glücklicherweise gelten diese dann auch wieder für jeden Benutzer einzeln. Wenn ich also zum Beispiel ein Prozess-Limit von 250 Prozessen pro User anlege, dann werden diese 250 Prozesse nicht unter allen VHosts aufgeteilt, sondern gelten pro Benutzer. So kann man ganz simple und einfach dem Apache alle limits verpassen die man möchte und muss sich sonst gar nicht weiter kümmern. Ich habe das in meinem Fall mit einem Eintrag in /etc/apache2/envvars gelöst:

Auszug aus /etc/apache2/envvars
  1. bash -c "ulimit -u 250"

URxvt: Tabbed nur wenn mehr als ein Tab

Vielleicht benutzt der ein oder andere auch rxvt-unicode als Standard Terminalemulator. Ich jedenfalls mache das seit Jahren und bin sehr glücklich damit. Da ich vor einigen Wochen von Debian (mal wieder) auf Gentoo umgestiegen bin, musste ich erneut mein Terminal einrichten. Dabei fiel mir auf, dass es noch durchaus interessantere Scripts gibt als matcher. Besonders angetan hat es mir hierbei das Script tabbed. Tabbed erstellt, wie der Name schon sagt, Tabs im Terminal. Diese sind via Maus oder Tastatur ganz einfach mit Shift+Left oder Shift+Right zu erreichen. Mit Shift+Down kann man einen neuen Tab erstellen. Schließen kann man die Tabs einfach, indem man wie gewöhnlich das darin laufende Programm schließt. Meistens ist das wohl bash, d.h. Ctrl+D oder exit schließen einen Tab.

Leider stört es mich ein wenig, dass die Tab-Leiste immer angezeigt wird, selbst wenn nur ein Tab offen ist. Dabei hat man einen ziemlich unnötigen Overhead, da dann in jedem Terminal völlig redundante Informationen zu sehen sind – auf Kosten einer ganzen Zeile im Terminal!^^ Da das für seine Funktionalität gar nicht mal so umfangreiche Script in Perl geschrieben ist, habe ich mich kurz rangesetzt und das Problem behoben. Die Tab-Leiste wird jetzt nur noch angezeigt, wenn mehr als ein Tab vorhanden ist. Das Ganze ist sogar über die Konfigurationsoption URxvt.tabbed.hide-when-empty: true einstellbar. Installiert habe ich die Version 9.10 von rxvt-unicode. Wer Interesse an dieser Funktionalität hat, kann folgenden Patch auf  /usr/lib/urxvt/perl/tabbed anwenden.

  1. 5a6,10
  2. >    my $num_tabs = scalar @{$self->{tabs}};
  3. >    if ($self->{hide} ne 0 and $num_tabs < 2) {
  4. >       return;
  5. >    }
  6. >
  7. 77a83,87
  8. >    my $num_tabs = scalar @{$self->{tabs}};
  9. >    if ($self->{hide} ne 0 and $num_tabs < 2) {
  10. >       return;
  11. >    }
  12. >
  13. 225a236
  14. >    my $hide  = $self->x_resource ("hide-when-empty");
  15. 230a242
  16. >    defined $hide  or $hide  = 0;
  17. 233a246
  18. >    $self->{hide}      = $hide;

Warum bash besser ist als der Windows Explorer

Macht das mal ohne Scripting:
  1. mysqldump -h server1 –password=X db1 | mysql –password=X db1
  2. mysqldump -h server1 –password=X db3 | mysql –password=X db3
  3. mysqldump -h server1 –password=X db7 | mysql –password=X db7
  4. # …

IPv6 ready

Die letzten Tage habe ich mich mal wieder mit IPv6 beschäftigt. Wenn man ein wenig die Internet Nachrichten verfolgt, hat man eventuell schon mitbekommen, dass sich unsere guten alten IPv4s langsam aber sicher dem Ende neigen. Folglich wird die neue Technik IPv6 also immer wichtiger für uns. Grund genug, sich damit intensiver auseinander zu setzen.

Bisher ist IPv6 leider kaum nutzbar. Ein Firefox-Plugin, genannt CheckIP zeigt mit mittlerweile seit einigen Wochen die IP des verbundenen HTTP-Servers an. So sieht man schnell, welche Webseiten über IPv6 erreichbar sind – und welche nicht. Das Ergebnis ist wirklich ernüchternd. Nicht mal Wikipedia bietet eine IPv6-Anbindung, Google nur über eine gesonderte Domain und meine favorisierten Webseiten haben alle keine IPv6. Gründe dafür sind fehlerhafte IPv6-Netze beim Enduser, mangelnde Kompetenz der Hosters (auch Strato bietet kein IPv6 für meinen V-Server) oder fehlende Lust und Zeit sich in die Materie einzuarbeiten.

Da nun aber der Server auf dem www.valentinvoigt.info und all meine anderen Projekte laufen ein ganzes IPv6 Subnet hat, sah ich mich quasi genötigt dieses mal in Betrieb zu nehmen. Mit Hilfe des wirklich tollen Service von sixxs.net habe ich mir ein eigenes IPv6-Subnet für zu Hause besorgt (via IPv4-Tunnel) und mit dem Programm radvd mein gesamtes Heimnetzwerk mit v6-Adressen versorgt. Ein einfacher ifconfig Befehl und einige simple Konfigurationen der Firewall taten es auch auf dem Web-Server von valentinvoigt.info. Ergebnis: Es ändert sich nix, aber man fühlt sich viel besser und tat dem Internet einen Gefallen. ;-)

Okay, Spaß bei Seite. Ähnlich wie bei DHCP ist die Konfiguration solcher Netze im Grunde ganz einfach.  Ein Blick in die Thematik lohnt sich auf jeden Fall mal. Es macht echt Spaß und bereitet einen riesiges Gefühl des Stolzes, wenn unter Remote-Address beim Apache eine v6-IP zu sehen ist. ;-) Jeder muss seinen Teil dazu beitragen, das Internet nach und nach v6-proof zu machen. Die Internet-Knoten haben schon begonnen, denn Routing ist meiner Erfahrung nach Problemlos möglich. Also fehlen noch die Provider und die Webservices selbst. Wie lange diese noch brauchen um ein vernünftiges IPv6-Internet auf die Beine zu stellen, steht wohl noch in den Sternen. Ich habe jedenfalls mein Bestes getan. *g*

Bind: Zone Delegation & Forwarding

Wahnsinn, wie sehr einem eine doch recht überschaubare Technik wie DNS in den Wahnsinn treiben kann. Schon seit einigen Wochen versuche ich immer und immer wieder, auf meinem DNS-Server eine Zone Delegation einzurichten. Die auf dem Server gehostete, eigene “lan”-TLD sollte eine Subdomain bekommen, die von einigen VMs gemanaged werden soll. Folgende Zeilen sollten dafür ja überall im Internet zu finden sein.

Ausschnitt aus einer Bind-Zone
  1. subdomain        NS    ns1.subdomain
  2. ns1.subdomain    A     10.3.0.1

Doch was wenn das nicht funktioniert und auch stundenlange Suche und ewiges Debugging nichts helfen? Nun, dann wäre es empfehlenswert, die forwarders-Direktive aus der named.conf zu entfernen. Schon geht alles einfacher… Ich hoffe jemand damit vom Wahnsinn abzuhalten. Ich jedenfalls werde mich jetzt die nächste Tage von DNS-Daemons fern halten. :-?

IMAP und der IDLE Befehl

Nachdem ich letzten den Nameserver einer Meiner Domains ändern musste, bin ich mal wieder auf den MX-Eintrag meiner Domain valentinvoigt.info aufmerksam geworden. Dieser zeigt via CNAME auf die DynDNS-Adresse meines Homeservers. Dort widerrum befindet sich ein Postfix Server, der … naja, eigentlich nichts zu tun hat.

Da ich mich schon länger nicht mehr mit dem Thema Mailserver beschäftigt habe, habe ich mir diesen Postfix-Server mal angeschaut. Dort habe ich bereits valentinvoigt.info als gültige Domain eingetragen. Komisch eigentlich, ich kann mich gar nicht daran erinnern, jemals diese Domain als einer meiner E-Mail-Adressen benutzt zu haben. Also habe ich mal schnell sendmail rausgeholt und mir selbst eine E-Mail an diese Domain geschickt. Und stellt euch vor – die kam an. Mit ca. 45 Sekunden Verzögerung, die mein Mail-Client zum Pollen der E-Mails benötigte.

45 Sekunden? “Da geht doch noch mehr”, dachte ich mir und schaute mir einige Tools an, die in der Lage sind Mailboxen zu überwachen. Schnell stieß ich auf das Programm mailnotify. Dort fand ich ein Feature, dass Gebrauch von der so genannten IDLE-Extension von IMAP macht. IDLE, zu Deutsch “nichts tun” klingt nicht besonders spannend, hat aber etwas ziemlich cooles an sich. Denn IDLE ist ähnlich wie “Pushmail” für mobile Clienten in der Lage, den Mail-Client in Echtzeit über den Empfang neuer E-Mails zu beachrichtigen. Nur leider funktionierte das auf Anhieb nicht…

Nach ein wenig Recherche fand ich aber schnell raus, wie ich IDLE zu meinem Vorteil nutzen könnte. Der Clue liegt in der Konfigurations-Datei des Courier-IMAP-Dienstes. In der Datei namens imapd gibt es eine Einstellung “IMAP_ENHANCEIDLE”. Diese muss auf 1 gesetzt werden, damit Courier die E-Mails in Echtzeit ausliefern kann. Courier benutzt dann den File Alteration Monitor, genannt FAM, der auf Kernel-Ebene Dateien und Verzeichnisse auf Änderungen überwacht. Dies ist in vielen Szenarien sinnvoll um ein Polling (d.h. regelmäßiges Prüfen auf Änderungen) zu vermeiden. Dies tut dann auch Courier nicht mehr, der Änderungen in der Mailbox nun in Echtzeit von FAM geliefert bekommt.

Mit dieser Technik habe ich nun eine Echtzeitbenachrichtigung über neue E-Mails. Zumindest an jene, die an valentinvoigt.info gesendet werden. E-Mails über meine GMX-Adresse müssen leider nach wie vor gepollt werden. Dort habe ich im Schlimmstfall noch eine Verzögerung von 5 Minuten. Okay, zugegeben. Brauch mal wieder keiner. Aber dennoch ist eine Echtzeitbenachrichtigung in manchen Fällen (Server- oder Software Ausfälle) schon sinnvoll. Nun kann man sich auf seine E-Mails konzetrieren und keine Jabber-Benachrichtigungen friemeln. :-)

Neues Hintergrundbild

Hey, will jemand mein neues Hintergrundbild benutzen? Hab’s selbst gemacht. *g*

Background image

Vorher hatte ich übrigens das gleiche ohne Schriftzug. :-D

IMAP, fetchmail und mehr

Nachdem ich nun schon lange nichts mehr geschrieben habe, berichte ich mal wieder über meinen stetig wachsenden Homeserver, der langsam anfängt echt nützliche Dinge für mich zu erledigen. ;-)

Seit einigen Wochen nun habe ich ein neues System, meine E-Mails abzurufen. Auf dem Server läuft nun das Programm fetchmail. Fetchmail ist ein Perl-Script, welches in regelmäßigen Abständen die Mails einer Mailbox abfragt und entsprechend weiterleitet. In meinem Fall checkt fetchmail alle fünf Minuten die Mails auf meinem GMX E-Mail Account und sendet sie an die lokal laufende Postfix Instanz. Wer es nicht weiß, Postfix ist ein Mailserver. ;-)

Postfix hat seit kurzer Zeit jetzt auch einen Spamfilter, genauer gesagt SpamAssassin. Dieser Spamfilter kann zwar auch Spam aussortieren, ich habe mich aber dazu entschieden, meinen Spam vorerst nur mit einer Änderung des Betreffs zu markieren. Damit möchte ich jetzt erst einmal testen, wie zuverlässig SpamAssassin Spam von nicht-Spam unterscheidet. Später dann kann ich Spam auch direkt löschen lassen. Bei meiner bisherigen Menge hingegen lohnt sich das noch nicht.

Um jetzt meine E-Mails von Postfix auf meine E-Mail-Clients zu bekommen, habe ich außerdem noch einen IMAP-Server installiert, genannt Courier. Courier erlaubt es mir, meine Ordnerstruktur für E-Mails und die E-Mails selbst direkt auf dem Server zu behalten und erleichtert mir somit die Synchronisierung der Mail-Clients enorm. Die gespeicherten Mails liegen außerdem noch in einer RAID1-Partition, was damit also auch die Sicherheit der Daten erhöht.

Neben Courier habe ich außerdem schon seit längerem noch einen Webserver laufen. Auf diesem Webserver befindet sich jetzt seit wenigen Tagen auch eine SquirrelMail-Installation. Mittels SquirrelMail ist die Mobilität meines E-Mail Accounts jetzt komplett. SquirrelMail ist ein Webinterface für IMAP-Accounts. Damit kann ich nun von jedem beliebigen Ort der Welt (Internetanbindung vorausgesetzt) meine E-Mails samt Ordnerstruktur abrufen. :-)

Vor lauter Langeweile habe ich heute außerdem noch einen kleinen Python-Bot hinzugefügt. Okay, zugegeben, eigentlich braucht man das nicht. Aber es ist auf jeden Fall mal wieder eine neue Erfahrung. Dieser Bot ist dauerhaft in meinen Jabber-Account eingeloggt und wartet mit Hilfe von FAM auf eine Änderung der Mailserver-Logs. Sollte er eine Änderung feststellen, werden die neuen Zeilen ausgelesen und auf ein Regular Expression überprüft. Konnte der RegEx angewendet werden, so werde ich via Jabber sofort über den Erhalt neuer Mails informiert. Das Ganze kann bei GMX-Mails natürlich bis zu fünf Minuten dauern, da fetchmail leider auf Polling zurückgreifen muss. Bei lokalen Mails hingegen bekomme ich fast eine Realtime-Benachrichtigung. Dinge, die die Welt nicht braucht, nicht wahr? ;-)

Erste Probleme mit Debian ‘lenny’

Nach einigen Monaten, in denen ich schon Debian testing benutze, traten heute das erste Mal Probleme auf. Während eines einfachen Updates via apt-get update && apt-get dist-upgrade wollte Debian mein eingesetztes Apache-MPM itk entfernen. Ich stimmte zu, da Debian in Richtung Updates bisher eigentlich immer gute Vorschläge geliefert hat und mir in dieser Richtung schlichtweg die Erfahrung fehlt. Nach dem Update wurde ein Neustart des Apachen mit No apache MPM package installed quittiert. Logisch, MPM-ITK ist ja auch gelöscht. *g* Dummerweise schlägt eine Neuinstallation allerdings fehl: apache2-mpm-itk: Hängt ab: apache2.2-common (= 2.2.9-10+lenny1) soll aber nicht installiert werden. Das heißt, soweit ich das verstanden habe: Installiert ist die Version X-lenny2 des Apachen, das MPM-ITK benötigt aber noch X-lenny1. Wie ich das Problem jetzt löse weiß ich leider selbst nicht. Ich hoffe auf eine Inkonsistenz der Paketlisten und dass sich das Problem in einigen Stunden oder Tagen selbst löst. Andere Ideen habe ich leider nicht… Update (15h später): Das Problem hat sich jetzt wie erhofft von selbst gelöst, nachdem ich die Paketlisten einfach erneut aktualisiert habe. :-)

Next Page »