Segementation Fault unter Linux/Mac debuggen

Für die Uni muss ich ja nun viel C schreiben, und da gibt es ja nun mal diese wunderbaren Pointer. Sollte man davon mal eine falsch setzen bricht das Programm ab, und es gibt eine wunderbare Fehlermeldung: Segementation Fault: 11. Jetzt heißt es also, den Fehler mit jede Menge printf() eingrenzen und nach sehr viel Suchen dann evtl. auch finden.

Nach den ich heute mal wieder einen Pointer falsch hatte, habe ich mal nachgesehen, ob es nicht auch einfacher geht… Geht es natürlich… Also eine kleine Anleitung! Ich habe extra für euch ein Programm mit Fehler gebaut: Sowas würde mir sonst natürlich nie passieren 😉

Was nun? Als ersten müssen wir dem Betriebsystem sagen, dass es einen Speicherdump (coredump) erstellen soll, wenn ein Programm abstürzt. Die Dinger werden ziemlich groß, deswegen ist das normalerweise ausgeschaltet. Um es für die akutelle Shell zu aktivieren geben wir ulimit -c unlimited ein. Damit wird bei nächsten Absturz ein core-dump erstellt. Damit kommen wir schon recht weit, doch wir können das Programm noch im Debug-Modus kompilieren, damit wir noch besser sehen, was da schief gelaufen ist. Dazu einfach gcc den Parameter -g mitgeben (ja, clang kann das auch). Danach lassen wir das Programm wieder abstürzen:Na, aufgepasst? Da steht jetzt (core dumped). Nun schauen wir mal in den Ordner /cores, dort liegt unser core dump! Und er ist (für dieses einfache Programm) >300 MB groß! Das war das, was ich oben meinte…

Weiterlesen

Dropbox-Backup ohne Client

Der offizielle Dropbox Client unter Linux hat ja ein paar kleine Speicherprobleme (und auch andere Probleme), daher hab ich mich nach einer anderen Lösung umgesehen, meine Backups in die Dropbox zu schieben. Den ersten Ansatz habe ich auf der Seite von Andrea Fabrizi gefunden: Dort gibt es ein Script, mit dem Uploads in die Dropbox auch ohne Client möglich sind.

Das Script lädt die Datei mit cURL über die offzielle Website hoch. Nicht wirklich eine saubere Lösung, funktioniert aber perfekt. Naja, fast: Über die Website sind nur Uploads bis 150MB möglich, meine Backup-Zips sind aber inzwischen schon 188MB groß (ich blogge zu viel ;)). Daher habe ich mir ein kleines Script gebastelt, das die Dateien durchgeht, und alle die größer als 100MB sind, mit Hilfe von split in Teile á 100MB schneidet. Dabei wird dann einfach ein fortlaufender Buchstabe an den Dateinamen angehängt. Dazu habe ich das Upload Script noch so modifiziert, das es Dateien, die größer als 100MB sind, gar nicht erst hoch lädt (da sie eh nicht verarbeitet werden).

Weiterlesen

.dropbox-dist/dropbox not found

Genau dieses Problem quälte mich gestern nach einem Update der Dropbox Version auf meinem Server (nutze ich für Backups). Die Datei war definitiv da, aber immer wenn ich Dropbox starten wollte, wurde hartnäckig behauptet, die Datei könne nicht gefunden werden. Nach ein bisschen Suche fand sich dann die Lösung: Offenbar ist die x64-Version falsch kompiliert und will eine x86-Libary laden, was natürlich nicht klappt.

Die Lösung: Einfach gleich die x86-Version benutzen, die funktioniert einwandfrei… Warum es zu so einem Fehler kommen kann, weiss ich aber auch nicht…

Die eigene Certificate Authority (CA)

Wer wäre nicht gerne seine eigene CA? Statt teure Zertifikate von VeriSign und Co. zu kaufen, einfach seine Anträge selber unterschreiben! Technisch ist das kein Problem: Auch „echte“ CAs benutzen selbst unterschriebene Zertifikate, nur die sind eben in allen großen Browsern und Betriebssystemen installiert. Wenn man sich aber die Mühe macht, sein eigenes Root-Zertifikat an allen benutzten Rechnern zu installieren, ist es kein Problem seine eigene CA zu sein. Dabei muss man zwei Sachen beachten:

  • Windows hat zwar einen zentralen Zertifikatsspeicher, aber Firefox und Thunderbird benutzen (jeweils) einen eigenen. Das Zertifikat muss in allen installiert werden.
  • Es gibt einen unterschied zwischen einer eigenen CA und selbst unterschriebenen Zertifikaten: Die selber abgesegneten Zertifikate muss man alle einzeln bestätigen, wobei hingegen es reicht das eigene Root-Zertifikat zu installieren, um automatisch allen davon unterzeichneten Zertifikaten zu vertauen. Viele Programme generieren bei der Installation selbst-unterschriebene Zertifikate, die man also immer einzeln akzeptieren muss.

