08.02.2025, 16:32
(Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2025, 16:32 von Manfred Aabye.)
Version zwei des Skriptes
Es schaut in eure Datenbank wie eure UUID ist,
liest dann alle Verzeichnisnamen aus und macht
ein IAR Backup jedes einzelnen Ordners
so hat man ein Backup und man kann teile einzeln weitergeben.
Diese Version ist für Linux mit Screen und MariaDB.
Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"
Zwischen den Backups macht dieses Skript 60 Sekunden Pause, damit nicht alle auf einmal heruntergeladen werden.
'''bash aveinventar.sh
'''
Es schaut in eure Datenbank wie eure UUID ist,
liest dann alle Verzeichnisnamen aus und macht
ein IAR Backup jedes einzelnen Ordners
so hat man ein Backup und man kann teile einzeln weitergeben.
Diese Version ist für Linux mit Screen und MariaDB.
Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"
Zwischen den Backups macht dieses Skript 60 Sekunden Pause, damit nicht alle auf einmal heruntergeladen werden.
'''bash aveinventar.sh
Code:
#!/bin/bash
function mariarest() {
# Letzte Bearbeitung 12.11.2023
# todo: Diese Funktion wird von vielen Funktionen aufgerufen und darf nicht verändert werden.
# Überprüfen, ob MariaDB-Client installiert ist # TODO Testen OK
if ! command -v mariadb &> /dev/null; then
echo "Der MariaDB-Client ist nicht installiert. Bitte installieren Sie ihn zuerst."
return 1
fi
# Überprüfen, ob alle erforderlichen Parameter vorhanden sind # TODO Testen OK
if [ "$#" -ne 4 ]; then
echo "Usage: mariarest <username> <password> <databasename> <mysqlcommand>"
return 1
fi
# Übergeben der Argumente an Variablen
local username="$1"
local password="$2"
local databasename="$3"
local mariacommand="$4"
# Überprüfen, ob die erforderlichen Variablen nicht leer sind
if [ -z "$username" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
if [ -z "$password" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
if [ -z "$databasename" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
if [ -z "$mariacommand" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
# Überprüfen, ob die erforderlichen Variablen nicht leer sind # TODO Testen OK
if [ -z "$username" ] || [ -z "$password" ] || [ -z "$databasename" ] || [ -z "$mariacommand" ]; then
echo "All parameters must be provided and not empty."
return 1
fi
# Ausführen des MariaDB-Befehls und Erfassen des Ergebnisses
result_mariarest=$(echo "$mariacommand;" | MYSQL_PWD=$password mariadb -u"$username" "$databasename" -N) 2>/dev/null
# Testausgabe des MySQL-Befehls
echo "$result_mariarest"
}
function saveinventar() {
# Letzte Bearbeitung 08.02.2025
#
# Speichert den OpenSim Inventar mit "save iar" in ein Archiv.
#
# $1: Vorname
# $2: Nachname
# $3: Passwort
# $4: Archivpfad
# $5: DB Benutzername
# $6: DB Passwort
# $7: DB Name
#
# Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"
# Return: 0 wenn erfolgreich, 1 wenn der Screen nicht existiert
local SAVEINVSCREEN="sim1"
local vorname="$1"
local nachname="$2"
local passwort="$3"
local archivpfad="$4"
local db_username="$5"
local db_password="$6"
local db_name="$7"
# Sicherstellen, dass das Archivverzeichnis existiert
mkdir -p "$archivpfad"
# UUID des Benutzers aus der Datenbank auslesen
local query="SELECT PrincipalID FROM UserAccounts WHERE FirstName='$vorname' AND LastName='$nachname'"
local user_uuid=$(mariarest "$db_username" "$db_password" "$db_name" "$query")
user_uuid=$(echo "$user_uuid" | awk '{print $1}')
if [ -z "$user_uuid" ]; then
echo "Benutzer nicht gefunden."
return 1
fi
# Liste der Inventarordner des Benutzers aus der Datenbank auslesen
query="SELECT folderName FROM inventoryfolders WHERE agentID='$user_uuid'"
local inventarpfad=$(mariarest "$db_username" "$db_password" "$db_name" "$query")
IFS=$'\n' read -rd '' -a inventarpfad <<<"$inventarpfad"
if [ ${#inventarpfad[@]} -eq 0 ]; then
echo "Keine Inventarordner gefunden."
return 1
fi
# Prüfen, ob der Screen existiert
if ! screen -list | grep -q "$SAVEINVSCREEN"; then
# log info "OSCOMMAND: Der Screen $SAVEINVSCREEN existiert nicht"
echo "OSCOMMAND: Der Screen $SAVEINVSCREEN existiert nicht"
return 1
fi
# Schleife über alle Verzeichnisse und Backup durchführen
for verzeichnis in "${inventarpfad[@]}"; do
# Verzeichnisname in Anführungszeichen setzen
local verzeichnis_escaped="\"$verzeichnis\""
# Leerzeichen im Verzeichnisnamen durch Unterstriche im Dateinamen ersetzen
local datei_name=$(echo "$verzeichnis" | tr ' ' '_')
local datei="${archivpfad}/${vorname}_${nachname}_${datei_name}.iar"
echo "[DEBUG] Speichere Verzeichnis: $verzeichnis_escaped -> Datei: $datei"
# log info "OSCOMMAND: save iar $vorname $nachname $verzeichnis_escaped ***** $datei"
screen -S "$SAVEINVSCREEN" -p 0 -X eval "stuff 'save iar $vorname $nachname $verzeichnis_escaped $passwort $datei'^M"
# Pause von 60 Sekunden zwischen den Sicherungen
sleep 60
done
return 0
}
vorname="$1"
nachname="$2"
passwort="$3"
archivpfad="$4"
db_username="$5"
db_password="$6"
db_name="$7"
# Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"
saveinventar "$vorname" "$nachname" "$passwort" "$archivpfad" "$db_username" "$db_password" "$db_name"
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.