Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
IAR Backup für Anfänger
#1
HowTo: Nutzung des saveinventar Bash-Skripts

## 1. Einleitung
Das `saveinventar`-Skript ermöglicht es, das Standard Inventar eines OpenSimulator-Nutzers als `.iar`-Archiv zu sichern.
Es speichert verschiedene Standard Inventarverzeichnisse automatisch in einem angegebenen Backup-Pfad.

## 2. Installation
### 2.1 Skript speichern
Speichere das folgende Skript als `saveinventar.sh` in einem gewünschten Verzeichnis:

```bash
Code:
#!/bin/bash

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
    #
    # Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar"
    # 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"

    # Sicherstellen, dass das Archivverzeichnis existiert
    mkdir -p "$archivpfad"

    # Liste der zu sichernden Verzeichnisse
    local -a inventarpfad=(
        "Animations"
        "Body Parts"
        "Calling Cards"
        "Clothing"
        "Current Outfit"
        "Favorites"
        "Gestures"
        "Landmarks"
        "Lost and Found"
        "Materials"
        "Meshes"
        "My Inventory"
        "My Suitcase"
        "Notecards"
        "Objects"
        "Outfits"
        "Photo Album"
        "Scripts"
        "Settings"
        "Sounds"
        "Textures"
        "Trash"
    )

    # 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
        local datei="${archivpfad}/${vorname}${nachname}_${verzeichnis}.iar"
        echo "[DEBUG] Speichere Verzeichnis: /$verzeichnis -> Datei: $datei"
        #log info "OSCOMMAND: save iar $vorname $nachname /$verzeichnis ***** $datei"
        screen -S "$SAVEINVSCREEN" -p 0 -X eval "stuff 'save iar $vorname $nachname $verzeichnis $passwort $datei'^M"
    done


    return 0
}

vorname="$1"
nachname="$2"
passwort="$3"
archivpfad="$4"
# Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar"
saveinventar "$vorname" "$nachname" "$passwort" "$archivpfad"
```

### 2.2 Skript ausführbar machen
Führe folgenden Befehl aus, um das Skript ausführbar zu machen:
```bash
Code:
chmod +x saveinventar.sh
```

## 3. Nutzung
Das Skript kann mit folgendem Befehl ausgeführt werden:
```bash
Code:
./saveinventar.sh "Vorname" "Nachname" "Passwort" "/pfad/zum/backup"
```
**Beispiel:**
```bash
Code:
./saveinventar.sh "John" "Doe" "meinPasswort" "/opt/backup"
```

## 4. Fehlerbehebung
### 4.1 Der Screen existiert nicht
**Fehlermeldung:**
```bash
Code:
[ERROR] Der Screen sim1 existiert nicht
```
**Lösung:**
- Stelle sicher, dass OpenSimulator läuft und `sim1` als Screen-Session aktiv ist.
- Überprüfe laufende Screens mit:
```bash
Code:
screen -list
```

### 4.2 Falscher Speicherpfad
Falls `.iar`-Dateien im falschen Verzeichnis landen, prüfe den `archivpfad`-Wert und passe ihn entsprechend an.

## 5. Fazit
Mit diesem Skript kannst du dein OpenSimulator-Inventar einfach sichern.
Falls Probleme auftreten, überprüfe die Debugging-Ausgaben und passe ggf. die Konfiguration an.

---
**Letzte Bearbeitung:** 08.02.2025
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



[-] The following 1 user says Thank You to Manfred Aabye for this post:
  • Dorena Verne
Zitieren
#2
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
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.



Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste