Skip to content

Globales gitignore ...

Wenn man Dateien aus der Versionskontrolle mit git ausschliessen möchte, kann man im Repository eine Datei .gitignore anlegen. Das ist sinnvoll, wenn es Dateien gibt, die in nur einem Repository ausgeschlossen werden sollen.

Anders ist es, wenn man Backupdateien des Editors ausschliessen möchte. Da in der Regel mehrere Menschen an einem Projekt arbeiten und vielleicht sogar jeder einen anderen Editor benutzt, ist es sinnvoller, dass jeder die Dateien ausschliesst, die seinem Editor entsprechen.

Dazu kann mit dem folgenden Kommando die globale Variable core.excludesfile gesetzt werden, die einen Dateinamen beinhaltet, in der die globalen Ausschlusskriterien zu finden sind.

git config --global core.excludesfile ~/.gitignore_global

Bei mir enthält sie derzeit nur:

*~

Das sind die Backupdateien von vim.

Umrechnung Timestamp mit Perl ...

Weil ich es neulich gebraucht habe.

Aufgabe ist es, Zeiten eines normalen Datums in einen Unixtimestamp und wieder zurück umzurechnen. Nebenbedingung, es dürfen nur Bordmittel verwendet werden und laufen sollte es bitte unter Linux und Solaris. (Unter Solaris ist im Standard kein GNU date aus den GNU coreutils installiert, sonst wäre es einfach).

Meine Lösung war, Perl zu benutzen.

Einzig das Datumsformat ist unschön, vom Monat muss eins abgezogen werden und vom Jahr 1900.

$ perl -mTime::Local -e 'print Time::Local::timelocal(0,0,12,23,04-1,2015-1900)'
1429783200

Und der Rückweg:

$ perl -e 'print scalar localtime(1429783200)'
Thu Apr 23 12:00:00 2015

Wenn Ihr bessere Ideen habt, dann nur her damit.

Willkommen Debian Jessie ...

debian

Am gestrigen Sonntag wurde Debian 8.0, Codename "Jessie" veröffentlicht.

Neben der üblichen Versionspflege ist die vermutlich grösste Änderung die umstrittene Umstellung von System-V-Init auf Systemd (ich persönlich begrüsse das sehr).

Die weiteren Änderungen sind zu zahlreich, um sie in einem kurzen Blogartikel zu beleuchten, das haben andere bereits erledigt. Es lohnt sich in jedem Fall ein Blick in die (auch in deutscher Sprache erhältlichen) Releasenotes oder dem Artikel bei Pro-Linux.

Wer die Informationen gerne in Form von Slides haben möchte, wird bei Michael Prokop fündig (PDF) oder kann sich die "Folien" (HTML) von Axel anschauen.

Ich freue mich sehr darüber, dass sich das LTS-Modell durchsetzt. LTS steht für Long Term Support und in Debian dafür, dass die Version fünf Jahre lang mit Sicherheitsupdates versorgt wird. Die Seite LTS im Debian-Wiki klärt über das "wie" auf.

Performanceuntersuchungen ...

Aus aktuellem Anlass muss ich noch einmal auf Bandbreite und Latenz herumreiten und vielleicht noch hinzufügen, dass auch die Anzahl der Anfragen durchaus eine Rolle bei Performance-Betrachtungen spielt.

Wir hatten hier auf einem System massive Performance-Probleme und ich habe relativ schnell herausgefunden, dass ein bestimmter User und von diesem ein bestimmter Prozess für einen grossen Teil der Festplattenlast verantwortlich ist.

Der Applikationsbetreuer war der Meinung, dass das nicht sein könne, da der Teil der Applikation kaum bzw. nur sehr wenig schreibt. Das stimmt, er hat wirklich nicht viel geschrieben, aber dafür wenige Bytes und diese sehr häufig. Das hat die IO-Queue gefüllt und weitere Zugriffe blockiert.

Einige Zeit später hat der Betreuer einfach mal den Prozess beendet und siehe da, die Performance der übrigen Komponenten war sehr hoch.

Lehre, die man daraus ziehen sollte: Glaubt keinem Applikationsbetreuer!

Nein, im Ernst: Es ist wichtig, dass man genau weiss, was eine Applikation tut und noch wichtiger ist es, Performance nicht alleine am Durchsatz fest zu machen. Latenz und Anzahl der Requests spielen ebenfalls eine Rolle.

