Navigation Logo der Webseite
Logo von gohugo.io

Wechsel auf HUGO (Teil 2)

Veröffentlicht am von in Querbeet

So, nachdem nun einige Zeit ins Land gegangen ist, gibt es heute mal ein Update zur Umstellung des Systems für diese Seite. Ich habe nach einer Möglichkeit gesucht, die Veröffentlichung eines neuen Artikels so weit wie möglich zu automatisieren — und bin fündig geworden!

Die Ausgangssituation

Installiert Go für Windows und ruft einfach der Reihe nach die gegebenen Befehle auf – achtet auf die richtige Kommandozeile und ein sinnvoll gewähltes Verzeichnis, aus dem ihr aufruft!

Für eine sehr ausführliche Einleitung in die Versionskontrolle mit Git empfehle ich euch die (englischen) Tutorials von atlassian.com, mir haben sie geholfen!

Was ich getan habe

Das Ziel ist schnell umrissen: Mit dem git push origin master aus dem lokalen Repo soll die Seitenaktualisierung ohne weitere Befehle ablaufen. Was ist dafür nötig?

  1. Go für Windows installieren
  2. Hugo für Windows neu bauen aus der Quelle
  3. Go davon überzeugen, auch unter Linux lauffähige Dateien zu erzeugen
  4. Hugo für Linux neu bauen aus der Quelle (unter Windows)
  5. Anpassungen auf der DiskStation
  6. Automatisierung mit dem post-receive-Hook

Go für Windows

Auf der Download-Seite von Golang die aktuelle Version des Windows-Installationspakets (aktuell go1.6.2.windows-amd64.msi) herunterladen und installieren (Standardeinstellungen beibehalten!). Sollte eine frühere Installation vorhanden sein, vorher entfernen über „Programme hinzufügen oder entfernen“ im Startmenü.

Nach erfolgreichem Absolvieren des Assistenten, sollte noch der Ordner C:\GoPath angelegt werden. Anschließend sind noch die Umgebungsvariablen anzupassen. Unter „System“ in der Systemsteuerung die „Erweiterten Systemeinstellungen“ aufrufen, dann unter „Umgebungsvariablen…“ neue Systemvariablen anlegen:

Damit sollte Go voll funktionsfähig sein. Zum testen könnt ihr in einer neu geöffneten Kommandozeile go env eingeben, wenn ihr etwas anderes seht als die Meldung, dass der Befehl go unbekannt oder falsch geschrieben ist, soll das für den Moment mal ausreichen.

Hugo aus der Quelle aufbauen für Windows

Mit der eben installierten Umgebung ist es nun ein Kinderspiel, eine neue hugo.exe mit dem aktuellen Entwicklungsstand zu generieren. Auf der Seite von spf13 steht noch einiges mehr dazu.

go get -u -v github.com/spf13/hugo
Listing 1: Hugo für Windows unter Windows bauen.

Das Ergebnis ist eine ausführbare Datei, zu finden unter C:\GoPath\bin\hugo.exe. Damit ist nun für die lokale Entwicklung mit hugo server die aktuelle Version fertig, ein kurzer Check mit hugo version sollte ein „BuildDate“ liefern, dass der aktuellen Uhrzeit entspricht.

Go-Programme für Linux kompilieren (unter Windows)

Nun gibt es bestimmt irgendwie die Möglichkeit, die DiskStation davon zu überzeugen, Go-Programme zu kompilieren. Da das vorhandene Linux aber stark eingeschränkt ist, greifen wir auf die Möglichkeit zurück, auch unter Windows Dateien erzeugen zu können, die unter Linux lauffähig sind (Stichwort Cross-Compiling).

Dafür besorgen wir uns zunächst die aktuellen Quelldateien von Go, indem wir das entsprechende git-repo klonen und dann die Arbeitskopie auf den Stand der letzten als stabil gekennzeichneten Version bringen (hier go1.6.2). Anschließend wechseln wir in das src-Verzeichnis und bauen mit Hilfe des schon installierten Go ein neues - das dann Dateien für Linux mit i386-Architektur bauen kann (also z. B. für die DS415+).

Zum Abschluss noch die notwendigen Tools nachinstallieren, die sonst den Bau von Hugo erfolgreich verhindern.

git clone https://go.googlesource.com/go cd go git checkout go1.6.2 cd src GOROOT_BOOTSTRAP="C:\Go" GOOS=linux GOARCH=386 CGO_ENABLED=0 ./make.bat go get -u golang.org/x/sys/unix
Listing 2: Go ermöglichen, unter Windws für Linux zu bauen.

Hugo aus der Quelle aufbauen für Linux (unter Windows)

Wir sind so weit. Holen wir uns die aktuellen Quell-Dateien vom Hugo-Projekt mittels git clone. Ordner wechseln, Abhängigkeiten einbringen und Hugo mit dem Hinweis des Zielsystems erneut kompilieren.

git clone https://github.com/spf13/hugo cd hugo go install github.com/spf13/hugolib GOOS=linux GOARCH=386 CGO_ENABLED=0 ./Makefile
Listing 3: Hugo für Linux unter Windows bauen.

Das liefert nun eine unter Linux-i386 ausführbare Datei, zu finden unter LOCALREPOS\hugo\hugo. Für die Windows-Nutzer: Die Datei hat keine Endung! Diese Datei an eine geeignete Stelle auf der DiskStation kopieren (darauf achten, dass der Ordner von den dort gesetzten Systemvariablen (path) erwischt werden oder ggf. noch hinzufügen. Der Aufruf von hugo version auf der DiskStation sollte nun wiederum ein „BuildDate“ mit der aktuellen Uhrzeit liefern.

DiskStation: Funktionsumfang anpassen für Pygments

Wir gehen mal davon aus, dass über den Paketmanger in der Weboberfläche der DiskStation schon Python installiert wurde. Dann über SSH einloggen und mit folgenden Befehlen zuerst den Paketmanager pip und damit dann Pygments installieren.

sudo python -m ensurepip sudo pip install --upgrade pip sudo python -m pip install Pygments
Listing 4: pip und Pygments auf der DiskStation installieren.

Der erste Versuch pip über die get-pip.py zu installieren ist schief gegangen mit dem Fehler ValueError: invalid literal for int() with base 10: '20-2014'. Die Recherche zu diesem Fehler brachte mich dann zu der funktionierenden Lösung oben.

Neben dieser notwendigen Erweiterung für hugo ist es auch nötig, einen FTP-Client zu installieren, der über die Kommandozeile arbeitet. Die Wahl fiel wegen des großen Funktionsumfangs (wer weiß schon, was man mal noch damit machen möchte) auf lftp. Installieren geht dank ipkg sehr flott von der Hand: sudo ipkg install lftp.

post-receive-Hook anpassen

Der Pfad zu hugo muss absolut angegeben werden, sonst wird der Befehl nicht gefunden (womit der Upload abbricht, sind ja keine Daten da!).

#!/bin/sh # generate tmp-dir and checkout current master branch mkdir ../tmp-123 GIT_WORK_TREE=../tmp-123 git checkout -f cd ../tmp-123 # generate the website /opt/bin/hugo # create file for call of lftp touch tmp-ftp cat > tmp-ftp << EOF open ftp://USER:PASSWORD@SERVER:PORT lcd public mirror -R -n --parallel=5 EOF # run lftp to upload contents lftp -f ./tmp-ftp echo UPLOAD COMPLETE # clean up behind you rm -rf ../tmp-123
Listing 5: Inhalt der Datei /hooks/post-receive im Server bare-repo.

Zum weiterlesen die Quellen: