Martin Lantzsch
Software Entwickler
22. Juli 2015

Festplatte durch Jenkins vollgelaufen

22. Juli 2015 - Geschrieben von Martin - Keine Kommentare

Heute ist die Festplatte meines Build-Servers vollgelaufen. Ich vermutete erst ich hätte die Build Artifakte meines Nightly Builds dauerhaft auf das NFS Share geworfen, allerdings stellte sich nach einem schnellen du -h heraus, dass die Log Datei von Jenkins unter /var/log/jenkins/jenkins.log 9,1 GB groß ist. Immer mit dem folgenden Eintrag:

question:      [DNSQuestion@1546425449 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]

Damit das erst mal abgestellt ist, kann man laut Jenkins Issue Tracker in der /etc/default/jenkins einen weiteren „versteckten“ Parameter an den Start von Jenkins übergeben:

JAVA_ARGS="-Dhudson.DNSMultiCast.disabled=true"

dieser wird anschließend vom init.d Script bei einem Neustart des Dienstes aufgegriffen und die Platte läuft nicht weiter voll. Spannend ist auch, dass die Log Datei ab der extremen „Wachtumsphase“ nicht mehr rotatet werden konnte.

Ich muss wohl künftig in meinem Paessler Monitoring noch das rasante Schrumpfen von freiem Festplattenplatz überwachen. Bei einem Build Server ist das allerdings nicht so geil, denn CPU, RAM, Netzwerk und Festplatte sind eigentlich ständig durch Unit- und Integrationstests unter Dauerlast und so meldet sich jede Nacht ein Sensor wenn mal wieder viele Abhängige Builds durchgeführt werden…

21. Oktober 2013

/bin/false und vsftpd

21. Oktober 2013 - Geschrieben von Martin - Keine Kommentare

Wenn ein User Account die Shell /bin/false zugewiesen bekommt hat er keinen Zugriff mehr auf die Shell, was sich zum Beispiel bei einem File Server anbietet, auf dem User selbst quasi keine Rechte haben.

chsh -s /bin/false USER

Nutzt man nun diesen User Account zur Authentifizierung am vsftpd so schlägt jeder Login fehl, da vsftp eine gültige Shell verlangt.

Um dies zu umgehen kann man in der Konfiguration von pam.d die Überprüfung auf eine gültige Shell exklusiv für vsftpd abschalten:

nano /etc/pam.d/vsftpd

# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
 
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
 
# Standard pam includes
@include common-account
@include common-session
@include common-auth
#auth   required        pam_shells.so

Die letzte Zeile wie hier auskommentieren und schon kann man sich mit dem Benutzer am FTP Server anmelden.

26. Juli 2012

Backups via lftp auf anderem Server archivieren

26. Juli 2012 - Geschrieben von Martin - Keine Kommentare

Mit folgendem Script sichere ich die Backups, welches mir Froxlor täglich von Applikationsverzeichnissen und Datenbanken erstellt auf einen zweiten Server:

#!/bin/bash
DATE=`date +%Y%m%d`
lftp -e "mkdir /backups/server01/"$DATE" && mirror --reverse /var/customers/backups /backups/server01/"$DATE" && exit" ftp://backup-server01:PASSWORT**@backup.storage.net

Hierbei wird auf dem Server ein Verzeichnis namens „/backups/server01/20120726“ erstellt und die Daten aus dem Verzeichnis „/var/customers/backups“ werden hochkopiert.

Das ganze noch in einen Cronjob gepackt und es wird jeden Tag um halb 4 Uhr Morgens ausgeführt.

30 3 * * * /root/backup.sh

5. Januar 2012

Wenn beim apt upgrade die SSH Sitzung unterbrochen wird

5. Januar 2012 - Geschrieben von Martin - Keine Kommentare

Wenn man gerade schön

apt-get upgrade

am laufen hat und die Sitzung durch abreisen der Internetverbindung plötzlich beendet wird steht man ganz schön doof da, denn dann wird dpkg geschützt und man kann es nicht mehr ausführen.

# apt-get upgrade
E: Konnte Lock /var/lib/dpkg/lock nicht bekommen - open (11 Die Ressource ist zur Zeit nicht verfügbar)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

Da ich mir sicher war, das gerade keine Kopieraktion o.ä. stattgefunden hatte, sondern das Programm stand (als letztes war ein Eingabepromt zu sehen, ob ich ein Config File überschreiben will), habe ich ganz einfach /var/lib/dpkg/lock gelöscht

rm /var/lib/dpkg/lock

und warf nun noch mal apt-get upgrade an:

# apt-get upgrade
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

kam dann bei mir. Und da Linux schlau ist, wird einem auch direkt gesagt was man nun zu tun hat. Und zwar muss ich die Pakete nun mit dpkg neu konfigurieren (klar, an der Stelle ist er eben auch „hängen“ geblieben):

dpkg --configure -a

und er hat die noch ausstehenden Config Files neu geschrieben.

2. Oktober 2011

PECL uploadprogress auf Debian installieren

2. Oktober 2011 - Geschrieben von Martin - 3 Kommentare

In den letzten Wochen hatte ich 2x das Vergnügen die PECL extension „uploadprogress“ zu installieren. Leider ist die Installation etwas tricky, wenn man nicht weiß was genau man zu tun hat.

Nötige Pakete aus den Quellen installieren

apt-get install php5-dev php-pear

PECL extension installieren

pecl install uploadprogress

PHP.ini um folgende Zeile erweitern

