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)

Welche "Sozialen Netze" nutzt Ihr?

Aus purer Neugierde:

Welche "Sozialen Netze" nutzt Ihr und wie häufig nutzt Ihr sie?

Ich habe unter Kontakt einmal eine Auflistung versucht und scheitere daran, sie aktuell zu halten.

Hier Liste ich mal die Dienste auf, die ich nutze. Die Reihenfolge entspricht der "gefühlten" Häufigkeit der Nutzung:

Google+

Twitter

GNU Social

Facebook

Instagram

LinkedIn

Xing

Ankündigungen neuer Blogartikel landen automatisch bei Twitter, LinkedIn und Xing; manuell sende ich sie an Google+ und GNU Social.

Wenn ich mal Bilder poste, dann bei Instagram mit automatischer Weiterleitung an Twitter und Facebook.

Wie sieht das bei Euch aus?

Und, was mich auch interessieren würde, ist, ob Ihr die gleichen Inhalte in alle Netzwerke postet.

DigitalOcean ...

Ich habe schon viel von DigitalOcean gehört, unter anderem - aber nicht ausschliesslich - im sehr hörenswerten Podcast Gitminutes.

Nachdem ich jetzt gelesen habe, dass die Firma ein Rechenzentrum in Frankfurt eröffnet, denke ich, dass ich mir das einmal anschauen könnte.

Deployment einer virtuellen Maschine in 55 Sekunden, alles auf SSD-Speicher klingt wirklich interessant. So schnelle klicke ich mir selbst zu Hause keine extern erreichbare virtuelle Maschine zusammen.

Abgerechnet wird im Stundentakt der Existenz der virtuellen Maschine, das bedeutet, auch ausgeschaltete Maschinen kosten Geld. Man kann aber einen Snapshot erstellen, diesen sichern und die virtuelle Maschine dann löschen, damit entstehen keine weiteren Kosten.

Mich reizt die API und die Möglichkeit "mal schnell" eine virtuelle Maschine zu erzeugen, eine Arbeit durchzuführen (beispielsweise ein Repack von grossen Git-Repositories, einen OpenVPN-Server) und sie danach wieder zu zu löschen. Das alles geht automatisiert, ich muss nur noch herausfinden, wie.

Über diesen Refcode bekommt Ihr 10 USD zum Spielen (solltet Ihr jemals mehr als 25 USD Umsatz machen, würde ich auch 25 USD gut geschrieben bekommen). Da auf Stundenbasis abgerechnet wird, kommt man schon mit 10 USD relativ weit, die kleinste Maschine (512 MB Memory, 1 Core Processor, 20 GB SSD Disk, 1 TB Transfer) kann damit zwei Monate laufen und die grösste Maschine (64 GB Memory, 20 Core Processor, 640 GB SSD Disk, 9 TB Transfer) immerhin noch 10.5 Stunden.

Blogparade Webspace-Inventar ...

An Blogparaden habe ich ja schon hundert Jahre nicht mehr teilgenommen. Ein Grund mehr, es mal wieder zu tun.

Christoph fragte: Was ist auf deinem Webspace installiert?

Zuerst einmal die sichtbaren Dienste:

Schon sehr lange kommt Serendipity als Blogsoftware zum Einsatz. Über die Vorzüge habe ich schon viel geschrieben. Das möchte ich hier nicht ausrollen.

Piwik sorgt für die Nutzerstatistik.

Wenn einmal ein Wiki gebraucht wird, hilft DokuWiki.

Yourls ist ein URL-Verkürzungsdienst, mit dem ich beispielsweise d5e.org/technik auf eine statische Seite hier im Blog umleite.

Intern oder auf Einladung:

Tiny Tiny RSS ist mein Feedreader, auch darüber habe ich hier schon einiges geschrieben.

Mit Kanboard plane ich private Projekte. Das Tool ist gut und die Aussage des Programmierers "No fancy technologies, we don't care about the last hipster framework" finde ich auch klasse. Minimalistisch, schnell und gut (steht nicht im Weg).

Den "Datenspeicherdienst" ownCloud muss ich auch nicht weiter erklären, oder.

Roundcube ist mein Webmailer.

Auf dem Serendipity-Treffen habe ich mich von Adminer überzeugen lassen. Das Ding ist rasend schnell und nicht nur für MySQL / MariaDB geeignet.

Für Show your Places hätte ich gerne eine aktuellere Alternative. Hiermit kann man Karten auf OpenStreetMap-Basis erstellen.

Ausgemustert, nicht aufgrund mangelnder Qualität, sondern, weil ich sie nicht mehr benötige:

Trac, Projekttool mit Wiki, Quellcode-Browser und Ticket-System.

Etherpad Lite, kollaborativer Editor.

Sticky Notes als Pastebin.

Firtz, Podcast-Publishing.

phpMyAdmin, Datenbankverwaltungstool.

Horde Groupware Webmail Edition, Mail, Kalender und mehr.

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.