No parallel

This commit is contained in:
braniz
2023-10-03 19:23:42 +02:00
parent 56cdee1e56
commit 1efb5c6a87

93
hdd_vdi_create.sh Normal file → Executable file
View File

@@ -1,19 +1,17 @@
#!/bin/bash #!/bin/bash
# Autor: Branislav Zeljak v0.4 # Autor: Branislav Zeljak v0.6
# Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. # Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel.
# Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. # Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen.
clear clear
VAR_USER=$(whoami)
# %--------------------start/Funktionen--------------------% # %--------------------start/Funktionen--------------------%
# Funktion zum Überprüfen der Benutzerexistenz # Funktion zum Überprüfen der Benutzerexistenz
check_user_existence() { check_user_existence() {
local VAR_USER="$1" local VAR_USER_IN_GROUP="$1"
if ! grep -q "^$VAR_USER:" /etc/passwd; then if ! grep -q "^$VAR_USER_IN_GROUP:" /etc/passwd; then
echo "Der Benutzer $VAR_USER existiert nicht auf diesem System." echo "Der Benutzer $VAR_USER_IN_GROUP existiert nicht auf diesem System."
exit 1 exit 1
fi fi
} }
@@ -31,9 +29,20 @@ get_group_users() {
fi 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")
# Zufälligen Index auswählen
local random_index=$((RANDOM % ${#names[@]}))
echo "${names[random_index]}"
}
# %--------------------end/Funktionen--------------------% # %--------------------end/Funktionen--------------------%
echo "User / Passwort: $VAR_USER/Start1234" echo "User / Passwort: user00/Start1234"
echo "Welches VDI-OS soll installiert werden" echo "Welches VDI-OS soll installiert werden"
echo echo
@@ -46,14 +55,14 @@ select opt in "${options[@]}"
do do
case $opt in case $opt in
"Aktueller Benutzer") "Aktueller Benutzer")
VAR_USER=$(whoami) VAR_GROUP_MEMBERS=$(whoami)
;; ;;
"Anderer Benutzer") "Anderer Benutzer")
read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_USER read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_GROUP_MEMBERS
if grep -q "^$VAR_USER:" /etc/passwd; then if grep -q "^$VAR_GROUP_MEMBERS:" /etc/passwd; then
echo "Der Benutzer $VAR_USER existiert auf diesem System." echo "Der Benutzer $VAR_GROUP_MEMBERS existiert auf diesem System."
else else
echo "Der Benutzer $VAR_USER existiert nicht auf diesem System." echo "Der Benutzer $VAR_GROUP_MEMBERS existiert nicht auf diesem System."
exit 1 exit 1
fi fi
;; ;;
@@ -62,7 +71,7 @@ do
if getent group "$VAR_GROUP" &>/dev/null; then if getent group "$VAR_GROUP" &>/dev/null; then
echo "Mitglieder der Gruppe $VAR_GROUP:" echo "Mitglieder der Gruppe $VAR_GROUP:"
get_group_users "$VAR_GROUP" get_group_users "$VAR_GROUP"
GROUP_MEMBERS=($(get_group_users "$VAR_GROUP")) VAR_GROUP_MEMBERS=($(get_group_users "$VAR_GROUP"))
else else
echo "Die Gruppe $VAR_GROUP existiert nicht auf diesem System." echo "Die Gruppe $VAR_GROUP existiert nicht auf diesem System."
exit 1 exit 1
@@ -76,8 +85,8 @@ do
done done
COLUMNS=8 COLUMNS=8
PS3='Please enter your choice: ' PS3='Bitte wählen Sie die VM-Option: '
OPTIONS=("Ubuntu 2204 SRV BASE" "Ubuntu 2204 GUI BASE" "Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") OPTIONS=("Ubuntu 2204 SRV BASE" "Ubuntu 2204 GUI BASE" "Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Beenden")
select opt in "${OPTIONS[@]}" select opt in "${OPTIONS[@]}"
do do
case $opt in case $opt in
@@ -97,15 +106,17 @@ do
VAR_OS="Ubuntu_64" VAR_OS="Ubuntu_64"
VAR_VDI="ubu2204-GUI.vdi" VAR_VDI="ubu2204-GUI.vdi"
;; ;;
*) "Beenden")
echo "Invalid option $REPLY" exit
;; ;;
esac esac
default_name=$(get_random_name)
# Benutzereingaben # Benutzereingaben
read -p "Wie viele VMs werden benötigt? [1]: " VAR_QUANTITY read -p "Wie viele VMs werden benötigt? [1]: " VAR_QUANTITY
VAR_QUANTITY=${VAR_QUANTITY:-1} VAR_QUANTITY=${VAR_QUANTITY:-1}
read -p "Präfix Host Name: " VAR_NAME_PREFIX read -p "Präfix Host Name (Vorgabe: $default_name): " VAR_NAME_PREFIX
read -p "CPUs [2]: " VAR_CPU read -p "CPUs [2]: " VAR_CPU
VAR_CPU=${VAR_CPU:-2} VAR_CPU=${VAR_CPU:-2}
read -p "Memory [2048]: " VAR_MEM read -p "Memory [2048]: " VAR_MEM
@@ -120,19 +131,26 @@ do
VAR_NIC1="Nat" VAR_NIC1="Nat"
VAR_NIC2="bridged" VAR_NIC2="bridged"
VAR_NET_INTERFACE="enp4s0f1" VAR_NET_INTERFACE="enp4s0f1"
VAR_NAME_PREFIX=${VAR_NAME_PREFIX:-$default_name}
# Schleife zur Erzeugung der VMs für jeden Benutzer in der Gruppe # Schleife zur Erzeugung der VMs für jeden Benutzer in der Gruppe
for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" for VAR_USER_IN_GROUP in "${VAR_GROUP_MEMBERS[@]}"
do
# Schleife zur Erzeugung der angeforderten Anzahl von VMs
for ((i = 1; i <= VAR_QUANTITY; i++))
do do
# VM erstellen # VM erstellen
VM_NAME="${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}--VM$(printf "%02d" $i)"
VM_DIR="/srv/vbox/$VAR_USER_IN_GROUP/$VM_NAME"
sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \
--name "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ --name "$VM_NAME" \
--ostype "$VAR_OS" \ --ostype "$VAR_OS" \
--register \ --register \
--basefolder "/srv/vbox/$VAR_USER_IN_GROUP" --basefolder "$VM_DIR"
# VM-Konfigurieren # VM-Konfigurieren
sudo -u "$VAR_USER_IN_GROUP" VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage modifyvm "$VM_NAME" \
--ioapic on \ --ioapic on \
--memory "$VAR_MEM" \ --memory "$VAR_MEM" \
--cpus "$VAR_CPU" \ --cpus "$VAR_CPU" \
@@ -146,43 +164,50 @@ do
--vrdeport "$VAR_RDP_PORT" --vrdeport "$VAR_RDP_PORT"
# Festplattencontroller hinzufügen # Festplattencontroller hinzufügen
sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "$VM_NAME" \
--name "SATA Controller" \ --name "SATA Controller" \
--add sata \ --add sata \
--controller IntelAhci --controller IntelAhci
# IDE-Controller für DVD
sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "$VM_NAME" \
--name "IDE Controller" \
--add ide \
--controller PIIX4
# Klonen der Festplatte und Registrieren (in Hintergrundprozessen) # Klonen der Festplatte und Registrieren (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}-disk00.vdi" sudo -u "$VAR_USER_IN_GROUP" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "$VM_DIR/${VM_NAME}-disk00.vdi"
sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "$VM_NAME" \
--storagectl "SATA Controller" \ --storagectl "SATA Controller" \
--port 0 \ --port 0 \
--device 0 \ --device 0 \
--type hdd \ --type hdd \
--medium "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk00.vdi" --medium "$VM_DIR/${VM_NAME}-disk00.vdi"
} & } &
# Erzeugen und Zuweisen zusätzlicher Festplatten (HDDs) # Erzeugen und Zuweisen zusätzlicher Festplatten (HDDs)
for ((i = 1; i <= VAR_ADDITIONAL_HDD; i++)) for ((j = 1; j <= VAR_ADDITIONAL_HDD; j++))
do do
HDD_NUM=$(printf "%02d" $i) HDD_NUM=$(printf "%02d" $j)
HDD_NAME="${VM_NAME}-disk$HDD_NUM.vdi"
sudo -u "$VAR_USER_IN_GROUP" VBoxManage createhd \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage createhd \
--filename "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk$HDD_NUM.vdi" \ --filename "$VM_DIR/$HDD_NAME" \
--size 102400 \ --size 102400 \
--format VDI --format VDI
sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "$VM_NAME" \
--storagectl "SATA Controller" \ --storagectl "SATA Controller" \
--port $i \ --port $j \
--device 0 \ --device 0 \
--type hdd \ --type hdd \
--medium "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk$HDD_NUM.vdi" --medium "$VM_DIR/$HDD_NAME"
done
done done
done done
# Warten auf das Ende der Hintergrundprozesse # Warten auf das Ende der Hintergrundprozesse
wait wait
echo "VMs wurden für alle Mitglieder der Gruppe erstellt, Festplatten geklont und registriert." echo "VMs wurden für alle wie angegeben erstellt."
break break
done done