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 am 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 am auf dieses Thema verwiesen
  • FrankMF FrankM hat auf dieses Thema verwiesen
  • Und das Beste kommt jetzt 😉

    Wir wollen den Container updaten, weil es ein neues Release gibt.

    /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
    

    Die alte Version steht oben auf 10.0.1, jetzt gibt es heute die neue Version 11.0.0. Kein Problem.

        [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:11.0.0
        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
    

    Danach beherzt neustarten.

    systemctl restart forgejo.service
    

    Es dauert etwas, weil er kurz das neue Image ziehen muss. Geduld, kurze Zeit später ist Forgejo auf der neuen Version.

    46d176bc-33ee-476e-b8f5-65d892b93902-grafik.png

    Danke ans Forgejo-Team - richtig coole Software!

  • 0 Stimmen
    1 Beiträge
    10 Aufrufe
    Niemand hat geantwortet
  • Debian - php8.2 security update

    Linux debian linux php
    1
    0 Stimmen
    1 Beiträge
    90 Aufrufe
    Niemand hat geantwortet
  • MongoDB - Erste Erfahrungen

    Linux mongodb linux ki-generiert
    2
    2
    0 Stimmen
    2 Beiträge
    210 Aufrufe
    FrankMF
    So frisch von der MongoDB Front und wieder viel gelernt, weil beim Üben macht man Fehler Oben war ja mongodump & mongorestore von der KI empfohlen. Hier das wie ich es gemacht habe. mongodump frank@redis-stack:~$ mongodump -u frank -p '<password>' --host 192.168.3.9 --authenticationDatabase admin -d portfolio -o mongodump/ 2024-04-06T09:29:25.174+0200 writing portfolio.stockList to mongodump/portfolio/stockList.bson 2024-04-06T09:29:25.175+0200 writing portfolio.users to mongodump/portfolio/users.bson 2024-04-06T09:29:25.175+0200 done dumping portfolio.stockList (8 documents) 2024-04-06T09:29:25.176+0200 writing portfolio.total_sum to mongodump/portfolio/total_sum.bson 2024-04-06T09:29:25.177+0200 done dumping portfolio.total_sum (1 document) 2024-04-06T09:29:25.177+0200 writing portfolio.old_total_sum to mongodump/portfolio/old_total_sum.bson 2024-04-06T09:29:25.177+0200 writing portfolio.stocks to mongodump/portfolio/stocks.bson 2024-04-06T09:29:25.177+0200 done dumping portfolio.users (4 documents) 2024-04-06T09:29:25.178+0200 writing portfolio.settings to mongodump/portfolio/settings.bson 2024-04-06T09:29:25.178+0200 done dumping portfolio.settings (1 document) 2024-04-06T09:29:25.179+0200 done dumping portfolio.old_total_sum (1 document) 2024-04-06T09:29:25.179+0200 done dumping portfolio.stocks (34 documents) mongorestore mongorestore -u frank -p '<password>' --host 192.168.3.9 --authenticationDatabase admin -d portfolio mongodump/meineDatenbank/ Hier wird die Datensicherung mongodump/meineDatenbank/ in die neue Datenbank portfolio transferiert. Grund für das Ganze? Mich hatte der Datenbank Name meineDatenbank gestört. Benutzerrechte Jetzt der Teil wo man schnell was falsch machen kann Ich hatte also die neue Datenbank, konnte sie aber nicht lesen. Fehlten halt die Rechte. Ich hatte dann so was hier gemacht. db.updateUser("frank", { roles: [ { role: "readWrite", db: "meineDatenbank" }, { role: "readWrite", db: "portfolio" }]}) Ging auch prima, kam ein ok zurück. Nun das Problem, ich hatte beim Einrichten, den User frank als admin benutzt. Durch den oben abgesetzten Befehl (frank ist ja admin), wurden die neuen Rechte gesetzt und die Rechte als Admin entzogen!! Das war jetzt nicht wirklich das was ich gebrauchen konnte. LOL Ich hatte jetzt keine Kontrolle mehr über die DB. Das war aber nicht so wirklich kompliziert, das wieder zu ändern. Die Authentication temporär abstellen. Also /etc/mongod.conf editieren und #security: security.authorization: enabled eben mal auskommentieren. Den Daemon neustarten und anmelden an der DB. mongosh --host 192.168.3.9 Danach neuen User anlegen db.createUser({ user: "<name>", pwd: "<password>", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) mongod.conf wieder ändern und neustarten. Danach hat man wieder eine DB mit Authentifizierung und einen neuen Admin. Ich bin diesmal, man lernt ja, anders vorgegangen. Es gibt nun einen Admin für die DB und einen User zum Benutzen der Datenbanken! So wie man es auch auf einem produktiven System auch machen würde. Wenn ich jetzt mal was an den Benutzerrechten des Users ändere, kann mir das mit dem Admin nicht mehr passieren. Hoffe ich
  • Pycharm - AI Assistant

    Linux pycharm linux
    1
    2
    0 Stimmen
    1 Beiträge
    238 Aufrufe
    Niemand hat geantwortet
  • Firefox - Cookie Banner blocken

    Linux firefox linux
    1
    0 Stimmen
    1 Beiträge
    193 Aufrufe
    Niemand hat geantwortet
  • ROCKPro64 - Debian Bullseye Teil 1

    ROCKPro64 debian linux rockpro64
    17
    4
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    FrankMF
    Durch diesen Beitrag ist mir mal wieder eingefallen, das wir das erneut testen könnten Also die aktuellen Daten von Debian gezogen. Das Image gebaut, könnt ihr alles hier im ersten Beitrag nachlesen. Da die eingebaute Netzwerkschnittstelle nicht erkannt wurde, habe ich mal wieder den USB-to-LAN Adapter eingesetzt. Bus 005 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet Die Installation wollte ich auf einem NVMe Riegel installieren. Die Debian Installation durchgezogen und nach erfolgreicher Installation neugestartet. Und siehe da, ohne das man alles möglich ändern musste, bootete die NVMe SSD Eingesetzter uboot -> 2020.01-ayufan-2013...... Die nicht erkannte LAN-Schnittstelle müsste an nicht freien Treibern liegen, hatte ich da irgendwo kurz gelesen. Beim Schreiben dieses Satzes kam die Nacht und ich konnte noch mal drüber schlafen. Heute Morgen, beim ersten Kaffee, dann noch mal logischer an die Sache ran gegangen. Wir schauen uns mal die wichtigsten Dinge an. root@debian:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff 3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.3.208/24 brd 192.168.3.255 scope global dynamic enx000acd26e2c8 valid_lft 42567sec preferred_lft 42567sec inet6 fd8a:6ff:2880:0:20a:cdff:fe26:e2c8/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:20a:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5426sec preferred_lft 1826sec inet6 fe80::20a:cdff:fe26:e2c8/64 scope link valid_lft forever preferred_lft forever Ok, er zeigt mir die Schnittstelle eth0 ja an, dann kann es an fehlenden Treibern ja nicht liegen. Lässt dann auf eine fehlerhafte Konfiguration schließen. Nächster Halt wäre dann /etc/network/interfaces Das trägt Debian ein # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug enx000acd26e2c8 iface enx000acd26e2c8 inet dhcp # This is an autoconfigured IPv6 interface iface enx000acd26e2c8 inet6 auto Gut, bei der Installation hat Debian ja nur die zusätzliche Netzwerkschnittstelle erkannt, folgerichtig ist die auch als primäre Schnittstelle eingetragen. Dann ändern wir das mal... # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug enx000acd26e2c8 allow-hotplug eth0 #iface enx000acd26e2c8 inet dhcp iface eth0 inet dhcp # This is an autoconfigured IPv6 interface #iface enx000acd26e2c8 inet6 auto iface eth0 inet6 auto Danach einmal alles neu starten bitte systemctl status networking Da fehlte mir aber jetzt die IPv4 Adresse, so das ich einmal komplett neugestartet habe. Der Ordnung halber, so hätte man die IPv4 Adresse bekommen. dhclient eth0 Nachdem Neustart kam dann das root@debian:/etc/network# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 62:03:b0:d6:dc:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.3.172/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 42452sec preferred_lft 42452sec inet6 fd8a:6ff:2880:0:6003:b0ff:fed6:dcb3/64 scope global dynamic mngtmpaddr valid_lft forever preferred_lft forever inet6 2a02:908:1260:13bc:6003:xxxx:xxxx:xxxx/64 scope global dynamic mngtmpaddr valid_lft 5667sec preferred_lft 2067sec inet6 fe80::6003:b0ff:fed6:dcb3/64 scope link valid_lft forever preferred_lft forever 3: enx000acd26e2c8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff Fertig, eth0 läuft. Nun kann man den zusätzlichen Adapter entfernen oder halt konfigurieren, wenn man ihn braucht. Warum der Debian Installer die eth0 nicht erkennt verstehe ich nicht, aber vielleicht wird das irgendwann auch noch gefixt. Jetzt habe ich erst mal einen Workaround um eine Installation auf den ROCKPro64 zu bekommen.
  • Linux Befehle - ls & tail

    Linux linux
    1
    0 Stimmen
    1 Beiträge
    477 Aufrufe
    Niemand hat geantwortet
  • Minicom

    Linux linux
    1
    1
    0 Stimmen
    1 Beiträge
    531 Aufrufe
    Niemand hat geantwortet