diff --git a/grp_neu.sh b/grp_neu.sh new file mode 100644 index 0000000..9687cef --- /dev/null +++ b/grp_neu.sh @@ -0,0 +1,177 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.1 +# 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 +} + +# %--------------------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 der 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 der Gruppe") + read -p "Bitte den Gruppennamen eingeben: " VAR_GROUP + ;; + "Beenden") + exit + ;; + esac + break +done + +COLUMNS=8 +PS3='Please enter your choice: ' +OPTIONS=("Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") +select opt in "${OPTIONS[@]}" +do + case $opt in + "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_VBOX_DIR="/srv/vbox/$VAR_USER" + VAR_VIDEO_RAM=64 + VAR_RDP_PORT=339 + VAR_NIC1="Nat" + VAR_NIC2="bridged" + VAR_NET_INTERFACE="enp4s0f1" + + # Benutzer in der Gruppe abrufen + GROUP_USERS=($(get_group_users "$VAR_GROUP")) + + if [[ "${#GROUP_USERS[@]}" -eq 0 ]]; then + echo "Die Gruppe $VAR_GROUP existiert nicht oder hat keine Mitglieder." + exit 1 + fi + + # Schleife zur Erzeugung der VMs + for GROUP_USER in "${GROUP_USERS[@]}" + do + check_user_existence "$GROUP_USER" + + for VAR_N in $(seq 1 $VAR_QUANTITY) + do + # VM erstellen + sudo -u "$GROUP_USER" VBoxManage createvm \ + --name "${VAR_NAME_PREFIX}-${VAR_N}" \ + --ostype "$VAR_OS" \ + --register \ + --basefolder "/srv/vbox/$GROUP_USER" + + # VM-Konfigurieren + sudo -u "$GROUP_USER" VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_N}" \ + --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${VAR_N}" + + # Festplattencontroller hinzufügen + sudo -u "$GROUP_USER" VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_N}" \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + # Klonen der Festplatte (in Hintergrundprozessen) + { + sudo -u "$GROUP_USER" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "/srv/vbox/$GROUP_USER/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" + } & + done + done + + # Warten auf das Ende der Hintergrundprozesse + wait + + # Anhängen der geklonten Festplatte + for GROUP_USER in "${GROUP_USERS[@]}" + do + for VAR_N in $(seq 1 $VAR_QUANTITY) + do + sudo -u "$GROUP_USER" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_N}" \ + --storagectl "SATA Controller" \ + --port 0 \ + --device 0 \ + --type hdd \ + --medium "/srv/vbox/$GROUP_USER/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" + done + done + + # Schleife beenden + break +done + +echo "VMs wurden erstellt und Festplatten geklont." diff --git a/grp_vdi.sh b/grp_vdi.sh new file mode 100644 index 0000000..48d98ad --- /dev/null +++ b/grp_vdi.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.1 +# 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 +} + +# Verwenden Sie die Funktion, indem Sie den Gruppennamen als Argument übergeben +get_group_users "$VAR_GROUP" + +# %--------------------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 der 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 der Gruppe") + read -p "Bitte den Gruppennamen eingeben: " VAR_GRUPPE + ;; + "Beenden") + exit + ;; + esac + break +done + +COLUMNS=8 +PS3='Please enter your choice: ' +OPTIONS=("Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") +select opt in "${OPTIONS[@]}" +do + case $opt in + "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_VBOX_DIR="/srv/vbox/$VAR_USER" + VAR_VIDEO_RAM=64 + VAR_RDP_PORT=339 + VAR_NIC1="Nat" + VAR_NIC2="bridged" + VAR_NET_INTERFACE="enp4s0f1" + + # Schleife zur Erzeugung der VMs + for VAR_N in $(seq 1 $VAR_QUANTITY) + do + # VM erstellen + sudo -u $VAR_USER VBoxManage createvm \ + --name "${VAR_NAME_PREFIX}-${VAR_N}" \ + --ostype "$VAR_OS" \ + --register \ + --basefolder "$VAR_VBOX_DIR" + + # VM-Konfigurieren + sudo -u $VAR_USER VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_N}" \ + --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${VAR_N}" + + # Festplattencontroller hinzufügen + sudo -u $VAR_USER VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_N}" \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + # Klonen der Festplatte (in Hintergrundprozessen) + { + sudo -u $VAR_USER VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "${VAR_VBOX_DIR}/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" + } & + done + + # Warten auf das Ende der Hintergrundprozesse + wait + + # Anhängen der geklonten Festplatte + for VAR_N in $(seq 1 $VAR_QUANTITY) + do + sudo -u $VAR_USER VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_N}" \ + --storagectl "SATA Controller" \ + --port 0 \ + --device 0 \ + --type hdd \ + --medium "${VAR_VBOX_DIR}/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" + done + + # Schleife beenden + break +done + +echo "VMs wurden erstellt und Festplatten geklont." diff --git a/neu_vdi_create.sh b/neu_vdi_create.sh index 0f03435..0acfddd 100755 --- a/neu_vdi_create.sh +++ b/neu_vdi_create.sh @@ -1,99 +1,145 @@ #!/bin/bash -# -# @Branislav Zeljak v0.1 -# -# Create VBox -user=$(whoami) + +# Autor: Branislav Zeljak v0.1 +# Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. +# Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. clear -echo User / Passwort "user00/Start1234" -echo "Welches VDI-OS soll Installiert werden" + +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 +} + +# %--------------------end/Funktionen--------------------% + +echo "User / Passwort: $VAR_USER/Start1234" +echo "Welches VDI-OS soll installiert werden" echo -COLUMNS=8 -PS3='Please enter your choice: ' -options=("Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") + +echo "Für wenn soll es sein?" +echo +COLUMNS=10 +PS3="Ihre Auswahl: " +options=("Aktueller Benutzer" "Anderer Benutzer" "Beenden") select opt in "${options[@]}" do case $opt in - "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" - ;; + "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 + ;; + "Beenden") + exit + ;; esac - -# Eingabe Auffoderung -read -p "Wievile VMs werden benoetigt? [1]: " VAR_QUAN -read -p "Praefix Host Name : " VAR_NAME -read -p "CPUs [1]: " VAR_CPU -read -p "Memory [2048] : " VAR_MEM - -# Variablen: -IFS=" -" - -VAR_PATH="/srv/data/VDI" -VAR_VB="/srv/vbox/${user}" - -VAR_CPU=${VAR_CPU:-1} -VAR_MEM=${VAR_MEM:-1024} -VAR_VID=64 -VAR_RDP=339 -VAR_NIC=bridged -VAR_NET=enp4s0f1 - -# Schleife -for N in $(seq 1 $VAR_QUAN) -do - VBoxManage createvm \ - --name ${VAR_NAME}-${N} \ - --ostype ${VAR_OS} \ - --register \ - --basefolder ${VAR_VB} - - VBoxManage modifyvm ${VAR_NAME}-${N} \ - --ioapic on \ - --memory ${VAR_MEM} \ - --cpus=${VAR_CPU} \ - --vram ${VAR_VID} \ - --nic1 Nat \ - --graphicscontroller vmsvga \ - --nic2 ${VAR_NIC} \ - --bridgeadapter2 ${VAR_NET} \ - --vrde on \ - --vrdemulticon on \ - --vrdeport ${VAR_RDP}${N} - - VBoxManage storagectl ${VAR_NAME}-${N} \ - --name "SATA Controller" \ - --add sata \ - --controller IntelAhci - - done - -# Damit das Clonen der HDDs paralell vorgenommen wird. -#echo > clonehd.txt - -for N in $(seq 1 $VAR_QUAN) -do - -echo "VBoxManage clonehd ${VAR_PATH}/${VAR_VDI} ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk0.vdi" >> clonehd.txt - + break done -cat clonehd.txt | parallel +COLUMNS=8 +PS3='Please enter your choice: ' +OPTIONS=("Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") +select opt in "${OPTIONS[@]}" +do + case $opt in + "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 -VBoxManage storageattach ${VAR_NAME}-${N} \ + # 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_VBOX_DIR="/srv/vbox/$VAR_USER" + VAR_VIDEO_RAM=64 + VAR_RDP_PORT=339 + VAR_NIC1="Nat" + VAR_NIC2="bridged" + VAR_NET_INTERFACE="enp4s0f1" + + # Schleife zur Erzeugung der VMs + for VAR_N in $(seq 1 $VAR_QUANTITY) + do + # VM erstellen + sudo -u $VAR_USER VBoxManage createvm \ + --name "${VAR_NAME_PREFIX}-${VAR_N}" \ + --ostype "$VAR_OS" \ + --register \ + --basefolder "$VAR_VBOX_DIR" + + # VM-Konfigurieren + sudo -u $VAR_USER VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_N}" \ + --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${VAR_N}" + + # Festplattencontroller hinzufügen + sudo -u $VAR_USER VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_N}" \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + # Klonen der Festplatte (in Hintergrundprozessen) + { + sudo -u $VAR_USER VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "${VAR_VBOX_DIR}/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" + } & + done + + # Warten auf das Ende der Hintergrundprozesse + wait + + # Anhängen der geklonten Festplatte + for VAR_N in $(seq 1 $VAR_QUANTITY) + do + sudo -u $VAR_USER VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_N}" \ --storagectl "SATA Controller" \ --port 0 \ --device 0 \ --type hdd \ - --medium ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk0.vdi -break + --medium "${VAR_VBOX_DIR}/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" + done + + # Schleife beenden + break done -rm /srv/data/GIT/Virtualbox/clonehd.txt + +echo "VMs wurden erstellt und Festplatten geklont."