Wechsel des Blog Systems von Serendipity nach Octopress

Geschrieben von Eric Scheibler am 06.01.2013

Bisher hatte ich einen Serendipity Blog betrieben. Vor kurzem entschied ich mich dann, zu Octopress zu migrieren. Im folgenden werde ich auf die Vorteile von Octopress eingehen, die Konvertierung der bisher verfassten Artikel schildern und schließlich noch eine kurze Einführung in das bloggen mit Octopress geben.

Vorteile von octopress:

  1. Die Beiträge können in Markdown Syntax verfasst werden. Es gibt einige Interpreter, ich habe mich für Kramdown entschieden (hauptsächlich wegen der Code - und Tabellentags). Einen Überblick über die Kramdown Syntax gibts hier.
  2. Die Artikel liegen nicht mehr in einer Datenbank sondern als einfach Textdateien vor. Das erleichtert das Backup und Handling enorm.
  3. Octopress ist ein statisches Blog System. Das heißt, der gesamte Blog liegt auf meinem Notebook, wird nach einer Änderung gebaut und anschließend auf den Webserver übertragen. Da dort nun nur noch statische HTML Seiten liegen, wird die Performance und Sicherheit der Seite erhöht.
  4. Das Blog ist in Ruby geschrieben und beruht auf Jekyll. Das bedeutet, dass man, Ruby Kenntnisse vorausgesetzt, ziemlich einfach neue Plugins erstellen oder das Theme verändern kann.

Bisherige Artikel aus dem Serendipity Blog exportieren

Dafür hab ich einen Migrator gefunden, der schon viel Arbeit abnimmt:

cd /tmp/
wget "https://github.com/joschi/jekyll/archive/s9y_migrator.zip"
unzip s9y_migrator.zip
cd jekyll-s9y_migrator/lib/jekyll/migrators
ruby -r './s9y_rss.rb' -e 'Jekyll::S9Y.process("http://www.eric-scheibler.de/blog/rss.php?version=2.0&all=1")'

Unter der Bedingung, dass der RSS Feed beim alten Blog funktioniert, hat man schon mal alle Artikel importiert. Da sie bei mir allerdings noch einige HTML Codes beinhalteten, schrieb ich ein kleines Shell Skript zur Konvertierung:

#!/bin/bash

for f in $(ls -1A "$1"); do
    contents=$(cat "$1/$f")
    contents=$(echo -e "$contents" | sed "s/<span class=\"code\">/\n{% codeblock %}\n/g")
    contents=$(echo -e "$contents" | sed "s/<\/span>/\n{% endcodeblock %}\n/g")
    contents=$(echo -e "$contents" | sed "s/<br \/>//g")
    contents=$(echo -e "$contents" | sed "s/<ul>//g")
    contents=$(echo -e "$contents" | sed "s/<\/ul>//g")
    contents=$(echo -e "$contents" | sed "s/<li>/* /g")
    contents=$(echo -e "$contents" | sed "s/<\/li>//g")
    contents=$(echo -e "$contents" | sed 's/<a href="\(.*\)">\(.*\)<\/a>/\[\2\](\1)/g')
    contents=$(echo -e "$contents" | sed "s/<h2>/## /g")
    contents=$(echo -e "$contents" | sed "s/<\/h2>/ ##/g")
    contents=$(echo -e "$contents" | sed "s/<h3>/### /g")
    contents=$(echo -e "$contents" | sed "s/<\/h3>/ ###/g")
    contents=$(echo -e "$contents" | sed "s/&gt;/>/g")
    contents=$(echo -e "$contents" | sed "s/&amp;/&/g")
    contents=$(echo -e "$contents" | sed "s/&lt;/</g")
    contents=$(echo -e "$contents" | sed "/s9y_link.*/d")
    contents=$(echo -e "$contents" | sed "/permalink.*/d")
    echo "$contents" > "$1/$f"
done
exit 0

Aufruf:

./convert_serendipity_articles.sh _posts

Leider kommt man um eine manuelle Nachkontrolle der einzelnen Beiträge trotzdem nicht herum.

Installation und Nutzung des Blog Systems

Die Installation wird in der Octopress Dokumentation bereits ausführlich beschrieben. Daher gehe ich darauf nicht weiter ein.

Hat man die Installation abgeschlossen, die _config.yml Datei angepasst und das standard Theme gewählt, legt man einen neuen Beitrag folgendermaßen an:

rake new_post["Titel"]

Wenn man den Blog wie ich in einem Unterverzeichnis hosten möchte, muss man das Dokument Root Verzeichnis anpassen (siehe hier):

rake set_root_dir[/blog]

und die URL in der _config.yml Datei um das Unterverzeichnis erweitern.

Nach dem bauen des Blogs schiebe ich ihn mittels Rsync und SSH auf den VServer, welcher meine Webseite hostet, siehe dieser Abschnitt der Octopress Doku.

Dazu ist es nötig, sich passwortlos auf dem VServer einloggen zu können. Also SSH Key erstellen und auf den VServer schieben:

ssh-keygen -b 4096 -C "VServer SSH key" -f ~/.ssh/vserver -t rsa
scp ~/.ssh/vserver.pub USER@example.com:~/.ssh/authorized_keys

Den anschließenden Buildprozess habe ich mit diesem Alias in meiner ZShell Config Datei (~/.zshrc) noch vereinfacht:

alias blogupdate='cd $HOME/Dokumente/octopress && rake generate && sleep 3 && rake deploy'