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.

 

GHC 7.6.3 auf Ubuntu 12.04 installieren

Eine Kurzanleitung für’s installieren von GHC-7.6.3, cabal und darcs auf Ubuntu 12.04 (64-Bit):

Zunächst der GHC:

sudo apt-get install gcc libgmp3-dev curl
curl -O http://www.haskell.org/ghc/dist/7.6.3/ghc-7.6.3-x86_64-unknown-linux.tar.bz2
tar -xjvf ghc-7.6.3-x86_64-unknown-linux.tar.bz2 
cd ghc-7.6.3
./configure
make install

Dann cabal:

sudo apt-get install zlib1g-dev 
curl -O http://hackage.haskell.org/packages/archive/cabal-install/1.16.0/cabal-install-1.16.0.tar.gz
tar -xzvf cabal-install-1.16.0.tar.gz
cd cabal-install-1.16.0
sh bootstrap.sh

Dann in der .cabal/config die Zeile „jobs“ auskommentieren.

cabal update
cabal install cabal-install

Dann noch darcs:

sudo apt-get install ncurses-dev libcurl4-gnutls-dev
cabal install darcs
 

Ubuntu: Apache2 nicht bei Systemstart starten

Wer kennt das nicht: apache2 ist auf einer Ubuntu Kiste installiert, man möchte es aber nicht ständig laufen haben (weil man zB einen anderen WebServer verwendet). Folgende Befehle helfen weiter:

Apache2 stoppen:

/etc/init.d/apache2 stop

Apache2 Autostart deaktivieren:

sudo update-rc.d -f apache2 remove
 

How-To: Automatisches MySQL Dump FTP-Backup

Hallo,
da bei vielen Anwendungen nicht nur Dateien sondern auch Datenbanken wichtig sind, ist es auch enorm wichtig diese mitzusichern. Eine einfache Möglichkeit um MySQL Datenbanken in der Shell zu sichern ist es, einen MySQL Dump anzulegen. Das geht schnell und einfach – mit diesem Tool kann man einzelne Datenbanken und ganze Server sichern und wiederherstellen.
Das per Hand zu machen wäre eine Heidenarbeit, ein Cronjob ist deshalb eine enorme Entlastung.
Gerne hat man aber mehrere Datenbanksicherungen zur Verfügung, falls ein Fehler in dem Dump vorliegt und dieser irreperabel ist. Es ist also intelligent mehrere Dumps hochzuladen und sie nach dem aktuellen Datum + evtl. dem DB-Namen. Für das Datum gibt es in der Shell ‚date‘. Mit date kann das Datum in verschiedenen Formaten ausgegeben und bspw. in einer Variable abgespeichert werden. Um das dann schließlich auf einen FTP-Server hochzuladen, benötigen wir zum Autoeinloggen einen Eintrag in der ~/.netrc. Dann können wir einfach mit wput den Dump hochladen. Auf meinem Ubuntu System ist wput standardmäßig nicht installiert, wir können es aber ganz einfach mit ’sudo apt-get install wput‘ nachinstallieren.

Um uns das ganze zu vereinfachen und nicht jedes Mal die ganzen Befehle einzugeben, erstellen wir ein einfaches Shell-Script.
Da wir per wput im Script hochladen und während des Vorgangs nichts eingeben können, immerhin ist es automatisiert, benötigen wir die erwähnte ~/.netrc. In ihre konfigurieren wir die Login Dateien.
~ steht immer für das Homeverzeichnis des angemeldeten Users. In meinem Fall ist das /home/dominic/. Heißt also die File ist in Wirklichkeit /home/dominic/.netrc
Im Normalfall ist diese leer. Hier schreiben wir den Host-, Loginnamen und das Passwort rein:

machine: ftp.domain.com
login: LOGIN
password: PASSWORD

Die richtigen Rechte sind 600. Die setzen wir mit “ chmod 600 ~/.netrc“.
Danach ist es uns möglich, ohne Password oder Login auf dem FTP Server, hier ftp.domain.com, einzuloggen.

Da wäre nur noch das eigentliche Script. Hier ist es einfach mal schnell runtergeschrieben, die Erklärung erübrigt sich dank der Kommentare.
Vorweg: Bei mysqldump ist es enorm wichtig, dass Passwort direkt und ohne Leerzeichen hinter -p zu schreiben, sonst kommt ein Syntax Error.

#!/bin/sh
#MySQL-Dump Backupscript

#Schreiben des aktuellen Datums im Format DD.MM.YYYY in eine Variable
today=$(date +%d.%m.%Y)

