#!/bin/bash # --------------------------------------------------------------------- # Guest-Tools fuer wiederhergestellte Maschinen holen # # Die USB-Weiterleitung ueber SPICE braucht im Gast NICHTS - ein # weitergereichter Dongle taucht dort als gewoehnliches USB-Geraet auf. # Die Tools sind nur fuer den Komfort: Zwischenablage, automatische # Aufloesung, sauberer Mauszeiger. # # Aufruf: ./get-guest-tools.sh [--storage ] [--list] # # --storage wohin (Vorgabe: erster Storage mit iso-Inhalt) # --list nur zeigen, was da ist # -h, --help diese Hilfe # # Danach beim Anlegen einlegen: # pvesnap-recovery live 802 --spice --usb 2 --iso :iso/ # --------------------------------------------------------------------- set -euo pipefail STORAGE="" LIST=0 # virtio-win enthaelt fuer Windows alles auf einmal: den qxl-Grafiktreiber, # den SPICE-Agenten und die virtio-Treiber. Fuer Linux gibt es nichts zu # holen - dort genuegt das Paket der Distribution. WINDOWS_URL="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" WINDOWS_NAME="virtio-win.iso" while [ $# -gt 0 ]; do case "$1" in --storage) STORAGE="${2:-}"; shift ;; --storage=*) STORAGE="${1#*=}" ;; --list) LIST=1 ;; -h|--help) sed -n '2,19p' "$0" | sed 's/^#[[:space:]]\{0,1\}//'; exit 0 ;; *) echo "Unbekannte Option: $1" >&2; exit 1 ;; esac shift done info() { printf '\033[1;32m==>\033[0m %s\n' "$*"; } warn() { printf '\033[1;33m==>\033[0m %s\n' "$*" >&2; } fail() { printf '\033[1;31m==>\033[0m %s\n' "$*" >&2; exit 1; } command -v pvesm >/dev/null 2>&1 || fail "pvesm nicht gefunden - das gehoert auf einen Proxmox-Host." # Storage bestimmen: der erste, der iso-Inhalt aufnimmt if [ -z "$STORAGE" ]; then STORAGE="$(pvesm status --content iso 2>/dev/null | awk 'NR>1 && $3=="active" {print $1; exit}')" [ -n "$STORAGE" ] || fail "Kein Storage mit iso-Inhalt gefunden. In der Proxmox-Oberflaeche unter Datacenter -> Storage bei einem Storage den Inhalt 'ISO image' zulassen, oder --storage angeben." fi DIR="$(pvesm path "${STORAGE}:iso/x" 2>/dev/null | xargs dirname 2>/dev/null || true)" [ -n "$DIR" ] || fail "Ablageort von '${STORAGE}' nicht ermittelbar." if [ "$LIST" -eq 1 ]; then info "Vorhandene Abbilder auf '${STORAGE}' (${DIR}):" pvesm list "$STORAGE" --content iso 2>/dev/null | tail -n +2 | sed 's/^/ /' \ || echo " (keine)" exit 0 fi info "Ablage: ${DIR}" mkdir -p "$DIR" # --- Windows --------------------------------------------------------- TARGET="${DIR}/${WINDOWS_NAME}" if [ -f "$TARGET" ]; then info "Schon da: ${STORAGE}:iso/${WINDOWS_NAME} ($(du -h "$TARGET" | cut -f1))" else info "Hole virtio-win (Windows: qxl-Treiber, SPICE-Agent, virtio-Treiber)" command -v curl >/dev/null 2>&1 || fail "curl wird benoetigt." if curl -fL --progress-bar -o "${TARGET}.teil" "$WINDOWS_URL"; then mv "${TARGET}.teil" "$TARGET" info "Fertig: ${STORAGE}:iso/${WINDOWS_NAME} ($(du -h "$TARGET" | cut -f1))" else rm -f "${TARGET}.teil" fail "Herunterladen fehlgeschlagen. Hat der Host Internetzugang? Sonst von Hand holen und nach ${DIR} legen: ${WINDOWS_URL}" fi fi cat < --spice --usb 2 --iso ${STORAGE}:iso/${WINDOWS_NAME} Im Gast danach: Windows Von der CD 'virtio-win-guest-tools.exe' ausfuehren. Linux Nichts von der CD - das Paket der Distribution nehmen: apt install spice-vdagent (Debian/Ubuntu) dnf install spice-vdagent (Fedora/RHEL) Fuer einen weitergereichten USB-Dongle braucht es davon nichts. Der taucht im Gast als gewoehnliches USB-Geraet auf, sobald du ihn im remote-viewer unter "USB-Geraeteauswahl" anhakst. EOF