extension=uploadprogress.so

und in der PHP.ini die Temporäre File Upload Directory auf /tmp setzen (ohne diesen Schritt liefert uploadprogress_get_info() „null“ zurück)

upload_tmp_dir=/tmp

Webserver neu starten und die extension sollte Problemlos laufen.

9. Dezember 2010

SVN Repo bei Commit nach htdocs kopieren

9. Dezember 2010 - Geschrieben von Martin - Keine Kommentare

Oft arbeitet man im Team an einer Webanwendung und würde gerne Testern den aktuellen Stand der Entwicklung geben. Um das nicht allzu umständlich zu machen, ist es hilfreich immer das aktuelle SVN Repo im WebRoot des Server abzulegen.

Hier kommt uns die Hook Schnittstelle von Subversion entgegen, welche erlaubt an bestimmten Events eigene Shell Scripte ausführen kann (wie z.B. nach dem Commiten).

Zu finden sind diese unter

/[SVNREPO]/hooks/

Wir öffnen nun den Hook, der nach dem Commiten ausgeführt wird:

cd /[SVNREPO]/hooks/
nano post-commit.tmpl

in dieser Datei bewegen wir uns nun mit dem Zeiger ganz runter und fügen folgenden Code ein:

svn checkout file:///[SVNREPO]/[DIRNAME] /var/www/[DIRNAME]
cd /var/www/[DIRNAME]
svn update

also z.B.

svn checkout file:///svnrepos/resigame /var/www/resigame
cd /var/www/resigame
svn update

Nun speichern wir es mittels [STRG] + [O] ab und benennen die Datei um (damit sie vom SVN erkannt wird):

cp post-commit.tmpl post-commit

und nun noch ausführbar machen (ist ja ein Shell Script ;))

chmod +x post-commit
15. August 2010

PHP_FCGI_CHILDREN – spar dir den Ram!

15. August 2010 - Geschrieben von Martin - 3 Kommentare

Mein kleiner Debian Test Server hat die letzten Tage unwahrscheinlich viel Ram gezogen. Von 265MB welche verbaut sind, nutzte er bereits nach einem Neustart ganze 75% – das kann es ja nicht sein, schließlich laufen dort lediglich ein Lighttpd, MySQL, Exim4, Courier und SSH, also nichts weltbewegendes. Zu diesem Zeitpunkt griff ich auch nur mit 2 Rechnern auf meine PHP Anwendungen zu.

Also begann ich die vielen php5-cgi Prozesse genauer unter die Lupe zu nehmen, da diese am meisten Ram brauchten. Nach einigem unnützen hin und herstellen in der PHP.ini wagte ich mich noch an die FastCGI Konfiguration von Lighttpd, dort habe ich nur so zum Test die PHP_FCGI_CHILDREN heraus geschmissen und siehe da, der Server benötigt nach einem Neustart des Webservers Lighttpd nur noch gute 30 bis 50% Ram, wenn das mal kein befriedigendes Ergebnis ist.

Des weiteren habe ich nun anstatt 12 php5-fcgi Prozessen nur noch 4 Stück. Offenbar beendet PHP oder FastCGI die Geforkten Tasks nicht mehr richtig …

Laut PHP Bugtracker existiert dieser Bug schon seit gut 3,5 Jahren: http://bugs.php.net/40286

1. Juni 2010

Was sucht Resi in APT?

1. Juni 2010 - Geschrieben von Martin - Keine Kommentare

Gestern beim Updaten einiger Pakte auf meinem Debian Lenny Server hab ich zufällig folgendes entdeckt:

martin@ldsrv:/$ apt-get --help
[...]
apt-get ist ein einfaches Kommandozeilenwerkzeug zum Herunterladen
und Installieren von Paketen. Die am häufigsten benutzten Befehle
sind update und install.
[...]
                       Dieses APT hat Super-Kuh-Kräfte.

Der letzte Satz hat mich schon ein wenig Irritiert „Dieses APT hat Super-Kuh-Kräfte“. Super-Kuh-Kräfte? Ist damit etwa Root gemeint?

Als ob das noch nicht genug wäre, bin ich noch auf folgendes gestoßen:

martin@ldsrv:/$ apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...

Mal sehen was Aptitude dazu meint:

martin@ldsrv:/$ aptitude moo
In diesem Programm gibt es keine Easter Eggs.

… wenn man ein wenig mit dem Verbose Mode nachbohrt, bekommt man folgendes zu Gesicht:

martin@ldsrv:/$ aptitude -v moo
In diesem Programm gibt es wirklich keine Easter Eggs.
martin@ldsrv:/$ aptitude -vv moo
Habe ich nicht bereits erklärt, dass es in diesem Programm keine Easter Eggs gibt?
martin@ldsrv:/$ aptitude -vvv moo
Hör auf!
martin@ldsrv:/$ aptitude -vvvv moo
Okay, wenn ich Dir ein Easter Egg gebe, wirst Du dann aufhören?
martin@ldsrv:/$ aptitude -vvvvv moo
Gut, Du hast gewonnen.
 
                               /----\
                       -------/      \
                      /               \
                     /                |
   -----------------/                  --------\
   ----------------------------------------------
martin@ldsrv:/$ aptitude -vvvvvv moo
Was das ist? Natürlich ein Elefant, der von einer Schlange gefressen wurde.

Einfach toll diese Easter Eggs, wer nun als erster entdeckt, wie man in telnet Star Wars schaut, bekommt einen Keks von mir ;-)