Cloudprovider ...

Nach meinen wirklich sehr guten Erfahrungen mit DigitalOcean, interessiert mich, welche bezahlbaren Cloudprovider Ihr kennt und womit Ihr Erfahrung habt. Mich interessiert vor allem IaaS (Infrastructure as a service).

Für die einzelnen Begrifflichkeiten verweise ich auf diesen Artikel hier oder den Cloud-Computing-Artikel in der Wikipedia.

Amazon EC2

DigitalOcean

Google Compute

JiffyBox (in Deutschland)

Linode

Microsoft Azure

Rackspace

teutoStack (in Deutschland)

Tiny Tiny RSS update daemon und systemd ...

Um den update daemon von Tiny Tiny RSS unter systemd (CentOS 7) auch bei einem Serverneustart direkt verfügbar zu haben, habe ich das unten stehende Unitfile geschrieben, vielleicht hilft es auch Euch.

Man kann von systemd halten, was man möchte, ich finde es aber deutlich eleganter als System V Initskripte.

[Unit]

Description=Tiny Tiny RSS update daemon

After=network.target mariadb.service

Requires=mariadb.service

[Service]

User=apache

Group=apache

WorkingDirectory=/⁠var/⁠www/⁠html/⁠ttr

Type=simple

StandardOutput=null

StandardError=syslog

ExecStart=/⁠usr/⁠bin/⁠php ./⁠update_daemon2.php

PrivateTmp=true

InaccessibleDirectories=/⁠home /⁠root /⁠boot /⁠opt /⁠mnt /⁠media

ReadOnlyDirectories=/⁠etc /⁠usr

[Install]

WantedBy=multi-⁠user.target

Einfach nach /lib/systemd/system/ttrss-update.service kopieren und mittels systemctl daemon-reload einlesen (den Befehl muss man auch ausführen, wenn man das Skript manuell ändert).

Testen mit

systemctl start ttrss-update
systemctl status ttrss-update

und, wenn alles erfolgreich war mit dem folgenden Befehl aktivieren:

systemctl enable ttrss-update

Git swapped beim Packen ...

Von Zeit zu Zeit lohnt es sich Git-Repositories neu zu packen oder den Müll weg zu bringen (mittels "garbage collection, der Befehl ist git gc).

Auch beim Auschecken oder Klonen von grossen Repositories packt Git neu.

Da ich mit den Standard-Einstellungen regelmässig ware Swap-Orgien erlebt habe, lohnt es sich, die Ressourcen für Git zu begrenzen.

In der Standard-Einstellung benutzt Git pro Core und Hyper-Threading je einen Thread. Da Hyperthreading keinen "echten Prozessor" zur Basis hat, steht aufgrund vieler Kontextwechsel das System nahezu still. Ein System mit zwei Kernen und Hyperthreading wird von Git mit vier Threads konfiguriert und jedem Thread steht im Standard der komplette Arbeitsspeicher zur Verfügung.

Das ist ein bisschen viel. Und die folgenden Konfigurationsoptionen begrenzen das ein wenig.

git config --global pack.threads 2
git config --global pack.windowMemory 1073741824

git config --global pack.depth 250
git config --global pack.window 250

Die genaue Beschreibung der einzelnen Optionen lassen sich auf der git-config-Manpage nachlesen.

Das Repack-Skript auf der oben verlinkten Webseite hat sich damit natürlich auch verändert.

#!/bin/bash

case $(uname) in
    "Linux")
        renice -n 19 -p $$
        ionice -c 2 -n 7 -p $$
        ;;
    "SunOS")
        renice -n 19 -p $$
        ;;
esac

start_directory=$PWD
for i in $(find ${start_directory} -name '.git' -type d); do
    du -hs ${i}/..
    cd ${i}/..

    git gc
    git repack -a -d

    du -hs ${i}/..
    echo
done

Dieses Skript ist Teil meines littlehelpers-Repositories auf GitHub.

News+ und Tiny Tiny RSS ...

android

News+ ist ein kostenpflichtiger, aber dafür vielleicht auch der beste, Feedreader für Android. Nicht zuletzt, weil es auch eine freie Tiny Tiny RSS Extension gibt, mit der das Lesen von Tiny Tiny RSS Inhalten lokal auch Spass macht.

Apropos Spass, damit die gelesen/ungelesen Status mit Tiny Tiny RSS synchronisiert wird, muss das entsprechende Plugin auf der Serverseite installiert und aktiviert werden.

