Skip to content

Einfache Logger unter PHP

PHP

Es gibt für PHP ja so einige Möglichkeiten, Logs zu erzeugen. Apache Log4PHP dürfte die bekannteste sein, aber ich suchte etwas ganz einfaches und habe KLogger gefunden.

Einfaches Beispiel:

$log = new KLogger('/var/log/'); # Specify the log directory
$log->logInfo('Returned a million search results'); //Prints to the log file
$log->logFatal('Oh dear.'); //Prints to the log file
$log->logInfo('Here is an object', $obj); //Prints to the log file with a dump of the object

Ideal für meinen Einsatzzweck und in wenigen Minuten implementiert.

rsync nur einmal starten

Ab und an dauert ein rsync Job länger als geplant. Wenn man sicherstellen möchte, dass rsync in einem Cronjob nur ausgeführt wird, falls es nicht schon läuft, kann man folgendes Konstrukt verwenden:

pgrep -c rsync || rsync [options] quelle ziel

Ich hatte das vor einiger Zeit bei Serverfault schon mal als Antwort eingestellt, aber eigentlich ist es in meinem Blog auch gut aufgehoben. 

Virtualbox Update auf 4.2

Eben mal ein Update von der 4.1 auf die aktuelle Virtualbox 4.2 durchgeführt. Für daheim ist das ganz prima und tut genau das was es soll. Es ist an sich, obwohl es zwischenzeitlich im Rahmen der SUN Übernahme von Oracle geschluckt wurde, ein hervorragendes Werkzeug für die Virtualisierung auf dem Desktop. Man kann damit relativ schnell Testszenarien bauen, anpassen und wieder verwerfen.

Für die Server Virtualisierung würde ich es jedoch nicht verwenden. Da bleibe ich lieber bei Proxmox VE.

Viele, sehr viele Dateien in einem Verzeichnis unter Linux löschen

Ein bestimmter Server wurde in letzter Zeit immer unzuverlässiger und stürzte öfter mal ab, ohne dass wir eine genaue Ursache ausmachen konnten. Gestern habe ich mich dem Server noch mal angenommen und ein bisschen Ursachenforschung betrieben. Ein einfaches ls -la /var/log dauerte schon ewig. Ich spekulierte schon über einen Festplattenschaden bis ich dann irgendwann tatsächlich eine endlose Dateiliste zu sehen bekam.

Ein ls -la | wc -l brachte hervor, dass in diesem Ordner mehr als 1,3 Millionen Files lagen. Kein Wunder, dass  der Server dabei ab und an mal Schwierigkeiten hat. Die Ursache war, dass sich auf Debian/Ubuntu Systemen der sysklogd und logrotate gegenseitig in die Quere kommen. Aber dazu vielleicht ein anderes Mal mehr. Nun musste ich erst mal die ganzen überflüssigen Dateien löschen.

Das ist etwas leichter gesagt als getan, denn ein rm /var/log/mail.0.* brachte schon einen Fehler, dass die Liste der Dateien zu gross sei.

Lösung 1:

find /var/log -name "mail.0.*" -exec rm '{}' \;

find bearbeitet jede Datei einzeln, startet dann rm um die einzelne Datei zu löschen. Das funktionierte grundsätzlich, löschte allerdings nur ca. 150 Files pro Sekunde. Somit hätte der gesamte Vorgang 144 Stunden oder 6 ganze Tage gedauert. Ich brauchte eine andere Lösung.

Lösung 2:

find /var/log -name "mail.0.*" -delete -print

Damit übergibt find die Dateien nicht mehr an rm, sondern löscht sie gleich selbst. Damit erreichte ich ca. 2.000 Files pro Sekunde. Der gesamte Vorgang verkürzte sich somit auf ca. 10 Minuten. Das -print ist übrigens nur notwendig, wenn man sehen möchte, welche Dateien find löscht. Ohne Ausgabe dürfte es noch etwas schneller gehen. Na Also, geht doch. 

EDIT: Da der Artikel in einer früheren Version unfertig gespeichert wurde, habe ich die fehlenden Lösungen noch ergänzt ;-)

EDIT 2: "-name" ergänzt. Falscher Fehler in meiner Erinnerung. 

Automatische btrfs Snapshots vor Installation

Btrfs, so könnte man meinen, ist der kommende Star unter den Linux Filesystemen. Bis dahin ist es zwar noch ein weiter weg, denn auch btrfs hat noch einige Baustellen, aber es werden permanent weniger und die Entwicklung schreitet mit großen Schritten voran. Noch 2012 wird Oracle, als Arbeitgeber des Hauptentwicklers Chris Mason, das Filesystem als stabil kennzeichnen und es in der kommenden Version ihres Oracle Linux ganz offiziell supporten. Das alles lässt hoffen. 

Btrfs  hat einige wirklich überzeugende Features und ich möchte einige dieser Features und konkrete Anwendungen dafür in der nächsten Zeit näher vorstellen. Den Anfang mache ich mit den btrfs Snapshots.

