6 Private Links
Neulich gab es als Promo 50 Gigabyte kostenlosen Onlinespeicher bei Bitrix24.de. Eine sehr gute Gelegenheit die wichtigsten Daten aus dem Home-Server ins Internet zu kippen. Leider funktioniert das Mounten per Webdav wegen veralteter Cipher, die von Bitrix24 Verwendung finden und bei davfs2 schon entfernt wurden, nicht. Ein einfacher Upload mit curl geht aber auch so.
tar -czvf - -C path/to/important/files . | openssl aes-256-cbc -salt -k 'enc_passwd123!' -pbkdf2 | curl -T - -u [email protected]:bitrix_password https://b24-w0e67a.bitrix24.de/company/personal/user/1/disk/path/backup.tar.enc
Wir packen also alles aus dem lokalen Verzeichnis path/to/important/files
zusammen, verschlüsseln es mir einem ordentlichen Passwort und laden die Datei bei Bitrix24.de hoch.
Die Backup-Datei kann man testweise wieder herunterladen und mit der folgenden Zeile entschlüsseln und z.B. nach /tmp/restore
entpacken.
cat backup.tar.enc | openssl aes-256-cbc -d -salt -k 'enc_passwd123!' -pbkdf2 | tar -xzvf - -C /tmp/restore
Wenn man das ganze automatisieren will, will man vielleicht die alte, hochgeladene Datei vor dem nächsten Upload löschen.
curl -X DELETE -u [email protected]:bitrix_password https://b24-w0e67a.bitrix24.de/company/personal/user/1/disk/path/backup.tar.enc
Die Datei wandert bei Bitrix24.de leider nur in den Papierkorb und nimmt auch weiterhin Platz ein, bis sie entweder automatisch nach 30 Tagen gelöscht oder der Papierkorb von Hand geleert wird.
Um das ganze zu automatisieren und außerdem einen Mechanismus zum Chunken zu haben, habe ich aus dem ganzen ein Python-Script zusammengebastelt, das regelmäßig per Cron ausgeführt wird. Wichtig war mir hierbei, daß keine Daten auf die SSD zwischengespeichert werden, um diese zu schonen und außerdem den RAM-Verbrauch nicht explodieren zu lassen. Es wird also alles per Pipe durchgereicht, so dass die Chunksize maßgeblich für den RAM-Verbrauch ist.
import os
import subprocess
import sys
def create_backup(directory):
# Archiv erstellen und verschlüsseln
tar_process = subprocess.Popen(["tar", "-zcf", "-", directory], stdout=subprocess.PIPE)
encrypt_process = subprocess.Popen(["openssl", "aes-256-cbc", "-salt", "-k", "enc_passwd123!", "-pbkdf2"], stdin=tar_process.stdout, stdout=subprocess.PIPE)
# Chunk-Größe festlegen 100MB (in bytes)
chunk_size = 100 * 1024 * 1024
# Verzeichnisname des Backup-Verzeichnisses extrahieren
backup_directory, backup_dirname = os.path.split(os.path.normpath(directory))
print( f"backup_dirname={backup_dirname}" )
# Chunks erstellen und hochladen
chunk_number = 1
while True:
chunk = encrypt_process.stdout.read(chunk_size)
if not chunk:
break
# Chunk hochladen
upload_chunk(chunk, chunk_number, backup_dirname)
chunk_number += 1
# Aufräumen
encrypt_process.stdout.close()
encrypt_process.wait()
def upload_chunk(chunk, chunk_number, backup_dirname):
filename = f"backup_{backup_dirname}_{str(chunk_number).zfill(3)}"
delete_command = f"curl -X DELETE -u [email protected]:passwd123! 'https://b24-w0e67a.bitrix24.de/company/personal/user/1/disk/path/{filename}'"
subprocess.run(delete_command, shell=True)
upload_command = f"curl -i -X PUT -u [email protected]:passwd123! --data-binary @- 'https://b24-w0e67a.bitrix24.de/company/personal/user/1/disk/path/{filename}'"
subprocess.run(upload_command, input=chunk, shell=True)
# Kommandozeilenparameter überprüfen
if len(sys.argv) < 2:
print("Verzeichnis als Parameter angeben.")
sys.exit(1)
# Verzeichnis aus Kommandozeilenparameter extrahieren
directory = sys.argv[1]
# Beispielaufruf des Skripts
create_backup(directory)
Aufgerufen werden kann das Script einfach mit python3 <scriptname> path/to/important/files
.
Mein Homeserver soll ein Backup auf eine externe Festplatte erhalten. Eine Festplatte liegt noch herum und dazu eine schaltbare Steckdose. Wird die Steckdose eingeschaltet und die Festplatte gemountet, soll das Backup-Script automatisch gestartet werden. Nach Backup-Fertigstellung muss die Festplatte wieder abgemeldet und ausgeschaltet werden. Das geht mit einer manuell schaltbaren Steckdose oder vollautomatisch, wenn man eine Hue-Bridge mit passender Steckdose hat.
Das Festplattenbackup
Als erstes muss die Festplatte nach dem Anstecken gemountet werden. Für den Ubuntu-Desktop funktioniert so etwas Out-of-the-Box aber ohne Desktop und angemeldeten Benutzer muss man etwas tun. Damit man sich nicht lange mit Udev-Rules herumärgern muss, gibt es das sehr komfortable Tool udev-media-automount das jedes Laufwerk, das keinen Eintrag in der fstab vorzuweisen hat, kurzerhand nach /media
mountet.
Damit nach dem Mounten ein Backup-Script ausgeführt wird, bauen wir uns ein Script, dass auf das Mounten der Backup-Festplatte wartet.
vim /home/user/bin/my_backup_watchdog.sh
und der neue Backup-Watchdog wie folgt angelegt.
#!/bin/bash -v
# Pfad zum Mount-Punkt
MOUNT_POINT="/media/Your_Media_Label"
# Pfad zum Backup-Skript
BACKUP_SCRIPT="/home/user/bin/my_backup.sh"
# Endlosschleife, um den Mount-Zustand zu überwachen
while true; do
if mountpoint -q "$MOUNT_POINT"; then
echo "Das Gerät ist gemountet, rufe das Backup-Skript $BACKUP_SCRIPT auf"
$BACKUP_SCRIPT
# Warte, bis das Gerät nicht mehr gemountet ist
until ! mountpoint -q "$MOUNT_POINT"; do
sleep 1
done
echo "Das Gerät ist nicht länger gemountet."
rmdir $MOUNT_POINT
fi
sleep 5
done
Das neue Backup-Watchdog-Script bei einschalten der Festplatte zu starten, lässt sich elegant mit einem systemd-Service bewerkstelligen. Zu erst also einen passenden Service anlegen.
vim /etc/systemd/system/my_backup_watchdog.service
und den neuen Backup-Service wie folgt konfigurieren.
[Unit]
Description=My device trigger Script
After=network.target
[Service]
User=root
WorkingDirectory=/home/guru/bin
ExecStart=/home/user/bin/my_backup_watchdog.sh
Type=idle
[Install]
WantedBy=multi-user.target
Zuletzt noch den systemd-Service aktivieren.
sudo systemctl enable my_backup_watchdog.service
und starten
sudo systemctl start my_backup_watchdog.service
Und nach dem ersten Aus- und wieder Einschalten der Backup-Festplatte prüfen, ob das Backup-Script gelaufen ist.
sudo journalctl -xef -u my_backup_watchdog.service
Das Backup-Script my_backup.sh
enthält in meinem Fall nur ein rsync-Aufruf, der alle Docker-Volumes sichert, die auf _data
, _config
oder _backup
enden.
#!/bin/bash -v
rsync -avL --delete --include='*_data/***' --include='*_config/***' --include='*_backup/***' --exclude='*' "$SOURCE_DIR" "$DESTINATION_DIR"
umount "$DESTINATION_DIR"
Automatisches Einschalten der Backup-Festplatte
Über die Hue-Smartphone-App lässt lassen sich Timer einstellen. Einfach unter "Automatisierung" den Timer für die Steckdose stellen. Jedes Mal, wenn die Steckdose per Timer eingeschaltet wird, wird die Festplatte eingehängt und das Backup gestartet.
Automatisches Abschalten der Backup-Festplatte
Das händische Ausschalten der Backup-Festplatte nach Beendigung des Backups ist in diesem Setup noch der dumme Teil. Wer eine Hue-Bridge hat, kann das automatisch erledigen, in dem man der Hue-Bridge das Signal zum Ausschalten der Steckdose übermittelt.
Als erstes muss man einen authorisierten Username auf der Hue-Bridge generieren. Dafür den Schalter der Hue-Bridge drücken und folgendes Curl-Statement absetzen.
curl -X POST https://<bridge ip address>/api -H "Content-Type: application/json" -d '{"devicetype":"my_hue_script#homeserver peter"}' --insecure
Man erhält nun den Username zurück, mit dem man im weiteren Verlauf alle Geräte abrufen und auch schalten kann. Das folgende Curl-Statement fragt die schaltbaren Geräte ab. Das sind neben den Leuchten eben auch Steckdosen.
curl -X GET https://<bridge ip address>/api/<username>/lights --insecure
Die Rückgabe enthält alle Geräte. Das oberste Element ist jeweils eine Ziffer, mit der sich das Gerät ansteuern lässt. Hat die Steckdose zum Beispiel die Nummer 16, lässt diese sich schalten, in dem man dem Key on
den Wert true oder false zuordnet. Also die Steckdose ein, oder ausschaltet. Die folgende Zeile dann einfach nach dem Unmounten der Festplatte ausführen und die Festplatte wird abgeschaltet.
curl -X PUT https://<bridge ip address>/api/<username>/lights/16/state -H "Content-Type: application/json" -d '{"on":false}' --insecure
Links
Get Started with Hue-Rest
Philips Hue: Timer für Lampen einstellen
Etckeeper ist ein Tool, mit dem Benutzer ihr /etc-Verzeichnis in einem Versionskontroll-Repository wie Git, Mercurial, Bazaar oder Darcs speichern können. Dies bietet den Benutzern mehrere Vorteile, darunter die Möglichkeit, Änderungen am /etc-Verzeichnis zu überprüfen oder rückgängig zu machen und Konfigurationsänderungen zu sichern, indem das Repository an einen anderen Ort verschoben wird.
Einer der Hauptvorteile von Etckeeper ist, dass es sich in Paketmanager wie apt einklinkt und Änderungen, die während eines Paket-Upgrades in /etc vorgenommen werden, automatisch festschreibt. Dies bedeutet, dass Benutzer Änderungen an der Systemkonfiguration im Laufe der Zeit leicht verfolgen und verwalten können. Darüber hinaus verfolgt Etckeeper Dateimetadaten, die Git normalerweise nicht unterstützt, wie z. B. die Berechtigungen von /etc/shadow, was für die Sicherheit und Integrität des Systems wichtig ist.
Etckeeper ist modular und konfigurierbar, was es zu einem mächtigen Werkzeug für fortgeschrittene Benutzer macht. Es ist aber auch für diejenigen einfach zu benutzen, die die Grundlagen der Versionskontrolle verstehen. Einige der Vor- und Nachteile der Verwendung von Etckeeper sind:
Vorteile:
- Verbesserte Verwaltung und Verfolgung der Systemkonfiguration
- Automatisches Commit von Änderungen, die bei Paket-Upgrades vorgenommen werden
- Unterstützung für die Verfolgung von Datei-Metadaten, einschließlich Dateiberechtigungen
- Kompatibilität mit mehreren gängigen Versionskontrollsystemen
- Modular und konfigurierbar, ermöglicht erweiterte Anpassungen
Nachteilig:
- Erfordert einige Kenntnisse über Versionskontrolle, um effektiv zu arbeiten
- Erfordert die Installation und Einrichtung eines Versionskontrollsystems
- Kann zusätzliche Systemressourcen für die Pflege des Repositorys verbrauchen
Insgesamt ist Etckeeper ein leistungsfähiges Werkzeug für Systemadministratoren und fortgeschrittene Benutzer, die ihre Systemkonfiguration besser verwalten und verfolgen wollen. Es bietet mehrere Vorteile, darunter die automatische Übertragung von Änderungen, die Verfolgung von Datei-Metadaten und die Kompatibilität mit gängigen Versionskontrollsystemen. Es erfordert jedoch auch einige Kenntnisse und die Einrichtung der Versionskontrolle und kann zusätzliche Systemressourcen für die Verwaltung des Repositorys verbrauchen.
Links:
Auf dem Server einloggen. Tar-Archiv erzeugen und per ssh direkt remote speichern:
tar -c volume1/folder | ssh user@remoteserver "cat > /media/folder.tar"
Und zurückspielen:
ssh user@remoteserver 'cat /media/folder.tar' | tar xvf -