#Erstellen eines MySQL Dump einer einzelnen Datenbank
mysqldump –database DBNAME -u USER -pPASSWORD

#Falls nicht vorhanden wird wput installiert
apt-get install wput

#Hochladen des Dumps
wput $today ftp://ftp.domain.com

Zum Schluß kommt noch der Cronjob.
Dazu editieren wir die Crontabelle mit „crontab -e“

55 23 * * * sh /PFAD/ZUM/SCRIPT.sh

Wenn ihr alles richtig gemacht habt, dann startet jeden Tag um 23:55 Uhr ein Cronjob, der einen MySQL-Dump der von euch ausgewählten Datenbank macht.

Fehler oder Anmerkungen bitte in die Kommentare schreiben!

Nachtrag:

Wenn ihr euren Dump nicht nur nach dem aktuellen Datum benennen wollt, sondern z.B. auch nach der Datenbank, so könnt ihr den Namen einfach an „date +%d.%m.%Y“ hängen. Beispiel: „date +%d.%m.%Y-bthost.sql“ gibt 12.08.2010-bthost.sql aus. Außerdem könnt ihr die Darstellung des Datums auch variieren, schaut dazu am besten in die Man-Page von date.

 

Was ist Virtualisierung

Seit Mitte letzten Jahres beschäftige ich mich intensiv mit Virtualisierung. Es fing mit der Virtualbox an und ist derzeit bei zwei Xen Servern auf denen verschiedene Windows Server Versionen laufen. Damit teste ich Desktop Virtualisierung. Als IT-Schüler bekomme ich kostenlosen Zugriff auf die meisten MS Systeme.
In der Zeit haben mich viele Freunde gefragt, was eigentlich Virtualisierung ist und wer so einen Mist braucht.

Es gibt noch heute in der IT-Welt ein großes Problem: Viele Applikationen wollen unterschiedliche Systeme: Warenwirtschaftssysteme erwarten irgendein Windows, Webserver sind aber gerne auf einem Linuxkernel. Da ist immer das Problem, dass man zwei Server braucht, Hard- und Softwareseitig. Das ist teuer und uneffizient. Zwei Server fressen den doppelten Strom, benötigen doppelte Kühlung, haben die doppelten Anschaffungskosten und langweilen sich.
Dagegen hilft Virtualisierung.
Der sogenannte Hypervisor, das ist die Virtualisierungssoftware, setzt entweder direkt auf der Hardware auf (z.B VMware ESXi) oder ist ein normales Program in einem bereits installierten Betriebssystem (z.B. VMware Server, Virtualbox). Dieser Hypervisor teilt die Hardware auf. Mit ihm ist es möglich, aus einem Hostsystem mit beispielsweise einem vier Kern Prozessor, 16GB RAM und einer Terrabyte Festplatte zwei Server mit je zwei Kernen, 8GB RAM und 500GB Festplatten Speicher. Jede Kombination ist möglich. Wieviele verschiedene virtuelle Maschinen möglich sind, hängt vom Hypervisor und der, falls vorhanden, Lizenz ab.

Der Hypervisor teilt einen realen Host also in mehrere virtuelle Guests auf. Es ist also möglich, mehrere Betriebssysteme auf ein und der selben Hardware zu installieren. Jeder Guest kann ein eigenes Betriebssystem bekommen. So können zum Beispiel das genannte Warenwirtschaftssystem und der Webserver friedlich nebenher laufen.
Ein weiterer Vorteil ist auch, dass die Server ganz einfach auf einen neuen Host umziehen können. Dazu müssen, wenn überhaupt, die Guests nur exportiert werden und auf dem neuen Host wieder importiert werden. Voraussetzung dafür ist nur, dass der Hypervisor entweder der gleiche ist, oder ein Konverter verfügbar ist.
Es gibt neben der herkömmlichen Server Virtualisierung mittlerweile auch Applikationen- oder Desktopvirtualisierung.
Bei der Applikationenvirtualisierung wird für den Benutzer kein ganzer Server virtualisiert, sondern nur eine einzelne Applikation wie z.B. Word. XenApp von Citrix ermöglicht das.
Die Desktopvirtualisierung stellt dem Benutzer einen eigenen Desktop zur Verfügung. Der Benutzer kann sich über einen Miniclienten auf seinen eigenen Desktop verbinden. Das ist mit einem Terminalserver vergleichbar, allerdings hat der Benutzer hier einen komplett eigenen Desktop und nicht nur eine Sitzung. Das ermöglicht XenDesktop ebenfalls von Citrix. Hierzu werdet ihr bald aber mehr erfahren.
Das neumodische Cloudcomputing basiert ebenfalls auf Virtualisierung. Hier ist es wichtig Hardware immer an den derzeitigen Bedarf angepasst zur Verfügung zu stellen. Virtualisierung eignet sich dafür natürlich hervorragend. Voraussetzung dafür ist ein Hardwarepool.

 

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 😉

 