Ich habe kürzlich gesehen, wie jemand mit yum unter Oracle Linux vor jeder Installation einen automatischen Snapshot anlegte, um jederzeit wieder darauf zurücksetzen zu können. Das wollte ich für meine Ubuntu Installation ebenfalls. Die Umsetzung war dabei sehr leicht:

/etc/apt/apt.conf.d/70debconf

Dpkg::Pre-Invoke {"mkdir -p /snapshots; ROOTFS=`mount | grep ' on / ' | \
cut -f1 -d' '`; mount $ROOTFS /snapshots; \
/sbin/btrfs subvolume snapshot /snapshots/@ /snapshots/@_snapshot_apt_`date +%Y-%m-%d_%H-%M-%S`; \
umount /snapshots";};

Apt (oder Aptitude) stellt eine Schnittstelle zur Verfügung um Befehle vor einer Paketinstallation auszuführen. Das können auch mehrere Befehle sein, so wie oben angegeben. 

Die Vorgehensweise ist wie folgt:

  1. Es wird ein Ordner /snapshots angelegt, sofern dieser noch nicht existiert.
  2. Wir finden heraus, welches Device als root gemounted ist
  3. Wir schneiden uns den Device Teil heraus und hängen diesen unter /snapshots noch mal ein (btrfs kann das)
  4. Ein Snapshot von / wird in /snapshot/@_snapshot_apt_(datum) erzeugt
  5. Der Mountpoint /snapshots wird wieder ausgehängt um eine unbeabsichtigte Änderung zu vermeiden.

Da ein solcher btrfs Snapshop nur Sekundenbruchteile dauert, merkt man es bei einer Installation gar nicht, aber der Systemzustand wird festgehalten. Sollte man nach der Installation nun feststellen, dass etwas nicht läuft oder es sich nur um einen Test gehandelt hat, den man nun wieder rückgängig machen möchte, geht man wie folgt vor:

  1. Das Root Device hängen wir noch mal unter /snapshots ein: mount <root device> /snapshots
  2. Ein btrfs subvolumes list /snapshots zeigt uns alle angelegten Snapshots
  3. Mittels mv @ @_oldroot und einem anschließenden mv @_snapshot_apt_(datum) @ aktivieren wir den früheren Snapshot wieder als root
  4. reboot

Nach einem Reboot des Systems sind nun alle nach dem Snapshot installierten Pakete und alle Veränderungen am Filesystem wieder zurückgesetzt worden, so als wäre es nie geschehen.

So kann man beliebig mit den Snapshots hin- und herwandern. Alle Snapshots sind übrigens auch regulär beschreibbar. Nicht mehr benötigte Snapshots kann man einfach mit einem btrfs subvolume delete /snapshots/<snapshot-name> entfernen.

Zum Ende noch eine Warnung: Da Ubuntu btrfs als root Filesystem zwar unterstützt, aber von der Standardimplementierung abweicht, funktioniert die oben angegebene Vorgehensweise nur auf Ubuntu, nicht aber auf Debian Systemen. Bei Debian Systemen ab Squeeze funktioniert dies zwar grundsätzlich schon, man muss jedoch mit den Subvolumes etwas anders umgehen. Debian hält sich an den Weg, wie ihn btrfs eigentlich vorgibt, Ubuntu weicht dagegen ab.

cdrecord unter Debian 6

Wer in Debian 6 eine Möglichkeit sucht, ein ISO Image auf einen Rohling zu brennen, wird cdrecord vermissen. Dies ist in Debian mittlerweile nicht mehr enthalten. Stattdessen kann man aber auf wodim zurückgreifen.

aptitude install wodim
wodim tolles-image.iso


Chrome und Serendipity

Irgendwann nach dem ich Chrome zu meinem Standardbrowser gemacht habe, stellte ich fest, dass Serendipity beim Verfassen eines neuen Beitrags immer am Ende der Seite abstützt. Zwar nur der eine Tab (Chrome sei Dank), aber das Geschriebene war weg.

Mittlerweile weiß ich, dass es nichts mit dem Betriebssystem zu tun hat, denn es passiert unter Linux genauso wie unter Windows oder Mac OS X. Und es passiert auch über die letzten Updates von Chrome und Serendipity hinweg. Es passiert auch auf anderen Serendipity-Installationen, so dass es nichts mit einer speziellen Installation zu tun haben kann. Vielleicht hat's auch nur mit einem einzigen Plugin zu tun, das ich einsetze.

In anderen Browsern habe ich kein Problem. Aber nur um einen Blogeintrag zu verfassen muss ich jetzt einen anderen Browser starten.

Kann das jemand bestätigen?

Ubuntu / Debian: Installierte .deb Pakete eines Servers auf einem anderen Server installieren

