diff --git a/2.sh b/2.sh new file mode 100644 index 0000000..81379b2 --- /dev/null +++ b/2.sh @@ -0,0 +1,199 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.8 +# 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 user="$1" + if ! id "$user" &>/dev/null; then + echo "Der Benutzer $user 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]}" +} + +# %--------------------end/Funktionen--------------------% + +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 + check_user_existence "$VAR_GROUP_MEMBERS" + ;; + "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 + +# Variable für das Verzeichnis +VAR_VB="/srv/vbox/${VAR_GROUP_MEMBERS}" + +clear + +echo "Welches Betriebssystem soll installiert werden?" +echo +COLUMNS=10 +PS3="Bitte Ihre Auswahl eingeben: " + +declare -A OS_MAP +OS_MAP=( + ["Ubuntu LTS SRV"]="Ubuntu_64 ubuntu-*-live-server-amd64.iso" + ["Ubuntu LTS GUI BASE"]="Ubuntu_64 ubuntu-*-desktop-amd64.iso" + ["Debian"]="Debian_64 debian-*.iso" + ["RHEL"]="RedHat_64 rhel-*.iso" + ["Fedora"]="Fedora_64 Fedora-*.iso" + ["kali-linux"]="Linux_64 kali-linux-*.iso" + ["linuxmint"]="Linux_64 linuxmint-*.iso" + ["openSUSE"]="OpenSUSE_64 openSUSE-*.iso" + ["Manjaro"]="ArchLinux_64 manjaro-xfce-*.iso" + ["Quit"]="Quit" +) + +# Auswählen und Konfigurieren des Betriebssystems +COLUMNS=10 +PS3="Ihre Auswahl: " +select opt in "${!OS_MAP[@]}" +do + case $opt in + "Quit") + exit + ;; + *) + VAR_OS="${OS_MAP[$opt]%% *}" # Extrahiere den ersten Teil (Betriebssystem) + VAR_ISO="${OS_MAP[$opt]#* }" # Extrahiere den zweiten Teil (ISO-Muster) + ;; + esac + + default_name=$(get_random_name) + + # Schleife zur Erzeugung der VMs für die Benutzer aus der Gruppe + for VAR_USER_IN_GROUP in "${VAR_GROUP_MEMBERS[@]}" + do + # Benutzereingabe für VM-Konfiguration + read -p "Geben Sie die Anzahl der VMs an (Standard: 1): " VAR_QUAN + read -p "Praefix Host Name (Vorgabe: $default_name): " VAR_NAME + read -p "CPUs (Standard: 2 CPU): " VAR_CPU + read -p "Memory (Standard: 2048 MB-RAM) : " VAR_MEM + read -p "Bitte die Anzahl der HDD (Standard: 1-HDD) : " VAR_HDD + + # Variablen: + IFS=" + " + + # Standardwerte festlegen, wenn keine Eingabe erfolgt + VAR_CPU=${VAR_CPU:-2} + VAR_MEM=${VAR_MEM:-2048} + VAR_VID=64 + VAR_RDP=339 + VAR_NIC=bridged + VAR_NET=$(ip addr show | grep "^2: " | awk '{print $2}' | sed 's/://') + VAR_NAME=${VAR_NAME:-$default_name} + VAR_ISO_PATH=/srv/data/ISO/ + + # Schleife zur Erzeugung der VMs + for N in $(seq 1 $VAR_QUAN) + do + ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren + sudo -u $VAR_USER_IN_GROUP VBoxManage createvm \ + --name ${VAR_NAME}-${ORDER_NUM} \ + --ostype ${VAR_OS} \ + --register \ + + sudo -u $VAR_USER_IN_GROUP VBoxManage modifyvm ${VAR_NAME}-${ORDER_NUM} \ + --ioapic on \ + --cpus ${VAR_CPU} \ + --memory ${VAR_MEM} \ + --vram ${VAR_VID} \ + --graphicscontroller vmsvga \ + --nic1 Nat \ + --nic2 ${VAR_NIC} \ + --bridgeadapter2 ${VAR_NET} \ + --vrde on \ + --vrdemulticon on \ + --vrdeport ${VAR_RDP}${ORDER_NUM} + + sudo -u $VAR_USER_IN_GROUP VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + sudo -u $VAR_USER_IN_GROUP VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "IDE Controller" \ + --add ide \ + --controller PIIX4 + + sudo -u $VAR_USER_IN_GROUP VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "IDE Controller" \ + --port 1 \ + --device 0 \ + --type dvddrive \ + --medium ${VAR_ISO_PATH}${VAR_ISO} + + # HDD erzeugen und zuweisen + for j in $(seq 1 ${VAR_HDD}) + do + HDD_NUM=$(printf "%02d" $j) + sudo -u $VAR_USER_IN_GROUP VBoxManage createhd \ + --filename ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi \ + --size 102400 \ + --format VDI + sudo -u $VAR_USER_IN_GROUP VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "SATA Controller" \ + --port $j \ + --device 0 \ + --type hdd \ + --medium ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi + done + done + done + break +done diff --git a/3.sh b/3.sh new file mode 100644 index 0000000..65118da --- /dev/null +++ b/3.sh @@ -0,0 +1,197 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.9 +# 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 user="$1" + if ! id "$user" &>/dev/null; then + echo "Der Benutzer $user 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]}" +} + +# %--------------------end/Funktionen--------------------% + +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 + check_user_existence "$VAR_GROUP_MEMBERS" + ;; + "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 + +# Variable für das Verzeichnis +VAR_VB="/srv/vbox" + +echo "Welches Betriebssystem soll installiert werden?" +echo +COLUMNS=10 +PS3="Bitte Ihre Auswahl eingeben: " + +declare -A OS_MAP +OS_MAP=( + ["Ubuntu LTS SRV"]="Ubuntu_64 ubuntu-*-live-server-amd64.iso" + ["Ubuntu LTS GUI BASE"]="Ubuntu_64 ubuntu-*-desktop-amd64.iso" + ["Debian"]="Debian_64 debian-*.iso" + ["RHEL"]="RedHat_64 rhel-*.iso" + ["Fedora"]="Fedora_64 Fedora-*.iso" + ["kali-linux"]="Linux_64 kali-linux-*.iso" + ["linuxmint"]="Linux_64 linuxmint-*.iso" + ["openSUSE"]="OpenSUSE_64 openSUSE-*.iso" + ["Manjaro"]="ArchLinux_64 manjaro-xfce-*.iso" + ["Quit"]="Quit" +) + +# Auswählen und Konfigurieren des Betriebssystems +COLUMNS=10 +PS3="Ihre Auswahl: " +select opt in "${!OS_MAP[@]}" +do + case $opt in + "Quit") + exit + ;; + *) + VAR_OS="${OS_MAP[$opt]%% *}" # Extrahiere den ersten Teil (Betriebssystem) + VAR_ISO="${OS_MAP[$opt]#* }" # Extrahiere den zweiten Teil (ISO-Muster) + ;; + esac + + default_name=$(get_random_name) + + # Benutzereingabe für VM-Konfiguration + read -p "Geben Sie die Anzahl der VMs an (Standard: 1): " VAR_QUAN + read -p "Praefix Host Name (Vorgabe: $default_name): " VAR_NAME + read -p "CPUs (Standard: 2 CPU): " VAR_CPU + read -p "Memory (Standard: 2048 MB-RAM) : " VAR_MEM + read -p "Bitte die Anzahl der HDD (Standard: 1-HDD) : " VAR_HDD + + # Variablen: + IFS=" + " + + # Standardwerte festlegen, wenn keine Eingabe erfolgt + VAR_CPU=${VAR_CPU:-2} + VAR_MEM=${VAR_MEM:-2048} + VAR_VID=64 + VAR_RDP=339 + VAR_NIC=bridged + VAR_NET=$(ip addr show | grep "^2: " | awk '{print $2}' | sed 's/://') + VAR_NAME=${VAR_NAME:-$default_name} + VAR_ISO_PATH=/srv/data/ISO/ + + # Schleife zur Erzeugung der VMs für die Benutzer aus der Gruppe + for VAR_USER_IN_GROUP in "${VAR_GROUP_MEMBERS[@]}" + do + # Schleife zur Erzeugung der VMs + for N in $(seq 1 $VAR_QUAN) + do + ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren + sudo -u $VAR_USER_IN_GROUP VBoxManage createvm \ + --name ${VAR_NAME}-${ORDER_NUM} \ + --ostype ${VAR_OS} \ + --register \ + + sudo -u $VAR_USER_IN_GROUP VBoxManage modifyvm ${VAR_NAME}-${ORDER_NUM} \ + --ioapic on \ + --cpus ${VAR_CPU} \ + --memory ${VAR_MEM} \ + --vram ${VAR_VID} \ + --graphicscontroller vmsvga \ + --nic1 Nat \ + --nic2 ${VAR_NIC} \ + --bridgeadapter2 ${VAR_NET} \ + --vrde on \ + --vrdemulticon on \ + --vrdeport ${VAR_RDP}${ORDER_NUM} + + sudo -u $VAR_USER_IN_GROUP VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + sudo -u $VAR_USER_IN_GROUP VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "IDE Controller" \ + --add ide \ + --controller PIIX4 + + sudo -u $VAR_USER_IN_GROUP VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "IDE Controller" \ + --port 1 \ + --device 0 \ + --type dvddrive \ + --medium ${VAR_ISO_PATH}${VAR_ISO} + + # HDD erzeugen und zuweisen + for j in $(seq 1 ${VAR_HDD}) + do + HDD_NUM=$(printf "%02d" $j) + sudo -u $VAR_USER_IN_GROUP VBoxManage createhd \ + --filename ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi \ + --size 102400 \ + --format VDI + sudo -u $VAR_USER_IN_GROUP VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "SATA Controller" \ + --port $j \ + --device 0 \ + --type hdd \ + --medium ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi + done + done + done + break +done diff --git a/hdd_vdi_create.sh b/hdd_vdi_create.sh old mode 100644 new mode 100755 diff --git a/neu_vbox_create.sh b/neu_vbox_create.sh old mode 100755 new mode 100644 index 2aa72e1..291ebdc --- a/neu_vbox_create.sh +++ b/neu_vbox_create.sh @@ -1,12 +1,10 @@ #!/bin/bash -# Autor: Branislav Zeljak v0.7 +# Autor: Branislav Zeljak v0.8 # Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. # Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. clear -VAR_ISO_PATH="/srv/data/ISO/" - # %--------------------start/Funktionen--------------------% # Funktion zum Überprüfen der Benutzerexistenz @@ -33,12 +31,12 @@ get_group_users() { # 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" "frodo") + # 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]}" + # Zufälligen Index auswählen + local random_index=$((RANDOM % ${#names[@]})) + echo "${names[random_index]}" } # %--------------------end/Funktionen--------------------% @@ -52,18 +50,18 @@ select opt in "${options[@]}" do case $opt in "Aktueller Benutzer") - VAR_USER=$(whoami) + VAR_GROUP_MEMBERS=$(whoami) ;; "Anderer Benutzer") - read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_USER - check_user_existence "$VAR_USER" + read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_GROUP_MEMBERS + check_user_existence "$VAR_GROUP_MEMBERS" ;; "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" - GROUP_MEMBERS=($(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 @@ -76,12 +74,13 @@ do break done -# Variable für den User +# Variable für das Verzeichnis +VAR_VB="/srv/vbox/${VAR_GROUP_MEMBERS}" clear echo "Welches Betriebssystem soll installiert werden?" -echo +echo COLUMNS=10 PS3="Bitte Ihre Auswahl eingeben: " @@ -111,93 +110,85 @@ do ;; esac - default_name=$(get_random_name) +default_name=$(get_random_name) - # Benutzereingabe für VM-Konfiguration +# Benutzereingabe für VM-Konfiguration read -p "Geben Sie die Anzahl der VMs an (Standard: 1): " VAR_QUAN - read -p "Präfix Host Name (Vorgabe: $default_name): " VAR_NAME_PREFIX + read -p "Praefix Host Name (Vorgabe: $default_name): " VAR_NAME read -p "CPUs (Standard: 2 CPU): " VAR_CPU read -p "Memory (Standard: 2048 MB-RAM) : " VAR_MEM read -p "Bitte die Anzahl der HDD (Standard: 1-HDD) : " VAR_HDD - # Variablen: - IFS=" - " - # Standardwerte festlegen, wenn keine Eingabe erfolgt - VAR_CPU=${VAR_CPU:-2} - VAR_MEM=${VAR_MEM:-2048} - VAR_VIDEO_RAM=64 - VAR_NIC1="nat" - VAR_NIC2="bridged" - VAR_NET_INTERFACE="eth0" - VAR_RDP_PORT=339 +# Variablen: +IFS=" +" + +# Standardwerte festlegen, wenn keine Eingabe erfolgt +VAR_CPU=${VAR_CPU:-2} +VAR_MEM=${VAR_MEM:-2048} +VAR_VID=64 +VAR_RDP=339 +VAR_NIC=bridged +#VAR_NET=enp4s0f1 +VAR_NET=$(ip addr show | grep "^2: " | awk '{print $2}' | sed 's/://') +VAR_NAME=${VAR_NAME:-$default_name} +VAR_ISO_PATH=/srv/data/ISO/ + +# Schleife zur Erzeugung der VMs +for N in $(seq 1 $VAR_QUAN) +do +ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren + sudo -u $VAR_GROUP_MEMBERS VBoxManage createvm \ + --name ${VAR_NAME}-${ORDER_NUM} \ + --ostype ${VAR_OS} \ + --register \ + + sudo -u $VAR_GROUP_MEMBERS VBoxManage modifyvm ${VAR_NAME}-${ORDER_NUM} \ + --ioapic on \ + --cpus ${VAR_CPU} \ + --memory ${VAR_MEM} \ + --vram ${VAR_VID} \ + --graphicscontroller vmsvga \ + --nic1 Nat \ + --nic2 ${VAR_NIC} \ + --bridgeadapter2 ${VAR_NET} \ + --vrde on \ + --vrdemulticon on \ + --vrdeport ${VAR_RDP}${ORDER_NUM} + + sudo -u $VAR_GROUP_MEMBERS VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + sudo -u $VAR_GROUP_MEMBERS VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "IDE Controller" \ + --add ide \ + --controller PIIX4 + sudo -u $VAR_GROUP_MEMBERS VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "IDE Controller" \ + --port 1 \ + --device 0 \ + --type dvddrive \ + --medium ${VAR_ISO_PATH}${VAR_ISO} - # Schleife zur Erzeugung der VMs für Gruppenmitglieder - for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" - do - for N in $(seq 1 $VAR_QUAN) +# HDD erzeugen und zuweisen + for j in $(seq 1 ${VAR_HDD}) do - ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren - VM_NAME="${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-${ORDER_NUM}" - VM_DIR="/srv/vbox/$VAR_USER_IN_GROUP/$VM_NAME" - - 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 "$VAR_NIC1" \ - --graphicscontroller vmsvga \ - --nic2 "$VAR_NIC2" \ - --bridgeadapter2 "$VAR_NET_INTERFACE" \ - --vrde on \ - --vrdemulticon on \ - --vrdeport "$VAR_RDP_PORT" - - sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "$VM_NAME" \ - --name "SATA Controller" \ - --add sata \ - --controller IntelAhci - - sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "$VM_NAME" \ - --name "IDE Controller" \ - --add ide \ - --controller PIIX4 - - sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "$VM_NAME" \ - --storagectl "IDE Controller" \ - --port 1 \ - --device 0 \ - --type dvddrive \ - --medium "${VAR_ISO_PATH}${VAR_ISO}" - - # HDD erzeugen und zuweisen - for j in $(seq 1 $VAR_HDD) - 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 "$j" \ - --device 0 \ - --type hdd \ - --medium "$VM_DIR/$HDD_NAME" - done + HDD_NUM=$(printf "%02d" $j) + sudo -u $VAR_GROUP_MEMBERS VBoxManage createhd \ + --filename ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi \ + --size 102400 \ + --format VDI + sudo -u $VAR_GROUP_MEMBERS VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "SATA Controller" \ + --port $j \ + --device 0 \ + --type hdd \ + --medium ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi done + done - echo "VMs wurden erstellt." - break + break done diff --git a/vbox_create.sh b/vbox_create.sh index 14390df..df3d800 100755 --- a/vbox_create.sh +++ b/vbox_create.sh @@ -1,30 +1,38 @@ #!/bin/bash -# -# @Branislav Zeljak v0.1 -# -# Create VBox +# 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 -# Vorgabe für Variablen -VAR_USER=$(whoami) -VAR_PATH="/srv/data/ISO/" - # %--------------------start/Funktionen--------------------% # Funktion zum Überprüfen der Benutzerexistenz check_user_existence() { - local VAR_USER="$1" - if ! grep -q "^$VAR_USER:" /etc/passwd; then - echo "Der Benutzer $VAR_USER existiert nicht auf diesem System." + local VAR_GROUP_MEMBERS_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" "fíli" "kíli" "dori" "frodo") + 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[@]})) @@ -32,29 +40,39 @@ get_random_name() { } - # %--------------------end/Funktionen--------------------% -echo "Für wenn soll es sein?" +echo "Für wen soll es sein?" echo COLUMNS=10 PS3="Ihre Auswahl: " -options=("Aktueller Benutzer" "Anderer Benutzer" "Beenden") +options=("Aktueller Benutzer" "Anderer Benutzer" "Mitglieder einer Gruppe" "Beenden") select opt in "${options[@]}" do case $opt in "Aktueller Benutzer") - VAR_USER=$(whoami) + VAR_GROUP_MEMBERS=$(whoami) ;; "Anderer Benutzer") - read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_USER - if grep -q "^$VAR_USER:" /etc/passwd; then - echo "Der Benutzer $VAR_USER existiert auf diesem System." - else - echo "Der Benutzer $VAR_USER existiert nicht auf diesem System." - exit 1 - fi + 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 @@ -64,7 +82,7 @@ do done # Variable für den User -VAR_VB="/srv/vbox/${VAR_USER}" +VAR_VB="/srv/vbox/${VAR_GROUP_MEMBERS}" clear echo "Welches Betriebssystem soll installiert werden?" @@ -132,12 +150,12 @@ for N in $(seq 1 $VAR_QUAN) do ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren - sudo -u $VAR_USER VBoxManage createvm \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage createvm \ --name ${VAR_NAME}-${ORDER_NUM} \ --ostype ${VAR_OS} \ --register \ - sudo -u $VAR_USER VBoxManage modifyvm ${VAR_NAME}-${ORDER_NUM} \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage modifyvm ${VAR_NAME}-${ORDER_NUM} \ --ioapic on \ --cpus ${VAR_CPU} \ --memory ${VAR_MEM} \ @@ -150,17 +168,17 @@ ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren --vrdemulticon on \ --vrdeport ${VAR_RDP}${ORDER_NUM} - sudo -u $VAR_USER VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ --name "SATA Controller" \ --add sata \ --controller IntelAhci - sudo -u $VAR_USER VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ --name "IDE Controller" \ --add ide \ --controller PIIX4 - sudo -u $VAR_USER VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ --storagectl "IDE Controller" \ --port 1 \ --device 0 \ @@ -171,11 +189,11 @@ ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren for j in $(seq 1 ${VAR_HDD}) do HDD_NUM=$(printf "%02d" $j) - sudo -u $VAR_USER VBoxManage createhd \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage createhd \ --filename ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi \ --size 102400 \ --format VDI - sudo -u $VAR_USER VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + sudo -u $VAR_GROUP_MEMBERS VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ --storagectl "SATA Controller" \ --port $j \ --device 0 \ diff --git a/vdi_create.sh b/vdi_create.sh deleted file mode 100755 index b10f9ef..0000000 --- a/vdi_create.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash - -# Autor: Branislav Zeljak v0.1 -# Script wurde mit hilfe von OpenAI KI erstellt. -# Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. -# Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. -clear - -VAR_USER=$(whoami) - -# %--------------------start/Funktionen--------------------% - -# Funktion zum Überprüfen der Benutzerexistenz -check_user_existence() { - local VAR_USER="$1" - if ! grep -q "^$VAR_USER:" /etc/passwd; then - echo "Der Benutzer $VAR_USER 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" "frodo") - - # Zufälligen Index auswählen - local random_index=$((RANDOM % ${#names[@]})) - echo "${names[random_index]}" -} - -# %--------------------end/Funktionen--------------------% - -echo "User / Passwort: $VAR_USER/Start1234" -echo "Welches VDI-OS soll installiert werden" -echo - -echo "Für wenn 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_USER=$(whoami) - ;; - "Anderer Benutzer") - read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_USER - if grep -q "^$VAR_USER:" /etc/passwd; then - echo "Der Benutzer $VAR_USER existiert auf diesem System." - else - echo "Der Benutzer $VAR_USER 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" - 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='Please enter your choice: ' -OPTIONS=("Ubuntu 2204 SRV BASE" "Ubuntu 2204 GUI BASE" "Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") -select opt in "${OPTIONS[@]}" -do - case $opt in - "Ubuntu 2204 SRV BASE") - VAR_OS="Ubuntu_64" - VAR_VDI="ubu2204-SRV-BASE.vdi" - ;; - "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.vdi" - ;; - *) - echo "Invalid option $REPLY" - ;; - esac - - # Benutzereingaben - read -p "Wie viele VMs werden benötigt? [1]: " VAR_QUANTITY - VAR_QUANTITY=${VAR_QUANTITY:-1} - read -p "Präfix Host 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} - - # Variablen - VAR_PATH_TO_VDI="/srv/data/VDI" - VAR_VIDEO_RAM=64 - VAR_RDP_PORT=339 - VAR_NIC1="Nat" - VAR_NIC2="bridged" - VAR_NET_INTERFACE="enp4s0f1" - - # Schleife zur Erzeugung der VMs für jeden Benutzer in der Gruppe - for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" - do - # VM erstellen - sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \ - --name "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ - --ostype "$VAR_OS" \ - --register \ - --basefolder "/srv/vbox/$VAR_USER_IN_GROUP" - - # VM-Konfigurieren - sudo -u "$VAR_USER_IN_GROUP" VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ - --ioapic on \ - --memory "$VAR_MEM" \ - --cpus "$VAR_CPU" \ - --vram "$VAR_VIDEO_RAM" \ - --nic1 "$VAR_NIC1" \ - --graphicscontroller vmsvga \ - --nic2 "$VAR_NIC2" \ - --bridgeadapter2 "$VAR_NET_INTERFACE" \ - --vrde on \ - --vrdemulticon on \ - --vrdeport "$VAR_RDP_PORT" - - # Festplattencontroller hinzufügen - sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ - --name "SATA Controller" \ - --add sata \ - --controller IntelAhci - - # Klonen der Festplatte (in Hintergrundprozessen) - { - sudo -u "$VAR_USER_IN_GROUP" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk0.vdi" - } & - done - - # Warten auf das Ende der Hintergrundprozesse - wait - - # Anhängen der geklonten Festplatte - for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" - do - sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ - --storagectl "SATA Controller" \ - --port 0 \ - --device 0 \ - --type hdd \ - --medium "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk0.vdi" - done - - # Schleife beenden - break -done - -echo "VMs wurden für alle Mitglieder der Gruppe erstellt und Festplatten geklont."