Einrückungen in vim ...

Wenn man viel mit vi(m) arbeitet, lohnt es sich auch über eine eigene ~/.vimrc nachzudenken. Wenn man auf sehr vielen Systemen arbeitet, hilft es, die eigenen Ergänzungen "klein" zu halten.

Ich mache es mir da leicht und kopiere die Muster-vimrc.

cp $(find /usr/share/vim -name vimrc_example.vi) ~/.vimrc

und ergänze die folgenden Zeilen.

" Dirk

set mouse=

syntax enable

set tabstop=4

set softtabstop=4

set shiftwidth=4

set expandtab

"

Für die Bedeutung der einzelnen Punkte verweise ich einmal auf die sehr ausführliche Hilfe in vi(m) (Beispielsweise :help tabstop). Wichtig ist nur, dass durch den letzten Punkt aus Tabs Leerzeichen gemacht werden.

:retab! sorgt dafür, dass alle Tabs und Leerzeichen der kompletten geöffneten Datei entsprechend den Regeln umformatiert werden.

Die folgenden Kommandos arbeiten auf Textblöcken, also mal mit 1G in die erste Zeile springen und dann mit VG den kompletten Dateiinhalt markieren.

> rückt alles um eine Ebene ein.

< rückt alles um eine Ebene aus.

= formatiert den kompletten markierten Text nach Regeln des Dateityps um (einfach mal ausprobeieren).

Feedly Theme für Tiny Tiny RSS ...

Einer der grössten Kritikpunkte an Tiny Tiny RSS - neben der Tatsache, dass der Hauptentwickler ein Arctrl-wctrl-ww sozial schwierig ist - ist das Aussehen.

Christian Grube hat mich bei Google+ schon vor Monaten auf dieses wirklich hervorragende Theme für Tiny Tiny RSS hingewiesen, ich kann es nur empfehlen:

Das Feedly-Theme für Tiny Tiny RSS.

Der Screenshot ist aus diesem Forenthread.

nice und ionice ...

linux

Ein kleiner Shorty für alle, die Last intensive Dinge mit ihren Linux-Maschinen anstellen müssen und den eigentlichen Betrieb so wenig wie möglich einschränken wollen.

Mit nice bzw. renice kann man die Priorität eines Prozesses bezogen auf die CPU beeinflussen und mit ionice kann man das gleiche auch in Bezug auf I/O tun.

Wenn man die folgenden Befehle in ein Skript schreibt, werden alle Kommandos und Kindprozesse des Skriptes mit niedrigst möglicher Priorität ausgeführt.

renice -n 19 -p $$
ionice -c 2 -n 7 -p $$

(ionice -c 3 -p $$ gibt dem Prozess nur dann I/O, wenn kein anderer Prozess I/O anfordert).

Die beiden obigen Befehle kann man natürlich auch in der aktuellen Shell (interaktiv) ausführen.

Bloonix Screencasts ...

bloonix

Jonny hat die ersten Screencasts von Bloonix online gestellt.

Momentan gibt es erst zwei. Der eine zeigt die Installation der Serverkomponente von Bloonix auf CentOS 7, der andere die Installation auf Ubuntu 14.04 LTS.

Rückmeldungen jederzeit gerne hier in die Kommentare oder besser noch im Forum.

Taskwarrior 2.4.2 ...

taskwarrior

Der Frühling kommt, die neuen Programmversionen auch ... am Sonntag erschien Taskwarrior 2.4.2.

Spannend ist das neue Feature context, damit kann man eine Sammlung von Schlagworten (Tags) verwenden, um einen Arbeitszusammenhang herzustellen. So kann beispielsweise der Kontext "Arbeit" alle Aufgaben enthalten, die entweder das Etikett (Tag) "Büro" oder "Freiberuflich" enthalten.

Das "info" Kommando zeigt jetzt auch "virtual tags" an.

Tuning ...

centos

Wie bereits geschrieben, musste ich ein wenig tunen.

In der ersten Stufe habe ich einige Datenbankparameter angepasst und in der zweiten Stufe die Datenbankinhalte bereinigt.

Wenn man ein Monitoringsystem - in meinem Fall Bloonix (gibt es übrigens auch in der Open-Source-Variante zum selber hosten) - benutzt, kann man sehr schön den Erfolg feststellen (die Webseite wird von extern aufgerufen).