# Proxmox

# Proxmox VM Template & Cloud-Init auto install

# Voraussetzungen

- **Proxmox VE** ≥ 6.x
- Linux-Cloud-Image (Ubuntu, Debian, Alma, Rocky, …)
- SSH-Key auf deinem Client

# 1. Cloud-Image herunterladen

```bash
wget <https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img>

```

💡 Wichtig: **Normale ISOs funktionieren nicht**, nur *Cloud Images*.

Weitere Ubuntu Cloud Images gibts hier: [https://cloud-images.ubuntu.com/](https://cloud-images.ubuntu.com/)

# 2. VM als Cloud-Init-Template anlegen

```bash
qm create 9000 \\
  --name ubuntu-cloudinit \\
  --memory 2048 \\
  --cores 2 \\
  --net0 virtio,bridge=vmbr0

```

## Disk importieren:

```bash
qm importdisk 9000 noble-server-cloudimg-amd64.img local-lvm

```

Wichtige Information: Bei Proxmox version 9.1.4 und neuer gibt es einen bug wenn man den VM Speicher als LVM-Thin formatiert hat. In dem Fall muss die Image Datei unter local (pve) → Import → Upload hochgeladen werden.

![3360-1658-max.png](https://bookstack.7chatban.de/uploads/images/gallery/2026-03/3360-1658-max.png)

Im Anschluss muss das Hochgeladene image nur noch Hard Disk importiert werden.

![300-632-max.png](https://bookstack.7chatban.de/uploads/images/gallery/2026-03/300-632-max.png)

## Disk &amp; Boot setzen:

```bash
qm set 9000 \\
  --scsihw virtio-scsi-pci \\
  --scsi0 local-lvm:vm-9000-disk-0 \\
  --boot c \\
  --bootdisk scsi0

```

## Cloud-Init aktivieren:

```bash
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0

```

## Cloud-Init konfigurieren (Proxmox GUI)

Dies ist nur erforderlich wenn man nicht mit Snippets arbeitet

Wenn man aber mit Snippets arbeitet ist es ratsam im Template in IP-Config die Konfiguration auf DHCP zu stellen.

Wenn trotzdem eine statische IP für einen Dienst gewünscht wird, kann man dies auch über das Snippet konfigurieren.

In der VM unter **Cloud-Init**:

- 👤 User: `ubuntu`
- 🔐 SSH Public Key einfügen
- 🌐 IP-Config: 
    - DHCP **oder**
    - `ip=192.168.1.50/24,gw=192.168.1.1`
- 🖥 DNS optional

# VM zum Template machen

```bash
qm template 9000

```

🎉 Fertig! Das Golden Image ist bereit.

# Snippets erstellen und einbinden

## Snippet Speicherort einstellen

Bevor wir Snippets verwenden können, muss erst einmal das Speichern von Snippets erlaubt werden.

Dafür im Proxmox Webinterface unter dem Punkt Datacenter → Storage → local → Edit

![3360-1650-max.png](https://bookstack.7chatban.de/uploads/images/gallery/2026-03/3360-1650-max.png)

Hier muss nur im Content Menü Snippets angeklickt werden und dann nur noch mit OK bestätigt werden.

![1320-724-max.png](https://bookstack.7chatban.de/uploads/images/gallery/2026-03/1320-724-max.png)

Nun muss über die Proxmox shell nur noch die Datei am Richtigen Ort abgelegt werden

Snippets liegen dann hier:

```bash
/var/lib/vz/snippets/

```

## user-data Datei erstellen

Beispiel:

```bash
nano /var/lib/vz/snippets/user-data-web.yaml

```

Inhalt:

```bash
#cloud-config

hostname: web01

users:
  - name: devops
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-ed25519 AAAA...DEINKEY

package_update: true
packages:
  - nginx
  - curl

runcmd:
  - systemctl enable nginx
  - systemctl start nginx
  - echo "Provisioned by cloud-init" > /etc/motd

```

Wichtig:

- Erste Zeile **muss** `#cloud-config` sein
- YAML korrekt eingerückt!

## VM klonen (vom Template)

```bash
qm clone 9000 101 --name web01

```

## Custom user-data anhängen

```bash
qm set 101 --cicustom "user=local:snippets/user-data-web.yaml"

```

## VM Starten

```bash
qm start 101

```

Fertig 🎉

Beim ersten Boot wird die Config ausgeführt.

## Erweiterte Beispiele

Weitere Beispiele habe ich auf meiner Cloud liegen.

[Proxmox](https://cloud.7chatban.de/s/6Y8stSb58Qmiywt)

# Proxmox Ceph Installation & Konfiguration

## **1. Vorbereitung &amp; Anforderungen**

Bevor du beginnst, solltest du sicherstellen, dass folgende Voraussetzungen erfüllt sind:

### 📌 **Hardware-Empfehlungen**

- Mindestens **3 physische Proxmox-Nodes** für Quorum und Redundanz.
- Leistungsfähige **CPU &amp; genügend RAM** (Ceph benötigt insbesondere RAM pro OSD).
- Netzwerk mit **dedizierten Ceph-Verbindungen** (z. B. 10 Gbps oder mehr).
- Direkter Zugriff auf Festplatten (kein RAID) – Ceph arbeitet besser mit HBAs.

💡 Grundidee von *Hyper-Converged Infrastructure (HCI)*: Compute **und** Storage laufen gemeinsam auf denselben Servern.

---

## **2. Ceph Installation**

Du kannst Ceph entweder über die Proxmox-Weboberfläche oder per CLI installieren.

### 🔹 **Installation über Web Wizard (empfohlen)**

1. Öffne die Proxmox Web-GUI.
2. Wähle einen Cluster-Node aus.
3. Navigiere zu **Ceph → Installieren**.
4. Folge dem Assistenten:
    
    ➤ Wähle die Ceph-Version
    
    ➤ Bestätige Installation
    
    ➤ Setze Netzwerkeinstellungen (Public &amp; optional Cluster Network)
5. Nach Abschluss wird Ceph installiert und betriebsbereit sein.

**Netzwerkeinstellungen:**

- **Public Network:** Ceph Datenverkehr (z. B. Client/Replication)
- **Cluster Network (optional):** Intern für OSD Replikation (empfohlen separat).

---

### 🔹 **Installation über CLI**

Wenn du lieber die Konsole nutzt:

```bash
pveceph install

```

Danach die Erstkonfiguration:

```bash
pveceph init--network <CEPH_PUBLIC_NETWORK>/<CIDR>

```

Dadurch wird `/etc/pve/ceph.conf` erzeugt und automatisch auf alle Cluster-Nodes verteilt.

---

## **3. Ceph Dienste erstellen**

Nach der Installation musst du die wichtigen Ceph-Dienste einrichten:

### **Ceph Monitors (MON)**

Mindestens **3 Monitore** für Quorum und Ausfallsicherheit:

```bash
pveceph mon create

```

oder über GUI: **Ceph → Monitor → Create**.

### **Ceph Manager (MGR)**

Ein Manager ist wichtig für Cluster-Überwachung:

```bash
pveceph mgr create

```

oder über GUI: **Ceph → Manager → Create**.

---

## **4. OSDs erstellen**

Ceph speichert Daten über OSD-Dienste. Empfohlen: **1 OSD pro physischer Festplatte**.

### 🔹 **OSD per CLI**

```bash
pveceph osd create /dev/sdX

```

→ Ersetze `/dev/sdX` durch das entsprechende Block-Device.

💡 Falls eine Festplatte vorher schon Ceph-Daten enthält:

```bash
ceph-volume lvm zap /dev/sdX--destroy

```

⚠ Alle Daten auf dem Laufwerk werden gelöscht.

---

## **5. Pool erstellen**

Ein *Pool* ist eine logische Einheit für Ceph-Speicher.

```bash
pveceph pool create <pool-name>--add_storages

```

- Größe (`size`): Replicas (Standard: 3)
- Anzahl der Placement Groups (`pg_num`): Bestimmt Leistung und Verteilung

Pools erscheinen dann automatisch in der Proxmox-GUI als Speicherziel.

---

## **6. Ceph in Proxmox hinzufügen**

Nachdem Pools erstellt sind:

1. In der Proxmox-GUI gehe zu **Datacenter → Storage → Add → RBD**.
2. Wähle den Ceph-Pool aus.
3. Gib die Key-Ring und Mon Host-Informationen an.

→ Proxmox kann dann VM-Disks direkt auf Ceph speichern (RBD).

---

## **7. Optional: CephFS konfigurieren**

Wenn du ein verteiltes Dateisystem möchtest:

```bash
pveceph mds create
pveceph fs create--pg_num128--add-storage

```

CephFS benötigt mindestens einen MDS.

---

## **8. Wartung &amp; Monitoring**

Du kannst den Ceph-Status überwachen:

```bash
ceph-s
watch ceph--status

```

Fehler können z. B. durch Netzwerkprobleme, ausgefallene OSDs oder unzureichende Ressourcen entstehen.

---

## **Tipps aus den Empfehlungen**

→ Vermeide RAID-Controller und nutze direkte HBAs.

→ Reserve genug RAM pro OSD (z. B. 1 GiB pro TiB).

→ Dedizierte Netzwerkschnittstellen für Ceph-Traffic bringen bessere Performance.

##   

# Nvidia VGPU Driver installation

## **0. Vorbereitung – Proxmox &amp; GPU-Check**

Bevor irgendetwas installiert wird, sollte geprüft werden, ob die verwendete NVIDIA-GPU **vGPU-fähig** ist. Dazu gibt man den Chipsatznamen (z. B. „1060“ oder „2080“) ein. Unterstützte Karten erkennt das Skript entsprechend.

Wenn mehrere GPUs eingebaut sind, muss eine davon für das **Passthrough** reserviert werden und die andere für vGPU genutzt werden.

---

## **1. BIOS &amp; Skript starten**

1. **VT-d / IOMMU im BIOS aktivieren**  
    – Intel: *VT-d*  
    – AMD: *IOMMU*
2. Server neu starten und per SSH anmelden.
3. Skript herunterladen und ausführen:
    
    <div class="relative w-full my-4"><div><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼk ͼy" dir="ltr" id="bkmrk-git-clone-https%3A%2F%2Fgi"><div class="cm-scroller"><div class="cm-content q9tKkq_readonly">git clone https://github.com/wvthoog/proxmox-vgpu-installer.git  
    cd proxmox-vgpu-installer  
    bash proxmox-installer.sh</div></div></div></div></div></div></div></div></div></div><div>![13zRMxL.gif](https://imgur.com/13zRMxL.gif)</div></div></div>
4. Im Menü wählt man z. B. „New vGPU installation“, um neu zu installieren.  
    Nach Abschluss startet man das System neu.

---

## **2. Installation fortsetzen**

Nach dem Neustart erneut das Skript starten.  
Jetzt wird geprüft, ob **VT-d / IOMMU geladen ist** und eine Nvidia-Karte gefunden wurde. Anschließend wählt man die gewünschte **Treiber-Version** für Proxmox 7.x oder 8.x.

![bmV4AN9.gif](https://imgur.com/bmV4AN9.gif)

Das Skript lädt den vGPU-Host-Treiber, patched ihn und installiert ihn.  
Am Ende erhält man zwei URLs: eine für den Linux-Gasttreiber und eine für den Windows-Gasttreiber. Diese werden später in den VMs benötigt.

---

## **4. vGPU einer VM zuweisen**

Nach der Installation erzeugt ein Befehl (`mdevctl types`) verschiedene vGPU-Profile. Diese Profile teilen den VRAM entsprechend auf (z. B. 4 GB, 2 GB, 1 GB).

So weist man eine vGPU in der Proxmox-GUI zu:

1. VM auswählen
2. Reiter „Hardware“ öffnen
3. „Add“ → „PCI Device“ klicken
4. Nvidia-GPU auswählen (als „Mediated Device“)
5. Gewünschtes vGPU-Profil wählen
6. Hinzufügen und speichern

---

## **5. Gast-Treiber installieren**

### **Linux-Gast**

1. System aktualisieren:
    
    <div class="relative w-full my-4"><div><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼk ͼy" dir="ltr" id="bkmrk-sudo-apt-update-%26%26-s"><div class="cm-scroller"><div class="cm-content q9tKkq_readonly">sudo apt update &amp;&amp; sudo apt dist-upgrade</div></div></div></div></div></div></div></div></div><div><div>  
    </div></div></div></div></div>
2. Kernel-Headers installieren:
    
    <div class="relative w-full my-4"><div><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼk ͼy" dir="ltr" id="bkmrk-sudo-apt-install-lin"><div class="cm-scroller"><div class="cm-content q9tKkq_readonly">sudo apt install linux-headers-$(uname -r)</div></div></div></div></div></div></div></div></div><div><div>  
    </div></div></div></div></div>
3. Den vom Skript bereitgestellten Nvidia-Grid-Treiber herunterladen und installieren:
    
    <div class="relative w-full my-4"><div><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼk ͼy" dir="ltr" id="bkmrk-chmod-%2Bx-nvidia-%E2%80%A6-gr"><div class="cm-scroller"><div class="cm-content q9tKkq_readonly">chmod +x NVIDIA-…-grid.run  
    sudo ./NVIDIA-…-grid.run --dkms</div></div></div></div></div></div></div></div></div><div><div>  
    </div></div></div></div></div>
4. Mit `nvidia-smi` prüfen, ob die vGPU läuft.![HJON9hr.png](https://i.imgur.com/HJON9hr.png)

### **Windows-Gast**

**![cjERasO.gif](https://imgur.com/cjERasO.gif)**

Vor der vGPU-Treiberinstallation sollte ein vorhandener Nvidia-Treiber vollständig entfernt werden (z. B. über DDU). Danach den passenden GRID-Treiber installieren.

---

## **6. Tipps &amp; Zusatzfunktionen**

Das Skript unterstützt zusätzliche Argumente wie `–debug`, `–step`, `–url` oder `–file` zur flexibleren Nutzung. Außerdem gibt es eine Liste möglicher Verbesserungen und eine **Changelog-Übersicht** mit den wichtigsten Updates seit der Veröffentlichung.

---

## **7. Fehlerbehebung**

Tritt ein Problem auf, kann man meist den vGPU-Installer entfernen, den Server neu starten und den Vorgang erneut beginnen. Falls das nicht hilft, lohnt sich ein Blick in die `debug.log` oder eine Rückmeldung an den Autor zur Verbesserung des Skripts.