Simples deployment via git

Das Problem

Egal ob Homepage, Konfigurationsdateien oder Programmcode: Für praktisch alle Projekte verwendet man heute git.

Möchte man jedoch Versionen automatisch ausrollen (z.B. statische HTML Dateien einer Webseite), benötigt man einige Skripte oder einen Build-Dienst wie z.B. Gitlab-CI, Jenkins oder CircleCI.

Oftmals reicht es jedoch die Daten auf das Zielsystem zu kopieren. Aber auch das geht mit git:

Verteilen von Paketen

Ausgangssituation

Wie haben einen Server (für die Homepage), einen Laptop (für die Entwicklungsarbeit), sowie ein Git-Projekt (z.B. bei Github).
Auf Github befindet sich unser Projekt.
Auf Laptop wie auch auf dem Server haben wir uns mit git clone das Projekt eingerichtet.

Vorgehen

Das Projekt auf dem Server soll beim Empfangen neuer Dateien diese auch in das "Working Directory" schreiben. Dies aktivieren wir mit :

# auf Server, im Projektverzeichnis
git config receive.denyCurrentBranch updateInstead

Nun müssen wir unserem Projekt auf dem Laptop das neue Ziel beibringen:

# auf Laptop, im Projektverzeichnis
git remote add deploy benutzer@servername:/pfad/zu/projektordner/auf/server
# jetzt noch sagen: schiebe den lokalen branch _master_ auf den server (nur 1 mal notwendig)
git push --set-upstream deploy master

Unsere Änderungen können wir weiterhin zu Github schieben:

git push origin

Aber nun auch neu: Auf dem Server direkt ausrollen:

git push deploy

Es ist sogar möglich mittels push-url mehrere Ziele auf einmal zu definieren.

Fazit

Natürlich ersetzt unser kleiner Workflow keinen Build-Server oder ausgetüftelte Deployment Prozesse. Aber für Kleinst-Projekte kann das vorgehen mit updateInstead sehr praktisch sein.

Aber Achtung: Verwenden wir diese Möglichkeit um Webseiten zu versionieren: Nicht vergessen, den .git Ordner nicht auszuliefern.

Dateien finden mit fd

Das Tool find ist ein praktisches Programm und Dateien und Ordner zu finden.
Find kann aber auch komplexere Aktionen wie z.B. mehrere Dateien konvertieren. Leider ist es jedoch nicht allzu einsteigerfreundlich.

Hier kommt fd ins Spiel:

Das Open-Source Programm erledigt nahezu alle Aufgaben von find, ist aber einfacher zu bedienen.

LPs

Beispiel1

Finde alle Dateien mit der Zeichenfolge schuh im Namen:

find:

find . -iname '*schuh*'

fd:

fd schuh

Beispiel 2

Finde alle .jpg Dateien:

find:

find . -iname '*.jpg'

fd:

fd -e jpg

Beispiel 3

Finde alle .png Dateien und konvertiere diese in .jpg Dateien:

find:

find ./ -name '*.png' -exec bash -c 'convert $0 ${0/png/jpg}' {} \;
# Konvertiert eine nach der anderen Datei

fd:

fd -e png -x convert {} {.}.jpg
# Konvertiert parallel mehrere Dateien auf einmal

Fazit:

Wer find in- und auswendig beherrscht hat keinen Zwang zu wechseln. Der bequeme Syntax von fd macht das Leben jedoch leichter. Die Möglichkeit parallel mehrere Dateien zu verarbeiten ist ungemein praktisch. Daher ist fd für jeden Kommandozeilen-Fan absolut empfehlenswert.

SD Karte beschreiben mit „flash“

Um einen Raspberry Pi in Betrieb zu nehmen, ist es notwendig eine SD Karte mit einem Betriebssystem zu beschreiben.
Dabei ist es in der Regel nicht mit einem einfachen Datei kopieren getan.

Unter Windows bietet sich Win32 Disk Imager an,
unter macOS das Tool ApplePi Baker und unter Linux nutzt man einfach dd.

SD Speicherkarte

Nun wünscht man sich bei häufiger Nutzung ein einfaches Kommandozeilentool, dass diese Aufgabe komfortabel übernimmt.

