Seite wählen

Alles neu macht der Mai

Rund 8 Jahre nach dem letzten Redesign meiner Website ist es mal wieder an der Zeit gewesen, den alten Staub zu entfernen und neuen Wind ins Design zu bringen – immerhin ist es doch ein Unterschied, ob wir 2013 oder 2021 haben…

Ich darf euch und Ihnen also nun heute präsentieren: dominicpratt.de 2021!

Ich denke, mit diesem Relaunch inklusive Umstrukturierung ist meine Website klarer und übersichtlicher geworden. Natürlich bleiben alle bestehenden Beiträge erhalten und werden nicht deaktiviert, damit das Wissen, die Tipps, Tricks und Tutorials darin nicht verloren gehen.

Ich wünsche euch und Ihnen eine gesunde Zeit und freue mich auf weitere, spannende Projekte.

Proxmox 6: Subscription-Popup entfernen

proxmox_logo_standard_hex_400px

Diese Anleitung wurde getestet bis einschließlich Proxmox-Version 6.4-6.

Die hier gezeigte Vorgehensweise kann auch bei neueren Proxmox-Versionen funktionieren.

Diese Anleitung wurde getestet bis einschließlich Proxmox-Version 6.4-6.

Die hier gezeigte Vorgehensweise kann auch bei neueren Proxmox-Versionen funktionieren.

Nachdem mein Beitrag über das Entfernen des Subscription-Popups für Proxmox Version 4 und 5 noch immer oft aufgerufen wird, möchte ich das Ganze mal für Proxmox 6 aktualisieren.

Zur Erinnerung: beim Login im Webinterface erhält man ohne Subscription folgende Meldung:

You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.

Das Popup kann man unter Version 6 mit folgendem Befehl per SSH entfernen:

sed -Ezi.bak "s/(Ext.Msg.show({s+title: gettext('No valid sub)/void({ //1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service

Das kann man natürlich – um es auch nach Updates automatisch entfernen zu lassen – auch als Cronjob laufen lassen.

Nextcloud via WebDAV einbinden

Nextcloud Logo

Um meine wichtigsten Daten immer griffbereit zu haben nutze ich eine eigene Nextcloud-Instanz mit End-to-End-Verschlüsselung.

Natürlich stellt sich hier irgendwann auch die Frage nach einer ordentlichen Backup-Strategie. Im Prinzip hat man ja eh auf jedem synchronisierten Gerät eine Sicherung, darauf verlassen wollte ich mich aber nicht unbedingt.

Eine Lösung musste her… was bietet sich mehr an, als meinen persönlichen Nextcloud-Ordner per WebDAV read-only auf einem meiner Server einzubinden und von dort mit Borgmatic zu sichern? Gesagt, getan und so begann eine kleine Odyssee…

Einbinden der Storage-Box

Diese simple Aufgabe habe ich vermutlich schon tausendfach erledigt in meiner Laufbahn. Kurz umreißen möchte ich dennoch, was genau ich getan habe, um die Nextcloud automatisch zu mounten.

Zuerst installieren wir dav2fs und erstellen einen Ordner, in dem die Nextcloud später erreichbar ist…

apt-get install davfs2
mkdir /mnt/nextcloud

Um die Freigabe automatisch mounten zu können, müssen wir unsere Zugangsdaten in der Datei /etc/davfs2/secrets hinterlegen. Falls ihr die Zwei-Faktor-Authentifizierung aktiviert habt, könnt ihr unter Einstellungen -> Sicherheit ein so genanntes App-Passwort erstellen – genau das habe ich auch getan.

In die oben genannte Datei fügen wir nun unsere Zugangsdaten ein.

https://nextcloud.example.org/remote.php/dav/files/USERNAME/	USERNAME	APP-PASSWORT

Abschließend tragen wir den gewünschten Mountpoint in die /etc/fstab ein.

https://nextcloud.example.org/remote.php/dav/files/USERNAME/ /mnt/nextcloud	davfs	user,ro,auto	0	0

Nun können wir mit

mount /mnt/nextcloud

unsere Nextcloud read-only mounten.

Der Stolperstein

Ich musste am Tag darauf meinen Server neustarten und beim starten begrüßte mich diese Meldung:

Give root password for maintenance (or press Control-D to continue)

Nach einem beherzten Druck auf Control-D lief der Start aber problemlos weiter und ich konnte mich einwandfrei anmelden. Alles sah okay aus, im Log gab es allerdings einen Eintrag, dass /mnt/nextcloud nicht gemounted werden konnte.

Das war der Moment, als es mir wie Schuppen von den Augen fiel. Die Einträge in der /etc/fstab werden regelmäßig vor’m Start des Netzwerkinterface ausgeführt, dann ist natürlich die Nextcloud „nicht erreichbar“ und der Systemstart wird blockiert.

