Dockerimage für GHC7.8 und GHC7.6

Ich habe heute ein Dockerfile für GHC7.8 bzw. GHC7.6 mit Cabal 1.20.0.1 auf Ubuntu 14.04 (LTS) geschrieben. Die Dockerfiles selbst liegen auf Github und die Images werden per „trusted builds“ automatisch ins Docker Index hochgeladen (GHC7.8, GHC7.6).

Aufbauend auf diesem Image kann man nun zum Beispiel Dockerfiles für seine eigenen Haskell-Projekte schreiben. Ich zeige das kurz an einem Beispiel, dem funblog.

FROM agrafix/ghc7.6
MAINTAINER mail@agrafix.net
RUN git clone https://github.com/agrafix/funblog.git
RUN cd funblog && cabal install --only-dependencies
RUN cd funblog && cabal build
RUN rm -rf /funblog/blog.cfg
ADD blogConfiguration.cfg /funblog/blog.cfg

EXPOSE 8080
CMD ["/funblog/dist/build/funblog/funblog"]

Das Image kann man dann mit

docker build -t 'agrafix/funblog' .

bauen, wobei man eine Datei blogConfiguration.cfg im gleichen Verzeichnis benötigt. (Vorlage dafür ist auf github) Danach kann man den Blog mit

docker run -p 8080:8080 -d agrafix/funblog

starten und unter

http://localhost:8080

aufrufen.

 

Linux: Einfaches Backup-Script

Heute möchte ich mein einfaches „Backup-Script“ für Linux-Rechner vorstellen. In meinem Szenario muss ich eine MySQL-Datenbank und ein paar Verzeichnisse sichern. Die Sicherungskopie möchte ich dann verschlüsseln und auf einen anderen Rechner laden.

Zunächst logge ich mich auf dem Rechner ein, auf dem ich Daten sichern will. Wenn ich noch keinen öffentlichen SSH-Schlüssel habe, lege ich einen neuen an (kein Passwort für den Schlüssel vergeben!):
ssh-keygen -t rsa

Diesen kopiere ich dann auf den Rechner, der die Sicherungskopien speichern soll:
ssh-copy-id benutzer@backup.agrafix.net

Nun lege ich eine neue Datei an, die den Verschlüsselungsschlüssel enthält:
openssl rand -base64 512 > key.txt

Jetzt zum eigentlichen Script:

#!/bin/bash

today=$(date +"%Y_%m_%d")

# CONFIG
mail="mail@agrafix.net"
keyFile="$HOME/key.txt"
backtarget="benutzer@backup.agrafix.net:a01/${today}.tar.gz"
backup=( "$HOME" "/var/www" )
mysqlUser="mysqluser"
mysqlPass="mysqlpass"
mysqlDb=( "mysqldb" )
# END CONFIG

dir=`mktemp -d`
target="/tmp/${today}_back.tar.gz"

for db in "${mysqlDb[@]}"
do
    echo "Backing up mysql to ${dir}/${db}.sql to ${db}.sql"
    mysqldump -u $mysqlUser -p"$mysqlPass" $db > "${dir}/${db}.sql"
done

for d in "${backup[@]}"
do
    backupName=${d////_}
    echo "Backing up ${d} to ${backupName}.tar.gz"
    tar --ignore-failed-read -f "${dir}/${backupName}.tar.gz" -cz $d
done

echo "Compressing everything to ${target}"
tar cfz - $dir | openssl enc -aes-256-cbc -kfile $keyFile -e > $target

echo "Done. Now uploading ${target} to backup machine ${backtarget}"
scp "${target}" "${backuptarget}"

echo "Deleting local backup"
rm -f $target
rm -rf $dir

echo "Sending email"
echo "Backup complete! ${today}" | mail -s 'Backup completed' $mail

echo "Okay! :-)"

Um ein Backup wieder einzuspielen, muss die entsprechende .tar.gz Datei zurück kopiert werden, und kann dann mit

openssl enc -in $1 -kfile key.txt -aes-256-cbc -d | tar -zxvf -

entpackt werden.

 

Linux: Prozess im Hintergrund starten

Hallo,

ich wurde gestern gefragt wie man mit Linux ein Prozess im Hintergrund startet. Hier nun die Antwort:

Um einen Prozess über die Linux Konsole im Hintergrund zu starten reicht es ein „&“ an das Ende eines Kommandos zu hängen – dies würde dann beispielsweise bei einem python-script so aussehen:

python /home/agrafix/cleanup.py &

Nun bekommen wir aber das Problem, das der Prozess weiterhin die Ausgaben in die gleiche Konsole schreibt. Um dies zu unterbinden können wir die Ausgabe einfach umleiten:

python /home/agrafix/cleanup.py 2> /dev/null > /home/agrafix/output.txt &

Hier werden Fehler nach /dev/null umgeleitet und Ausgaben nach /home/agrafix/output.txt geschrieben.

Um nun ein Programm welches im Hintergrund läuft zu beenden muss man die ProzessID wissen. Diese wird übrigens ausgegeben wenn man ein Prozess erfolgreich im Hintergrund gestartet hat. Wenn man die Prozess-Id nicht weiß, kann man sie mit pidof erfahren:

pidof python

Nun bekommt man die ProzessID zurückgegeben. Um den Prozess jetzt zu killen kann man wie folgt verfahren:

kill -9 [prozessID]

Ich hoffe ich konnte euch weiterhelfen 😉

 

Internet Explorer 5.5 on Linux?

Guten Morgen 🙂

Wärend ich mal wieder die Zugriffstatistiken meines Blogs checkte, welche durch das Plugin „CyStats“ erstellt werden, machte das Tool mir klar das ein Linux-User meinen Blog mit dem IE5.5 aufruft. Geht das überhaupt? Erstmal ein wenig gegooogled und entdeckt das es zB per Wine geht. Ob es jetzt ein Fehler im Plugin ist oder wirklich so war sei mal dahingestellt – aber wenn es wirklich so war: Ist es wirklich erstrebenswert unter Linux mit dem IE5.5 zu surfen? Naja… 😛

Hier noch ein Screenshot (draufklicken zum Vergrößern):

IE5.5 on Linux

IE5.5 on Linux

– Agrafix