diff --git a/vbox_clean.sh b/vbox_clean.sh new file mode 100755 index 0000000..373f400 --- /dev/null +++ b/vbox_clean.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# Basisverzeichnis mit User-Ordnern, die VMs enthalten +VM_BASE_DIR="/srv/vbox_storage" + +# VBoxManage-Binary Pfad (kann angepasst werden, wenn VBoxManage nicht im PATH ist) +VBOXMANAGE=$(which VBoxManage) + +if [ -z "$VBOXMANAGE" ]; then + echo "Fehler: VBoxManage nicht gefunden. Bitte VirtualBox installieren oder PATH prüfen." + exit 1 +fi + +# Alle registrierten VMs sammeln (Namen) +registered_vms=$($VBOXMANAGE list vms | awk '{print $1}' | tr -d '"') + +echo "Gefundene registrierte VMs:" +echo "$registered_vms" +echo + +# Funktion: Prüft, ob ein VM-Name registriert ist +is_vm_registered() { + local vm_name="$1" + if echo "$registered_vms" | grep -qx "$vm_name"; then + return 0 # registriert + else + return 1 # nicht registriert + fi +} + +echo "Starte Aufräumen im Verzeichnis $VM_BASE_DIR" + +# User-Ordner durchlaufen +for user_dir in "$VM_BASE_DIR"/*; do + if [ -d "$user_dir" ]; then + echo "Prüfe User-Ordner: $(basename "$user_dir")" + + # VM-Ordner im User-Ordner durchlaufen + for vm_dir in "$user_dir"/*; do + if [ -d "$vm_dir" ]; then + vm_folder_name=$(basename "$vm_dir") + + if is_vm_registered "$vm_folder_name"; then + echo " VM-Ordner '$vm_folder_name' ist registriert. Kein Löschen." + else + echo " VM-Ordner '$vm_folder_name' NICHT registriert. Lösche Ordner..." + rm -rf "$vm_dir" + echo " Ordner '$vm_folder_name' gelöscht." + fi + fi + done + fi +done + +echo "Aufräumen abgeschlossen." + diff --git a/vbox_clean_1.sh b/vbox_clean_1.sh new file mode 100644 index 0000000..426b12c --- /dev/null +++ b/vbox_clean_1.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" + +echo "Starte Cleanup von nicht registrierten VM-Ordnern..." +bash "$SCRIPT_DIR/vbox_clean.sh" + +echo +echo "Starte VM-Erstellung..." +bash "$SCRIPT_DIR/vbox_create.sh" + +echo "Alle Aktionen abgeschlossen." + diff --git a/vbox_create.sh b/vbox_create.sh index 8890e63..d66297a 100755 --- a/vbox_create.sh +++ b/vbox_create.sh @@ -68,7 +68,7 @@ identify_os() { *CentOS*) echo "RedHat_64" ;; - *Fedora-Workstation*|*Fedora-Server*) + *Fedora*|*fedora*) echo "Fedora_64" ;; *kali-linux*) @@ -135,7 +135,7 @@ do done # Variable für das Verzeichnis -VAR_VB="/srv/VirtualBox" +VAR_VB="/srv/vbox_storage" # Verzeichnis mit ISO-Dateien ISO_DIR="/srv/data/ISO/" diff --git a/vbox_manage.sh b/vbox_manage.sh new file mode 100755 index 0000000..4141f61 --- /dev/null +++ b/vbox_manage.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# vbox_manage.sh +# Kombi-Skript für Clean + Create mit Abfrage +# Autor: Branislav Zeljak + Anpassung ChatGPT +# Hinweis: Pfade ggf. anpassen! + +clear + +# Basisordner, wo VM-Ordner gesucht werden (z.B. zentrale Storage und User-Heimverzeichnisse) +BASE_DIRS=("/srv/vbox_storage" "/home") + +function clean_unregistered_vms() { + echo "Starte Cleanup aller nicht registrierten VMs..." + + # Alle registrierten VM-Namen erfassen + mapfile -t registered_vms < <(VBoxManage list vms | awk '{print $1}' | tr -d '"') + + # Hilfsfunktion zur Prüfung, ob VM registriert ist + is_registered_vm() { + local vmname="$1" + for regvm in "${registered_vms[@]}"; do + if [[ "$regvm" == "$vmname" ]]; then + return 0 + fi + done + return 1 + } + + for base_dir in "${BASE_DIRS[@]}"; do + if [[ ! -d "$base_dir" ]]; then + continue + fi + + # Suche VM-Ordner über .vbox Dateien + find "$base_dir" -type f -name "*.vbox" 2>/dev/null | while read -r vbox_file; do + vm_folder=$(dirname "$vbox_file") + vm_name=$(basename "$vbox_file" .vbox) + + if ! is_registered_vm "$vm_name"; then + echo "Nicht registrierte VM gefunden: $vm_name" + echo "Lösche Ordner: $vm_folder" + sudo rm -rf "$vm_folder" + fi + done + done + + echo "Cleanup abgeschlossen." +} + +function main() { + clean_unregistered_vms + + read -rp "Cleanup ist fertig. Soll mit der VM-Erstellung fortgefahren werden? (j/n): " answer + case "$answer" in + [jJ]* ) + # Pfad zu deinem VM-Erstellungsskript (hier anpassen falls nötig) + if [[ -x "./vbox_create.sh" ]]; then + ./vbox_create.sh + else + echo "Fehler: VM-Erstellungsskript ./vbox_create.sh nicht gefunden oder nicht ausführbar." + exit 1 + fi + ;; + * ) + echo "Abbruch. Es wird keine VM erstellt." + exit 0 + ;; + esac +} + +main + diff --git a/vbox_manage_0.sh b/vbox_manage_0.sh new file mode 100644 index 0000000..05fce09 --- /dev/null +++ b/vbox_manage_0.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Basisordner mit VMs, z.B. /srv/vbox_storage oder /home/*/VirtualBox VMs +# Passe den Pfad hier an deine Umgebung an: +BASE_DIRS=("/srv/vbox_storage" "/home") + +echo "Starte systemweiten Cleanup nicht registrierter VMs..." + +# Alle registrierten VM-Namen erfassen (mit UUID) +mapfile -t registered_vms < <(VBoxManage list vms | awk '{print $1}' | tr -d '"') + +# Hilfsfunktion: Prüfen ob ein Name in registrierten VMs ist +is_registered_vm() { + local vmname="$1" + for regvm in "${registered_vms[@]}"; do + if [[ "$regvm" == "$vmname" ]]; then + return 0 + fi + done + return 1 +} + +for base_dir in "${BASE_DIRS[@]}"; do + if [[ ! -d "$base_dir" ]]; then + continue + fi + + # Suche VM-Ordner rekursiv, z.B. Ordner, die eine *.vbox Datei enthalten + find "$base_dir" -type f -name "*.vbox" | while read -r vbox_file; do + vm_folder=$(dirname "$vbox_file") + vm_name=$(basename "$vbox_file" .vbox) + + if ! is_registered_vm "$vm_name"; then + echo "Nicht registrierte VM gefunden: $vm_name" + echo "Lösche Ordner: $vm_folder" + sudo rm -rf "$vm_folder" + fi + done +done + +echo "Cleanup abgeschlossen." +