Gitea automatisch aktualisieren
Hallo, hier ist der Inkompetente.
Auch heute habe ich wieder einen Tippfehler gemacht, aber ich lasse es so.
Grundsätzlich möchte ich, dass der Git-Server automatisch aktualisiert wird, da ich ihn nicht viel anfassen und mir keine Gedanken über den Betrieb machen möchte.
Es ist sowohl ein guter als auch ein schlechter Punkt von Gitea, dass Gitea als einzelnes Binärprogramm sowohl das Frontend als auch das Backend vereinfacht.
Daher muss ich nur das Binärprogramm herunterladen.
Wie man Binärdateien stabil speichert
Ich möchte also Binärdateien stabil speichern, und es scheint, dass ich sie von Releases erhalten kann. Releases · go-gitea/gitea · GitHub
Das heißt, es sieht so aus, als könnte ich die Download-URL von hier abrufen.
API aufrufen
Die Download-URL kann wie folgt abgerufen werden.
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'
Idealerweise möchte ich es hier mit jq weiter eingrenzen, aber wenn ich mir die key:value-Paare von json ansehe, scheint es nicht möglich zu sein, also bleibt mir nichts anderes übrig, als die gewünschte Binärdatei danach mit grep zu suchen. *1
*1 Nachdem hymkor (HAYAMA_Kaoru) · GitHub sagte, dass das nicht stimmen kann, erinnerte ich mich an die Zeit, als ich kürzlich bei der Arbeit jq verwendete, und konnte das Zielobjekt wie folgt extrahieren.
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '
Oder
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '
Es war also ein Fehler zu sagen, dass es nicht möglich ist (ups)
Den Rest betrachten Sie bitte als mein Geschwätz.
Also habe ich es so gemacht.
$ curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url' | grep linux-amd64$
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 171k 0 171k 0 0 291k 0 --:--:-- --:--:-- --:--:-- 291k
https://github.com/go-gitea/gitea/releases/download/v1.23.4/gitea-1.23.4-linux-amd64
Unterschied zur aktuellen Version
Es wäre eine Verschwendung von Traffic, jedes Mal eine neue Binärdatei zu platzieren, daher muss dies hier entschieden werden.
Am einfachsten wäre es, die aktuelle Gitea-Version zu überprüfen und sie mit grep -qi zu suchen.
$ gitea -v | awk '{printf $3}'
1.22.4
Dies wird in einer Variablen gespeichert.
Fertigstellung
Also ist es so geworden.
#!/bin/bash
# give me root
BINARY_URL=$(curl https://api.github.com/repos/go-gitea/gitea/releases/latest |\
jq -r '.assets[].browser_download_url' |\
grep linux-amd64$ )
NOW_GITEA_V=$(gitea -v | awk '{printf $3}')
DAEMON_RESTART="service gitea restart"
if ! echo $BINARY_URL | grep -qi $NOW_GITEA_V ; then
wget -O gitea $BINARY_URL
chmod +x gitea || exit 2
mv gitea /usr/local/bin/gitea
$DAEMON_RESTART
else
exit 0
fi
Wenn dies in die Crontab von root eingefügt wird, sollte es als regelmäßiges Skript ausgeführt werden.
Da es bei einem Fehler bei chmod mit exit 2 beendet wird, ist es unwahrscheinlich, dass es zu einem seltsamen Verhalten kommt.
Ich fühle mich selbst unzulänglich, da ich Gitea benutze, obwohl ich sage, dass es zu reichhaltig ist.