Genau das erledigt das Tool flash.
Das in bash geschrieben Werkzeug ist schnell installiert:

curl -O https://raw.githubusercontent.com/hypriot/flash/master/$(uname -s)/flash
chmod +x flash
sudo mv flash /usr/local/bin/flash

Wie in der Installationsanleitung auf Github zu sehen, sind noch optionale Abhängigkeiten auf einige Tools zu installieren (u.a. curl, pv, unzip).
Nach erfolgreicher Installation durch den Paketmanager des Vertrauens, können Raspberry Images geschrieben werden:

flash jessie-light.zip

Dabei übernimmt flash das entpacken (bzw. Download) der Datei und fordert den Benutzer anschließend auf, die SD Karte einzulegen. Nach Identifizieren des Speichermediums braucht man lediglich selbiges zu bestätigen und der Schreibeprozess beginnt.

Zum Abschluss des Ganzen werden auch alle Dateisystem ausgehängt und die Speicherkarte kann in den Raspberry Pi wandern.

Für mich ist flash das Werkzeug zum Schreiben von SD Karten geworden.
Minimalistisch, komfortabel und einfach zu handhaben erleichtert mit das kleine Helferlein den Alltag.

Kommandozeile mit FZF

Wer viel auf der Kommandozeile/Shell arbeitet, lernt im Lauf der Zeit einige nützliche Tools und Tastaturkürzel kennen.
So stöbert man in bash bzw. zshmit Ctrl+R in der Eingabe-History, sucht mit find Dateien in einem gegeben Pfad - und so weiter und so fort.

Ein nützliches Helferlein, welches die beiden Aktionen (und mehr) beschleunigt
ist fzf:

Read more "Kommandozeile mit FZF"

Wget wiederaufnehmen

Beim Download großer Dateien (z.B. Iso-Images, Podcasts) ist es oft hilfreich einen bereits begonnenen Download weiterführen zu können.

Mit dem Download-Werkzeug wget ist dies einfach mit der Kommandozeilenoption -r möglich.

Damit man jedoch nicht immer daran denken muss, lässt sie dies auch als Standardverhalten einstellen.

Hierzu tragen wir die die Datei ~/.wgetrc folgendes ein:

continue = on

Ab sofort nimmt wget Downloads automatisch wieder auf.

Myrepos: Alle meine Repositories

Repository-Zentrale

Dank VCSH habe ich all meine Dotfiles hübsch in Git-Repositories verpackt.
Das Einbinden eines einzelnen Repositories geht nun zwar schnell von der Hand,
aber wenn nun für vim und mutt und emacs und und und ... lauter
Repositories vorliegen wird es unbequem.
Auch das updaten (pull) jedes einzelnen Repos ist sehr mühselig und damit
fehleranfällig.

Abhilfe schafft hier myrepos (kurz mr),
dass es erlaubt Aktionen auf mehreren Repositories auszuführen.

Read more "Myrepos: Alle meine Repositories"

OS X Keyboard Layout

Das Problem

Als Entwickler nutze ich stetig Sonderzeichen und Symbole wie {, ] oder auch `.

Doch welches Tastaturlayout soll ich einsetzen?
Zwar ist ein englisches Tastaturlayout sehr attraktiv, da dort sämtliche Sonderzeichen gut erreichbar sind. Als Entwickler im deutschsprachigen Raum benötige ich jedoch ständig Umlaute und das ß-Zeichen.

Read more "OS X Keyboard Layout"

Shift Lock sinnvoll nutzen

Shift-Lock

Die Shift-Lock Taste alias "Feststelltaste" ist für die meisten Menschen ein Ärgernis und
Relikt aus der Zeit der Schreibmaschinen.

Doch anstatt die Taste zu deaktivieren oder gar auszubauen kann die Taste auch gut für andere
Zwecke verwendet werden.

Ich habe die Shift-Lock Taste auf die "Ctrl" (Steuerung) Taste gemappt, was Shortcuts wie Ctrl+C in vim deutlich attraktiver macht

So gehts

Read more "Shift Lock sinnvoll nutzen"