VMs über Shell und SSH erstellen

Computerboss

New Member
Nov 29, 2023
21
2
3
Guten Nachmittag zusammen,

gerne würde ich mir Skripte vorbereiten um VMs mit einem Klick zu erstellen.
Ich habe auch schonmal durch die Dokumentation geblättert und gesehen das es wirklich viele Parameter für qm create gibt.
Gerne würde ich eine VM grafisch erstellen und irgendwie auslesen was genau der Proxmox Host da an Shell befehlen gearbeitet hat um das als Vorlage nutzen zu können.

Natürlich wäre es auch schön, wenn im zweiten Schritt dann vielleicht eine Art Abfrage eingebaut werden kann wie bei PowerShell Read-Host so dass man VM ID und Festplattengröße mit angeben kann.

Alternativ auch per GUI wenn es sowas gibt?

Über einen Austausch und Empfehlungen würde ich mich freuen.

Viele Grüße :)
 
Hi,

wenn Du Dir eine VM erstellt hast, dann kannst Du Dir in der Shell mit qm config <vmid> das Ergebnis anzeigen lassen und nur die dort verwendeten Parameter bei qm create... verwenden.
Wie soll es denn nach dem Erstellen der VM weitergehen?
 
  • Like
Reactions: Computerboss
Hi,

wenn Du Dir eine VM erstellt hast, dann kannst Du Dir in der Shell mit qm config <vmid> das Ergebnis anzeigen lassen und nur die dort verwendeten Parameter bei qm create... verwenden.
Wie soll es denn nach dem Erstellen der VM weitergehen?
Vielen herzlichen Dank für die schnelle Hilfe!

Das hilft mir sehr weiter.

Ich habe gerade mal alles swoeit ich das verstehe abgetippt in Notepad:

qm create 222 \
--name Shell-VM \
--agent 1 \
--balloon 0 \
--bios ovmf \
--boot order=scsi0;ide2;net0 \
--cores 4 \
--cpu host \
--efidisk0 local-lvm:vm-222-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M \
--cdrom local:iso/ubuntu-24.04.1-desktop-amd64.iso,media=cdrom,size=6057964K \
--machine q35 \
--memory 8192 \
--numa 0 \
--ostype 126 \
--scsi0 local:iso/ubuntu-24.04.1-desktop-amd64.iso,media=cdrom,size=6057964K \
-- scsihw virtio-scsi-single \
--sockets 1 \
--net0 virtio=WELCHE-MAC-HIER,bridge=vmbr0,firewall=1


Einige neue Fragen haben sich ergeben:

1. Muss ich eine MAC Adresse angeben oder lasse ich das Feld einfach weg?
2. Muss ich smbios1 angeben weil da eine UID drinne steht vermute ich das muss ich irgendwie wegalssen oder?
3. Gleiches beid er vmgenid und bei meta das würde ich auch weglassen oder wäre das problematisch?
4. Muss ich noch irgendwas in Anführungszeichen " oder ' setzen gerade bei den langen strings oder passt das alles so?


Nach dem Erstellen würde ich mich per Konsole draufschalten und die VM hochziehen.
Bzw. wäre es noch praktisch irgendwie Variablen zu haben, dass man nicht immer das Skript anpassen muss für die VM ID, den RAM oder dergleichen.
Hast du da einen Tipp?

Viele Grüße
 
  1. kannst Du weglassen, dann wird eine zufällige generiert
  2. kannst Du weglassen, wird auch automatisch erzeugt
  3. nein, kein Problem das wegzulassen
  4. das geht alles erstmal auch ohne Anführungszeichen

Wenn Du dem Skript die Daten übergibst alá skript.sh -i 100 -r 2048 -d 20 dann kannst Du die Werte weiterverwenden.
Bash:
#read arguments
while getopts i:r:d: flag
do
    case "${flag}" in
        i) vmid=${OPTARG};;
        r) ram=${OPTARG};;
        d) disksize=${OPTARG};;
    esac
done

#sanity checking here#

qm create $vmid --memory $ram --scsi0 local:${disksize}

Checks für Sinnhaftigkeit der Eingaben, Verhalten bei fehlenden Werten gehört natürlich noch dazu, bevor mit den übergebenen Werten gearbeitet wird.
 
  • Like
Reactions: fireon
Vielen herzlichen Dank für die schnelle Hilfe!

Das hilft mir sehr weiter.

Ich habe gerade mal alles swoeit ich das verstehe abgetippt in Notepad:

qm create 222 \

--net0 "virtio=$MAC,bridge=vmbr0

1. Muss ich eine MAC Adresse angeben oder lasse ich das Feld einfach weg?
Ich hatte mal den Fall, dass ich die MACs vorhersagbar (und pro VM "fest") haben wollte und habe für dreistellige ID einfach sowas gemacht:

Code:
ID=222
MAC=$(echo "$ID" | hexdump -n3 -e'/3 "8E:D8:94" 3/1 ":%02X"')
echo $MAC
8E:D8:94:32:32:32

Für numerische IDs bis 65535 könnte man vielleicht sowas wie
Code:
id=0x1234
id=4660
MAC=$(printf "8E:D8:94:01:%02X:%02X" $(( id / 0x100 )) $(( id % 0x100)))
echo $MAC
8E:D8:94:01:12:34
 
Last edited:
  • Like
Reactions: Johannes S
Vielen herzlichen Dank euch!
Danke euch für die beantwortung meiner Fragen, dann werde ich mal ein bisschen rumprobieren :)

Viele Grüße