HTTPS für Gogs aktivieren

Nach der Installation von Gogs läuft dieses standardmäßig über unverschlüsseltes HTTP. Um dies zu ändern muss die app.ini welche sich im Verzeichnis gogs/custom/conf/ befindet bearbeitet werden:

nano app.ini

In der Sektion Server welche für gewöhnlich so aussieht:

[server]
DOMAIN = example.org
HTTP_PORT = 3000
ROOT_URL = http://example.org:300/
DISABLE_SSH = false
SSH_PORT = 22
OFFLINE_MODE = false

müssen einige Änderungen vorgenommen werden. Die Schlüssel PROTOCOL, CERT_FILE und KEY_FILE werden hinzugefügt und die ROOT_URL angepasst. Danach sollte die Server-Sektion in etwa so aussehen:

[server]
DOMAIN = example.org
HTTP_PORT = 3000
PROTOCOL = https
ROOT_URL = https://example.org:300/
CERT_FILE = custom/https/cert.pem
KEY_FILE = custom/https/key.pem
DISABLE_SSH = false
SSH_PORT = 22
OFFLINE_MODE = false

Nachdem die Konfiguration gespeichert wurde muss das passende Zertifikat erzeugt werden:

cd custom
mkdir https
cd https
./gogs cert -ca=true -duration=8760h0m0s -host=example.org

Damit ist Gogs nach einem Neustart des Service per HTTPS und damit verschlüsselt erreichbar.

Gogs unter Linux betreiben

Möchte man Git-Repositories auf einem Ubuntu-Server hosten, so ist das schnell erledigt. Wenn etwas mehr Komfort aller GitHub gewünscht ist, so sollte man sich Gogs anschauen. Gogs steht dabei für Go Git Service. Wie der Name andeutet handelt es sich um einen komplett in Go geschriebenden Git-Service. Im ersten Schritt muss Git auf dem Server installiert werden:

apt-get install git

Nachdem Git installiert ist, muss der für Gogs verwendete Nutzer angelegt und in diesen gewechselt werden:

useradd -m gogs
su gogs
cd

Danach kann das Gogs Binary heruntergeladen:

wget https://github.com/gogits/gogs/releases/download/v0.6.15/linux_amd64.zip
linux_amd64.zip
unzip linux_amd64.zip

und anschließend entpackt werden. Nachdem man mittels cd in den Ordner gogs gewechselt ist, kann gogs gestartet werden:

./gogs web

Damit wird ein Webserver auf Port 3000 gestartet. Mit dem Aufruf der passenden URL im Browser (z.B. http://example.org:3000) öffnet sich die Installationsroutine von Gogs.

Die Installationsroutine von Gogs

Die Installationsroutine von Gogs

In der Routine wird die gewünschte Datenbank eingestellt und einige weitere Punkte konfiguriert. Die Installationsroutine erstellt eine app.ini im Verzeichnis custom/conf/. Dort können die Optionen später geändert werden. Damit Gogs automatisch startet – wird der Nutzer verlassen und ein Initscript angelegt, an die Konfiguration angepasst und zu den automatisch startenden Prozessen hinzugefügt:

cp /home/gogs/scripts/init/debian/gogs /etc/init.d/gogs
nano /etc/init.d/gogs
chmod +x /etc/init.d/gogs
update-rc.d gogs defaults

Damit sollte sich der Service über:

service gogs start

starten lassen. Bei mir führt das allerdings zu dem Problem das der Service angeblich gestartet wird, aber trotzdem nicht läuft. Wird der Service manuell per:

sh -x /etc/init.d/gogs start

gestartet funktioniert er ohne Probleme – hier ist noch der entsprechende Fehler zu finden.

[–] in Manpages

Manpages sind eine der praktischen Dinge auf einem Linux und Mac OS X System. Mit Hilfe des Kommandos man ist es möglich für ein Shellkommando sich die entsprechende Handbuchseite anzuzeigen. In einer solchen Manpage werden unter anderem die Parameter für ein Kommando erklärt. Dies kann dann z.B. so aussehen:

git submodule [--quiet] status [--cached] [--recursive] [--] [<path>…]

Eine Kleinigkeit irritierte mich bis vor kurzem immer an der Syntax zur Beschreibung der Parameter. Es taucht immer der Parameter:

[--]

auf. Wenn man sich in einem entsprechenden Dokument der IEEE zu dieser Syntax umschaut, so wird diese Unklarheit beseitigt. Dort wird unter Guideline 10 erklärt:

The argument — should be accepted as a delimiter indicating the end of options. Any following arguments should be treated as operands, even if they begin with the ‚-‚ character. The — argument should not be used as an option or as an operand.

Damit wird klar das die Syntax zur Trennung der Option von den folgenden Operanden dient. Sie findet bei der Nutzung eines Kommandos keine Anwendung, sondern ist nur für den Leser der Beschreibung gedacht.

Wartungsmodus einer ownCloud-Installation aufheben

Wenn man ein Upgrade bei einer ownCloud-Installation durchführt, so wird die entsprechende Installation in den Wartungsmodus versetzt.

ownCloud im Wartungsmodus

ownCloud im Wartungsmodus

Unter Umständen kann es passieren, das der Wartungsmodus nach dem Upgrade nicht mehr deaktiviert wird. In diesem Fall muss der Wartungsmodus manuell deaktiviert werden. Dazu muss die Datei config.php, welche sich im Verzeichnis config befinden geöffnet werden. In dieser Datei findet sich der Eintrag:

'maintenance' => true,

Der Wert von maintenance muss dabei auf false gesetzt werden und die Datei gespeichert werden. Danach ist der Wartungsmodus wieder deaktiviert.

Fehlersuche mit „git bisect“

In größeren Projekten arbeiten meist mehrere Entwickler an einem Git-Repository. Und wie es bei der Software-Entwicklung nun einmal ist kommt es ab und an zu Fehlern. Bei einer komplexen Versionshistorie ist es allerdings schwierig den Ursprungscommit eines Fehlers zu finden. An dieser Stelle hilft das Git-Kommando bisect weiter. Zum Start muss Git mitgeteilt werden welcher der letzte (aus Sicht des Entwicklers) korrekt funktionierende und der erste fehlerhafte Commit ist. Dies geschieht im Terminal auf dem Repository mittels:

git bisect start
git bisect good <hash>
git bisect bad <hash>

Danach checkt bisect einen Commit aus. Dieser Commit muss nun auf den gesuchten Fehler überprüft werden. Ist der Fehler weiterhin vorhanden, so teilen wir dies Git mittels:

git bisect bad

mit. Ist der Fehler nicht mehr vorhanden, so teilen wir Git dies ebenfalls mit:

git bisect good

Dieser Prozess wird dabei so lange durchlaufen bis Git uns am Ende des Prozesses mitteilt, in welchem Commit der Fehler seinen Ursprung hat. Danach können wir uns den Commit notieren und bisect mittels:

git bisect reset

mitteilen das der Prozess zu einem Ergebnis geführt hat. Dadurch wird das Repository in seinen Ursprungszustand versetzt.