Es kommt immer wieder mal vor, dass ein Server installiert werden muss, der einen alten Server ersetzen soll. So lange nur wenige Dienste oder Pakete auf dem alten Server installiert waren, lässt sich das auch schnell aus dem Kopf erledigen. Pakete auf dem neuen Server installieren, Config übernehmen, Config anpassen, läuft.

Allerdings gibt es auch Server, auf denen viele Pakete installiert sind und die mehrere Dienste anbieten. Hier eine Vorgehensweise, um sich das Leben einfacher zu machen:

Auf dem alten Server:

dpkg --get-selections | grep -v deinstall > package_list.txt

Auf dem neuen Server:

dpkg --set-selections < package_list.txt
dselect
3. [I]nstall
4. [C]onfig
5. [R]emove (optional)
6. [Q]uit
Oder alles in einem Schritt vom neuen Server aus (alles in einer Zeile):
neuer-server~# ssh user@alter-server dpkg --get-selections | grep -v deinstall | \
dpkg --set-selections && dselect update && dselect install && dselect config

Danach sind die auf dem alten Server installierten Pakete auf dem neuen Server ebenfalls installiert. Die Konfiguration muss dann natürlich noch übernommen und angepasst werden, denn in der Regel kommen auf dem neuen Server auch neuere Versionen der Pakete zum Einsatz.

Zarafa 7.0.0 WebApp Screenshots (neuer Webaccess)

Mit Zarafa 7.0.0 wird ja auch der länger ersehnte neue Webaccess kommen, allerdings als zusätzliches und zunächst optionales Paket. Man kann ihn also erst einmal parallel zum bekannten Webaccess verwenden.

Nach meinem ersten Test vor ein paar Tagen finde ich die neue WebApp sehr gelungen. Das wird eine deutliche Verbesserung zum sowieso schon sehr guten Webaccess.

Screenshots der neuen Zarafa WebApp gibt's auch schon zu sehen. Diese Screenshots werde ich auch nach und nach aktualisieren, wenn es etwas neues zu berichten gibt.

Ach ja: Damit startet auch hier im Blog die neue Kategorie "Zarafa". Dazu werde ich künftig öfter etwas schreiben, nachdem ich es nun schon ein paar Jahre verwende ;-).

Linux Backup mit Duply, Duplicity und Rdiff-Backup auf (potentiell unsichere) Online Speicher (Teil 2)

Teil 2: Duply und Duplicity

Im ersten Teil habe ich ja bereits die Unterschiede zwischen Duply / Duplicity und Rdiff-Backup geschildert. In diesem Teil gehe ich also davon aus, dass man Duplicity verwendet, weil man vom Provider einen FTP Backup Space zur Verfügung gestellt bekommen hat oder Amazons S3 nutzt.

Installation

Unter Ubuntu 10.04 LTS / Lucid Lynx könnte es kaum einfacher sein. Die Pakete sind bereits im Repository vorhanden und können direkt mittels aptitude installiert werden.

aptitude install duply duplicity

Wer ältere Ubuntu Versionen oder andere Distributionen nutzt, kann Duply auch direkt von der Downloadsite nehmen und das Python Script unter /usr/bin legen und als ausführbar markieren (chmod +x /usr/bin/duply). Duplicity sollte in jedem halbwegs aktuellen Repository jedoch vorhanden sein.


"Linux Backup mit Duply, Duplicity und Rdiff-Backup auf (potentiell unsichere) Online Speicher (Teil 2)" vollständig lesen

Linux Backup mit Duply, Duplicity und Rdiff-Backup auf (potentiell unsichere) Online Speicher (Teil 1)

Same procedure as every year, James!

Der neue Rootserver ist fertig, aber benötigt noch ein Backup. Hat man nun nicht gerade ein Rechenzentrum im Keller und kann dort Bänder wechseln gehen, bietet sich für Rootserver ein Backup auf verfügbaren Onlinespeicher an. Das kann in einigen Fällen ein weiterer Rootserver mit noch reichlich Platz sein, aber auch ein vom Provider zur Verfügung gestellter FTP Server oder auch Amazons S3 sind gute Alternativen.

Diverse Tools machen einem das Leben deutlich leichter und Backups zum Vergnügen. Im Folgenden gehe ich auf Duply/Duplicity und Rdiff-Backup in Verbindung mit einem weiteren Backup-Server, FTP Server und Amazon S3 ein und zeige wie man sichere Backups erstellt, die man hinterher auch wieder brauchen kann.

"Linux Backup mit Duply, Duplicity und Rdiff-Backup auf (potentiell unsichere) Online Speicher (Teil 1)" vollständig lesen

Chrome

Da lass' ich mir von der aktuellen c't den Google Chrome (4.1) wieder aufschwatzen, schreibe meinen ersten Blog Eintrag damit und als ich fertig bin, verabschietet sich der Browser in die ewigen Jagdgründe. Natürlich bevor ich den Eintrag speichern konnte. Super Sache, das.

Back to Firefox. Der geht wenigstens.

tweetbackcheck cronjob