Skip to content

Linux

Alles rund um Linux

This category can be followed from the open social web via the handle linux@linux-nerds.org

650 Themen 1.3k Beiträge

Unterkategorien


  • Alles rund um den möglichen Nextcloud Ersatz OpenCloud

    5 12
    5 Themen
    12 Beiträge
    FrankMF
    So, mal weiter damit beschäftigen. Also, durch meine ganze Testerei war doch ein Haufen Müll angefallen. dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ docker volume ls DRIVER VOLUME NAME local 0fcd6f237898477b251f3dacb6cd083996092b783f991f899b06d89befc41b1e local 1d8df3f5d41613ad93ed753ce2102a14738cf00e8e7d127ec79881660be291ab local 3b612ce20b207c226640d6b84c32c788cd0fad9f9157578c2310f4b3db63dd29 local 5dfdde733fefb9fdb805acec8338a860762e88cd0753f4bb4098a19fbcd4b6c3 local 6bd5659759fb99b0d0613175d2392ca268dbdb3bd0353b85ccdf9a6004e798c0 local 6f8881420aa0e7713ed5308e635fcb9382939b6570afbd1d776866a07f6d61f2 local 29f7d20edd9eda935041cea7af5aab0af748175d7df8f345288463753d2afa9a local 66ca6287706aac5013b458a109e7c143c4fb177670734fc7a0f68495b1c62fd4 local 74d304835ef51f91226cc22dbbd494d2ddc9a4d91badf88814cae24126efd04a local 0203eb654c1f28a60899ded4660fb101ea222a5f8c86a225d39f3e5da877f1c0 local 271c474feb2ed915afb8efa85e422461fcfdf8acd4097355841eadf33847b7ef local 569a8c34804afd5861299973bed023c0146f40c0dbda0d980b8651bbcadc7fc9 local 655b1f446b5db9749787d4be4445887dcb3d19906d4244d059a0f292a6cd5f01 local 843bb8d0d7845adab06e146c44b153b842d5a1a1d8eb3972bdee1d3cbcb7e815 local 987ee19b8639ad5fffabba276ceb1ca09af6ebc66efb007e561570589c9c53a8 local 1004f5b7b161a4fe37a07d7960740e5cd09b90d5744f1922fb3e41c1265f800a local 2043c77b57728106cbcca8b7e2d3ae2f07ddf4ca44ee21fca232526c95e07381 local 3685c81df1be0061352dfc5b0e6db8d8d9f9b0915a271f1ca53d2796a7876805 local 9581abcfb4fb42b2fabfabbc8139cc4659ca83d92a8b60041957565409293ef4 local 796650f1fa887ff0b153822b268a10aa3579f4f2ca3ce6855ff292e49b3bb6b8 local 426251107e3131a250b27b96e795355332127f19ccf1ec8252860aff5d0caec8 local bd43ceef38448db348cc34e7dc5c4fee9c834d8b6c5957b1e6cdb83cec7b0974 local d94e7ce6c0fb1f4f7b811f624b4526ea889f2f8b99d2aa1b21e79d00dfeb38d0 local e87a27c307a8be80839fae1c006273d57570bb99f60c78c95e86a1e9ea1a786c local f2b3e30406db730e2a341850243c115b6eb231f30f41f5353c7b2427de39af75 local opencloud_full_certs local opencloud_full_opencloud-apps local opencloud_full_opencloud-config local opencloud_full_opencloud-data Oje, das sieht ziemlich vermüllt aus. Dann mal ganz mutig alles löschen. Vorher alles gestoppt. docker compose down Volume löschen, nur ein Beispiel docker volume rm opencloud_full_opencloud-data Alles gelöscht. Dann mal ein Neustart docker compose up -d Jetzt sieht das schon viel besser aus. dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ docker volume ls DRIVER VOLUME NAME local 3737a8eab68ffdc08d6e41493346feeb2e06ef350a210213ab450775318e49f8 local opencloud_full_opencloud-apps Da ich neugierig bin, schauen wir mal rein. root@opencloud:~ ls -lha /var/lib/docker/volumes/3737a8eab68ffdc08d6e41493346feeb2e06ef350a210213ab450775318e49f8/_data/web/assets/apps/ total 8.0K drwxr-x--x 2 dockeruser dockeruser 4.0K May 19 18:25 . drwxr-x--x 3 dockeruser dockeruser 4.0K May 31 10:21 .. Vermutlich ein Speicher, wo die Web Apps was ablegen können. Der andere zeigt es dann klarer. root@opencloud-4gb-fsn1-2:~# ls -lha /var/lib/docker/volumes/opencloud_full_opencloud-apps/_data total 28K drwxr-x--x 7 dockeruser dockeruser 4.0K May 31 10:22 . drwx-----x 3 root root 4.0K May 31 10:21 .. drwxr-xr-x 2 root root 4.0K May 31 10:22 draw-io drwxr-xr-x 2 root root 4.0K May 31 10:21 external-sites drwxr-xr-x 3 root root 4.0K May 31 10:22 json-viewer drwxr-xr-x 2 root root 4.0K May 31 10:22 progress-bars drwxr-xr-x 3 root root 4.0K May 31 10:22 unzip Ok, das sollte mir erst mal reichen. Meine Installation lagert die certs ja aus, das habe ich im docker compose geändert. dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ ls -lha certs/ total 44K drwxr-xr-x 2 dockeruser dockeruser 4.0K May 30 05:49 . drwxr-xr-x 6 dockeruser dockeruser 4.0K May 31 10:38 .. -rw------- 1 dockeruser dockeruser 33K May 29 11:00 acme.json Im docker-compose.yml volumes: - ./certs:/certs # bind-mount acme.json Der Grund dafür ist, das ich das docker-compose nicht als root laufen haben möchte. Die Hauptdaten sind nach lokal ausgelagert. OC_CONFIG_DIR=/home/dockeruser/oc_data/config OC_DATA_DIR=/home/dockeruser/oc_data/data Somit sollte jetzt alles so passen und ich muss mal langsam mit der Spielerei aufhören
  • Alles rund um Podman

    5 9
    5 Themen
    9 Beiträge
    FrankMF
    Meinen ersten Versuch findet man hier. Mittlerweile habe ich das Setup verfeinert und bin zufrieden. Das wollte ich hier teilen. Der Plan ist es einen Forgejo Server aufzusetzen. Die Dienste sollen alle als Podman Container laufen. Die Podman Installation soll auf Quadlet basieren. Ich brauche also einen Forgejo Pod mit folgenden Containern Forgejo Postgres Nginx Das ganze soll auf Quadlet basieren. Was ist das? Quadlet is a tool for running Podman containers under systemd in an optimal way by allowing containers to run under systemd in a declarative way. It has been merged into Podman 4.4. Ok, wenn wir schon dran sind, was ist Podman? Podman (kurz für POD-Manager) ist ein Open Source-Tool, mit dem Sie Container entwickeln, managen und ausführen können. Das Tool wurde von Red Hat Engineers in Zusammenarbeit mit der Open Source Community entwickelt, und es verwaltet das gesamte Container-IT-Ökosystem mithilfe der libpod-Library. 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 Meine produktive Installation wird Firewall wird über Hetzner gemacht. Port 22, 80, 443 zusätzlich nftables fail2ban Voraussetzungen Nachinstallierte Pakete. apt install podman podman-compose fail2ban nftables git socat Ich hoffe, ich habe hier nichts vergessen. Wenn doch kommt ja eine Meldung, dann kann man das einfach nachinstallieren. 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 03 09 1 * * /root/renew_new.sh >> /var/log/acme-renewal.log 2>&1 Script (mit KI Hilfe) #!/bin/bash # Optimized SSL Certificate Renewal Script LOG_FILE="/var/log/acme-renewal.log" DOMAIN="forgejo.example.com" CERT_DIR="/etc/nginx/letsencrypt/live/${DOMAIN}" log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" } log "=== Starting SSL certificate renewal ===" # Check if force renewal is requested FORCE_RENEWAL=false if [[ "$1" == "--force" ]]; then FORCE_RENEWAL=true log "Force renewal requested" fi # Only stop nginx log "Stopping nginx service..." systemctl stop nginx.service sleep 2 # Renew certificate log "Renewing certificate for $DOMAIN..." cd /root/acme.sh if [[ "$FORCE_RENEWAL" == true ]]; then RENEW_CMD="./acme.sh --renew -d $DOMAIN --standalone --server letsencrypt --home /root/.acme.sh --force" else RENEW_CMD="./acme.sh --renew -d $DOMAIN --standalone --server letsencrypt --home /root/.acme.sh" fi if $RENEW_CMD; then log "Certificate renewal successful" # Copy certificates cp /root/.acme.sh/${DOMAIN}_ecc/fullchain.cer "${CERT_DIR}/fullchain.pem" cp /root/.acme.sh/${DOMAIN}_ecc/${DOMAIN}.key "${CERT_DIR}/key.pem" chown -R 999:996 "${CERT_DIR}" chmod 644 "${CERT_DIR}/fullchain.pem" chmod 600 "${CERT_DIR}/key.pem" log "Certificates installed successfully" else log "ERROR: Certificate renewal failed!" systemctl start nginx.service exit 1 fi # Start nginx log "Starting nginx service..." systemctl start nginx.service log "=== SSL renewal completed successfully ===" Test auf der Konsole 2025-06-06 13:54:47 - Renewing certificate for forgejo.example.org... [Fri Jun 6 01:54:47 PM UTC 2025] The domain 'forgejo.example.org' seems to already have an ECC cert, let's use it. [Fri Jun 6 01:54:47 PM UTC 2025] Renewing: 'forgejo.example.org' [Fri Jun 6 01:54:47 PM UTC 2025] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory [Fri Jun 6 01:54:47 PM UTC 2025] Skipping. Next renewal time is: 2025-07-27T18:24:25Z [Fri Jun 6 01:54:47 PM UTC 2025] Add '--force' to force renewal. 2025-06-06 13:54:47 - ERROR: Certificate renewal failed! Passt, Zertifikat noch gültig. 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 Podman Secret ist. Pod erstellen /etc/containers/systemd/forgejo.pod Kurz nochmal der Hinweis, ich baue jetzt eine komplette Quadlet Installation. Dafür legt man verschiedene Textfiles an, die dann von systemd in DIenste umgewandelt werden und das alles starten und verwalten. Wir brauchen einen forgejo.pod [Unit] Description=Forgejo Pod Requires=network.target After=network-online.target [Pod] PodName=forgejo-pod Network=systemd-podman-ipv4 PublishPort=3000:3000 PublishPort=222:22 PublishPort=80:80 PublishPort=443:443 #PublishPort=[::]:3000:3000 #PublishPort=[::]:222:22 #PublishPort=[::]:80:80 #PublishPort=[::]:443:443 [Install] WantedBy=multi-user.target Hier im Beispiel ist der POD nur IPv4 tauglich. Network erstellen /etc/containers/systemd/podman-ipv4.network Man sieht ja oben im Pod, das dort das Network systemd-podman-ipv4 aufgerufen. Dann erstellen wir das mal. Dazu brauchen wir das File podman-ipv4.network mit folgendem Inhalt. # /etc/containers/systemd/podman-ipv4.network [Unit] Description=Podman IPv4 Network Before=forgejo-pod.service [Network] Subnet=10.89.0.0/16 Gateway=10.89.0.1 IPRange=10.89.0.0/24 DisableDNS=true [Install] WantedBy=multi-user.target Etwas verwirrend ist die Namensgebung. Hier sieht man aber was passiert. root@debian-4gb-nbg1-2-forgejo:/etc/containers/systemd# systemctl status podman-ipv4-network.service ● podman-ipv4-network.service - Podman IPv4 Network Loaded: loaded (/etc/containers/systemd/podman-ipv4.network; generated) Active: active (exited) since Wed 2025-06-04 18:19:25 UTC; 1 day 19h ago Invocation: 4c270a199fbd4ac08bc25e1cbc0bf316 Main PID: 854 (code=exited, status=0/SUCCESS) Mem peak: 18.1M CPU: 74ms Jun 04 18:19:24 debian-4gb-nbg1-2-forgejo systemd[1]: Starting podman-ipv4-network.service - Podman IPv4 Network... Jun 04 18:19:25 debian-4gb-nbg1-2-forgejo podman[854]: 2025-06-04 18:19:25.448483441 +0000 UTC m=+0.459031549 network create 1126fa6c1a9d35a035846e3710f9d1f9e7311d594487f6256487d060f4915> Jun 04 18:19:25 debian-4gb-nbg1-2-forgejo podman-ipv4-network[854]: systemd-podman-ipv4 Jun 04 18:19:25 debian-4gb-nbg1-2-forgejo systemd[1]: Finished podman-ipv4-network.service - Podman IPv4 Network. Wer wissen will warum, kann ja mal das bei einer KI seiner Wahl eingeben. Im Pod steht "Network=systemd-podman-ipv4", der resultierende systemd Dienst "podman-ipv4-network.service" Warum ist das so? Das hier DisableDNS=true hat mich sehr viel Zeit gekostet. Eigentlich wird der DNS im POD bzw. in dem resultierenden Netzwerk verwaltet, es gibt da aber offensichtlich einen fiesen Bug, weil es mir nicht gelungen ist eine DNS Auflösung aus dem Forgejo Container hinzubekommen. Somit wurd die DNS Auflösung ausgeschaltet und muss dann in jedem Container seperat eingestellt werden. https://github.com/containers/podman/issues/26257 Der Rest kreiert ein internes Netzwerk, jetzt nichts besonderes. Jetzt kommen wir zu den Containern Forgejo Container Hinweis zu den Environment Einträgen! The Forgejo configuration is stored in the app.ini file as described in the Configuration Cheat Sheet. When using the Forgejo container image, this file is automatically created if it does not exist already. In addition it is possible to add settings using configuration variables. For instance: FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true is the equivalent of adding the following to app.ini: [repository] ENABLE_PUSH_CREATE_USER = true NOTE: it is not possible to use environment variables to remove an existing value, it must be done by editing the app.ini file. NOTE: in case you are in a SELinux environment check the audit logs if you are having issues with containers. Quelle: https://forgejo.org/docs/latest/admin/installation-docker/ /etc/containers/systemd/forgejo.container [Unit] Description=Forgejo Container im Pod forgejo-pod After=forgejo-pod.service Requires=forgejo-pod.service BindsTo=forgejo-pod.service Restart=always DNS=8.8.8.8 DNS=1.1.1.1 [Container] Image=codeberg.org/forgejo/forgejo:11.0.1 AutoUpdate=registry Label=PODMAN_SYSTEMD_UNIT=%n PodmanArgs=--pod=forgejo-pod --name=forgejo ## User Environment=USER_UID=1001 Environment=USER_GID=1001 ## Mail Environment=FORGEJO__MAILER Environment=FORGEJO__MAILER__ENABLED=true Environment=FORGEJO__MAILER__FROM=forgejo@example.com Environment=FORGEJO__MAILER__PROTOCOL=smtps Environment=FORGEJO__MAILER__SMTP_ADDR=smtps.example.com Environment=FORGEJO__MAILER__SMTP_PORT=465 Environment=FORGEJO__MAILER__USER=<user> Environment=FORGEJO__MAILER__PASSWD=<password> ## Registration Environment=FORGEJO__SERVICE__REGISTER_EMAIL_CONFIRM=true Environment=FORGEJO__SERVICE__ENABLE_NOTIFY_MAIL=true Environment=FORGEJO__SERVICE__DISABLE_REGISTRATION=false ## Captcha Environment=FORGEJO__SERVICE__ENABLE_CAPTCHA=true Environment=FORGEJO__SERVICE__CAPTCHA_TYPE=cfturnstile Environment=FORGEJO__SERVICE__CF_TURNSTILE_SECRET="<secret>" Environment=FORGEJO__SERVICE__CF_TURNSTILE_SITEKEY="<sitekey>" ## Other Environment=FORGEJO__SERVICE__DEFAULT_ALLOW_CREATE_ORGANIZATION=false # Setting für Repositories Environment=FORGEJO__repository__MAX_CREATION_LIMIT=0 ## Log Environment=FORGEJO__LOG__LEVEL=warn Environment=FORGEJO__LOG__MODE=file Environment=FORGEJO__LOG__ROOT_PATH=/data/forgejo/log # Log-Rotation-Einstellungen Environment=FORGEJO__LOG__FILE_NAME=forgejo.log Environment=FORGEJO__LOG__ROTATE=true Environment=FORGEJO__LOG__MAX_SIZE=256 Environment=FORGEJO__LOG__MAX_DAYS=7 Environment=FORGEJO__LOG__MAX_BACKUPS=5 Environment=FORGEJO__LOG__COMPRESS_BACKUPS=true Environment=FORGEJO__LOG__COMPRESS_ARCHIVE=true # Gleiche Einstellungen für Access- und Router-Logs Environment=FORGEJO__LOG__ACCESS__LEVEL=warn Environment=FORGEJO__LOG__ACCESS__MODE=file Environment=FORGEJO__LOG__ACCESS__FILE_NAME=access.log Environment=FORGEJO__LOG__ACCESS__ROTATE=true Environment=FORGEJO__LOG__ACCESS__MAX_SIZE=256 Environment=FORGEJO__LOG__ACCESS__MAX_DAYS=7 Environment=FORGEJO__LOG__ACCESS__MAX_BACKUPS=5 Environment=FORGEJO__LOG__ROUTER__LEVEL=warn Environment=FORGEJO__LOG__ROUTER__MODE=file Environment=FORGEJO__LOG__ROUTER__FILE_NAME=router.log Environment=FORGEJO__LOG__ROUTER__ROTATE=true Environment=FORGEJO__LOG__ROUTER__MAX_SIZE=256 Environment=FORGEJO__LOG__ROUTER__MAX_DAYS=7 Environment=FORGEJO__LOG__ROUTER__MAX_BACKUPS=5 # Volumes Volume=/home/forgejo:/data Volume=/etc/timezone:/etc/timezone:ro Volume=/etc/localtime:/etc/localtime:ro [Install] WantedBy=multi-user.target WantedBy=forgejo-pod.service NGINX Container Für NGINX brauchen wir folgende Files /etc/nginx/default.conf server { listen 80; server_name forgejo.example.org; return 301 https://$server_name$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name forgejo.example.org.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.example.org/fullchain.pem; ssl_certificate_key /etc/nginx/letsencrypt/live/forgejo.example.org/key.pem; ssl_dhparam /etc/nginx/letsencrypt/live/forgejo.example.org.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://<IP-Adresse Server>: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 Dann das File für den Container /etc/containers/systemd/nginx.container 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. [Unit] Description=NGINX Container im Pod forgejo-pod After=forgejo-pod.service Requires=forgejo-pod.service BindsTo=forgejo-pod.service Restart=always [Container] Image=docker.io/library/nginx:latest AutoUpdate=registry Label=io.containers.autoupdate=registry Label=PODMAN_SYSTEMD_UNIT=%n PodmanArgs=--pod=forgejo-pod --name=nginx --label=io.containers.autoupdate=registry --label=PODMAN_SYSTEMD_UNIT=%n Volume=/etc/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro Volume=/etc/nginx/letsencrypt/live/forgejo.example.com/:/etc/nginx/letsencrypt/live/forgejo.example.com:ro Volume=/etc/nginx/blocklists/nginx-block-ai-bots.conf:/etc/nginx/blocklists/nginx-block-ai-bots.conf:ro Volume=/etc/nginx/blocklists/robots.txt:/var/www/html/robots.txt:ro [Install] WantedBy=multi-user.target WantedBy=forgejo-pod.service Postgres Container /etc/containers/systemd/postgres.container [Unit] Description=Postgres Container im Pod forgejo-pod After=forgejo-pod.service Requires=forgejo-pod.service BindsTo=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 WantedBy=forgejo-pod.service Nachdem alle Files erstellt wurden, lädt man mal den Daemon neu systemctl daemon-reload Jetzt sollten alle Dienste angelegt worden sein. postgres.service forgejo.service nginx.service Das kann so kontrollieren. Netzwerkliste root@forgejo:~# podman network list NETWORK ID NAME DRIVER 2f259bab93aa podman bridge 1126fa6c1a9d systemd-podman-ipv4 bridge Der Pod root@forgejo:~# podman pod list POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS ed4aabd15fd7 forgejo-pod Running 6 hours ago 90dea473c3be 4 Die Container root@debian-4gb-nbg1-2-forgejo:~# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90dea473c3be localhost/podman-pause:5.4.2-1748111104 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:3000->3000/tcp forgejo-pod-infra bd58246de050 codeberg.org/forgejo/forgejo:11.0.1 /usr/bin/s6-svsca... 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:3000->3000/tcp forgejo 4ad8f7e26210 docker.io/library/postgres:17 postgres 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:3000->3000/tcp, 5432/tcp postgres 8173e49790fd docker.io/library/nginx:latest nginx -g daemon o... 43 minutes ago Up 44 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:222->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:3000->3000/tcp nginx Wenn was nicht startet, kann man hiermit mal eben schnell reinschauen wo es klemmt. systemctl status nginx.service Die anderen Dienste analog. 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. Bei Gelegenheit ergänze ich noch die Installation von nftables & fail2ban.
  • Vaultwarden ist eine Rust-Implementierung der Bitwarden Server API.

    Vaultwarden is a Rust implementation of the Bitwarden Server API.

    20 20
    20 Themen
    20 Beiträge
    FrankMF
    Ein Haufen Änderungen, viel Spaß! https://github.com/dani-garcia/vaultwarden/releases/tag/1.34.1 https://github.com/dani-garcia/vaultwarden/releases/tag/1.34.0 root@:~# vaultwarden -v Vaultwarden 1.34.1 Web-Vault Version file missing Danke @Nico
  • Automation for everyone

    6 10
    6 Themen
    10 Beiträge
    FrankMF
    Aktuell habe ich durch eine Erkrankung etwas mehr Zeit für die Konsole, sodass ich angefangen habe, die Setups aller meiner Server zu vereinheitlichen. Anfangen wollte ich dazu mit meinem lokalen Proxmox. Dabei kam mir wieder in den Sinn, das ich auch noch ein Debian Bookworm 12 Template brauchte. Also, das aktuelle Debian Image heruntergeladen. Mit diesem dann einen Debian Bookworm 12 Server aufgesetzt. Jetzt brauchte ich zu diesem Zeitpunkt einen Zugang mit SSH-Key (für mein Semaphore). Also habe ich schon mal zwei SSH-Keys eingefügt. Einmal meinen Haupt-PC und einmal den Semaphore Server. Danach den Server in ein Template umgewandelt. [image: 1694089227738-c552d99f-4aa1-480a-a4a1-c9ac711f24fb-grafik.png] 105 ist das Template, 106 ein damit erstellter Test-Server. Ok, das läuft wie erwartet, jetzt möchte ich den Server durch konfigurieren, so wie ich das gerne haben möchte. Da es hier um Ansible geht, brauche ich dazu ein Playbook. --- ############################################### # Playbook for my Proxmox VMs ############################################### - name: My task hosts: proxmox_test tasks: ##################### # Update && Upgrade installed packages and install a set of base software ##################### - name: Update apt package cache. ansible.builtin.apt: update_cache: yes cache_valid_time: 600 - name: Upgrade installed apt packages. ansible.builtin.apt: upgrade: 'yes' - name: Ensure that a base set of software packages are installed. ansible.builtin.apt: pkg: - crowdsec - crowdsec-firewall-bouncer - duf - htop - needrestart - psmisc - python3-openssl - ufw state: latest ##################### # Setup UFW ##################### - name: Enable UFW community.general.ufw: state: enabled - name: Set policy IN community.general.ufw: direction: incoming policy: deny - name: Set policy OUT community.general.ufw: direction: outgoing policy: allow - name: Set logging community.general.ufw: logging: 'on' - name: Allow OpenSSH rule community.general.ufw: rule: allow name: OpenSSH - name: Allow HTTP rule community.general.ufw: rule: allow port: 80 proto: tcp - name: Allow HTTPS rule community.general.ufw: rule: allow port: 443 proto: tcp ##################### # Setup CrowdSEC ##################### - name: Add one line to crowdsec config.yaml ansible.builtin.lineinfile: path: /etc/crowdsec/config.yaml #search_string: '<FilesMatch ".php[45]?$">' insertafter: '^db_config:' line: ' use_wal: true' ##################### # Generate Self-Signed SSL Certificate # for this we need python3-openssl on the client ##################### - name: Create a new directory www at given path ansible.builtin.file: path: /etc/ssl/self-signed_ssl/ state: directory mode: '0755' - name: Create private key (RSA, 4096 bits) community.crypto.openssl_privatekey: path: /etc/ssl/self-signed_ssl/privkey.pem - name: Create simple self-signed certificate community.crypto.x509_certificate: path: /etc/ssl/self-signed_ssl/fullchain.pem privatekey_path: /etc/ssl/self-signed_ssl/privkey.pem provider: selfsigned - name: Check if the private key exists stat: path: /etc/ssl/self-signed_ssl/privkey.pem register: privkey_stat - name: Renew self-signed certificate community.crypto.x509_certificate: path: /etc/ssl/self-signed_ssl/fullchain.pem privatekey_path: /etc/ssl/self-signed_ssl/privkey.pem provider: selfsigned when: privkey_stat.stat.exists and privkey_stat.stat.size > 0 ##################### # Check for new kernel and reboot ##################### - name: Check if a new kernel is available ansible.builtin.command: needrestart -k -p > /dev/null; echo $? register: result ignore_errors: yes - name: Restart the server if new kernel is available ansible.builtin.command: reboot when: result.rc == 2 async: 1 poll: 0 - name: Wait for the reboot and reconnect wait_for: port: 22 host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}' search_regex: OpenSSH delay: 10 timeout: 60 connection: local - name: Check the Uptime of the servers shell: "uptime" register: Uptime - debug: var=Uptime.stdout In dem Inventory muss der Server drin sein, den man bearbeiten möchte. Also, so was [proxmox_test] 192.168.3.19 # BookwormTEST Playbook Wir aktualisieren alle Pakete Wir installieren, von mir festgelegte Pakete Konfiguration UFW Konfiguration CrowdSec Konfiguration selbst signiertes Zertifikat Kontrolle ob neuer Kernel vorhanden ist, wenn ja Reboot Uptime - Kontrolle ob Server erfolgreich gestartet ist Danach ist der Server so, wie ich ihn gerne hätte. Aktuell ufw - Port 22, 80 und 443 auf (SSH, HTTP & HTTPS) CrowdSec als fail2ban Ersatz Selbst signierte Zertifikate benutze ich nur für lokale Server Die erfolgreiche Ausgabe in Semaphore, sieht so aus. 12:38:16 PM Task 384 added to queue 12:38:21 PM Preparing: 384 12:38:21 PM Prepare TaskRunner with template: Proxmox configure Proxmox Template 12:38:22 PM Von https://gitlab.com/Bullet64/playbook 12:38:22 PM e7c8531..c547cfc master -> origin/master 12:38:22 PM Updating Repository https://gitlab.com/Bullet64/playbook.git 12:38:23 PM Von https://gitlab.com/Bullet64/playbook 12:38:23 PM * branch master -> FETCH_HEAD 12:38:23 PM Aktualisiere e7c8531..c547cfc 12:38:23 PM Fast-forward 12:38:23 PM proxmox_template_configuration.yml | 5 +++++ 12:38:23 PM 1 file changed, 5 insertions(+) 12:38:23 PM Get current commit hash 12:38:23 PM Get current commit message 12:38:23 PM installing static inventory 12:38:23 PM No collections/requirements.yml file found. Skip galaxy install process. 12:38:23 PM No roles/requirements.yml file found. Skip galaxy install process. 12:38:26 PM Started: 384 12:38:26 PM Run TaskRunner with template: Proxmox configure Proxmox Template 12:38:26 PM 12:38:26 PM PLAY [My task] ***************************************************************** 12:38:26 PM 12:38:26 PM TASK [Gathering Facts] ********************************************************* 12:38:28 PM ok: [192.168.3.19] 12:38:28 PM 12:38:28 PM TASK [Update apt package cache.] *********************************************** 12:38:29 PM ok: [192.168.3.19] 12:38:29 PM 12:38:29 PM TASK [Upgrade installed apt packages.] ***************************************** 12:38:30 PM ok: [192.168.3.19] 12:38:30 PM 12:38:30 PM TASK [Ensure that a base set of software packages are installed.] ************** 12:38:31 PM ok: [192.168.3.19] 12:38:31 PM 12:38:31 PM TASK [Enable UFW] ************************************************************** 12:38:32 PM ok: [192.168.3.19] 12:38:32 PM 12:38:32 PM TASK [Set policy IN] *********************************************************** 12:38:34 PM ok: [192.168.3.19] 12:38:34 PM 12:38:34 PM TASK [Set policy OUT] ********************************************************** 12:38:36 PM ok: [192.168.3.19] 12:38:36 PM 12:38:36 PM TASK [Set logging] ************************************************************* 12:38:37 PM ok: [192.168.3.19] 12:38:37 PM 12:38:37 PM TASK [Allow OpenSSH rule] ****************************************************** 12:38:37 PM ok: [192.168.3.19] 12:38:37 PM 12:38:37 PM TASK [Allow HTTP rule] ********************************************************* 12:38:38 PM ok: [192.168.3.19] 12:38:38 PM 12:38:38 PM TASK [Allow HTTPS rule] ******************************************************** 12:38:38 PM ok: [192.168.3.19] 12:38:38 PM 12:38:38 PM TASK [Add one line to crowdsec config.yaml] ************************************ 12:38:39 PM ok: [192.168.3.19] 12:38:39 PM 12:38:39 PM TASK [Create a new directory www at given path] ******************************** 12:38:39 PM ok: [192.168.3.19] 12:38:39 PM 12:38:39 PM TASK [Create private key (RSA, 4096 bits)] ************************************* 12:38:41 PM ok: [192.168.3.19] 12:38:41 PM 12:38:41 PM TASK [Create simple self-signed certificate] *********************************** 12:38:43 PM ok: [192.168.3.19] 12:38:43 PM 12:38:43 PM TASK [Check if the private key exists] ***************************************** 12:38:43 PM ok: [192.168.3.19] 12:38:43 PM 12:38:43 PM TASK [Renew self-signed certificate] ******************************************* 12:38:44 PM ok: [192.168.3.19] 12:38:44 PM 12:38:44 PM TASK [Check if a new kernel is available] ************************************** 12:38:44 PM changed: [192.168.3.19] 12:38:44 PM 12:38:44 PM TASK [Restart the server if new kernel is available] *************************** 12:38:44 PM skipping: [192.168.3.19] 12:38:44 PM 12:38:44 PM TASK [Wait for the reboot and reconnect] *************************************** 12:38:55 PM ok: [192.168.3.19] 12:38:55 PM 12:38:55 PM TASK [Check the Uptime of the servers] ***************************************** 12:38:55 PM changed: [192.168.3.19] 12:38:55 PM 12:38:55 PM TASK [debug] ******************************************************************* 12:38:55 PM ok: [192.168.3.19] => { 12:38:55 PM "Uptime.stdout": " 12:38:55 up 19 min, 2 users, load average: 0,84, 0,29, 0,10" 12:38:55 PM } 12:38:55 PM 12:38:55 PM PLAY RECAP ********************************************************************* 12:38:55 PM 192.168.3.19 : ok=21 changed=2 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 12:38:55 PM
  • IT-Monitoring mit Checkmk

    7 16
    7 Themen
    16 Beiträge
    FrankMF
    Seit heute ist Version 2.0.0p13 draußen. Diese Version soll auf Debian Bullseye laufen. Wie ich selber getestet hatte, lief die alte Version nicht auf Debian Buster. Wenn ich mal Langeweile habe, werde ich das mal testen. https://forum.checkmk.com/t/checkmk-2-debian-11-bullseye-download/26080/20
  • Alles rund um Let's Encrypt

    4 11
    4 Themen
    11 Beiträge
    FrankMF
    Der Monat ist um, es war Zertifikatsmonat. Und nichts lief mehr..... Was war passiert? Sonntags mache ich von meinem Haupt-PC ein Backup (per Hand) mittels Restic auf meinen Rest-Server. Doch ich bekam eine Fehlermeldung, blabla Zertifikat usw. Ok, ab auf den Server und mit der Fehlersuche gestartet. Das Zertifikat war erneuert worden, aber der Restart Command versuchte immer eine server.service zu starten, die es gar nicht gab!? Da musste ich doch beim @Nico mal kurz nachfragen. Und das kam dann dabei raus. Fehlerursache Der ReloadCmd versuchte einen server.service zu restarten, den es gar nicht gibt. Suche Im acme Pfad liegen die Ordner für die Domains. In diesem Ordner liegt eine Datei DOMAIN.conf In dieser Datei werden bei der Installation des Zertfikiates eine Reihe von Dingen eingetragen. Le_Domain='DOMAIN' Le_Alt='no' Le_Webroot='no' Le_PreHook='' Le_PostHook='' Le_RenewHook='' Le_API='https://acme-v02.api.letsencrypt.org/directory' Le_Keylength='2048' Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/<ID>' Le_LinkOrder='https://acme-v02.api.letsencrypt.org/acme/order/<ID>' Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/>ID>' Le_CertCreateTime='1680440374' Le_CertCreateTimeStr='2023-04-02T12:59:34Z' Le_NextRenewTimeStr='2023-05-31T12:59:34Z' Le_NextRenewTime='1685537974' Le_RealCertPath='/mnt/rest-server/DOMAIN/cert.pem' Le_RealCACertPath='' Le_RealKeyPath='/mnt/rest-server/DOMAIN/key.pem' Le_ReloadCmd='__ACME_BASE64__START_c3lzdGVtY3RsIHJlc3RhcnQgc2VydmVyLnNlcnZpY2U=__ACME_BASE64__END_' Le_RealFullChainPath='/mnt/rest-server/DOMAIN/fullchain.pem' Ok, da ist der ReloadCmd, aber der ist base64 kodiert!? Was machen. # echo c3lzdGVtY3RsIHJlc3RhcnQgc2VydmVyLnNlcnZpY2U= | base64 -d systemctl restart server.service Ok, hier sehen wir die fehlerhafte Eintragung, die genau meinem Beispiel oben entspricht (unter Installation Zertifikat) Man könnte jetzt die Installation des Zertifikates mit dem korrigierten EIntrag durchführen, oder diese Base64 Zeile korrigieren. Ok, wie geht das? # echo systemctl restart rest-server.service | base64 c3lzdGVtY3RsIHJlc3RhcnQgcmVzdC1zZXJ2ZXIuc2VydmljZQo= Diese Ausgabe kopieren wir dann in die Konfigurationsdatei. Kurze Kontrolle # echo c3lzdGVtY3RsIHJlc3RhcnQgcmVzdC1zZXJ2ZXIuc2VydmljZQo= | base64 -d systemctl restart rest-server.service Passt Und wieder jede Menge gelernt. Danke @Nico
  • Alles rund um MariaDB

    8 16
    8 Themen
    16 Beiträge
    FrankMF
    Ich hatte ja die Idee, das lokale Netz der Hetzner Cloud zu entfernen. Das kann man hier nachlesen. Dort hatte ich das mit der Redis Replication schon gemacht. Auf die Wireguard Installation gehe ich hier nicht nochmal ein, das sollte klar sein bzw. kann man im oben verlinkten Artikel nachlesen. Bedingungen 10.10.1.1 Datenbank Server 10.10.1.3 PHP Server 10.0.0.3 Alte lokale Adressen MariaDB IP-Adresse In der Datei /etc/mysql/mariadb.conf/50-server.cnf müssen wir die IP-Adresse einstellen, auf welcher MariaDB lauscht. # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 bind-address = 10.10.1.1 Die bind-address muss der Wireguard Adresse des Datenbank Servers entsprechen. Vorher sollte der Wireguard Tunnel natürlich funktionieren. Neustart service mysqld restart Jetzt greifen die Anwendungen ja auf die Datenbank zu, dazu muss man in der jeweiligen Konfiguration die entsprechende Adresse einstellen. Beispiel Joomla Webseite nano configuration.php Dort findet man folgende Zeile public $host = '10.10.1.1'; Die muss an die Wireguard Adresse des Datenbank Servers angepasst werden. Danach hatte ich immer noch Probleme die Datenbank zu erreichen. MariaDB Datenbank anpassen Schauen wir uns die User an. MariaDB [(none)]> SELECT User,Host FROM mysql.user; +-----------------+-----------+ | User | Host | +-----------------+-----------+ | joomla | 10.0.0.3 | | root | localhost | +-----------------+-----------+ 2 rows in set (0.001 sec) Ok, der User joomla hat nur Zugriff von 10.0.0.3, das war die alte lokale Adresse. Die Wireguard Adresse ist ja die 10.10.1.3 Somit bekommt der User auch keinen Zugriff auf die Datenbank. Also ändern. DROP USER 'joomla'@'10.0.0.3'; CREATE USER 'joomla'@'10.10.1.3' IDENTIFIED BY 'PASSWORD'; FLUSH PRIVILEGES; Dann sieht das so aus MariaDB [(none)]> SELECT User,Host FROM mysql.user; +-----------------+-----------+ | User | Host | +-----------------+-----------+ | joomla | 10.10.1.3 | | root | localhost | +-----------------+-----------+ 2 rows in set (0.001 sec) Gut, ich habe aber immer noch keinen Zugriff zur Datenbank. Es gibt ja noch folgenden Befehl in MariaDB grant all privileges on joomla.* to 'joomla'@'10.10.1.3' identified by 'PASSWORD'; Damit gewährt man dem User joomla ja den Zugriff zur Datenbank und zwar genau von der IP-Adresse die man da rein schreibt. Die steht ja noch auf der alten IP-Adresse. Also den Befehl eingeben. grant all privileges on joomla.* to 'joomla'@'10.10.1.3' identified by 'PASSWORD'; FLUSH PRIVILEGES; Danach funktioniert der Datenbank Zugriff. Das muss man jetzt für alle User und Datenbanken machen. Wenn man sehr viele PHP-Seiten hat, kann das sehr aufwendig werden. Somit sollte man sich beim Konzept der Server schon vorher Gedanken drüber machen. iptables Sollte klar sein, das man die entsprechenden Regeln ergänzt, bzw. ändern muss.
  • Alles rund um Nextcloud

    41 71
    41 Themen
    71 Beiträge
    FrankMF
    Neue Version 31.0.5 ist erschienen. Mit dieser Version scheint das Problem des Webupdater gelöst zu sein. Er lief durch https://nextcloud.com/de/changelog/#latest31
  • Alles rund um NGINX

    10 17
    10 Themen
    17 Beiträge
    H
    Hi, ja es ist zu Warm Hab mich vielleicht etwas falsch ausgedrückt. Ich suche ne möglichkeit bzw. ein Howto wie ich Seafile für einen bekannten auf ein Shared Hosting Paket installiert bekomme.
  • NodeBB Forum Software

    61 93
    61 Themen
    93 Beiträge
    FrankMF
    Die neuen Features und die Bugfixes entnehmt ihr bitte der Ankündigung. https://github.com/NodeBB/NodeBB/releases/tag/v4.3.0 Die Installation schmeißt leider einen Fehler npm error code ERESOLVE npm error ERESOLVE could not resolve npm error npm error While resolving: nodebb@4.3.0 npm error Found: eslint@8.57.1 npm error node_modules/eslint npm error peer eslint@"^6.0.0 || ^7.0.0 || >=8.0.0" from @eslint-community/eslint-utils@4.4.0 npm error node_modules/@eslint-community/eslint-utils npm error @eslint-community/eslint-utils@"^4.2.0" from eslint@8.57.1 npm error peer eslint@"^7.32.0 || ^8.2.0" from eslint-config-airbnb-base@15.0.0 npm error node_modules/eslint-config-airbnb-base npm error eslint-config-airbnb-base@"15.0.0" from eslint-config-nodebb@0.2.1 npm error node_modules/eslint-config-nodebb npm error dev eslint-config-nodebb@"1.1.4" from the root project npm error 3 more (eslint-config-nodebb, eslint-plugin-import, nodebb-plugin-2factor) npm error npm error Could not resolve dependency: npm error dev @stylistic/eslint-plugin-js@"4.2.0" from the root project npm error npm error Conflicting peer dependency: eslint@9.25.1 npm error node_modules/eslint npm error peer eslint@">=9.0.0" from @stylistic/eslint-plugin-js@4.2.0 npm error node_modules/@stylistic/eslint-plugin-js npm error dev @stylistic/eslint-plugin-js@"4.2.0" from the root project npm error npm error Fix the upstream dependency conflict, or retry npm error this command with --force or --legacy-peer-deps npm error to accept an incorrect (and potentially broken) dependency resolution. npm error npm error npm error For a full report see: npm error /home/user_radforum/.npm/_logs/2025-05-01T08_35_32_095Z-eresolve-report.txt npm error A complete log of this run can be found in: /home/user_radforum/.npm/_logs/2025-05-01T08_35_32_095Z-debug-0.log Error installing dependencies! Mal schauen was die Lösung ist. https://community.nodebb.org/topic/18788/nodebb-v4.3.0-remote-categories-are-a-go
  • Alles rumd um die pfSense Software

    4 8
    4 Themen
    8 Beiträge
    FrankMF
    Ich habe meine pfSense doch ein wenig vernachlässigt. Sie war doch noch auf v2.7.0 und wollte sich nicht upgraden lassen. Was machen? Dank der tollen Anleitung ließ sich das Problem fixen. https://docs.netgate.com/pfsense/en/latest/troubleshooting/upgrades.html#force-pkg-metadata-update pkg-static update -f führte zu einer Reihe von Fehlern. An error occured while fetching package In der Anleitung steht Try running certctl rehash from the console, a root shell prompt, or via Diagnostics > Command Prompt. This will allow pkg to utilize the system certificates until the next reboot. Also certctl rehash in die Konsole und er macht irgendwas. Nehme an, er hat die Zertifikate überprüft!? Danach ließ sich die pfSense aktualisieren. Jetzt ist sie wieder auf der letzten Version. [image: 1714682645553-b1dec071-fa1d-4880-b99a-19f386f25545-grafik.png] Übrigens, die Release Notes findet ihr hier
  • PHP für Einsteiger

    13 19
    13 Themen
    19 Beiträge
    FrankMF
    php8.2 am Start? Dann mal bitte aktualisieren. Debian Security Advisory DSA-5819-1 security@debian.org https://www.debian.org/security/ Moritz Muehlenhoff November 26, 2024 https://www.debian.org/security/faq Package : php8.2 CVE ID : CVE-2024-8929 CVE-2024-8932 CVE-2024-11233 CVE-2024-11234 CVE-2024-11236
  • Alles rund um die Virtualisierungs Lösung

    23 60
    23 Themen
    60 Beiträge
    FrankMF
    Ja, so als Server Spielkind baut man ab und zu, einfach alles um Zuletzt lief mein Proxmox auf folgender Hardware -> https://linux-nerds.org/topic/1450/asrock-n100dc-itx Mein Bericht damals zum Umzug auf die neue Hardware -> https://linux-nerds.org/topic/1452/proxmox-umzug-auf-neue-hardware-asrock-n100dc-itx/8 Lief alles tadellos, aber ich brauchte etwas schnelleres und mit mehr RAM. Ja, das kostet leider auch etwas mehr Strom (ca. 38W mit meinem aktuellen Ausbau) Ich habe hier ein Mini-ITX MSI B550i rumliegen. Das war jetzt auserkoren, meinen Proxmox zu beherbergen. Mein Netzwerksetup sieht ein drei LAN-Schnittstellen Setup vor. WAN LAN OPT1 Auf dem Board ist eine 2.5G Schnittstelle drauf, die macht dann WAN. Jetzt brauchte ich eine PCIe Karte mit zwei LAN Schnittstellen. Ich wollte die 1G nicht mehr nutzen, man muss ja auch was testen Meine Wahl fiel auf diese PCIe- Karte -> https://www.amazon.de/dp/B0C4H4KCRJ?th=1 Die Karte beinhaltet 2 * RTL8125B Controller. Danach pfSense eingerichtet, bzw. den Dump restored. Die Hardware an die neuen Netzwerkkarten angepasst und fertig. Gestartet - läuft. Schnell noch ein Speedtest root@nas:~# iperf3 -s ----------------------------------------------------------- Server listening on 5201 (test #1) ----------------------------------------------------------- ^Ciperf3: interrupt - the server has terminated root@nas:~# iperf3 -c 192.168.3.213 Connecting to host 192.168.3.213, port 5201 [ 5] local 192.168.3.19 port 33950 connected to 192.168.3.213 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 281 MBytes 2.36 Gbits/sec 0 3.58 MBytes [ 5] 1.00-2.00 sec 280 MBytes 2.35 Gbits/sec 0 3.58 MBytes [ 5] 2.00-3.00 sec 279 MBytes 2.34 Gbits/sec 0 3.58 MBytes [ 5] 3.00-4.00 sec 280 MBytes 2.35 Gbits/sec 0 3.58 MBytes [ 5] 4.00-5.00 sec 279 MBytes 2.34 Gbits/sec 0 3.58 MBytes [ 5] 5.00-6.00 sec 280 MBytes 2.35 Gbits/sec 0 3.58 MBytes [ 5] 6.00-7.00 sec 279 MBytes 2.34 Gbits/sec 184 2.70 MBytes [ 5] 7.00-8.00 sec 280 MBytes 2.35 Gbits/sec 0 2.91 MBytes [ 5] 8.00-9.00 sec 279 MBytes 2.34 Gbits/sec 0 3.08 MBytes [ 5] 9.00-10.00 sec 280 MBytes 2.35 Gbits/sec 0 3.22 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 2.73 GBytes 2.35 Gbits/sec 184 sender [ 5] 0.00-10.01 sec 2.73 GBytes 2.34 Gbits/sec receiver iperf Done. root@nas:~# iperf3 -R -c 192.168.3.213 Connecting to host 192.168.3.213, port 5201 Reverse mode, remote host 192.168.3.213 is sending [ 5] local 192.168.3.19 port 59378 connected to 192.168.3.213 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 1.00-2.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 2.00-3.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 3.00-4.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 4.00-5.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 5.00-6.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 6.00-7.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 7.00-8.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 8.00-9.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 9.00-10.00 sec 280 MBytes 2.35 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec 0 sender [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec receiver iperf Done. Und wer sich jetzt fragt, was ich als Switch genommen habe -> https://www.amazon.de/dp/B0CFQKYDRM Ein China Teil, was laut Kommentaren furchtbar heiß werden soll. In meinem Setup gar nicht. In den Kommentaren schreiben viele, das sie das Webinterface schlecht erreichen konnte. War kein Problem, man sollte halt auch im selben Netzwerk sein. Läuft jetzt hier seit einer Woche ohne Probleme. Setup Proxmox [image: 1746889927872-68eb573d-ca8e-462d-9903-4e8afaf6bea6-grafik.png] Den Proxmox eingerichtet, das ist ja jetzt nicht so die Herausforderung. Auf dem Board sind zwei NVMe Steckplätze, die auch beide bestückt sind, So mit 500GB jeweils. Da bot es sich an, bei der Installation eine ZFS Raid 1 Installation vorzunehmen. Das habe ich dann auch so gemacht. Macht dann root@pve2:~# dd if=/dev/zero of=test.img bs=1M count=4096 conv=fdatasync 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 1.08774 s, 3.9 GB/s Restore VMs Das ist wirklich so mit das Einfachste was es gibt. Mit scp vom alten Proxmox alle Dumps auf den Neuen kopiert. Dann braucht man den letzten Dump nur Auswählen auf Restore klicken, Datenspeicher auswählen und fertig. [image: 1746888482879-b25eb59a-e40f-412b-aa6e-dedccd9b2a18-grafik.png] Gut, das war jetzt nicht so die Herausforderung. NAS ZFS Pool Mein NAS beinhaltet einen ZFS Pool Raid 1, den ich damals mit Proxmox angelegt hatte und dann an die VM durchreiche. Ok, wie bekomme ich das auf den neuen Proxmox? Man kopiert die Einstellung vom alten Proxmox. zfspool: pool_NAS pool pool_NAS content rootdir,images mountpoint /pool_NAS nodes pve2 Man achtet auf den richtigen Namen bei nodes Danach muss man den Pool an die VM dran hängen. Meine neue VM für das NAS hat die ID 103, die alte hatte die ID 106. Ich habe das so gelassen, weil ich nicht wusste ob ich den Namen einfach so anpassen konnte. War aber nicht nötig, weil es auch so gut funktionierte. qm set 103 --virtio0 /dev/zvol/pool_NAS/vm-106-disk-0 [image: 1746889263149-0cc08e40-76d3-4292-9cf1-91ffefafe417-grafik.png] Der Rest war dann ganz normale Arbeit, VMs restoren, Backups einrichten, Domains konfigurieren, Mail Setup usw.
  • Ihr sprecht Python? 😉 Ich übe noch..

    75 138
    75 Themen
    138 Beiträge
    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
  • Alles zur NoSQL in Memory Datenbank!

    22 37
    22 Themen
    37 Beiträge
    FrankMF
    Ich hatte bei meinen Python Projekten drei Datenbanken am Start, als Beispiel Redis DB 0, 1, 2 Nun wollte ich das mal zusammenfassen, da ich das so nicht mehr brauche. Also alle Keys in DB 0. So soll das am Ende aussehen. [image: 1711127826778-c17e4998-859d-4c6d-bcc5-7ff244b9a817-grafik.png] settings, stock_list und stocks waren jeweils in einer eigenen DB. Die beiden STRING Werte dienen nur zum Zwischenspeichern, sind hier jetzt mal nicht so wichtig. Nur, wie kopiert man denn nun den KEY aus der einen DB in die andere? Es war eine lange Sitzung mit Chat_GPT da klemmte es doch öfter. Aber, am Ende stand der Erfolg Auf dem Redis Datenbank Server habe ich folgendes Script erstellt. #!/bin/bash # Define Redis host and optional authentication password REDIS_HOST="192.168.3.9" REDIS_PASSWORD="PASSWORD" # Remove or leave empty if no password # Function to execute Redis command with optional authentication execute_redis_command() { if [ -n "$REDIS_PASSWORD" ]; then redis-cli -h $REDIS_HOST -a $REDIS_PASSWORD "$@" else redis-cli -h $REDIS_HOST "$@" fi } # Fetch all fields (and their values) from the source hash in database 1 mapfile -t fields_values < <(execute_redis_command -n 2 HGETALL stock_list) # Loop through the fields_values array # Bash arrays are zero-indexed, fields_values contains field name followed by value, so we increment by 2 for ((i=0; i<${#fields_values[@]}; i+=2)); do field="${fields_values[i]}" value="${fields_values[i+1]}" # Use HSET to insert the field-value pair into the target database (database 0) execute_redis_command -n 0 HSET stock_list "$field" "$value" done echo "All fields from DB 1 copied to DB 0 successfully." Als erstes mal ein Hinweis. Sollten im Passwort Sonderzeichen sein, geht das so nicht. Dann muss man das so lösen. redis-cli -h $REDIS_HOST -a 'PASSWORD' "$@" Ich denke, das sollte als Hinweis reichen. Was macht das Script? # Fetch all fields (and their values) from the source hash in database 1 mapfile -t fields_values < <(execute_redis_command -n 2 HGETALL stock_list) Wir holen alle Fields und ihre Daten von der Datenbank 1 für den KEY stock_list. Dann loopen wir da durch # Use HSET to insert the field-value pair into the target database (database 0) execute_redis_command -n 0 HSET stock_list "$field" "$value" Und hiermit speichern wir dann die Daten in Datenbank 0 unter dem KEY Namen stock_list. Das hat soweit super geklappt, außer das ich immer eine leer Zeile in der Datenbank unter Fields hatte. Hab sie einfach gelöscht. Wenn man mal Langeweile hat, kann man mal suchen warum das so ist Am Ende hatte ich dann meine drei Datenbanken alle zu einer zusammengefasst. Eine Sünde aus meiner Anfangszeit ausgebessert. Nun hatte ich ja auch drei Datenbank Klassen, die jeweils die Redis Connection initialisiert hatten. Den dreifachen Code konnte ich auch gut entsorgen. So sah er aus. class PortfolioSettings: def __init__(self, host=config.SERVER_IP, port=6379, db=None): if db is None: # If db is not provided explicitly, use TEST_MODE to decide if config.TEST_MODE == 1: db = config.TEST[0] else: db = config.LIVE[0] # Verwende einen Connection Pool self.pool = redis.ConnectionPool( host=host, port=port, db=db, password=config.REDIS_PASSWORD, # Auto-Reconnect einstellen retry_on_timeout=True, # Optional: Weitere Einstellungen wie maximale Wiederverbindungsversuche, # Timeout-Werte, etc. können hier konfiguriert werden health_check_interval=30 # Überprüft die Verbindung alle 30 Sekunden ) # self.client = redis.StrictRedis(host=host, port=port, db=db, password=config.REDIS_PASSWORD) self.client = redis.Redis(connection_pool=self.pool) Danach so class PortfolioSettings: def __init__(self, connection_pool=config.shared_redis_pool): self.client = redis.Redis(connection_pool=connection_pool) Und unter meiner config.py initialisiere ich das Ganze so. # Initialize a single shared connection pool shared_redis_pool = redis.ConnectionPool( host=redis_host_ip, port=6379, db=LIVE[0] if TEST_MODE == 0 else TEST[0], password=REDIS_PASSWORD, retry_on_timeout=True, health_check_interval=30 ) Und wie immer, seid vorsichtig mit dem REDIS Passwort! Auf einem produktiven System danach bitte gut aufräumen. Für mich aktuell nicht so wichtig, der Server läuft hier lokal.
  • Backups done right!

    36 66
    36 Themen
    66 Beiträge
    FrankMF
    Restic v0.18.0 released Sec #5291: Mitigate attack on content-defined chunking algorithm Fix #1843: Correctly restore long filepaths' timestamp on old Windows Fix #2165: Ignore disappeared backup source files Fix #5153: Include root tree when searching using find --tree Fix #5169: Prevent Windows VSS event log 8194 warnings for backup with fs snapshot Fix #5212: Fix duplicate data handling in prune --max-unused Fix #5249: Fix creation of oversized index by repair index --read-all-packs und ganz viele andere.... https://github.com/restic/restic/releases/tag/v0.18.0
  • Alles rund um Linux

    17 27
    17 Themen
    27 Beiträge
    FrankMF
    Es gab wieder ein neues Update! [image: 1652207846229-bildschirmfoto-vom-2022-05-10-20-36-50.png] Wollen wir mal sehen, ob sich im Wireguard Bereich etwas getan hat. Es gibt jetzt einen eigenen Reiter, wenn ich mich korrekt erinnere. [image: 1652208116024-bildschirmfoto-vom-2022-05-10-20-35-04.png] Hier kann man jetzt die Wireguard Einstellungen sich anzeigen lassen, ein Feature was ich mir in der Feedback EMail gewünscht hatte. [image: 1652208256203-bildschirmfoto-vom-2022-05-10-20-35-47.png] Das sieht dann so aus. [image: 1652208437463-bildschirmfoto-vom-2022-05-10-20-36-06.png] [image: 1652208504112-bildschirmfoto-vom-2022-05-10-20-36-28.png] Ich denke, jetzt hat man ausreichend Informationen, um bei Problemfällen sich mit den Einstellungen zu beschäftigen. Danke AVM, das ihr so auf das Feedback der Kunden reagiert.
  • Von mir (aktuell) nicht mehr eingesetzte Software.

    42 60
    42 Themen
    60 Beiträge
    FrankMF
    Noch Joomla! am Start? Dann mal aktualisieren! https://www.linux-magazin.de/news/kritische-luecke-in-cms-joomla/
  • ASRock N100DC-ITX

    Angeheftet asrock n100dc-itx
    3
    4
    0 Stimmen
    3 Beiträge
    3k Aufrufe
    FrankMF
    Ich sehe gerade, das ist schon wieder 1 Jahr her. Ich betreibe dieses Board seitdem als Proxmox Server 24/7. Das Ding läuft immer, ab und zu gibt es dann mal einen Reboot wegen neuer Kernel. Ansonsten treibt das Board mittlerweile folgende VMs an. pfSense Semaphore DokuWiki DNS (Werbeblocker) NAS MongoDB Home Assistant CheckMK Alle VMs laufen mit Debian 12. [image: 1721561411558-37fba92d-48aa-4e09-80a0-282996a8f661-grafik-resized.png]
  • NAS 2023 - Software Teil 2

    Angeheftet Verschoben nas linux
    1
    4
    0 Stimmen
    1 Beiträge
    252 Aufrufe
    Niemand hat geantwortet
  • NAS 2023 - Software Teil 1

    Angeheftet Verschoben nas linux
    1
    4
    0 Stimmen
    1 Beiträge
    274 Aufrufe
    Niemand hat geantwortet
  • NAS 2023 - Hardware

    Angeheftet Verschoben nas linux
    3
    6
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    FrankMF
    Ich war nicht so ganz zufrieden Die zwei 4TB 5 1/4 Zoll HDDs müssen jetzt mal weichen. [image: 1684584960061-20230520_091729-resized.jpg] Ich habe jetzt wieder einen Proxmox Backup Server im Einsatz, da brauche ich nicht mehr so viel Speicherplatz im NAS. Kleiner, aber wichtiger Nebeneffekt ist der, das ich jetzt ca. 7W eingespart habe. In Zeiten wie diesen, rechnet sich das. Nein, die Investitionskosten rechnen wir jetzt nicht dagegen [image: 1684585295398-screenshot_20230520_140727_voltcraft-sem6000_ergebnis.jpg] Aktuelle Platten Ausstattung 1 TB NVMe SSD (Proxmox Systemplatte) 2 * 2,5 Zoll 1TB SSD WD Red (ZFS Pool für mein NAS) 1 * 2,5 Zoll HDD 2TB für Datensicherung
  • Vaultwarden auf Debian Bookworm 12 installieren!

    Angeheftet vaultwarden bookworm linux
    6
    5
    0 Stimmen
    6 Beiträge
    4k Aufrufe
    I
    Vielen lieben Dank Nico! Jetzt läuft vaultwarden.
  • Bitwarden_RS auf einem Debian Buster 10 Server installieren!

    Angeheftet nginx bitwardenrs linux
    85
    14
    1 Stimmen
    85 Beiträge
    7k Aufrufe
    N
    Immer wieder gerne. Dieses mal gab es richtig etwas zu tun: 13 files changed, 137 insertions(+), 96 deletions(-) Und das nur, damit es überhaupt wieder baut. Danach folgten noch 5 Bugfixing Runden, wobei zwei davon (lediglich) das Packaging betrafen. Ergänzend noch ein Hinweis: Port 3012 für die Websocket Verbindungen ist jetzt offiziell deprecated und wird demnächst vollständig aus Vaultwarden entfernt. Genau jetzt wäre der richtige Zeitpunkt die Apache/Nginx Konfiguration dahingehend anzupassen. Hierfür habe ich neue Templates online gestellt. Apache: https://bitwarden-deb.tech-network.de/Apache-VirtualHost.example.conf Nginx: https://bitwarden-deb.tech-network.de/Nginx-VirtualHost.example.conf Schönen Sonntag!
  • WLan auf der Konsole einrichten

    Angeheftet linux quartz64 rockpro64
    3
    0 Stimmen
    3 Beiträge
    708 Aufrufe
    FrankMF
    Ich kann im Manjaro keine WPA3 Sicherheit auswählen, dann bekomme ich keine Verbindung. Es geht nur WPA2 Personal. Gegenstelle ist eine FRITZ!Box 6591 Cable. [image: 1638114013848-2021-11-28_16-37.png] In der Fritzbox sieht das so aus [image: 1638114096062-50d23aa8-5f67-485e-a994-244ef4f6a270-image.png] Das kam als Fehlermeldung Nov 28 11:03:07 frank-pc wpa_supplicant[700]: wlan0: Trying to associate with SSID 'FRITZ!Box 6591 Cable AK' Nov 28 11:03:07 frank-pc wpa_supplicant[700]: wlan0: WPA: Failed to select authenticated key management type Nov 28 11:03:07 frank-pc wpa_supplicant[700]: wlan0: WPA: Failed to set WPA key management and encryption suites Ich denke, der Treiber unterstützt das nicht.
  • ClusterSSH

    Angeheftet linux
    4
    1
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    FrankMF
    Mal wieder lange dran rumgefummelt, bis es passte. I have figured out how to use any font in xterm. So for the case of the mentioned Inconsolata font size 14, the following works: Add these 2 lines into ~/.Xresources (create it if it does not exist) XTermfaceName: Inconsolata XTermfaceSize: 14 Then, tell xterm to use this file: export XENVIRONMENT="${HOME}/.Xresources" Preferably add this export into .bashrc, so that it is persistent. comment out the font settings in ~/.clusterssh/config, if it exists: # terminal_font=6x13 Quelle: https://unix.stackexchange.com/questions/230106/cluster-ssh-specify-terminal-font
  • IPTables dauerhaft speichern

    Angeheftet linux iptables
    1
    0 Stimmen
    1 Beiträge
    616 Aufrufe
    Niemand hat geantwortet
  • Ubuntu Bionic - IP Adresse ändern

    Angeheftet Verschoben linux
    1
    0 Stimmen
    1 Beiträge
    2k Aufrufe
    Niemand hat geantwortet
  • SSH Login ohne Passwort

    Angeheftet linux
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    FrankMF
    Wie ihr ja wisst, benutze ich das Forum hier auch gerne als Notizbuch Also mal wieder was hier notieren. Mein Windows Systemadmin sagte mir heute, das es auch folgendes gibt # ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/root/.ssh/id_ed25519): /tmp/ed Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /tmp/ed Your public key has been saved in /tmp/ed.pub The key fingerprint is: SHA256:D33HCTW7Dy0p5kQdFTkPudx1PQh0EHFgkBvxy8KwhGM root@frank-ms7c92 The key's randomart image is: +--[ED25519 256]--+ | o=O*o=+=| | . oo o+oB+| | E o o.o.o+*| | . o +o...oo=o| | .So.o= O .| | o.= o + | | . . .| | | | | +----[SHA256]-----+ Der Key liegt nur in /tmp kopieren lohnt also nicht Ob das jetzt die Zukunft ist, kann ich nicht beantworten. Ich wollte es aber hier mal festhalten, weil es wohl mittlerweile auch von vielen Projekten benutzt wird. https://en.wikipedia.org/wiki/Ssh-keygen
  • Liste von Linuxbefehlen

    Angeheftet linux
    5
    1
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    FrankMF
    Kurzer IPv6 Ping, ohne viel Tipparbeit root@:~# ping 2600:: PING 2600::(2600::) 56 data bytes 64 bytes from 2600::: icmp_seq=1 ttl=55 time=14.9 ms 64 bytes from 2600::: icmp_seq=2 ttl=55 time=13.0 ms 64 bytes from 2600::: icmp_seq=3 ttl=55 time=15.9 ms
  • Debian 12 & fail2ban

    debian linux fail2ban
    1
    0 Stimmen
    1 Beiträge
    71 Aufrufe
    Niemand hat geantwortet
  • Debian Bookworm 12.11 released

    linux debian
    1
    0 Stimmen
    1 Beiträge
    156 Aufrufe
    Niemand hat geantwortet
  • ZFS - Wichtige Befehle

    zfs linux
    3
    0 Stimmen
    3 Beiträge
    963 Aufrufe
    FrankMF
    Heute mal drüber gestolpert, das es auch so was geben kann. root@pve2:~# zpool status pool: pool_NAS state: ONLINE status: Some supported and requested features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: scrub repaired 0B in 00:20:50 with 0 errors on Sun Apr 13 00:44:51 2025 config: NAME STATE READ WRITE CKSUM pool_NAS ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-WDC_WDS100T1R0A-68A4W0_230520800733 ONLINE 0 0 0 ata-WDC_WDS100T1R0A-68A4W0_230520801376 ONLINE 0 0 0 errors: No known data errors Was machen? Als erstes mal ein Backup angestoßen. Danach root@pve2:~# zpool get all pool_NAS | grep feature pool_NAS feature@async_destroy enabled local pool_NAS feature@empty_bpobj active local pool_NAS feature@lz4_compress active local pool_NAS feature@multi_vdev_crash_dump enabled local pool_NAS feature@spacemap_histogram active local pool_NAS feature@enabled_txg active local pool_NAS feature@hole_birth active local pool_NAS feature@extensible_dataset active local pool_NAS feature@embedded_data active local pool_NAS feature@bookmarks enabled local pool_NAS feature@filesystem_limits enabled local pool_NAS feature@large_blocks enabled local pool_NAS feature@large_dnode enabled local pool_NAS feature@sha512 enabled local pool_NAS feature@skein enabled local pool_NAS feature@edonr enabled local pool_NAS feature@userobj_accounting active local pool_NAS feature@encryption enabled local pool_NAS feature@project_quota active local pool_NAS feature@device_removal enabled local pool_NAS feature@obsolete_counts enabled local pool_NAS feature@zpool_checkpoint enabled local pool_NAS feature@spacemap_v2 active local pool_NAS feature@allocation_classes enabled local pool_NAS feature@resilver_defer enabled local pool_NAS feature@bookmark_v2 enabled local pool_NAS feature@redaction_bookmarks enabled local pool_NAS feature@redacted_datasets enabled local pool_NAS feature@bookmark_written enabled local pool_NAS feature@log_spacemap active local pool_NAS feature@livelist enabled local pool_NAS feature@device_rebuild enabled local pool_NAS feature@zstd_compress enabled local pool_NAS feature@draid enabled local pool_NAS feature@zilsaxattr disabled local pool_NAS feature@head_errlog disabled local pool_NAS feature@blake3 disabled local pool_NAS feature@block_cloning disabled local pool_NAS feature@vdev_zaps_v2 disabled local Das kommt von neuen Funktionen, die zu ZFS hinzugefügt wurden und bei Erstellung des Pools nicht vorhanden waren. Dann upgraden wir mal root@pve2:~# zpool upgrade pool_NAS This system supports ZFS pool feature flags. Enabled the following features on 'pool_NAS': zilsaxattr head_errlog blake3 block_cloning vdev_zaps_v2 Kontrolle root@pve2:~# zpool status pool: pool_NAS state: ONLINE scan: scrub repaired 0B in 00:20:50 with 0 errors on Sun Apr 13 00:44:51 2025 config: NAME STATE READ WRITE CKSUM pool_NAS ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-WDC_WDS100T1R0A-68A4W0_230520800733 ONLINE 0 0 0 ata-WDC_WDS100T1R0A-68A4W0_230520801376 ONLINE 0 0 0 errors: No known data errors Features kontrollieren root@pve2:~# zpool get all pool_NAS | grep feature pool_NAS feature@async_destroy enabled local pool_NAS feature@empty_bpobj active local pool_NAS feature@lz4_compress active local pool_NAS feature@multi_vdev_crash_dump enabled local pool_NAS feature@spacemap_histogram active local pool_NAS feature@enabled_txg active local pool_NAS feature@hole_birth active local pool_NAS feature@extensible_dataset active local pool_NAS feature@embedded_data active local pool_NAS feature@bookmarks enabled local pool_NAS feature@filesystem_limits enabled local pool_NAS feature@large_blocks enabled local pool_NAS feature@large_dnode enabled local pool_NAS feature@sha512 enabled local pool_NAS feature@skein enabled local pool_NAS feature@edonr enabled local pool_NAS feature@userobj_accounting active local pool_NAS feature@encryption enabled local pool_NAS feature@project_quota active local pool_NAS feature@device_removal enabled local pool_NAS feature@obsolete_counts enabled local pool_NAS feature@zpool_checkpoint enabled local pool_NAS feature@spacemap_v2 active local pool_NAS feature@allocation_classes enabled local pool_NAS feature@resilver_defer enabled local pool_NAS feature@bookmark_v2 enabled local pool_NAS feature@redaction_bookmarks enabled local pool_NAS feature@redacted_datasets enabled local pool_NAS feature@bookmark_written enabled local pool_NAS feature@log_spacemap active local pool_NAS feature@livelist enabled local pool_NAS feature@device_rebuild enabled local pool_NAS feature@zstd_compress enabled local pool_NAS feature@draid enabled local pool_NAS feature@zilsaxattr enabled local pool_NAS feature@head_errlog active local pool_NAS feature@blake3 enabled local pool_NAS feature@block_cloning enabled local pool_NAS feature@vdev_zaps_v2 enabled local So, alle neuen Features aktiviert. Jetzt kann der Pool weiterhin seine Arbeit machen.
  • Forgejo - v11.0.1

    forgejo linux
    1
    0 Stimmen
    1 Beiträge
    104 Aufrufe
    Niemand hat geantwortet
  • Fedora 42

    fedora linux btrfs
    2
    2
    0 Stimmen
    2 Beiträge
    350 Aufrufe
    FrankMF
    Ich habe mir gestern den Cosmic Desktop angesehen. Davon abgesehen, das er noch ein sehr frühes Stadium ist, hat er mir nicht wirklich gefallen. Also heute mal die Referenz von Fedora installiert, die Workstation mit Gnome Desktop. Wer hier lange mitliest, weiß das ich kein Fanboy vom Gnome Desktop bin. Aber ich wollte unbedingt mal den Anaconda Installer sehen. Der ist richtig gut geworden und das man jetzt das Tastaturlayout für die Verschlüsselung einstellen kann, wird hoffentlich in Zukunft verhindern, das ich mit einer amerikanischen Tastatur meine Passphrase eingeben muss Da war ja vorher bei meinen Test das Problem, das ich nach Standby nicht über die Tastatur aufwecken konnte. Das war eine Einstellung im BIOS, irgendwas mit Wakeup/BIOS/USB Jetzt funktioniert das auch einwandfrei. Und zu Gnome sag ich mal nichts, ich bin da vermutlich zu alt für Ich lasse es aber mal ein paar Tage auf der Platte, vielleicht erkenne ich ja noch seinen Nutzen. Zum Schluss, das schöne an FOSS ist, wir haben die Wahl welchen Desktop wir installieren dürfen. Fedora 42 sieht gut aus und läuft rund. Jetzt mal suchen, wo ich in Gnome diese beschissene Updateverhalten ausschalten kann, was aussieht wie ein Windows. Das braucht nun wirklich niemand.
  • fail2ban auf einem systemd System (Debian 12)

    linux fail2ban
    2
    0 Stimmen
    2 Beiträge
    214 Aufrufe
    FrankMF
    Auf Debian 13 Trixie fehlt noch folgendes apt install python3-setuptools
  • AI Bots aussperren

    linux block-ai nginx
    2
    0 Stimmen
    2 Beiträge
    191 Aufrufe
    FrankMF
    Wir können das noch für eine sanfte Methode erweitern, das ist die Datei robots.txt, wo man sich in alten Zeiten mal dran hielt. Einige Bots machen das, andere nicht. Praktisch, das o.g. Projekt bietet diese Datei auch an. Dann werden wir das kurz mal mit einbauen. ai-block.sh #!/bin/bash # Script um AI-Bots zu blocken # https://github.com/ai-robots-txt/ai.robots.txt/tree/main mkdir /root/AI-test cd /root/AI-test ## Daten holen curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/nginx-block-ai-bots.conf curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/robots.txt ## Daten in nginx einbauen mv nginx-block-ai-bots.conf /etc/nginx/blocklists/ mv robots.txt /var/www/html ## NGINX neustarten systemctl restart nginx.service Damit das in nginx funktioniert. Den Server Block um folgendes erweitern. # Serve robots.txt directly from Nginx location = /robots.txt { root /var/www/html; try_files $uri =404; } Kurzer Test https://<DOMAIN>/robots.txt Ergebnis User-agent: AI2Bot User-agent: Ai2Bot-Dolma User-agent: Amazonbot User-agent: anthropic-ai User-agent: Applebot User-agent: Applebot-Extended User-agent: Brightbot 1.0 User-agent: Bytespider User-agent: CCBot User-agent: ChatGPT-User User-agent: Claude-Web User-agent: ClaudeBot User-agent: cohere-ai User-agent: cohere-training-data-crawler User-agent: Crawlspace User-agent: Diffbot User-agent: DuckAssistBot User-agent: FacebookBot User-agent: FriendlyCrawler User-agent: Google-Extended User-agent: GoogleOther User-agent: GoogleOther-Image User-agent: GoogleOther-Video User-agent: GPTBot User-agent: iaskspider/2.0 User-agent: ICC-Crawler User-agent: ImagesiftBot User-agent: img2dataset User-agent: imgproxy User-agent: ISSCyberRiskCrawler User-agent: Kangaroo Bot User-agent: Meta-ExternalAgent User-agent: Meta-ExternalFetcher User-agent: OAI-SearchBot User-agent: omgili User-agent: omgilibot User-agent: PanguBot User-agent: Perplexity-User User-agent: PerplexityBot User-agent: PetalBot User-agent: Scrapy User-agent: SemrushBot-OCOB User-agent: SemrushBot-SWA User-agent: Sidetrade indexer bot User-agent: Timpibot User-agent: VelenPublicWebCrawler User-agent: Webzio-Extended User-agent: YouBot Disallow: /
  • nano - Zeilennummern dauerhaft anzeigen

    linux
    3
    2
    0 Stimmen
    3 Beiträge
    3k Aufrufe
    FrankMF
    @masko Danke für die Ergänzung. Um den Code zu markieren, kannst Du im Texteditor auf </> klicken oder einfach 4 Leerzeichen vor den Code setzen. Dann sieht es besser aus Und Willkommen im Forum!