Natürlich kann man das Problem, wie einige Blogeinträge im Netz es empfehlen, über ein noauto in der /etc/fstab und einen Eintrag in die /etc/rc.local umgehen… eleganter ist aber das Einfügen der Option _netdev in die /etc/fstab/, sodass der Eintrag so aussieht:

https://nextcloud.example.org/remote.php/dav/files/USERNAME/ /mnt/nextcloud	davfs	user,ro,_netdev	0	0

Die Option _netdev sorgt dafür, dass der entsprechende Mount erst nach dem Start der Netzwerkgeräte ausgeführt wird:

The filesystem resides on a device that requires network access (used to prevent the system from attempting to mount these filesystems until the network has been enabled on the system).

Genau das, was wir wollen – ohne Umweg über die rc.local! Jetzt kann ich damit beginnen, meine Nextcloud zu sichern… und ihr auch!

Zabbix: ISPConfig-Mounts ausblenden

Quelle: Zabbix

Ich überwache mit meiner Zabbix-Instanz mehrere Kundenserver, auf denen ISPConfig zur Verwaltung des Hostings genutzt wird. Leider hat ISPConfig die Angewohnheit, die Logfile-Ordner als Bind-Mount einzubinden – die Standard Discovery-Regel von Zabbix zur Erkennung von Dateisystemen legt also für jeden Bind-Mount mehrere Items an.

Mir bringt das keinen Mehrwert, weil die Parameter der Festplatten und Partitionen sowieso überwacht werden. Die Ordner möchte ich deshalb in der Discovery-Rule ignorieren.

Falls nicht jeder weiß, wovon ich spreche, hier ein Beispiel:

/var/www/clients/client1/web3/log

Wir beginnen damit, im Zabbix einen neuen Regulären Ausdruck zu hinterlegen.

Administration -> General -> Regular expressions

Konfiguration des regulären Ausdrucks

Name: Exclude FS
Expression type: Result is FALSE
Expression: ^/var/www/clients/client[\d]{1,4}/web[\d]{1,4}/log$

Weitere Optionen sind hier nicht notwendig. Wir wechseln zum Template – z.B.

Configuration -> Templates -> Template OS Linux -> Discovery rules -> Mounted filesystem discovery -> Filters

und hinterlegen dort unseren gerade angelegten regulären Ausdruck.

Konfiguration des Filters

Type of calculation: And
Macro: {#FSNAME}
Regular expression: @Exclude FS

Das Ganze wiederholen wir für das Template Template OS Virtual Linux und alle weiteren betroffenen Templates. Je nach Discovery- und Cleanup-Intervall werden die betroffenen Items nun von Zabbix deaktiviert und danach auch entfernt.

Datenbank aus Gesamt-Dump extrahieren

Auf manchen meiner Maschinen erstelle ich Datenbank-Sicherungen gerne zum Beispiel mit einem

mysqldump --all-databases > all.sql

Das hat den Vorteil, dass auch später angelegte Datenbanken automatisch gesichert werden und keine Anpassung von Skripten notwendig ist. Natürlich ist das nur für kleinere Datenbanken gangbar und hat den Nachteil, dass man beim Restore entweder den kompletten Datenbank-Server (also alle Datenbanken) einspielen muss oder aber per Hand (oder sed, awk, …) eine Datenbank oder Tabelle aus dem Gesamt-Dump rausfummeln muss.

Einfacher geht es mit dem, mir gerade vor der Füße gefallenen, mysqldumpsplitter.

MySQL Dump splitter to split / extract databases, tables, list from mysqldump with plenty of more funtionality.

mysqldumpsplitter-Repository

Mehr macht das Skript wirklich nicht: es extrahiert einzelne Datenbanken oder Tabellen aus einer Gesamtsicherung und speichert die am gewünschten Ort. mysqldumpsplitter kann auch mit gepackten Dumps umgehen und extrahierte Daten auch direkt wieder packen. Ein Beispielaufruf sieht also z.B. so aus:

./mysqldumpsplitter.sh --source /mnt/backup/all.sql --extract DB --match_str $DBNAME --decompression none --output_dir /mnt/backup/$DBNAME.sql.gz

Zack, hat man nur die gewünschte Datenbank extrahiert und kann auch nur diese wieder einspielen.

Achtung!

MySQL hat auch die Optionen -D oder –one-database. Das klingt ja erstmal nach einem Verhalten, dass ich mir oben gewünscht habe – ist es aber nicht!

Ein Dump mit der Option –all-databases enthält für jede Datenbank die Statements

DROP DATABASE IF EXISTS dbname; 
CREATE DATABASE dbname; 
USE dbname;

Sofern ihr also z.B. die alphabetisch dritte Datenbank (nennen wir sie C) mit der Option –one-database wieder einspielt, werden die Datenbanken A und B geleert und nicht wieder befüllt. Das muss nicht, kann aber stark nach hinten losgehen – deshalb: wir bleiben beim mysqldumpsplitter.