Gitea 🍵

Vorwort zu Git

Git ist das mittlerweile marktbeherrschende Versionsverwaltung Tool. Die grobe Idee ist es, Zustände von verschiedenen Versionen des Quellcodes zu verwalten. Ein Git Tutorial wäre für einen Blog Post aber zu lang, darum verweise ich hier mal auf ein paar gute Quellen. Die erste ist eine gute YouTube Einsteiger Reihe, zu finden unter: Git und Github Tutorials Deutsch. Das zweite ist das ausführliche Handbuch, dies gibt es unter: Pro Git Buch.

Eine weitere Eigenschaft von Git ist es, ein verteiltes System zu sein. Es besteht die Möglichkeit, das jeder sein eigenes Repository eröffnet und dies mit anderen Repositorys abgleicht. In der Regel hat man aber ein Zentralen Server auf dem das Hauptrepository abgelegt wird. Häufig verfügen diese Server noch über eine einfache Web UI, um Interaktionen mit dem Repo zu erleichtern. Der wohl größte Vertreter dieser Art von Software ist wohl Github. Weitere sind Gitlab und Gitea.

Meine Vorgeschichte mit Gitea 🕰️

Der erste Dienst, den ich auf meinem Home Server installiert habe, war nun also ein Gitea.

Es ist schlank, verbraucht wenig Ressourcen und die Web Oberfläche sieht auch gut aus. Also Ideal für mich. Meine erste Installation von gitea bestand aus einem LXC Container mit Alpine Linux. Mit dem Paketmanager von Alpine ließ sich das Paket gitea einfach installieren. Da ich nun eine homogene Serverlandschaft anstrebe, sprich alle Server sollen mit Debian 11 auf LXC laufen. Musste nun der Alpine Container weichen.

Es stand mir jetzt die Migration meines Git Server bevor. Leider pakettiert gitea seine Software nicht für Debian. Die Installation ist somit ein wenig schwieriger als unter Alpine. Gitea selbst ist in Golang geschrieben und es wird ein static link Binary zur Verfügung gestellt. Dies kann gedownloadet werden, doch der Rest muss vom Admin selbst angepasst werden.

Installation von Gitea unter Debian

Hier gebe ich die Installation unter Debian schemenhaft an:

Update und “Dependencys”:

apt -y update
apt -y install git vim bash-completion

Benutzer hinzufügen:

adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/gitea \
   gitea

Downloaden und nach /usr/local/bin verschieben:

curl -s  https://api.github.com/repos/go-gitea/gitea/releases/latest | grep browser_download_url  |  cut -d '"' -f 4  | grep '\linux-amd64$' | wget -i -

Rechte verändern und umbenennen:

chmod +x gitea-*-linux-amd64
mv gitea-*-linux-amd64 /usr/local/bin/gitea

Ordner für Files anlegen:

mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chown gitea:gitea /var/lib/gitea/{data,indexers,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
chown root:gitea /etc/gitea
chmod 770 /etc/gitea

Systemd Unit File erstellen:

vim /etc/systemd/system/gitea.service

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
RestartSec=2s
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

Systemd gitea Service starten:

systemctl daemon-reload
systemctl enable --now gitea
systemctl status gitea

Zusätzliche Rechte für Gitea Ist wichtig da der Dienst sonst nicht startet.

setcap 'cap_net_bind_service=+ep' /usr/local/bin/gitea

Migration

Die Migration umfasste zwei Teile ein Backup der Daten und ein Backup der Datenbank Die Daten waren hauptsächlich der Repos, die auf den neuen Server kopiert werden mussten. Gegebenenfalls müssen noch Linux Rechte angepasst werden, falls sich der User der Gitea ausführt, geändert hat.

Ich hatte auch noch den Fall, daß ich git hooks anpassen musste, da sich das Verzeichnis in dem Gitea liegt verändert hat. Hierfür folgenden Command benutzen:

grep -r "/usr/bin/gitea" . | cut -d : -f1 | xargs sed -i 's#/usr/bin/gitea#/usr/local/bin/gitea#g' 

Die Datenbank war ein SQLite, diese ließ sich auch anstandslos dumpen und wieder einspielen.

Abschließend kann man sagen, die Migration war schwieriger als erwartet aber kein Hexenwerk. Ich bin zufrieden, daß ich nun ein Gitea mir Debian 11 unter der Haube besitze. 😄