Files
opensimMULTITOOLS-II/osmtool.sh
T

901 lines
38 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#──────────────────────────────────────────────────────────────────────────────────────────
#* Informationen
#──────────────────────────────────────────────────────────────────────────────────────────
SCRIPTNAME="opensimMULTITOOL II"
VERSION="V25.3.20.36"
echo "$SCRIPTNAME $VERSION"
tput reset # Bildschirmausgabe loeschen inklusive dem Scrollbereich.
echo -e "\e[36m$SCRIPTNAME\e[0m $VERSION"
echo "Dies ist ein Tool welches der Verwaltung von OpenSim Servern dient."
echo "Bitte beachten Sie, dass die Anwendung auf eigene Gefahr und Verantwortung erfolgt."
echo -e "\e[33mZum Abbrechen bitte STRG+C oder CTRL+C drücken.\e[0m"
echo " "
# ColorNames=( Black Red Green Yellow Blue Magenta Cyan White )
# FgColors=( 30 31 32 33 34 35 36 37 )
# BgColors=( 40 41 42 43 44 45 46 47 )
# echo "Symbole für Statusanzeigen"
# echo "✅ Pfeile: → ← ↑ ↓ ✅ Kreise: ○ ● ⭘ ◯ ✅ Quadrate: ■ □ ▪ ▫ ✅ Sterne: ★ ☆ ✦ ✧ ✪"
# echo "✅ Haken und Kreuze: ✓ ✘ ✅ Uhren & Zeit: ⏳ ⌛ ⏰ ✅ Zahlen als Kreise: ➀ ➁ ➂ ➃"
#──────────────────────────────────────────────────────────────────────────────────────────
#* Variablen
#──────────────────────────────────────────────────────────────────────────────────────────
# Hauptpfad des Skripts automatisch setzen
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
cd "$SCRIPT_DIR" || exit 1
echo "Arbeitsverzeichnis ist: $SCRIPT_DIR"
echo " "
KOMMANDO=$1 # Eingabeauswertung fuer Funktionen.
MONEYCOPY="yes" # MoneyServer Installieren.
#──────────────────────────────────────────────────────────────────────────────────────────
#* Abhängigkeiten installieren
#──────────────────────────────────────────────────────────────────────────────────────────
# Fehlende Abhängigkeiten installieren
function servercheck() {
# Direkt kompatible Distributionen:
# Debian 11+ (Bullseye, Bookworm) Offiziell unterstützt für .NET 8
# Ubuntu 18.04, 20.04, 22.04 Microsoft bietet direkt kompatible Pakete
# Linux Mint (basierend auf Ubuntu 20.04 oder 22.04)
# Pop!_OS (System76, basiert auf Ubuntu)
# MX Linux (Debian-basiert, integriert Ubuntu-Funktionen)
# Mögliche kompatible Distributionen (mit Anpassungen):
# Kali Linux (basierend auf Debian 12, Anpassungen nötig für .NET-Pakete)
# Zorin OS (Ubuntu-basiert, Unterstützung abhängig von Version)
# elementary OS (Ubuntu-basiert, kann .NET aus Ubuntu-Quellen beziehen)
# Raspberry Pi OS (Debian-basiert, erfordert manuelle Installation für .NET)
# Ermitteln der Distribution und Version
os_id=$(grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
os_version=$(grep '^VERSION_ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
echo "Server läuft mit $os_id $os_version"
# Prüfen, welche .NET-Version installiert werden muss
if [[ "$os_id" == "ubuntu" || "$os_id" == "linuxmint" || "$os_id" == "pop_os" ]]; then
if [[ "$os_version" == "22.04" || "$os_version" == "20.04" ]]; then
required_dotnet="dotnet-sdk-8.0"
elif [[ "$os_version" == "18.04" ]]; then
required_dotnet="dotnet-sdk-6.0"
fi
elif [[ "$os_id" == "debian" && "$os_version" -ge "11" ]]; then
required_dotnet="dotnet-sdk-8.0"
else
echo "✘ Keine unterstützte Version für .NET gefunden!"
return 1
fi
# Prüfen, ob .NET bereits installiert ist
if ! dpkg -s "$required_dotnet" >/dev/null 2>&1; then
echo "Installiere $required_dotnet..."
# Prüfen, ob die Microsoft-Paketquelle bereits existiert
if ! dpkg -l | grep -q "packages-microsoft-prod"; then
echo "Microsoft-Paketquelle hinzufügen..."
wget https://packages.microsoft.com/config/"$os_id"/"$os_version"/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
fi
# .NET installieren
sudo apt-get install -y "$required_dotnet"
echo "✓ $required_dotnet wurde erfolgreich installiert."
else
echo "✘ $required_dotnet ist bereits installiert."
fi
# Fehlende Pakete prüfen und installieren
required_packages=("libc6" "libgcc-s1" "libgssapi-krb5-2" "libicu70" "liblttng-ust1" "libssl3" "libstdc++6" "libunwind8" "zlib1g" "libgdiplus" "zip" "screen")
echo "Überprüfe fehlende Pakete..."
for package in "${required_packages[@]}"; do
if ! dpkg -s "$package" >/dev/null 2>&1; then
echo "✓ Installiere $package..."
sudo apt-get install -y "$package"
fi
done
echo "✓ Alle benötigten Pakete wurden installiert."
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Start Stop Restart
#──────────────────────────────────────────────────────────────────────────────────────────
# OpenSim starten (robust → money → sim1 bis sim999)
function opensimstart() {
echo -e "\e[32m"
# Prüfen, ob das Verzeichnis "robust/bin" existiert und Robust.dll vorhanden ist
if [[ -d "robust/bin" && -f "robust/bin/Robust.dll" ]]; then
echo "✓ Starte RobustServer aus robust/bin..."
cd robust/bin || exit 1
screen -fa -S robustserver -d -U -m dotnet Robust.dll
cd - >/dev/null 2>&1 || exit 1 # Zurück zum ursprünglichen Verzeichnis
sleep 30
else
echo "✘ Robust.dll wurde nicht gefunden. Überspringe RobustServer."
fi
# Prüfen, ob MoneyServer.dll vorhanden ist
if [[ -f "robust/bin/MoneyServer.dll" ]]; then
echo "✓ Starte MoneyServer aus robust/bin..."
cd robust/bin || exit 1
screen -fa -S moneyserver -d -U -m dotnet MoneyServer.dll
cd - >/dev/null 2>&1 || exit 1 # Zurück zum ursprünglichen Verzeichnis
sleep 30
else
echo "✘ MoneyServer.dll wurde nicht gefunden. Überspringe MoneyServer."
fi
# Alle simX-Server starten (sim1 bis sim999)
for ((i=1; i<=999; i++)); do
sim_dir="sim$i/bin"
if [[ -d "$sim_dir" && -f "$sim_dir/OpenSim.dll" ]]; then
echo "✓ Starte sim$i aus $sim_dir..."
cd "$sim_dir" || continue
screen -fa -S "sim$i" -d -U -m dotnet OpenSim.dll
cd - >/dev/null 2>&1 || continue # Zurück zum ursprünglichen Verzeichnis
sleep 20
fi
done
echo -e "\e[0m"
}
# OpenSim stoppen (sim999 bis sim1 → money → robust)
function opensimstop() {
echo -e "\e[35m"
echo "✓ Stoppe alle sim Regionen..."
for ((i=999; i>=1; i--)); do
sim_dir="sim$i"
if screen -list | grep -q "$sim_dir"; then
screen -S "sim$i" -p 0 -X stuff "shutdown^M"
echo "✓ sim$i wird heruntergefahren..."
sleep 15
fi
done
# Prüfen, ob MoneyServer läuft, bevor er gestoppt wird
if screen -list | grep -q "moneyserver"; then
echo "✓ Stoppe MoneyServer..."
screen -S moneyserver -p 0 -X stuff "shutdown^M"
sleep 30
else
echo "✘ MoneyServer läuft nicht. Überspringe Stoppvorgang."
fi
# Prüfen, ob RobustServer läuft, bevor er gestoppt wird
if screen -list | grep -q "robust"; then
echo "✓ Stoppe RobustServer..."
screen -S robustserver -p 0 -X stuff "shutdown^M"
sleep 30
else
echo "✘ RobustServer läuft nicht. Überspringe Stoppvorgang."
fi
echo -e "\e[0m"
}
# OpenSim neu starten
function opensimrestart() {
opensimstop
sleep 30 # Kurze Pause, um sicherzustellen, dass alles gestoppt wurde
opensimstart
echo "Welche sim Regionen sind gestartet?:"
screen -ls
}
function check_screens() {
# echo "Überprüfung der laufenden OpenSim-Prozesse..."
restart_all=false
# Überprüfen, ob RobustServer läuft
if [[ -d "robust/bin" && -f "robust/bin/Robust.dll" ]]; then
screenRO=$(screen -ls | grep -w "robustserver")
if [[ -z "$screenRO" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - RobustServer läuft nicht und muss neu gestartet werden." >> ProblemRestarts.log
restart_all=true
fi
fi
# Überprüfen, ob MoneyServer läuft
if [[ -d "robust/bin" && -f "robust/bin/MoneyServer.dll" ]];then
screenMoney=$(screen -ls | grep -w "moneyserver")
if [[ -z "$screenMoney" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - MoneyServer läuft nicht und muss neu gestartet werden." >> ProblemRestarts.log
restart_all=true
fi
fi
# Überprüfen, ob sim1 läuft
if [[ -d "sim1/bin" && -f "sim1/bin/OpenSim.dll" ]]; then
screenSim1=$(screen -ls | grep -w "sim1")
if [[ -z "$screenSim1" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Sim1 läuft nicht und muss neu gestartet werden." >> ProblemRestarts.log
restart_all=true
fi
fi
# Falls eines der kritischen Systeme ausgefallen ist, alles neu starten
if [[ "$restart_all" == true ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Kritische Prozesse sind ausgefallen! OpenSim wird komplett neu gestartet." >> ProblemRestarts.log
# opensimstart
opensimrestart
return 0
fi
# Überprüfen, ob andere simulierte Regionen (sim2 bis sim999) einzeln neu gestartet werden müssen
for ((i=2; i<=999; i++)); do
sim_dir="sim$i/bin"
if [[ -d "$sim_dir" && -f "$sim_dir/OpenSim.dll" ]]; then
screenSim=$(screen -ls | grep -w "sim$i")
if [[ -z "$screenSim" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Sim$i läuft nicht und wird einzeln neu gestartet." >> ProblemRestarts.log
cd "$sim_dir" || continue
screen -fa -S "sim$i" -d -U -m dotnet OpenSim.dll
cd - >/dev/null 2>&1 || continue
sleep 20
fi
fi
done
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Erstellen eines OpenSimulators
#──────────────────────────────────────────────────────────────────────────────────────────
function opensimgitcopy() {
echo "Möchten Sie den OpenSimulator vom GitHub verwenden? ([ja]/nein)"
read -r user_choice
user_choice=${user_choice:-ja}
if [[ "$user_choice" == "ja" ]]; then
# Falls eine alte Version existiert, diese entfernen
if [[ -d "opensim" ]]; then
echo "Vorhandene OpenSimulator-Version wird gelöscht..."
rm -rf opensim
echo "✓ Alte OpenSimulator-Version wurde erfolgreich entfernt."
fi
echo "OpenSimulator wird von GitHub geholt..."
git clone git://opensimulator.org/git/opensim opensim
echo "✓ OpenSimulator wurde erfolgreich heruntergeladen."
# .NET-Version auswählen
echo "Möchten Sie diese Version mit .NET 6 oder .NET 8 betreiben? ([8]/6)"
read -r dotnet_version
dotnet_version=${dotnet_version:-8}
if [[ "$dotnet_version" == "6" ]]; then
echo "Wechsle zu .NET 6-Version..."
cd opensim || { echo "Fehler: Verzeichnis 'opensim' nicht gefunden."; return 1; }
git checkout dotnet6
echo "✓ OpenSimulator wurde für .NET 6 umgebaut."
else
echo "✓ Standardmäßig wird .NET 8 verwendet."
fi
else
echo "✘ Abbruch: OpenSimulator wird nicht von GitHub geholt."
fi
}
function moneygitcopy() {
# Falls MONEYCOPY nicht gesetzt oder "no" ist, nichts tun
if [[ -z "$MONEYCOPY" || "$MONEYCOPY" == "no" ]]; then
return
fi
if [[ "$MONEYCOPY" == "yes" ]]; then
echo "MONEYSERVER: MoneyServer wird vom GIT geholt"
git clone https://github.com/ManfredAabye/opensimcurrencyserver-dotnet.git opensimcurrencyserver
# Prüfen, ob das Verzeichnis existiert, bevor es kopiert wird
if [[ -d "opensimcurrencyserver/addon-modules" ]]; then
cp -r opensimcurrencyserver/addon-modules opensim/
echo "✓ MONEYSERVER: addon-modules wurde nach opensim kopiert"
else
echo "✘ MONEYSERVER: addon-modules existiert nicht"
fi
if [[ -d "opensimcurrencyserver/bin" ]]; then
cp -r opensimcurrencyserver/bin opensim/
echo "✓ MONEYSERVER: bin wurde nach opensim kopiert"
else
echo "✘ MONEYSERVER: bin existiert nicht"
fi
else
echo "✘ MONEYSERVER: MoneyServer nicht vorhanden"
fi
return 0
}
function opensimbuild() {
echo "Möchten Sie den OpenSimulator jetzt erstellen? ([ja]/nein)"
read -r user_choice
user_choice=${user_choice:-ja}
if [[ "$user_choice" == "ja" ]]; then
if [[ -d "opensim" ]]; then
cd opensim || { echo "Fehler: Verzeichnis 'opensim' nicht gefunden."; return 1; }
echo "Starte Prebuild-Skript..."
bash runprebuild.sh
echo "Baue OpenSimulator..."
dotnet build --configuration Release OpenSim.sln
echo "✓ OpenSimulator wurde erfolgreich erstellt."
else
echo "✘ Fehler: Das Verzeichnis 'opensim' existiert nicht."
return 1
fi
else
echo "✘ Abbruch: OpenSimulator wird nicht erstellt."
fi
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Erstellen eines OpenSimulators Grids
#──────────────────────────────────────────────────────────────────────────────────────────
function createdirectory () {
echo "Möchten Sie einen Gridserver oder einen Regionsserver erstellen? ([grid]/region)"
read -r server_type
# Standardmäßig Gridserver wählen, falls keine Eingabe erfolgt
server_type=${server_type:-grid}
if [[ "$server_type" == "grid" ]]; then
echo "Erstelle robust Verzeichnis..."
mkdir -p robust/bin
echo "✓ Robust Verzeichnis wurde erstellt."
# Nach der Erstellung des Gridservers auch die Regionsserver erstellen lassen
echo "Wie viele Regionsserver benötigen Sie?"
read -r num_regions
elif [[ "$server_type" == "region" ]]; then
echo "Wie viele Regionsserver benötigen Sie?"
read -r num_regions
else
echo "✘ Ungültige Eingabe. Bitte geben Sie 'grid' oder 'region' ein."
return 1
fi
# Überprüfen, ob die Anzahl der Regionsserver bis 999 geht
if [[ "$num_regions" =~ ^[0-9]+$ && "$num_regions" -le 999 ]]; then
for ((i=1; i<=num_regions; i++)); do
dir_name="sim$i"
if [[ ! -d "$dir_name" ]]; then
mkdir -p "$dir_name/bin"
echo "$dir_name wurde erstellt."
else
echo "$dir_name existiert bereits und wird übersprungen."
fi
done
else
echo "✘ Ungültige Anzahl an Regionsserver. Bitte geben Sie eine gültige Zahl zwischen 1 und 999 ein."
fi
}
function opensimcopy () {
echo -e "\e[32m"
# Prüfen, ob das Verzeichnis "opensim" existiert
if [[ ! -d "opensim" ]]; then
echo "✘ Fehler: Das Verzeichnis 'opensim' existiert nicht."
return 1
fi
# Prüfen, ob das Unterverzeichnis "opensim/bin" existiert
if [[ ! -d "opensim/bin" ]]; then
echo "✘ Fehler: Das Verzeichnis 'opensim/bin' existiert nicht."
return 1
fi
# Prüfen, ob das Verzeichnis "robust" existiert und Dateien kopieren
if [[ -d "robust" ]]; then
cp -r opensim/bin/* robust/bin
echo "✓ Dateien aus 'opensim/bin' wurden nach 'robust/bin' kopiert."
else
echo "✘ Hinweis: 'robust' Verzeichnis nicht gefunden, keine Kopie durchgeführt."
fi
# Alle simX-Verzeichnisse suchen und Dateien kopieren
for sim_dir in sim*; do
if [[ -d "$sim_dir/bin" ]]; then
cp -r opensim/bin/* "$sim_dir/bin/"
echo "✓ Dateien aus 'opensim/bin' wurden nach '$sim_dir/bin' kopiert."
fi
done
echo -e "\e[0m"
}
function mariasetup() {
echo -e "\033[32m"
# 1. Prüfen ob MariaDB installiert ist
if ! command -v mariadb &> /dev/null && ! command -v mysql &> /dev/null; then
echo -e "\033[33mMariaDB ist nicht installiert.\033[0m"
echo "Möchten Sie MariaDB installieren? (j/n) "
read -r install_choice
if [[ "$install_choice" =~ ^[jJ] ]]; then
echo "Installiere MariaDB..."
# Distro-spezifische Installation
if [[ -f /etc/debian_version ]]; then
sudo apt-get update
sudo apt-get install -y mariadb-server
elif [[ -f /etc/redhat-release ]]; then
sudo yum install -y mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
else
echo "Nicht unterstütztes Betriebssystem für automatische Installation"
return 1
fi
# Sichere Installation durchführen
sudo mysql_secure_installation
else
echo "Installation abgebrochen."
return 0
fi
else
echo "MariaDB ist bereits installiert."
fi
# 2. Datenbanken anlegen für vorhandene Server
echo "Erstelle Datenbanken für vorhandene Server..."
# Für RobustServer
if [[ -d "robust" ]]; then
echo "Erstelle Datenbank 'robust'..."
sudo mysql -e "CREATE DATABASE IF NOT EXISTS robust;"
sudo mysql -e "GRANT ALL PRIVILEGES ON robust.* TO 'robustuser'@'localhost' IDENTIFIED BY 'robustpassword';"
sudo mysql -e "FLUSH PRIVILEGES;"
fi
# Für alle simX Server
for ((i=1; i<=999; i++)); do
if [[ -d "sim$i" ]]; then
db_name="sim$i"
echo "Erstelle Datenbank '$db_name'..."
sudo mysql -e "CREATE DATABASE IF NOT EXISTS $db_name;"
sudo mysql -e "GRANT ALL PRIVILEGES ON $db_name.* TO 'simuser'@'localhost' IDENTIFIED BY 'simpassword';"
sudo mysql -e "FLUSH PRIVILEGES;"
fi
done
echo -e "\n\033[32mDatenbankeinrichtung abgeschlossen!\033[0m"
echo -e "Zusammenfassung der erstellten Datenbanken:"
sudo mysql -e "SHOW DATABASES LIKE 'robust';"
sudo mysql -e "SHOW DATABASES LIKE 'sim%';"
echo -e "\033[0m"
}
function sqlsetup() {
echo -e "\033[32m"
# 1. Distribution Detection
detect_distro() {
if [[ -f /etc/os-release ]]; then
awk -F= '/^ID=/ {print $2}' /etc/os-release | tr -d '"'
elif [[ -f /etc/debian_version ]]; then
echo "debian"
elif [[ -f /etc/centos-release ]]; then
echo "centos"
else
echo "unknown"
fi
}
current_distro=$(detect_distro)
supported_distros=("debian" "ubuntu" "linuxmint" "pop" "mx" "kali" "zorin" "elementary" "raspbian")
if ! printf '%s\n' "${supported_distros[@]}" | grep -q "^$current_distro$"; then
echo -e "\033[31mNicht unterstützte Distribution: $current_distro\033[0m"
return 1
fi
# 2. MariaDB Installation Check
if ! command -v mariadb &> /dev/null && ! command -v mysql &> /dev/null; then
echo -e "\033[33mMariaDB ist nicht installiert.\033[0m"
echo "Möchten Sie MariaDB installieren? (j/n) "
read -r install_choice
if [[ "$install_choice" =~ ^[jJ] ]]; then
echo "Installiere MariaDB für $current_distro..."
case $current_distro in
debian|ubuntu|linuxmint|pop|zorin|elementary|kali|mx)
sudo apt-get update
sudo apt-get install -y mariadb-server
;;
raspbian)
sudo apt-get update
sudo apt-get install -y mariadb-server-10.5
;;
*)
echo "Automatische Installation für $current_distro nicht verfügbar"
return 1
;;
esac
# Secure Installation
echo -e "\033[34mFühre sichere Installation durch...\033[0m"
sudo mysql_secure_installation
else
echo "Installation abgebrochen."
return 0
fi
else
echo "MariaDB ist bereits installiert."
fi
# 3. Database Setup with Secure Random Passwords
echo "Erstelle Datenbanken für vorhandene Server..."
generate_password() {
tr -dc 'A-Za-z0-9!@#$%^&*()' < /dev/urandom | head -c 16
}
# RobustServer DB
if [[ -d "robust" ]]; then
robust_pw=$(generate_password)
echo "Erstelle Datenbank 'robust'..."
sudo mysql -e "CREATE DATABASE IF NOT EXISTS robust;"
sudo mysql -e "CREATE USER IF NOT EXISTS 'robustuser'@'localhost' IDENTIFIED BY '$robust_pw';"
sudo mysql -e "GRANT ALL PRIVILEGES ON robust.* TO 'robustuser'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"
echo -e "\033[34mRobust DB Passwort: $robust_pw\033[0m"
fi
# simX Server DBs
for ((i=1; i<=999; i++)); do
if [[ -d "sim$i" ]]; then
sim_pw=$(generate_password)
db_name="sim$i"
echo "Erstelle Datenbank '$db_name'..."
sudo mysql -e "CREATE DATABASE IF NOT EXISTS $db_name;"
sudo mysql -e "CREATE USER IF NOT EXISTS 'sim${i}user'@'localhost' IDENTIFIED BY '$sim_pw';"
sudo mysql -e "GRANT ALL PRIVILEGES ON $db_name.* TO 'sim${i}user'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"
echo -e "\033[34mSim$i DB Passwort: $sim_pw\033[0m"
fi
done
# 4. Post-Install Check
echo -e "\n\033[32mDatenbankeinrichtung abgeschlossen!\033[0m"
echo -e "Zusammenfassung:"
sudo mysql -e "SELECT User, Host FROM mysql.user WHERE User LIKE 'robustuser' OR User LIKE 'sim%';"
sudo mysql -e "SHOW DATABASES LIKE 'robust'; SHOW DATABASES LIKE 'sim%';"
# Save passwords securely
if [[ -d "robust" ]]; then
echo "robust DB Passwort: $robust_pw" | sudo tee "$SCRIPT_DIR"/mariadb_passwords.txt >/dev/null
fi
for ((i=1; i<=999; i++)); do
if [[ -d "sim$i" ]]; then
echo "sim$i DB Passwort: $sim_pw" | sudo tee -a "$SCRIPT_DIR"/mariadb_passwords.txt >/dev/null
fi
done
echo -e "\n\033[33mPasswörter wurden in $SCRIPT_DIR/mariadb_passwords.txt gespeichert\033[0m"
echo -e "\033[0m"
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Upgrade des OpenSimulators Grids
#──────────────────────────────────────────────────────────────────────────────────────────
#──────────────────────────────────────────────────────────────────────────────────────────
#* Bereinigen des OpenSimulators Grids
#──────────────────────────────────────────────────────────────────────────────────────────
function dataclean() {
echo -e "\033[32m"
#file_types=("*.log" "*.dll" "*.exe" "*.so" "*.xml" "*.dylib" "*.example" "*.sample" "*.txt" "*.config" "*.py" "*.old" "*.pdb")
# RobustServer bereinigen
if [[ -d "robust/bin" ]]; then
echo "✓ Lösche Dateien im RobustServer..."
find "robust/bin" -maxdepth 1 -type f \( -name "*.log" -o -name "*.dll" -o -name "*.exe" -o -name "*.so" -o -name "*.xml" -o -name "*.dylib" -o -name "*.example" -o -name "*.sample" -o -name "*.txt" -o -name "*.config" -o -name "*.py" -o -name "*.old" -o -name "*.pdb" \) -delete
fi
# Alle simX-Server bereinigen
for ((i=1; i<=999; i++)); do
sim_dir="sim$i/bin"
if [[ -d "$sim_dir" ]]; then
echo "✓ Lösche Dateien in $sim_dir..."
find "$sim_dir" -maxdepth 1 -type f \( -name "*.log" -o -name "*.dll" -o -name "*.exe" -o -name "*.so" -o -name "*.xml" -o -name "*.dylib" -o -name "*.example" -o -name "*.sample" -o -name "*.txt" -o -name "*.config" -o -name "*.py" -o -name "*.old" -o -name "*.pdb" \) -delete
fi
done
echo -e "\033[0m"
}
function pathclean() {
echo -e "\033[32m"
directories=("assetcache" "maptiles" "MeshCache" "j2kDecodeCache" "ScriptEngines" "bakes" "addon-modules")
wildcard_dirs=("addin-db-*") # Separate Liste für Wildcard-Verzeichnisse
# RobustServer bereinigen
if [[ -d "robust/bin" ]]; then
echo "✓ Lösche komplette Verzeichnisse im RobustServer..."
# Normale Verzeichnisse
for dir in "${directories[@]}"; do
target="robust/bin/$dir"
if [[ -d "$target" ]]; then
rm -rf "$target"
echo " Verzeichnis gelöscht: $target"
fi
done
# Wildcard-Verzeichnisse
for pattern in "${wildcard_dirs[@]}"; do
for target in robust/bin/$pattern; do
if [[ -d "$target" ]]; then
rm -rf "$target"
echo " Verzeichnis gelöscht: $target"
fi
done
done
fi
# Alle simX-Server bereinigen
for ((i=1; i<=999; i++)); do
sim_dir="sim$i/bin"
if [[ -d "$sim_dir" ]]; then
echo "✓ Lösche komplette Verzeichnisse in $sim_dir..."
# Normale Verzeichnisse
for dir in "${directories[@]}"; do
target="$sim_dir/$dir"
if [[ -d "$target" ]]; then
rm -rf "$target"
echo " Verzeichnis gelöscht: $target"
fi
done
# Wildcard-Verzeichnisse
for pattern in "${wildcard_dirs[@]}"; do
for target in $sim_dir/$pattern; do
if [[ -d "$target" ]]; then
rm -rf "$target"
echo " Verzeichnis gelöscht: $target"
fi
done
done
fi
done
echo -e "\033[0m"
}
function cacheclean() {
echo -e "\033[32m"
cache_dirs=("assetcache" "maptiles" "MeshCache" "j2kDecodeCache" "ScriptEngines")
# RobustServer bereinigen
if [[ -d "robust/bin" ]]; then
echo "✓ Leere Cache-Verzeichnisse im RobustServer..."
for dir in "${cache_dirs[@]}"; do
target="robust/bin/$dir"
if [[ -d "$target" ]]; then
find "$target" -mindepth 1 -delete
echo " Inhalt geleert: $target"
fi
done
fi
# Alle simX-Server bereinigen
for ((i=1; i<=999; i++)); do
sim_dir="sim$i/bin"
if [[ -d "$sim_dir" ]]; then
echo "✓ Leere Cache-Verzeichnisse in $sim_dir..."
for dir in "${cache_dirs[@]}"; do
target="$sim_dir/$dir"
if [[ -d "$target" ]]; then
find "$target" -mindepth 1 -delete
echo " Inhalt geleert: $target"
fi
done
fi
done
echo -e "\033[0m"
}
function logclean() {
echo -e "\033[32m"
# RobustServer bereinigen
if [[ -d "robust/bin" ]]; then
echo "✓ Lösche Log-Dateien im RobustServer..."
rm -f robust/bin/*.log
fi
# Alle simX-Server bereinigen (sim1 bis sim999)
for ((i=1; i<=999; i++)); do
sim_dir="sim$i/bin"
if [[ -d "$sim_dir" ]]; then
echo "✓ Lösche Log-Dateien in $sim_dir..."
rm -f "$sim_dir"/*.log
fi
done
echo -e "\033[0m"
}
# Wie erstelle ich am beseten folgende Bash Funktion wie sie in der Funktion beschrieben wird?:
function mapclean() {
echo -e "\033[32m"
# Sicherheitscheck für robust/bin/maptiles
if [[ -d "robust/bin/maptiles" ]]; then
rm -rf -- "robust/bin/maptiles/"*
echo "✓ robust/bin/maptiles geleert"
fi
# Sicherheitscheck für alle simX/bin/maptiles
for ((i=1; i<=999; i++)); do
local sim_dir="sim$i/bin/maptiles"
if [[ -d "$sim_dir" ]]; then
# shellcheck disable=SC2115
rm -rf -- "${sim_dir}/"*
echo "✓ ${sim_dir} geleert"
fi
done
echo -e "mapclean abgeschlossen.\033[0m"
}
function autoallclean() {
local confirm
# Warnung in Gelb (konsistenter mit \e anstelle von \033)
echo -e "\e[33m"
cat >&2 <<'WARNUNG'
=== WARNUNG: Alle Daten-, Verzeichnis-, Cache-, Log- und Map-Daten werden bereinigt! ===
=== DIESE OPERATION KANN NICHT RÜCKGÄNGIG GEMACHT WERDEN! ===
=== DER OPENSIMULATOR MUSS IM ANSCHLUSS NEU INSTALLIERT WERDEN! ===
WARNUNG
echo -e "\e[0m"
# Bestätigung mit Timeout (10 Sekunden) für Sicherheit
read -t 30 -r -p "Fortfahren? (ja/NEIN): " confirm || {
echo -e "\n\e[31mTimeout: Keine Bestätigung erhalten. Abbruch.\e[0m" >&2
return 1
}
case "${confirm,,}" in
ja|j|y|yes)
echo -e "\e[32mBereinigung wird gestartet...\e[0m" >&2
# Jede Clean-Funktion mit Fehlerprüfung
local clean_functions=(dataclean pathclean cacheclean logclean mapclean)
for func in "${clean_functions[@]}"; do
if ! command -v "$func" &>/dev/null; then
echo -e "\e[31mFehler: '$func' ist keine gültige Funktion!\e[0m" >&2
return 1
fi
"$func" || {
echo -e "\e[31mFehler bei $func!\e[0m" >&2
return 1
}
done
echo -e "\e[32mBereinigung abgeschlossen.\e[0m" >&2
;;
*)
echo -e "\e[33mAbbruch: Bereinigung wurde nicht durchgeführt.\e[0m" >&2
return 1
;;
esac
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Automatischer Test
#──────────────────────────────────────────────────────────────────────────────────────────
function automatic () {
servercheck # Zuerst nachsehen ob der Server bereit für OpenSim ist.
createdirectory # Verzeichnisse erstellen.
opensimgitcopy # OpenSim aus dem Git herunterladen.
# Money und andere bestandteile herunterladen und in das opensim Verzeichnis kopieren.
moneygitcopy
opensimbuild # OpenSim kompilieren.
opensimcopy # OpenSim kopieren in alle Verzeichnisse also robust und sim1 bis sim999 halt soviele wie vorhanden.
# OpenSim konfigurieren.
# opensimstart # OpenSim starten.
# opensimstop # OpenSim stoppen.
# opensimrestart # OpenSim neu starten.
# check_screens # Laufende OpenSim Prozesse prüfen.
# dataclean # RobustServer und simX-Server von alten Dateien befreien (Neuinstallation erforderlich).
# pathclean # RobustServer und simX-Server von alten Verzeichnissen befreien (Neuinstallation erforderlich).
# cacheclean # RobustServer und simX-Server Cache bereinigen.
# logclean # RobustServer und simX-Server von alten Log´s befreien.
# mapclean # RobustServer und simX-Server von alten Maptile befreien.
# autoallclean # RobustServer und simX-Server von alten Dateien und Verzeichnissen befreien (Neuinstallation erforderlich).
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Hilfefunktionen
#──────────────────────────────────────────────────────────────────────────────────────────
function help () {
echo -e "\e[36mOpenSim Grid Starten Stoppen und Restarten:\e[0m"
echo -e "\e[32mopensimstart\e[0m # OpenSim starten.\e[0m"
echo -e "\e[32mopensimstop\e[0m # OpenSim stoppen.\e[0m"
echo -e "\e[32mopensimrestart\e[0m # OpenSim neu starten.\e[0m"
echo -e "\e[32mcheck_screens\e[0m # Laufende OpenSim Prozesse prüfen und restarten.\e[0m"
echo " "
echo -e "\e[36mEin OpenSim Grid erstellen oder aktualisieren:\e[0m"
echo -e "\e[32mservercheck\e[0m # Zuerst nachsehen ob der Server bereit für OpenSim ist."
echo -e "\e[32mcreatedirectory\e[0m # Verzeichnisse erstellen."
echo -e "\e[32mmariasetup\e[0m # MariaDB Datenbanken erstellen."
echo -e "\e[32msqlsetup\e[0m # SQL Datenbanken erstellen."
echo -e "\e[32mopensimgitcopy\e[0m # OpenSim aus dem Git herunterladen."
echo -e "\e[32mmoneygitcopy\e[0m # MoneyServer aus dem Git herunterladen."
echo -e "\e[32mopensimbuild\e[0m # OpenSim kompilieren."
echo -e "\e[35mOpenSim vorkonfigurieren fehlt noch.\e[0m"
echo -e "\e[32mopensimcopy\e[0m # OpenSim kopieren (in alle Verzeichnisse)."
echo -e "\e[35mOpenSim konfigurieren fehlt noch.\e[0m"
echo -e "\e[35mOpenSim Regionen konfigurieren fehlt noch.\e[0m"
echo " "
echo -e "\e[36mOpenSim Grid Bereinigen von alten Dateien, Verzeichnissen und Cache:\e[0m"
echo -e "\e[32mdataclean\e[0m # Robust und simX von alten Dateien befreien (Neuinstallation erforderlich).\e[0m"
echo -e "\e[32mpathclean\e[0m # Robust und simX von alten Verzeichnissen befreien (Neuinstallation erforderlich).\e[0m"
echo -e "\e[32mcacheclean\e[0m # Robust und simX Cache bereinigen.\e[0m"
echo -e "\e[32mlogclean\e[0m # Robust und simX von alten Logs befreien.\e[0m"
echo -e "\e[32mmapclean\e[0m # Robust und simX von alten Maptile Karten befreien.\e[0m"
echo -e "\e[32mautoallclean\e[0m # Robust und simX von alten Dateien und Verzeichnissen befreien (Neuinstallation erforderlich).\e[0m"
echo " "
}
#──────────────────────────────────────────────────────────────────────────────────────────
#* Eingabeauswertung
#──────────────────────────────────────────────────────────────────────────────────────────
case $KOMMANDO in
servercheck) servercheck ;;
createdirectory) createdirectory ;;
mariasetup) mariasetup ;;
sqlsetup) sqlsetup ;;
opensimgitcopy) opensimgitcopy ;;
moneygitcopy) moneygitcopy ;;
opensimbuild) opensimbuild ;;
opensimcopy) opensimcopy ;;
start|opensimstart) opensimstart ;;
stop|opensimstop) opensimstop ;;
osrestart|autorestart|restart|opensimrestart) opensimrestart ;;
check_screens) check_screens ;;
dataclean) dataclean ;;
pathclean) pathclean ;;
cacheclean) cacheclean ;;
logclean) logclean ;;
mapclean) mapclean ;;
autoallclean) autoallclean ;;
automatic) automatic ;; # Die automatische Installation zu testzwecken.
h|help|hilfe|*) help ;;
esac
# Programm Ende
echo -e "\e[36m${SCRIPTNAME}\e[0m ${VERSION} wurde beendet $(date +'%Y-%m-%d %H:%M:%S')" >&2
exit 0