Automatische Gitea Updates

Bereits im Januar dieses Jahres habe ich über meine Erfahrungen mit Gitea Updates berichtet. Das große Problem von Gitea ist, dass es sich nicht automatisch selbst aktualisiert. Ein Issue für das Problem ist schon seit fast 2 Jahren offen: https://github.com/go-gitea/gitea/issues/518#issuecomment-441742904

Ich hasse es wirklich, wenn sich eine sicherheitskritische Webanwendung nicht von selbst aktualisiert – das erlaubt Hackern ein leichtes Spiel. Vor vier Monaten habe ich nun schon die Entwicklung eines automatischen Gitea Update Skripts begonnen, welches ich nun vorstellen möchte.

Hinweise vor der Benutzung

Wie ich bereits erwähnt habe, bin ich kein Fan von manuellen Updates und schreibe deshalb für viele meiner Systeme Skripts zum automatischen Aktualisieren. Diese Programme sind schnell erstellt worden und auf meine Bedürfnisse angepasst und können unsauberen Code enthalten. Ich bin allerdings für Verbesserungsvorschläge in Form von Issues und Pull-Requests offen!

Manche Entwickler – wie der Ersteller von Kanboard – haben eine grundsätzliche Skepsis gegenüber automatischen Updates. Es gibt hierfür gute Gründe – du möchtest ja sicher nicht, dass deine Anwendung plötzlich aufgrund eines fehlerhaften Upgrades nicht mehr geht – deshalb empfehle ich automatische Upgrades nur, wenn auch automatische Backups eingerichtet sind.

Das Skript

Die veröffentliche Version meines Skripts kann auf GitHub gefunden werden: https://github.com/CMiksche/gitea-auto-update

Ich habe das Skript nur für mein Debian System entwickelt und getestet. Wenn das Skript einfach so auf Windows, MacOS oder Linux Systemen ohne Systemd ausgeführt wird, können Fehler nicht vermieden werden! Für diese Systeme muss das Skript definitv angepasst werden.

Wenn das Design von Gitea angepasst wurde, kann es sein, dass ein automatisches Upgrade dieses Template zerstört. Hierauf wird im Skript nicht geprüft.

Wie man mein Skript benutzt

Bitte zuerst die oberen Absätze lesen, ohne Beachtung dieser Hinweise kann es schnell in die Hose gehen!

Die Anwendung ist recht einfach:

  • Klone mein Skript auf das Zielsystem:
    git clone https://github.com/CMiksche/gitea-auto-update.git
  • Installiere requests:
    sudo pip install requests
  • Passe die Einstellungen in der settings.py Datei an
  • Führe den Befehl python updater.py aus, um das erste Upgrade zu testen
  • Wenn die Updates regelmäßig automatisch ausgeführt werden sollen, bearbeite die /etc/crontab Datei und rufe dort einen Aufruf des Skripts aus

So einfach geht das. Wenn du auf Probleme stößt, zögere nicht einen Issue oder Pull-Request auf Github zu erstellen oder hier einen Kommentar zu hinterlassen.

Diesen Beitrag habe ich auch auf Englisch veröffentlicht.

Gitea Update

Gitea ist im Grunde etwas wie GitHub, nur selbst gehostet. (Ähnlich zu GitLab nur nicht so intensiv im Verbrauch von RAM und CPU)

Gitea ist ein Fork von Gogs – allerdings mit einer offeneren Mentalität der Community als Gogs …

Nun verwende ich diese Software auf einem meiner Server und wollte es heute aktualisieren. Bei einer „normalen“ Anwendung klickt man dazu einfach auf einen Button wie „Update suchen“. Leider gibt es diesen Button bei Gitea aktuell nicht.

Was also tun?

Ich habe das gemacht, was man an der Stelle wahrscheinlich oft als Erstes macht: Googeln!

Google brachte mir das Ergebnis: https://geeklabor.de/archives/207-Gitea-source-update.html

Dieses Ergebnis brauchte mich aber nicht weiter, da ich nicht einmal die Programmiersprache Go auf meinem System installiert hatte … (Ich erwähne es hier trotzdem, vielleicht hilft es ja jemand weiter ….)

Die Lösung!

Ich hatte Gitea als Binary auf meinem Server installiert. Gitea bietet auf GitHub neue Versionen auch als Binary an.

Die Lösung war also recht einfach: Neue Binary mit wget ziehen, mit mv umbenennen, die Berechtigungen mit chmod und chown ändern und wie gewohnt ausführen!

Vor solchen Updates sollte man übrigens mit ./gitea dump eine Sicherung erstellen …

Piwik / WordPress Remote Update

Wie ich teilweise bereits auf meinem persönlichen Blog erwähnt habe, wurden von mir in letzter Zeit Python Scripts zum Aktualisieren von WordPress und Piwik über die Kommandozeile geschrieben.

Wenn man diese z.B.: als Cronjob laufen lässt, kann man von einem entfernten Gerät die Piwik- oder WordPress Instanz automatisch aktualisieren lassen.

Das ist in manchen Fällen recht nützlich.

Downloaden kann man die beiden Programme von GitHub, eine Installationsanleitung ist in der jeweiligen README.md Datei:

Bei Fehlern / Problemen kann gerne im jeweiligen GitHub Repo ein Issue erstellt werden.

Update: ForenSoftware 0.7

Heute habe ich die neueste Version meiner ForenSoftware (PHP-Script für das Erstellen eines Forums) veröffentlicht. Es wurden vor allem neue Funktionen hinzugefügt, die von so manchem User gewünscht wurden.

Wichtigste Neuerungen:

  • Automatische Suche nach Aktualisierungen
  • E-Mail-Aktivierung bei Registrierung (Im Admin-Bereich aktivierbar)
  • E-Mail bei Antworten auf das Thema an den Threadersteller
  • E-Mail bei neuen Nachrichten
  • E-Mail bei neuem Passwort
  • Besucherzähler

Diese Neuheiten werden wohl auch in der nächsten Version meines Content Management Systems (des WronnayCMS) zu finden sein.

Downloaden kann man die ForenSoftware hier: http://scripts.wronnay.net/?s=php&id=3

Eigentlich wollte ich solche Neuheiten ausschließlich auf der Webseite meiner ForenSoftware veröffentlichen, aber die existiert seit meinem Problem mit Dot.tk nicht mehr.

Anti Spam Updates + Tutorial

In meinen letzten Beitrag habe ich berichtet, dass ich ein SPAM-Problem hatte. Dieses habe ich jetzt beseitigt und gleich ein neues Script namens „AntiSpam NewsSystem“ zum Download bereitgestellt. Wie ich das angestellt habe, möchte ich in diesem Artikel erklären:

Zuerst sollte man wissen, dass SPAM-Autoren meistens keine Menschen, sondern Programme („Spambots“) sind, die das Web ähnlich wie Google durchsuchen und versuchen, in jeden Formular, dass sie finden, Werbung einzutragen. Dabei füllen die Spambots meistens typisch benannte Formulare aus, die man meistens ausfüllen muss (also z.B.: Email, Text, Betreff, Name, …). Das kann man sich zunutze machen, indem man ein Feld mit dem Namen „Email“ anlegt, den Besucher aber seine E-Mail-Adresse in das Feld „hallo“ eintragen lässt. Danach überprüft man, ob in das Feld „Email“ etwas eingegeben wurde und wertet es dementsprechend aus. Sollte das immer noch nicht funktionieren, überprüft man noch, ob Wörter wie „Viagra“ oder „Buy“ eingegeben wurden.

Hier meine Lösung:

Zuerst das HTML-Formular:

<form action="" method="post">
<p class="hallo"><input id="email" type="text" name="email" value="" size="60" /></p>
Kommentar schreiben:
<textarea class="li" name="comment" rows="5" cols="40"></textarea>
Ihr Name: <input class="li" type="text" name="name" />
<input class="lb" type="submit" name="submit" value="Kommentieren" />
</form>

Dann muss man noch per CSS die Class „hallo“ auf dispaly:none; setzen (So sehen die Besucher die Email-Abfrage nicht):

.hallo {display:none;}

Und abschließend wird mit PHP überprüft, ob etwas in das Feld „Email“ eingegeben wurde (der Besucher also ein Spambot ist):

<?php
  if(isset($_POST['submit']) AND $_POST['submit'] == "Kommentieren") {
	  if(isset($_POST['email']) && $_POST['email']) {
	  echo"<div class=\"fehler\">You are an SPAM-Bot!</div>";
	  }
      // hier dann noch der restliche Code...
  }
?>