Weiterlesen

Freien Speicher mit Munin überwachen

So, zurück aus dem Urlaub, da kann es ja weitergehen mit dem bloggen 😉

Wer Munin zum überwachen seine(r/s) Server(s) benutzt (wie ich) kennt wahrscheinlich auch den Graph, der die Speicherauslastung anzeigt. Der sieht ungefähr so aus:

Aber ganz ehrlich: Ich steige da nicht durch… Zum einen ist der Graph blöd skaliert (ich habe nur 200MB RAM, aber er geht bis 25GB), und man kann auch nicht wirklich erkennen, ob man nun noch Speicher hat oder nicht.

Also dachte ich mir, bauen ich doch mein altes Skript etwas um, und integriere es in Munin. Das ist gar nicht schwer, denn es gibt natürlich eine passende Anleitung.

Weiterlesen

These points of data make a beautifull line… Speicherverbrauch von Debian überwachen und als Diagramm darstellen

Now these points of data make a beautiful line

and we’re out of beta, we’re releasing on time

 

Ähm ja… Das eigentliche Thema ist nicht ein bekanntes Lied, sondern ein Tipp, wie man den Speicherverbrauch eines Servers überwachen und visualisieren kann. Mein Problem war folgendes: Mein vServer (der überrings heute nach ausgefallen ist-Node Fehler…) hat nur 200MB eigenen Speicher, daher habe ich immer ein wachendes Auge auf die Speicherauslastung. Grade der Virenscanner ClamAV ist sehr Speicher hungrig. Wenn ich nun per SSH und htop nachgeschaut habe, war der Speicher oft sehr voll. Lag das nun am SSH Server und meinen Aktionen, oder pfiff der Server wirklich aus dem letzten Loch?

Ich habe mir zu Überwachung also ein kleines Shell-Script geschrieben (mein erstes, seid gnädig…), das den freien Speicher, den durch Anwendungen belegten Speicher (ohne den Cache des Systems) und den belegten Swap Speicher aufzeichnet. Die Daten landen in einer CSV-Datei die dann mit Excel ausgewertet wird.

Weiterlesen

Linux: Ausgabe von free richtig lesen

Zu erst: Tut mir Leid, dass ich den Blog etwas vernachlässigt habe, in der Schule musste eine Facharbeit geschrieben werden…

Jetzt aber ein kleiner Tipp um alle Hobby-Admins zu beruhigen:

„free“ ist ja das Mittel der Wahl, um auf Linux Systemen den freien Arbeitsspeicher auszugeben. Bei mir sieht die Ausgabe so aus:


total       used       free     shared    buffers     cached
Mem:           200        200          0          0          0         62
-/+ buffers/cache:        137         62
Swap:          400          0        400

Weiterlesen

Debian Squeeze: MySQL startet nicht mehr – Die Lösung

Kurzer Tipp: Wenn bei jemanden nach dem Update auf Debian Squeeze MySQL nicht mehr starten sollte, und man sowas im Log findet:

/etc/init.d/mysql[22733]:  0 processes alive and '/usr/bin/mysqladmin  --defaults-file=/etc/mysql/debian.cnf ping' resulted in  #007/usr/bin/mysqladmin: connect to server at 'localhost' failed
 error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
 Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
 

Kann es sein, dass das Paket nicht richtig installiert wurde. Bei mir haben folgende Befehle geholfen:

Weiterlesen

Umzug

Jetzt habe ich es lange genug vor mir hergeschoben, jetzt kommt der lang erwartete Bericht über meinen Serverumzug 😉

Situation am Anfang: Reines Webhosting beim einem Hoster, von dem ich weg wollte. Ein WordPress-Blog (dieser ;)), Maximilians UpdateServer, ein Mantis Bugtracker und meine Emails. Dazu ein Subversion Repository bei Assembla, das mit verschoben werden sollte.

Neue Situation: Ein vServer bei netcup, „ohne alles“. Und doch war der Umzug ziemlich einfach, er hat eigentlich problemlos geklappt. Was ich allen empfehlen kann, die noch nicht so fit mit Linux sind (wie ich…): Baut euren vServer erstmal in einer VM nach, und probiert dort alles aus! Also der kompletten Umzug. Da lernt man eine Menge!

Ich hatte den neuen Server mit einem Monat Vorlauf gemietet, ich hatte also genug Zeit, alles umzuziehen. Als Betriebssystem sollte Debian auf meinem Server zum Einsatz kommen, leider hab ich etwas zu früh angefangen, und noch Lenny verwendet, jetzt muss ich auch Squeeze updaten… Die Installation von Debian war mehr als einfach: Im ControlPanel von netcup das Debian Lenny ohne alles Image ausgewählt, schon steht der Server, und ist per SSH erreichbar.

Weiterlesen