Compare commits

..

3 Commits

Author SHA1 Message Date
fe5fe5b80d . 2025-08-24 17:01:55 +02:00
e4ba81c63d README angepasst 2025-07-10 23:07:28 +02:00
braniz
cc818d208f Pfad für die VMs angepasst 2025-04-11 00:34:04 +02:00
7 changed files with 193 additions and 4 deletions

View File

@@ -2,6 +2,12 @@
## Vrobereitung: ## Vrobereitung:
Benötigte Ordner auf dem Zielsystem:
```
/srv/VDI
/srv/VirtualBox
```
Die Scripte benötigen die Unterordner `VDI` und `ISO` im Ordner 'VirtualBox VMs'. Die Scripte benötigen die Unterordner `VDI` und `ISO` im Ordner 'VirtualBox VMs'.
In diesen werden die Benötigten Installations ISOs der Linux Distributionen abgelegt bzw. die Clone der hdd der Vorinstallierten VMs. In diesen werden die Benötigten Installations ISOs der Linux Distributionen abgelegt bzw. die Clone der hdd der Vorinstallierten VMs.

56
vbox_clean.sh Executable file
View File

@@ -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."

13
vbox_clean_1.sh Normal file
View File

@@ -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."

View File

@@ -68,7 +68,7 @@ identify_os() {
*CentOS*) *CentOS*)
echo "RedHat_64" echo "RedHat_64"
;; ;;
*Fedora-Workstation*|*Fedora-Server*) *Fedora*|*fedora*)
echo "Fedora_64" echo "Fedora_64"
;; ;;
*kali-linux*) *kali-linux*)
@@ -135,7 +135,7 @@ do
done done
# Variable für das Verzeichnis # Variable für das Verzeichnis
VAR_VB="/storage/vbox_storage" VAR_VB="/srv/vbox_storage"
# Verzeichnis mit ISO-Dateien # Verzeichnis mit ISO-Dateien
ISO_DIR="/srv/data/ISO/" ISO_DIR="/srv/data/ISO/"

72
vbox_manage.sh Executable file
View File

@@ -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

42
vbox_manage_0.sh Normal file
View File

@@ -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."

View File

@@ -126,7 +126,7 @@ do
break break
done done
VDI_DIR="/srv/data/VDI" VDI_DIR="/srv/VDI"
echo "Verfügbare VDI-Dateien werden durchsucht..." echo "Verfügbare VDI-Dateien werden durchsucht..."
echo echo
@@ -202,7 +202,7 @@ do
( (
# VM erstellen # VM erstellen
VM_NAME="${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-VM$(printf "%02d" $i)" VM_NAME="${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-VM$(printf "%02d" $i)"
VM_DIR="/storage/vbox_storage/$VAR_USER_IN_GROUP" VM_DIR="/srv/VirtualBox/$VAR_USER_IN_GROUP/$VM_NAME"
sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \
--name "$VM_NAME" \ --name "$VM_NAME" \