Skip to content

Linux

Alles rund um Linux

566 Topics 1.2k Posts

Subcategories


  • Vaultwarden ist eine Rust-Implementierung der Bitwarden Server API.

    Vaultwarden is a Rust implementation of the Bitwarden Server API.

    6 Topics
    6 Posts
    FrankMF

    Heute gibt es mal 1.30.4 & 1.30.5 zusammen. Alles in allem nur kleinere Änderungen.

    Link Preview Image Release 1.30.5 · dani-garcia/vaultwarden

    Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs - Release 1.30.5 · dani-garcia/vaultwarden

    favicon

    GitHub (github.com)

    root@vaultwarden-4gb-fsn1-1:~# vaultwarden --version vaultwarden 1.30.5
  • Automation for everyone

    6 Topics
    10 Posts
    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.

    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 Topics
    16 Posts
    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.

    Link Preview Image Checkmk 2 - Debian 11 (Bullseye) Download

    Hallo checkmk-Freunde, seit dem vergangenen Wochenende (17.07.2021) ist Debian 11 in die “Full Freeze”-Phase übergegangen. Bedeutet, ein Release ist in nicht mehr allzu weiter Ferne. Wird man zum Release von Debian 11…

    favicon

    Checkmk Community (forum.checkmk.com)

  • Alles rund um Let's Encrypt

    4 Topics
    11 Posts
    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 Topics
    16 Posts
    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

    35 Topics
    61 Posts
    FrankMF

    Ich möchte hier aber auch nicht unterschlagen, dass viele der Neuerungen bei meiner Installation nicht funktionieren. Hauptsächlich Funktionen im Zusammenhang mit der neuen Teams Funktion.

    Da ich schon sehr lange Nextcloud nutze, kenne ich das von den 0.0er Versionen. Da braucht es erst mal ein paar Updates, bis das fehlerfrei funktioniert.

  • Alles rund um NGINX

    10 Topics
    17 Posts
    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

    54 Topics
    76 Posts
    FrankMF

    Neues Release mit vielen Verbesserungen.

    Link Preview Image NodeBB 3.7.0

    Hello Everyone ! Today we are releasing NodeBB 3.7.0. Please read below for all the changes in this release. Accessibility improvements One of the main feat...

    favicon

    NodeBB Community (community.nodebb.org)

    Foren aktualisiert, keine besonderen Vorkommnisse... 😊

  • Alles rumd um die pfSense Software

    3 Topics
    7 Posts
    FrankMF

    Hab ich doch glatt nicht mitbekommen. Die Version 2.7.0 ist released. Update verlief auf meiner pfSense VM im Proxmox völlig problemlos.

    Neue Funktionen und Änderungen sind einfach zu viel, um sie hier aufzulisten. Schaut bitte in die Docs von pfSense.

    pfSense.png

  • PHP für Einsteiger

    12 Topics
    18 Posts
    FrankMF

    Nach dem Upgrade meines PHP-Servers von Debian Bullseye 11 auf Debian Bookworm 12, hatte ich einen Haufen von PHP-Fehlern in meinen selbstgeschriebenen PHP Webseiten. Wie sollte ich die fixen, wo ich doch fast nur noch Python mache!? Der Code war teilweise Jahre alt, ihr kennt das, man weiß kaum noch was man da gemacht hat. Aber, ich wollte die Projekte nicht sterben lassen.

    Etwas gegrübelt, da fiel mir ChatGPT ein. Das hatte ich schon mal kurz angetestet. Ok, wir probieren es.

    3f3ac8a0-dc22-499d-a222-d191151c2dad-grafik.png

    Ich habe ein Projekt, welches EMails versenden kann. Das ging nach dem Upgrade auf Debian 12 und php8.2 nicht mehr. ChatGPT konnte mir nicht direkt helfen, gab aber wertvolle Hinweise.

    Die PHP Konfiguration konnte ich ausschließen, die sollte einwandfrei sein. Die File Permissions, das wußte ich das die alle korrekt sind.

    Somit blieb nur die 3. PHPMailer...

    Grübel und die Webseite des PHPMailer besucht. Kurz nachgedacht und gedacht es sollte gut sein, wenn ich das mal aktualisiere. Gemacht und siehe da, die Mails werden wieder versendet 🙂

    Noch ein Beispiel

    3cfee036-4407-4da2-ad4f-cca8d6b57f41-grafik.png

    Mein alter Code sah so aus (php7.4)

    $options = array ( '1' => 'Januar', '2' => 'Februar', '3' => 'März', '4' => 'April', '5' => 'Mai', '6' => 'Juni', '7' => 'Juli', '8' => 'August', '9' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember', );

    Ausgetauscht mit

    $options = [ 1 => "Januar", 2 => "Februar", 3 => "März", 4 => "April", 5 => "Mai", 6 => "Juni", 7 => "Juli", 8 => "August", 9 => "September", 10 => "Oktober", 11 => "November", 12 => "Dezember", ];

    Problem gelöst. Ohne ChatGPT wäre ich immer noch dabei die PHP Doku zu lesen 😉

  • Alles rund um die Virtualisierungs Lösung

    19 Topics
    55 Posts
    FrankMF

    Heute wurde die neue Version 8.2 released. Wie immer, viele neuen Features und Verbesserungen.

    Linux Kernel 6.8 Import wizard um VMware ESXi Gäste nach Proxmox zu migrieren QEMU 8.1 LXC 6.0 Ceph 18.2 ZFS 2.2.
    usw.

    Alle Updates eingespielt, danach kurz den Host neugestartet. Sieht alles gut aus. VMs laufen noch und der neue Kernel auch 🙂

    root@pve:~# uname -a Linux pve 6.8.4-2-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.4-2 (2024-04-10T17:36Z) x86_64 GNU/Linux

    Link Preview Image What's new in Proxmox VE 8.2

    favicon

    Proxmox (www.proxmox.com)

  • Ihr sprecht Python? 😉 Ich übe noch..

    72 Topics
    134 Posts
    FrankMF

    Ok, da ich ja öfter mal die Distribution wechsle, lande ich öfter bei dem Problem, das meine Projekte nicht mehr wollen 😉

    Ich lösche dann den ganzen virtuellen Kram und starte neu.

    python3 -m venv venv source /venv/bin/activate pip install -r requirements.txt

    Ich hatte danach einen lästigen Fehler, irgendwas war mit den Interpreter Settings falsch!? Komisch und ich habe mal wieder lange gesucht, weil man da so selten dran muss.

    e6df89d6-8b93-4d3d-817e-64a44b6f6b91-grafik.png

    Auf die drei Punkte klicken (Hamburger Menü) Auf Edit klicken.

    4dede8e1-deb4-4069-98c6-bfd86667f0ae-grafik.png

    Und hier versteckte sich der Fehler. Da stand der Run Befehl noch auf einem 3.11er. Da ich aber jetzt auf einem Manjaro Desktop unterwegs bin, der hat Python 3.12, knallte das imemr. Jetzt startet das Projekt wieder, wie es soll.

    Ja, Python kann nerven 🙂

  • Alles zur NoSQL in Memory Datenbank!

    22 Topics
    37 Posts
    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.

    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!

    30 Topics
    58 Posts
    FrankMF

    Eines meiner absoluten Lieblingstools feiert den 10. Geburtstag.

    Link Preview Image Happy Ten Year Anniversary!

    Ten years ago (yesterday), the restic project started: Happy Anniversary!

    favicon

    restic forum (forum.restic.net)

    Ich habe mich schon unzählige Stunden mit Restic beschäftigt, alleine schon beim Erstellen meines Flask UI für Restic 🤓

    a2b208ef-a9dc-4f8f-afe1-38944cc76b45-image.png

    Auf die nächsten 10 🎉

  • Alles rund um Linux

    17 Topics
    27 Posts
    FrankMF

    Es gab wieder ein neues Update!

    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.

    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.
    Bildschirmfoto vom 2022-05-10 20-35-47.png

    Das sieht dann so aus.
    Bildschirmfoto vom 2022-05-10 20-36-06.png

    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 Topics
    60 Posts
    FrankMF

    Noch Joomla! am Start? Dann mal aktualisieren!

    https://www.linux-magazin.de/news/kritische-luecke-in-cms-joomla/

  • 0 Votes
    2 Posts
    221 Views
    FrankMF

    Es lohnt sich 🙂 Ich habe zwar ein paar kleine Fehler, hauptsächlich im Zusammenhang mit HiDPI. Und einen echt nervigen mit Suspend. Aber alles Dinge, die kontrollierbar sind. Ich hoffe das mit 20.1 die Sachen gefixt sind.

  • Linux Mint 20 - Warpinator

    1
    0 Votes
    1 Posts
    462 Views
    No one has replied
  • 0 Votes
    2 Posts
    217 Views
    FrankMF

    Bildschirmfoto vom 2020-06-14 14-29-03.png

  • AMD Treiber für Ubuntu 20.04

    1
    0 Votes
    1 Posts
    273 Views
    No one has replied
  • 0 Votes
    1 Posts
    174 Views
    No one has replied
  • 0 Votes
    2 Posts
    478 Views
    FrankMF

    Programme die QT5 nutzen, wie z.B. KeePassXC und auch VLC, skalieren nicht vernünftig.

    Link Preview Image Display problems when launching keepassxc with a HiDPI monitor · Issue #1888 · keepassxreboot/keepassxc

    Hi everybody! Expected Behavior I would like to read title of buttons normally... Like this: https://user-images.githubusercontent.com/2216211/31314644-ade1b0a2-ac05-11e7-93d6-dc028743b543.png Current Behavior But the display is the foll...

    favicon

    GitHub (github.com)

    Also, mal testen... Benutzt habe ich den normalen User, nicht Root!

    nano .Xresources

    Inhalt

    Xft.dpi: 125 Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb

    Danach folgendes ausführen.

    xrdb -merge ~/.Xresources

    Und - Bingo! Die QT5 Anwendungen skalieren vernünftig! Mein KeePassXC und VLC sind wieder nutzbar, ohne das ich nach der Lupe greifen muss 🙂

    Aufpassen, bei VLC hatte ich bei zu großer Einstellung von Xft.dpi: das Problem, das ich das Fenster auf dem rechten Monitor nicht mehr skalieren konnte, kam nur Grafikmüll. Linker Monitor kein Problem!?!? Mit der Einstellung Xft.dpi: 125 passt es aber offenbar zu den anderen Einstellungen meines Systems.

  • LUKS verschlüsselte Platte mounten

    2
    0 Votes
    2 Posts
    659 Views
    FrankMF

    So, jetzt das ganze noch einen Ticken komplizierter 🙂

    Ich habe ja heute, für eine Neuinstallation von Ubuntu 20.04 Focal eine zweite NVMe SSD eingebaut. Meinen Bericht zu dem Thema findet ihr hier. Aber, darum soll es jetzt hier nicht gehen.

    Wir haben jetzt zwei verschlüsselte Ubuntu NVMe SSD Riegel im System. Jetzt klappt die ganze Sache da oben nicht mehr. Es kommt immer einen Fehlermeldung.

    unbekannter Dateisystemtyp „LVM2_member“.

    Ok, kurz googlen und dann findet man heraus, das es nicht klappen kann, weil beide LVM Gruppen, den selben Namen benutzen.

    root@frank-MS-7C37:/mnt/crypthome/root# vgdisplay --- Volume group --- VG Name vgubuntu2 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size <464,53 GiB PE Size 4,00 MiB Total PE 118919 Alloc PE / Size 118919 / <464,53 GiB Free PE / Size 0 / 0 VG UUID lpZxyv-cNOS-ld2L-XgvG-QILa-caHS-AaIC3A --- Volume group --- VG Name vgubuntu System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <475,71 GiB PE Size 4,00 MiB Total PE 121781 Alloc PE / Size 121781 / <475,71 GiB Free PE / Size 0 / 0 VG UUID jRYTXL-zjpY-lYr6-KODT-u0LJ-9fYf-YVDna7

    Hier oben sieht man das schon mit geändertem Namen. Der VG Name muss unterschiedlich sein. Auch dafür gibt es ein Tool.

    root@frank-MS-7C37:/mnt/crypthome/root# vgrename --help vgrename - Rename a volume group Rename a VG. vgrename VG VG_new [ COMMON_OPTIONS ] Rename a VG by specifying the VG UUID. vgrename String VG_new [ COMMON_OPTIONS ] Common options for command: [ -A|--autobackup y|n ] [ -f|--force ] [ --reportformat basic|json ] Common options for lvm: [ -d|--debug ] [ -h|--help ] [ -q|--quiet ] [ -v|--verbose ] [ -y|--yes ] [ -t|--test ] [ --commandprofile String ] [ --config String ] [ --driverloaded y|n ] [ --nolocking ] [ --lockopt String ] [ --longhelp ] [ --profile String ] [ --version ] Use --longhelp to show all options and advanced commands.

    Das muss dann so aussehen!

    vgrename lpZxyv-cNOS-ld2L-XgvG-QILa-caHS-AaIC3A vgubuntu2 ACHTUNG Es kann zu Datenverlust kommen, also wie immer, Hirn einschalten!

    Ich weiß, das die erste eingebaute Platte mit der Nummer /dev/nvme0n1 geführt wird. Die zweite, heute verbaute, hört dann auf den Namen /dev/nvme1n1. Die darf ich nicht anpacken, weil sonst das System nicht mehr startet.

    /etc/fstab

    # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/vgubuntu-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/nvme1n1p2 during installation UUID=178c7e51-a1d7-4ead-bbdf-a956eb7b754f /boot ext4 defaults 0 2 # /boot/efi was on /dev/nvme0n1p1 during installation UUID=7416-4553 /boot/efi vfat umask=0077 0 1 /dev/mapper/vgubuntu-swap_1 none swap sw 0 0

    Jo, wenn jetzt die Partition /dev/mapper/vgubuntu2-root / anstatt /dev/mapper/vgubuntu-root / heißt läuft nichts mehr. Nur um das zu verdeutlichen, auch das könnte man problemlos reparieren. Aber, ich möchte nur warnen!!

    Nachdem die Änderung durchgeführt wurde, habe ich den Rechner neugestartet. Puuh, Glück gehabt, richtige NVMe SSD erwischt 🙂

    Festplatte /dev/mapper/vgubuntu2-root: 463,58 GiB, 497754832896 Bytes, 972177408 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes

    Nun können wir die Platte ganz normal, wie oben beschrieben, mounten. Nun kann ich noch ein paar Dinge kopieren 😉

  • 0 Votes
    1 Posts
    236 Views
    No one has replied
  • 0 Votes
    3 Posts
    688 Views
    FrankMF

    Hier mal eine Ausgabe vom ersten Durchgang

    root@frank-MS-7C37:~# restic --password-file /root/passwd -r rclone:Nextcloud:HOME_UBUNTU backup --files-from /root/includes.txt repository 99xxxxa0 opened successfully, password is correct created new cache in /root/.cache/restic rclone: 2020/05/08 17:47:57 ERROR : locks: error listing: directory not found rclone: 2020/05/08 17:47:58 ERROR : index: error listing: directory not found rclone: 2020/05/08 17:47:58 ERROR : snapshots: error listing: directory not found Files: 3503 new, 0 changed, 0 unmodified Dirs: 2 new, 0 changed, 0 unmodified Added to the repo: 16.872 GiB processed 3503 files, 21.134 GiB in 1:02:56 snapshot fdxxxxec saved

    Der erste Durchgang hat also etwa eine Stunde benötigt. Durch die Deduplikation der Daten, ist der Vorgang beim zweiten Durchgang viel schneller weil nur neue oder geänderte Daten gesichert werden. Und außerdem sind alle Daten AES-256 verschlüsselt. Also perfekt zur Ablage in irgendeiner Cloud 😉

    root@frank-MS-7C37:~# restic --password-file /root/passwd -r rclone:Nextcloud:HOME_UBUNTU backup --files-from /root/includes.txt repository 99xxxxa0 opened successfully, password is correct Files: 57 new, 41 changed, 3449 unmodified Dirs: 0 new, 2 changed, 0 unmodified Added to the repo: 22.941 MiB processed 3547 files, 21.137 GiB in 0:13 snapshot c6xxxxe4 saved

    Wie ihr seht, hat der zweite Durchgang nur ein paar neue und geänderte Daten gesichert. Der Rest ist ja schon vorhanden. Und das kann man dann auch problemlos täglich, wöchentlich oder was auch immer mal eben schnell durchführen.

    Eines meiner absoluten Lieblingstool 🙂

  • 1 Votes
    1 Posts
    204 Views
    No one has replied
  • DNS testen

    1
    0 Votes
    1 Posts
    94 Views
    No one has replied
  • This topic is deleted!

    2
    0 Votes
    2 Posts
    3 Views
  • Debian Buster 10.3 released

    1
    0 Votes
    1 Posts
    178 Views
    No one has replied
  • IPTables Logging

    1
    0 Votes
    1 Posts
    274 Views
    No one has replied
  • 0 Votes
    1 Posts
    173 Views
    No one has replied
  • 0 Votes
    1 Posts
    223 Views
    No one has replied
  • Proxmox - Offline

    1
    0 Votes
    1 Posts
    253 Views
    No one has replied
  • Hetzner Cloud - Server einrichten

    6
    0 Votes
    6 Posts
    2k Views
    FrankMF

    Heute den Proxmox gekündigt. Warum? Das erzähle ich Euch die Tage......

    Damit ist das Projekt Umzug für mich abgschlossen.

    dffa4a7c-b5d3-4363-8d8b-39961021ff09-image.png

    Vier Server in der Hetzner Cloud machen jetzt da ihre Arbeit. Bis jetzt läuft das alles sehr geil, ich bin da echt von überzeugt. Würde ich mit dem Projekt Geld verdienen, würde ich das so nicht machen! Da käme nur ein eigener Root-Server in Frage. Aber, das soll mich bei meinen paar Hobby Seiten jetzt auch nicht stören. Da liegen sowieso keine Geheimnisse und alles was wichtig ist, lege ich eh verschlüsselt im Netz ab.

    Also, wenn ihr mal was sucht, hier ein wenig Werbung 🙂

    https://www.hetzner.de/cloud

  • IPv6 und Subnetze

    1
    0 Votes
    1 Posts
    198 Views
    No one has replied
  • Mail vom NAS verschicken

    Moved
    1
    0 Votes
    1 Posts
    570 Views
    No one has replied