Drift/Gitea
Gitea er en tjeneste vi bruker for å oppbevare og dele kode. Du kan bruke den som et alternativ til GitHub eller IDI GitLaben. Den kjører på Maskiner/bekkalokk og er tilgjengelig på https://git.pvv.ntnu.no
Kildekode
https://git.pvv.ntnu.no/Drift/pvv-nixos-config/src/branch/main/hosts/bekkalokk/services/gitea
Web-endepunkt
Selve nettsiden blir hostet gjennom en nginx som revers-proxy på Maskiner/bekkalokk, som de fleste andre tjenester. Nginx håndterer TLS og sertifikater, og sender dermed ukryptert HTTP trafikk til gitea gjennom en UNIX socket.
SSH
Gitea kjører en intern SSH server.
Dette gjør det litt enklere å håndtere tilganger og sandboxing på NixOS,
men resulterer også i at SSH-serveren på kjøre på en annen port enn den vanlige SSH serveren,
og for tiden (april 2024) kjører den på port 2222
.
Dette kan gi litt rare URIs for upstreams, som ssh://gitea@git.pvv.ntnu.no:2222/bruker/prosjekt.git
Bruker-sync skript
Ettersom Gitea kjører på nixos, og vi ikke har fått satt opp et ordentlig bruker-sync system enda (april 2024), så har vi et python-skript som er schedulet som en systemd-timer (et cron alternativ). Dette skriptet henter passwd fila på Maskiner/Microbel, parser alle linjer, og lager og modifiser gitea-brukere gjennom gitea's REST API.
CI
På Maskiner/bekkalokk er det satt opp 3 instanser av gitea-act-runner. Disse bruker podman til å lage docker-lignende containere for å kjøre pipelines i en sandbox.
Database-operasjoner
Noen ting er enklest å endre på direkte i databasen. Databasen til Gitea kan du finne på postgres-serveren (finnes på Maskiner/Bicep idet jeg skriver). Først må du logge deg in som rot, og så kjøre psql som rot, og koble til gitea databasen
$ sudo -u postgres psql postgres=# \c gitea You are now connected to database "gitea" as user "postgres". gitea=#
Heretter kan du gjøre endringer. Her er et par endringer vi har utført gjennom tidene.
Legg til mail for bruker
Kan være nyttig når du importerer et repo og brukeren har laget masse commits med en annen email enn den som er registrert i gitea
SELECT id FROM public.user WHERE name = 'oysteikt'; 1234 INSERT INTO email_address(uid,email,lower_email,is_activated,is_primary) VALUES (1234,'oysteikt@example.com','oysteikt@example.com','1','0');
Slå av repo_units (actions, projects, releases, etc) for gruppe med repoer
Se liste over repo_unit typer her: https://github.com/go-gitea/gitea/blob/7bb38358114ef7f55ee9f56838df74f1dda969aa/models/unit/unit.go#L22-L33
DELETE FROM repo_unit WHERE repo_id IN (SELECT id FROM repository WHERE owner_name = 'oysteikt') AND type in (5, 6, 7, 8, 9);
Oppdater innstillinger for email-notifikasjoner for alle brukere
UPDATE public.user SET email_notifications_preference = 'onmention' WHERE email_notifications_preference = 'enabled';