Skip to content

Podman - Forgejo Server aufsetzen

Angeheftet Podman
  • Vorwort

    Ich habe mir mal am Karnevalswochenende vorgenommen, mir ein wenig Podman, als Docker Ersatz, näher zu bringen. Es war fordernd 🙂

    Mein Plan ist es einen Forgejo Server aufzusetzen. Die Dienste sollen alle als Podman Container laufen. Dafür brauche ich

    • Forgejo
    • Postgres
    • Nginx

    Los geht's

    Installation Server

    Ich nutze eine VM von Hetzner. Darauf läuft ein Debian 13 "Trixie". Also, die nächste Version die kommt.

    deb http://deb.debian.org/debian trixie main contrib non-free-firmware
    # deb-src http://deb.debian.org/debian bookworm main contrib non-free-firmware
    
    deb http://deb.debian.org/debian trixie-updates main contrib non-free-firmware
    # deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware
    
    # deb http://deb.debian.org/debian bookworm-backports main contrib non-free-firmware
    # deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free-firmware
    
    deb http://security.debian.org/debian-security trixie-security main contrib non-free-firmware
    # deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
    

    Warum Trixie? Mein Profi Berater meint, die uralte Podman Version sollte man nicht mehr benutzen, man braucht etwas Frisches 🙂

    root@forgejo:/etc/apt# podman -v
    podman version 5.3.2
    

    Security Server

    • Firewall wird über Hetzner gemacht. Port 22, 80, 443
    • Crowdsec benutze ich um ungebetene Gäste eine Zeit lang auszusperren. (Crowdsec ist eine Alternative zu fail2ban)

    Voraussetzungen

    Nachinstallierte Pakete.

    apt install crowdsec crowdsec-firewall-bouncer git socat catatonit
    

    Ich hoffe, ich habe hier nichts vergessen. Wenn doch kommt ja eine Meldung, dann kann man das einfach nachinstallieren.

    Catatonit

    @forgejo:~# apt search catatonit
    catatonit/testing,now 0.2.1-1 amd64 [installed]
      init process for containers
    

    Wird benötigt für die Anlage von Pods. (Hoffe das ist richtig, wie gesagt, war ein langes Wochenende)

    ACME

    Wird benötigt für das SSL Zertifikat. @Nico schwört ja immer drauf 😉

    git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
    cd acme.sh/
    ./acme.sh --server letsencrypt --standalone --issue -d forgejo.linux-nerds.org
    ./acme.sh --install-cert -d forgejo.linux-nerds.org --cert-file      /root/nginx/letsencrypt/live/forgejo.linux-nerds.org/cert.pem  --key-file       /root/nginx/letsencrypt/live/forgejo.linux-nerds.org/key.pem  --fullchain-file /root/nginx/letsencrypt/live/forgejo.linux-nerds.org/fullchain.pem
    

    git und socat sind für acme nötig.

    Crontab zur Aktualisierung des Zertifikates anlegen

    Crontab anlegen

    crontab -e
    

    Inhalt

    # m h  dom mon dow   command
    03 09 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --reloadcmd "systemctl restart nginx.service" > /dev/null
    

    Test auf der Konsole

    root@forgejo:~/acme.sh# ./acme.sh --cron --home "/root/.acme.sh" --reloadcmd "systemctl restart nginx.service"
    [Fri Feb 28 01:37:11 PM UTC 2025] ===Starting cron===
    [Fri Feb 28 01:37:11 PM UTC 2025] Renewing: 'forgejo.linux-nerds.org'
    [Fri Feb 28 01:37:11 PM UTC 2025] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory
    [Fri Feb 28 01:37:11 PM UTC 2025] Skipping. Next renewal time is: 2025-04-28T07:23:28Z
    [Fri Feb 28 01:37:11 PM UTC 2025] Add '--force' to force renewal.
    [Fri Feb 28 01:37:11 PM UTC 2025] Skipped forgejo.linux-nerds.org_ecc
    [Fri Feb 28 01:37:11 PM UTC 2025] ===End cron===
    

    User

    Ich brauche ein paar User auf dem Host.

    useradd -m -d /home/pguser pguser
    useradd -m -d /home/forgejo forgejo
    

    Secrets erstellen

    podman secret create POSTGRES_PASSWORD /root/secrets/POSTGRES_PASSWORD.txt
    

    Hier liegt das Postgres Passwort drin. Ich erläutere in einem anderen Artikel was Podamn Secret ist.

    1. Einen Pod erstellen

    Zuerst erstellen wir einen Pod mit den entsprechenden Port-Mappings.

    podman pod create --name forgejo-pod -p 3000:3000 -p 222:22 -p 80:80 -p 443:443
    

    Dieser Befehl legt einen Pod namens forgejo-pod an, der die Ports 3000, 222, 80 und 443 vom Host an den Pod weiterleitet.

    Die Ports sind für

    • 22 SSH
    • 80, 443 Web
    • 3000 Forgejo

    NGINX dient als Proxy.

    Der Systemd Dienst für den Pod

    /etc/systemd/system/forgejo-pod.service

      GNU nano 8.3                                                                                        forgejo-pod.service                                                                                                  
    [Unit]
    Description=Forgejo Pod
    Requires=network.target
    After=network-online.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStartPre=-/usr/bin/podman pod rm -f forgejo-pod
    ExecStart=/usr/bin/podman pod create --name forgejo-pod -p 3000:3000 -p 222:22 -p 80:80 -p 443:443
    ExecStop=/usr/bin/podman pod rm -f forgejo-pod
    
    [Install]
    WantedBy=multi-user.target[Pod]
    Name=forgejo-pod
    PublishPort=3000:3000
    PublishPort=222:22
    PublishPort=80:80
    PublishPort=443:443
    
    [Service]
    TimeoutStartSec=90
    
    [Install]
    WantedBy=multi-user.target
    

    Danach

    systemctl start forgejo-pod.service
    systemctl enable forgejo-pod.service
    

    Jetzt startet der Pod auch nach einem Server Reboot.

    2. Container im Pod starten

    Hier starten wir die einzelnen Container, mit der Angabe in welchem POD sie laufen sollen.

    Ich nutze die Podman Funktion quatlet, diese ist in Podman integriert. Dazu legt man unter /etc/containers/systemd folgende Files an.

    Datenbank (Postgres)

    Wir benötigen einen leeren Ordner unter /home/pguser/db-data. An die Benutzerrechte denken.

    /etc/containers/systemd/postgres.container

    [Unit]
    Description=Postgres Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=docker.io/library/postgres:17
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    User=1000:1000
    PodmanArgs=--pod=forgejo-pod --name=postgres --secret=POSTGRES_PASSWORD,type=env,target=POSTGRES_PASSWORD
    Volume=/home/pguser/db-data:/var/lib/postgresql/data
    
    [Install]
    WantedBy=multi-user.target
    

    Forgejo Server

    /etc/containers/systemd/forgejo.container

    [Unit]
    Description=Forgejo Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=codeberg.org/forgejo/forgejo:10.0.1
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    PodmanArgs=--pod=forgejo-pod --name=forgejo
    Environment=USER_UID=1001
    Environment=USER_GID=1001
    Volume=/home/forgejo:/data
    Volume=/etc/timezone:/etc/timezone:ro
    Volume=/etc/localtime:/etc/localtime:ro
    
    [Install]
    WantedBy=multi-user.target
    

    Hier wird der Forgejo-Server-Container in den Pod integriert. Bei der Instalaltion von Forgejo muss man folgende Daten eingeben.

    • Datenbank Adresse: postgres:5432
    • DB User: postgres
    • DB Name: postgres
    • Beide URL mit https://

    Nginx

    Für NGINX brauchen wir folgende Files

    /etc/nginx/default.conf

    server {
        listen 80;
        server_name forgejo.linux-nerds.org;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        http2 on;
        server_name forgejo.linux-nerds.org;
    
        # Use Mozilla's guidelines for SSL/TLS settings
        # https://mozilla.github.io/server-side-tls/ssl-config-generator/
        ssl_certificate      /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/fullchain.pem;
        ssl_certificate_key  /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/key.pem;
        ssl_dhparam /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/dhparam.pem;
    
        # enables TLSv1.2 & TLSv1.3
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
    
        # Prevent nginx HTTP Server Detection
        server_tokens off;
    
        # HSTS settings
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        # add_header Strict-Transport-Security "max-age=15552000; includeSubDomains;" always;
    
        # set max upload size and increase upload timeout:
        client_max_body_size 512M;
        client_body_timeout 300s;
        fastcgi_buffers 64 4K;
    
        # The settings allows you to optimize the HTTP2 bandwitdth.
        # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
        # for tunning hints
        client_body_buffer_size 512k;
    
        # Remove X-Powered-By, which is an information leak
        fastcgi_hide_header X-Powered-By;
    
        location / {
            proxy_pass http://138.199.209.222:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
    }
    

    und einen Ordner

    /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/

    Darin liegen die Zertifikate

    root@forgejo:# ls -lha /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/
    total 24K
    drwxr-xr-x 2 999 996 4.0K Mar  2 18:36 .
    drwxr-xr-x 3 999 996 4.0K Feb 28 07:49 ..
    -rw-r--r-- 1 999 996 1.3K Feb 28 07:49 cert.pem
    -rw-r--r-- 1 999 996  428 Mar  2 18:30 dhparam.pem
    -rw-r--r-- 1 999 996 2.8K Feb 28 07:49 fullchain.pem
    -rw------- 1 999 996  227 Feb 28 07:49 key.pem
    

    /etc/containers/systemd/nginx.container

    [Unit]
    Description=NGINX Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=docker.io/library/nginx:latest
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    PodmanArgs=--pod=forgejo-pod --name=nginx
    Volume=/etc/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    Volume=/etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/:/etc/nginx/letsencrypt/live/forgejo.linux-nerds.org:ro
    
    [Install]
    WantedBy=multi-user.target
    

    Auch der Nginx-Container wird im selben Pod gestartet. Dadurch nutzen alle Container denselben Netzwerk-Namespace, was u. a. bedeutet, dass sie sich über ihre Containernamen (z. B. postgres) erreichen können. Wichtig bei der Installation von Forgejo, dort gibt man dann postgres:5432 an.

    Nachdem alle Files erstellt wurden, lädt man mal den Daemon neu

    systemctl daemon-reload
    

    Jetzt sollten die Dienste angelegt worden sein.

    • postgres.service
    • forgejo.service
    • nginx.service

    Das kann man mit

    systemctl status nginx.service
    

    kontrollieren. Auch eine gute Hilfe, wenn was nicht startet.

    3. Überprüfen des Pods und der Container

    Mit den folgenden Befehlen kannst Du sicherstellen, dass der Pod und alle Container korrekt laufen:

    podman pod ps
    podman ps
    

    podman pod ps listet alle Pods und deren Port-Zuordnungen, während podman ps die laufenden Container anzeigt.

    4. Systemd Unit-Datei generieren (Deprecated)

    Podman bietet die Möglichkeit, systemd Service-Dateien automatisch zu generieren. Für Deinen Pod erstellst Du beispielsweise eine Unit-Datei mit:

    podman generate systemd --name forgejo-pod --files --new
    

    Dieser Befehl generiert vier Dateien.

    root@debian-4gb-nbg1-2-forgejo:~# podman generate systemd --name forgejo-pod --files --new
    
    DEPRECATED command:
    It is recommended to use Quadlets for running containers and pods under systemd.
    
    Please refer to podman-systemd.unit(5) for details.
    /root/container-forgejo.service
    /root/container-nginx-proxy.service
    /root/pod-forgejo-pod.service
    /root/container-postgres.service
    

    5. Systemd Unit-Datei aktivieren und starten (Deprecated)

    Kopiere die generierten Systemd-Dateien in das systemweite systemd-Verzeichnis, aktiviere sie und starte den Service:

    cp *.service /etc/systemd/system/
    systemctl daemon-reload
    systemctl enable container-forgejo-pod.service
    systemctl enable container-nginx-proxy.service
    systemctl enable pod-forgejo-pod.service
    systemctl enable container-postgres.service
    systemctl start container-forgejo-pod.service
    

    Nun wird Dein Pod zusammen mit allen enthaltenen Containern über systemd verwaltet und startet beim Systemstart automatisch.

    6. Rechte

    Ein Thema was ich nicht wirklich verstehe, aber man kann ja dran arbeiten. Schauen wir uns mal die einzelnen Container an.

    nginx-proxy

    root@forgejo:/home/pguser# podman top nginx
    USER        PID         PPID        %CPU        ELAPSED              TTY         TIME        COMMAND
    root        1           0           0.000       11h22m59.211971839s  ?           0s          nginx: master process nginx -g daemon off; 
    nginx       16          1           0.000       11h22m59.212103517s  ?           0s          nginx: worker process 
    nginx       17          1           0.000       11h22m59.21219268s   ?           0s          nginx: worker process 
    

    NGINX läuft als root, die Worker als User nginx.

    postgres

    root@forgejo:/home/pguser# podman top postgres
    USER        PID         PPID        %CPU        ELAPSED              TTY         TIME        COMMAND
    pguser      1           0           0.005       11h23m46.923566147s  ?           2s          postgres 
    pguser      9           1           0.000       11h23m46.923736112s  ?           0s          postgres: checkpointer  
    pguser      10          1           0.000       11h23m46.923826476s  ?           0s          postgres: background writer  
    pguser      12          1           0.000       11h23m45.923891884s  ?           0s          postgres: walwriter  
    pguser      13          1           0.000       11h23m45.923977432s  ?           0s          postgres: autovacuum launcher  
    pguser      14          1           0.000       11h23m45.92404386s   ?           0s          postgres: logical replication launcher  
    pguser      350         1           0.003       8h53m41.924108998s   ?           1s          postgres: postgres postgres 127.0.0.1(51406) idle 
    pguser      1372        1           0.000       53m41.924171702s     ?           0s          postgres: postgres postgres 127.0.0.1(53832) idle 
    

    Postgres läuft wie eingestellt, mit dem User pguser.

    forgejo

    root@forgejo:/home/pguser# podman top forgejo 
    USER        PID         PPID        %CPU        ELAPSED              TTY         TIME        COMMAND
    root        1           0           0.000       11h24m30.390732597s  ?           0s          /bin/s6-svscan /etc/s6 
    root        11          1           0.000       11h24m30.390842417s  ?           0s          s6-supervise openssh 
    root        12          1           0.000       11h24m30.390906629s  ?           0s          s6-supervise gitea 
    git         13          12          0.285       11h24m30.390967669s  ?           1m57s       /usr/local/bin/gitea web 
    root        14          11          0.000       11h24m30.391030954s  ?           0s          sshd: /usr/sbin/sshd -D -e [listener] 0 of 10-100 startups 
    

    Forgejo läuft als root, aber die Dienste, die nach außen kommunizieren, werden als forgejo gestartet. Kann man sich mit htop ansehen.

    Backups

    Für Backups braucht ihr nur diese beiden Ordner sichern.

    • /home/pguser/db-data/
    • /home/forgero

    Anmerkungen

    Wer hier Fehler oder Verbesserungsvorschläge hat, schreibt es gerne hier unten drunter. Ich freue mich über jeden Tipp.

    Teile dieser Doku sind mit Text von ChatGPT erstellt worden. Dürfte aber mittlerweile nicht mehr viel von über sein, aber wegen der Transparenz sei dies hier erwähnt.

  • FrankMF FrankM hat dieses Thema angepinnt
  • Bei der Installation wird die Registrierung ausgeschaltet, es sei denn ihr habt das bei der Installation geändert. Ok, was machen, wenn man das ändern möchte?

    Zwei Möglichkeiten.

    Volume

    Wir legen die ganze app.ini in ein Volume.

    Volume=/home/forgejo/conf/app.ini:/data/gitea/conf/app.ini
    

    In /home/forgejo/conf/app.ini erstellt man das File. Den Inhalt holt man sich vorher aus dem Container.

    podman exec -it forgejo bash
    vi data/gitea/conf/app.ini
    

    Environment

    Wir steuern den gewünschten Wert über eine Environment Variable.

    Environment=FORGEJO__SERVICE__DISABLE_REGISTRATION=false
    

    Danach

    systemctl daemon-reload
    systemctl restart forgejo.service
    

    und die Registrierung ist eingeschaltet.

    Was ich festgestellt habe ist, das ich keinen Mailer aktiv habe. Der Test-Account war ohne E-Mail-Verifizierung aktiv. Das schaue ich mir dann auch noch mal an.

  • FrankMF FrankM hat auf dieses Thema verwiesen
  • 0 Stimmen
    2 Beiträge
    366 Aufrufe
    FrankMF
    Ich habe den Sonntag mal genutzt um ein wenig was einzubauen. Einmal habe ich mit datatables.net die Tabelle etwas funktionaler gestaltet. [image: 1736705735786-00a95363-1f41-4bbf-884a-34f21aea81e4-grafik.png] Man kann nun suchen, sortieren und wenn man mehr als 10 Datenpunkte hat, hat die Tabelle auch Pagination. Ein nettes Projekt, macht einiges einfacher Das nächste, ich hatte es im Video ja kurz erwähnt, mir fehlte ja noch die Restore Funktion von Restic. Ok, ist jetzt auch drin. Da die Benutzerverwaltung mittlerweile komplett eingebaut ist, werde ich demnächst meine Test Datenbanken und alles was damit zu tuen hat, aus dem Code entfernen. Brauch ich jetzt nicht mehr. Habe jetzt zwei Benutzer, einen Produktiven und einen zum Testen. Langfristig steht auch noch eine zweite Sprache auf dem Zettel. Aber, dafür muss ich Lust haben, das Thema juckt nicht so richtig
  • Nextcloud - Upgrade Hub 9 (30.0.0)

    Nextcloud
    3
    2
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    FrankMF
    Ich habe dann mal weitergesucht, dank ein paar Tipps aus dem Fediverse, sehe ich jetzt was heller https://chaos.social/@towo/113152384137718991 Nachdem ich dann ein paar Apps gefunden und installiert hatte AppAPI Flow tauchte dann im Benutzermenü, rechts oben, folgendes auf. [image: 1726992766346-bildschirmfoto_20240922_101125.png] Das Interessante ist der Menüpunkt Externe Apps. Nun sollte ich diese Funktion verstanden haben. Das Nextcloud Team integriert also diese Windmill App via Docker Container und greift dann darauf zu. In der Videopräsentation war doch von in Nextcloud integriert die Werbeansprache!? Ein Docker Container ist für mich keine Integration. Ich habe einige rudimentäre Kenntnisse von Docker, ausschließlich lokal. Aber, ich komme nicht auf die Idee das auf einem produktiven Server zu installieren. Somit kann ich das Testen hier beenden und die Apps alle wieder deinstallieren. Jetzt habe ich noch im Kopf, ob man das mal mit einem Nextcloud-AIO testen soll? Natürlich auf einem Testsystem. https://github.com/nextcloud/all-in-one?tab=readme-ov-file#how-to-use-this
  • Redis Stack?

    Redis
    1
    1
    0 Stimmen
    1 Beiträge
    148 Aufrufe
    Niemand hat geantwortet
  • Firefox 122 als .deb Paket

    Linux
    1
    1
    0 Stimmen
    1 Beiträge
    161 Aufrufe
    Niemand hat geantwortet
  • Ubiquiti ER-X - DMZ

    Verschoben OpenWRT & Ubiquiti ER-X
    1
    2
    0 Stimmen
    1 Beiträge
    270 Aufrufe
    Niemand hat geantwortet
  • Kopia - HTTP/S Server aufsetzen

    Angeheftet Kopia
    1
    0 Stimmen
    1 Beiträge
    464 Aufrufe
    Niemand hat geantwortet
  • Kopia - HTTP/2 deadlock

    Kopia
    1
    0 Stimmen
    1 Beiträge
    236 Aufrufe
    Niemand hat geantwortet
  • Rest-Server

    Verschoben Restic
    8
    0 Stimmen
    8 Beiträge
    628 Aufrufe
    FrankMF
    Dann mal eben ausprobiert. Auf meinem Server war die Version 0.9.7 selber, mit go, gebaut. Dann mache ich das auch mit der v0.10.0 so. Aber bevor ich anfange, wird die v0.9.7 gesichert. mv /usr/local/bin/rest-server /usr/local/bin/rest-server_0_9_7 So erspare ich mir im Problemfall das selber bauen. Ok, dann die neue Version bauen. git clone https://github.com/restic/rest-server.git cd rest-server go run build.go Danach befindet sich im Verzeichnis die Binärdatei rest-server Die kopieren wir jetzt cp rest-server /usr/local/bin Danach kurzer Test # rest-server --version rest-server 0.10.0 (v0.10.0-6-g037fe06) compiled with go1.11.6 on linux/amd64 Gut Version passt Dann ein Backup gestartet. Das sichert einen Teil meines Home-Verzeichnis Files: 153 new, 100 changed, 177857 unmodified Dirs: 0 new, 1 changed, 0 unmodified Added to the repo: 81.881 MiB processed 178110 files, 80.571 GiB in 0:28 snapshot 607e0027 saved Applying Policy: keep the last 3 snapshots, 3 monthly snapshots keep 5 snapshots: ID Time Host Tags Reasons Paths --------------------------------------------------------------------------------------- fa97890e 2020-07-25 21:02:05 frank-XXX monthly snapshot /home/frank 5b073bbb 2020-08-30 10:17:27 frank-XXX monthly snapshot /home/frank f7cf37ef 2020-09-06 15:13:03 frank-XXX last snapshot /home/frank 0157462c 2020-09-13 13:32:12 frank-XXX last snapshot /home/frank 607e0027 2020-09-14 08:09:34 frank-XXX last snapshot /home/frank monthly snapshot --------------------------------------------------------------------------------------- 5 snapshots remove 1 snapshots: ID Time Host Tags Paths --------------------------------------------------------------------- 3010b7cc 2020-09-06 11:39:27 frank-XXX /home/frank --------------------------------------------------------------------- 1 snapshots 1 snapshots have been removed, running prune counting files in repo building new index for repo [1:34] 100.00% 17351 / 17351 packs So weit funktioniert das genau wie vorher. Im Changelog stand ja was von Subfoldern. Das betrifft mich nicht, weil ich für jeden User genau ein Verzeichnis habe. So mit alles Gut Dann warte ich mal morgen ab, ob die täglichen Backups der Server rund laufen.