From 9365fb3b30923f6fd196a2674111fbdee96923d2 Mon Sep 17 00:00:00 2001 From: braniz Date: Thu, 9 Nov 2023 13:05:28 +0100 Subject: [PATCH] Umbenannt --- vdi_create.sh | 241 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100755 vdi_create.sh diff --git a/vdi_create.sh b/vdi_create.sh new file mode 100755 index 0000000..0e3e2a7 --- /dev/null +++ b/vdi_create.sh @@ -0,0 +1,241 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.7 +# Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. +# Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. + +clear + +# %--------------------start/Funktionen--------------------% + +# Funktion zum Überprüfen der Benutzerexistenz +check_user_existence() { + local VAR_USER_IN_GROUP="$1" + if ! grep -q "^$VAR_USER_IN_GROUP:" /etc/passwd; then + echo "Der Benutzer $VAR_USER_IN_GROUP existiert nicht auf diesem System." + exit 1 + fi +} + +get_group_users() { + local groupname="$1" + local members + + members=$(getent group "$groupname" | cut -d: -f4) + + if [[ -n "$members" ]]; then + echo "$members" | tr ',' '\n' + else + echo "Die Gruppe $groupname existiert nicht oder hat keine Mitglieder." + fi +} + +# Funktion, um einen zufälligen Host-Namen aus der Liste auszuwählen +get_random_name() { + # Liste der Namen + local names=("frodo" "samweis" "gandalf" "aragorn" "legolas" "gimli" "boromir" "meriadoc" "peregrin" "arwen" "galadriel" "celeborn" "elrond" "glorfindel" "faramir" "eowyn" "theoden" "treebeard" "gollum" "sauron" "saruman" "bilbo" "denethor" "radagast" "thranduil" "bard" "dori" "frodo") + + # Zufälligen Index auswählen + local random_index=$((RANDOM % ${#names[@]})) + echo "${names[random_index]}" + +} + +# Funktion zur Generierung eines eindeutigen RDP-Ports +generate_rdp_port() { + local rdp_port + rdp_port=$(shuf -i 3390-49151 -n 1) + echo "$rdp_port" +} + +# %--------------------end/Funktionen--------------------% + +echo "User / Passwort: user00/Start1234" +echo "Welches VDI-OS soll installiert werden" +echo + +echo "Für wen soll es sein?" +echo +COLUMNS=10 +PS3="Ihre Auswahl: " +options=("Aktueller Benutzer" "Anderer Benutzer" "Mitglieder einer Gruppe" "Beenden") +select opt in "${options[@]}" +do + case $opt in + "Aktueller Benutzer") + VAR_GROUP_MEMBERS=$(whoami) + ;; + "Anderer Benutzer") + read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_GROUP_MEMBERS + if grep -q "^$VAR_GROUP_MEMBERS:" /etc/passwd; then + echo "Der Benutzer $VAR_GROUP_MEMBERS existiert auf diesem System." + else + echo "Der Benutzer $VAR_GROUP_MEMBERS existiert nicht auf diesem System." + exit 1 + fi + ;; + "Mitglieder einer Gruppe") + read -p "Bitte geben Sie den Gruppennamen ein: " VAR_GROUP + if getent group "$VAR_GROUP" &>/dev/null; then + echo "Mitglieder der Gruppe $VAR_GROUP:" + get_group_users "$VAR_GROUP" + VAR_GROUP_MEMBERS=($(get_group_users "$VAR_GROUP")) + else + echo "Die Gruppe $VAR_GROUP existiert nicht auf diesem System." + exit 1 + fi + ;; + "Beenden") + exit + ;; + esac + break +done + +COLUMNS=8 +PS3='Bitte wählen Sie die VM-Option: ' +OPTIONS=("Ubuntu 2204 GUI BASE" "Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "openSUSE GUI" "Kali Linux" "Debian" "Fedora" "Beenden") +select opt in "${OPTIONS[@]}" +do + case $opt in + "Ubuntu 2204 GUI BASE") + VAR_OS="Ubuntu_64" + VAR_VDI="ubu2204-GUI-BASE.vdi" + ;; + "Ubuntu 2204 SRV") + VAR_OS="Ubuntu_64" + VAR_VDI="ubu2204-SRV.vdi" + ;; + "Ubuntu 2204 GUI") + VAR_OS="Ubuntu_64" + VAR_VDI="ubu2204-GUI-EXT.vdi" + ;; + "openSUSE GUI") + VAR_OS="OpenSUSE_Tumbleweed_64" + VAR_VDI="openSUSE-GUI.vdi" + ;; + "Kali Linux") + VAR_OS="Linux_64" + VAR_VDI="kali_linux-GUI.vdi" + ;; + "Debian") + VAR_OS="Debian_64" + VAR_VDI="debian-GUI.vdi" + ;; + "Fedora") + VAR_OS="Fedora_64" + VAR_VDI="fedora.vdi" + ;; + "Beenden") + exit + ;; + esac + + default_name=$(get_random_name) + + # Benutzereingaben + read -p "Wie viele VMs werden benötigt? [1]: " VAR_QUANTITY + VAR_QUANTITY=${VAR_QUANTITY:-1} + read -p "Präfix Host Name (Vorgabe: $default_name): " VAR_NAME_PREFIX + read -p "CPUs [2]: " VAR_CPU + VAR_CPU=${VAR_CPU:-2} + read -p "Memory [2048]: " VAR_MEM + VAR_MEM=${VAR_MEM:-2048} + read -p "Anzahl der zusätzlichen HDDs (Standard: 0): " VAR_ADDITIONAL_HDD + VAR_ADDITIONAL_HDD=${VAR_ADDITIONAL_HDD:-0} + + # Variablen + VAR_PATH_TO_VDI="/srv/data/VDI" + VAR_VIDEO_RAM=64 + VAR_NIC=bridged + #VAR_NET=enp4s0f1 + VAR_NET=$(ip addr show | grep "^2: " | awk '{print $2}' | sed 's/://') + VAR_NAME_PREFIX=${VAR_NAME_PREFIX:-$default_name} + + # Schleife zur Erzeugung der VMs für jeden Benutzer in der Gruppe + for VAR_USER_IN_GROUP in "${VAR_GROUP_MEMBERS[@]}" + do + + # Generiere einen eindeutigen RDP-Port + VAR_RDP_PORT=$(generate_rdp_port) + + # Schleife zur Erzeugung der angeforderten Anzahl von VMs + for ((i = 1; i <= VAR_QUANTITY; i++)) + do + # VM erstellen + VM_NAME="${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-VM$(printf "%02d" $i)" + VM_DIR="/srv/vbox/$VAR_USER_IN_GROUP" + + sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \ + --name "$VM_NAME" \ + --ostype "$VAR_OS" \ + --register \ + --basefolder "$VM_DIR" + + # VM-Konfigurieren + sudo -u "$VAR_USER_IN_GROUP" VBoxManage modifyvm "$VM_NAME" \ + --ioapic on \ + --memory "$VAR_MEM" \ + --cpus "$VAR_CPU" \ + --vram "$VAR_VIDEO_RAM" \ + --nic1 Nat \ + --nic2 ${VAR_NIC} \ + --bridgeadapter2 ${VAR_NET} \ + --graphicscontroller vmsvga \ + --vrde on \ + --vrdemulticon on \ + --vrdeport "$VAR_RDP_PORT" + + # Festplattencontroller hinzufügen + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "$VM_NAME" \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + # IDE-Controller für DVD + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "$VM_NAME" \ + --name "IDE Controller" \ + --add ide \ + --controller PIIX4 + + # Host Name und RDP Port + echo "${VM_NAME}-${VAR_RDP_PORT}" >> /srv/data/GIT/Virtualbox/rdp_port.txt + + # Schleife zur Erzeugung von zusätzlichen Festplatten + for ((j = 1; j <= VAR_ADDITIONAL_HDD; j++)) + do + HDD_NUM=$(printf "%02d" $j) + HDD_NAME="${VM_NAME}-disk${HDD_NUM}.vdi" + + sudo -u "$VAR_USER_IN_GROUP" VBoxManage createhd \ + --filename "$VM_DIR/$HDD_NAME" \ + --size 102400 \ + --format VDI + + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "$VM_NAME" \ + --storagectl "SATA Controller" \ + --port "$HDD_NUM" \ + --device 0 \ + --type hdd \ + --medium "$VM_DIR/$VM_NAME/$HDD_NAME" + done + + # Klonen der ersten Festplatte und Registrieren (in Hintergrundprozessen) + { + sudo -u "$VAR_USER_IN_GROUP" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "$VM_DIR/$VM_NAME/${VM_NAME}-disk00.vdi" + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "$VM_NAME" \ + --storagectl "SATA Controller" \ + --port 0 \ + --device 0 \ + --type hdd \ + --medium "$VM_DIR/$VM_NAME/${VM_NAME}-disk00.vdi" + } & + done + done + + # Warten auf das Ende der Hintergrundprozesse + wait + + echo "VMs wurden für alle wie angegeben erstellt." + break +done