VMware ESXi 4

Hallo,
grade hab ich für BTHost auf unserem Hetzner Server ESXi installiert, nachdem ich es ja schon gestern für BattleFright gemacht habe.
Hat super geklappt, ein schönes System, sogar die Netzwerkconfigs waren spielend einfach gemacht. Endlich kein Rumgebastle mehr mit VMware Server 2. Gut, das ist dann jetzt auch 15 € im Monat teurer (Flexi-Pack), dafür klappt das gut, das Flexi-Pack hätte ich sowieso bald gebraucht.
Connecten kann man leider nur unter Windows, dafür braucht man den „VMware vSphere Client 4.0“, der auch schön einfach zu bedienen ist.
Sonntag zieht BTHost dann endlich wieder auf den Server, dann sollten alle Probleme gelöst sein.
Dann setz‘ ich auch mal, wenn ich denn dann noch Zeit habe, einen ESXi in einer VM auf, damit ihr euch das mal ansehen könnt. Ist quasi ein Betriebssystem nur auf virtualisierung ausgelegt, ähnlich wie Xen.
Xen wollte ich nicht benutzen, ich bin VMware gewohnt und wechsle nur ungerne etwas, das schon funktioniert.

Wünsche allen einen guten Rutsch ins neue Jahr!
Fragen könnt ihr ruhig stellen.

 

Linux Teil 1

Hallo,
ab heute veröffentlichen wir nach und nach unsere Tutorial Reihe zu Linux, die euch in die Welt der kostenlosen Unix-Kopie einführen soll. In dem ersten Teil erkläre ich euch die Unterschiede der verschiedenen Distributionen und welche für euch die richtige ist. Fangen wir direkt an:

OpenSUSE
OpenSUSE ist eine von Novell gegründete Distribution, die bekannt dafür ist, sehr Anfänger freundlich zu sein.
Die Installation ist sehr einfach gehalten, die automatische Partitionierung der Festplatte klappt gut, auch das Installieren neben Windows ist gut. Als Standarddesktop ist KDE ausgewählt, aber Gnome oder XFCE sind auch auswählbar. Ein großer Punkt, warum gerade Anfänger zu OpenSUSE greifen sollten, ist das Programm Yast. Mit ihm ist es gerade zu spielend einfach, alles zu konfigurieren.

Ubuntu
Ubuntu wird von Canonical entwickelt und auch veröffentlicht. Es ist mittlerweile die beliebteste Distribution.
Aufgebaut auf Debian, enthält sie das nützliche Paketverwaltungs-Programm apt-get. Es lässt sich einfach installieren, sogar schneller als OpenSUSE, benutzt als Desktop Gnome (Kubuntu hat standardmäßig KDE, muss allerdings separat geladen werden) und hat, genau wie OpenSUSE, eine große Auswahl an Software.

Debian
Es gibt kaum Unterschiede zwischen den verschiedenen Distributionen. Debian ist da anders. Debian ist die letzte verbliebene „Instanz“ der freien Software. Als einzige wirklich komplett von der Community geleiteten Distribution, herrscht kein Gedanke nach Umsatzsteigerung oder ähnlichem in der Entwicklung. Anders als bei Ubuntu oder OpenSUSE erscheinen die Versionen sehr unregelmäßig. Der Spruch „It’s done when it’s done“ (dt.: „Es ist fertig, wenn es fertig ist.“) wurde von den Debianentwicklern geprägt und tatsächlich war es auch so: Debian veröffentlichte Versionen erst, wenn alles auf der ToDo List fertig war, das Release-Datum konnte also nie genau bestimmt werden. Damit ist jetzt aber Schluss. Zumindest einen ungefähren Release Datum wollen die Entwickler in Zukunft angeben. Aber zurück zum Thema. Debian halte ich am wenigsten für Einsteigertauglich. Die große Anpassbarkeit ist zwar schön und gut, aber für Umsteiger fehlen dann eben doch vorinstallierte Programme oder ähnliches.

Das war es dann auch schon mit dem ersten Teil.
Live CDs zu den Distributionen sind hier erhältlich, das ist die beste Methode um das richtige für sich zu finden:
http://software.opensuse.org/112/de“>http://software.opensuse.org/112/de
http://www.ubuntu.com/
http://www.debian.org/CD/http-ftp/