SPICE-Anzeige und USB-Weiterleitung fuer Wiederherstellungen
Der Anlass: ein Software-Schutzmodul am USB-Port. Normalerweise haengt so ein Dongle an einem USB-Server im Netz - eine abgeschottete Wiederherstellung hat aber keins. Ueber SPICE kommt das Geraet vom Rechner des Bedieners, nicht ueber das Gastnetz. Die Maschine bleibt also ohne Netzwerk und hat trotzdem ihren Dongle. --spice SPICE-Anzeige (vga: qxl), zusaetzlich zu noVNC --usb <n> so viele USB-Weiterleitungen --iso <volid> Abbild als CD einlegen spice <vmid> Verbindungsdatei fuer remote-viewer (.vv) Zwei Dinge zeigte erst der Test, beide haetten die Sache still unbrauchbar gemacht: vga: qxl zerstoert den geladenen Arbeitsspeicher. qxl hat 64 MB Grafikspeicher, die Vorgabe 16 - beim Laden kommt "Size mismatch: vga.vram", und die Maschine bleibt angehalten stehen. Wieder mit TASK OK. Wird jetzt abgelehnt, mit den drei Auswegen in der Meldung. Der dauerhafte ist, am Original 'vga: qxl' zu setzen - dann tragen alle kuenftigen Snapshots es mit und beides geht gleichzeitig. USB ohne SPICE ist wirkungslos. QEMU legt die usbredir-Geraete zwar an, aber ohne SPICE-Server gibt es keinen Kanal dafuer - spiceproxy sagt schlicht "no spice port". --usb schaltet die Anzeige deshalb mit ein. Ausserdem korrigiert: in der .vv-Datei darf das Zertifikat nicht in echte Zeilenumbrueche uebersetzt werden. virt-viewer erwartet die Zeichenfolge \n als zwei Zeichen in einer einzigen Zeile; sonst steht nur die erste hinter "ca=". tools/get-guest-tools.sh holt virtio-win auf einen ISO-Storage. Fuer den Dongle wird davon nichts gebraucht - die Tools sind nur fuer Zwischenablage, Aufloesung und Mauszeiger. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a1076c6641
commit
e88a80cb25
Executable
+102
@@ -0,0 +1,102 @@
|
||||
#!/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 <name>] [--list]
|
||||
#
|
||||
# --storage <name> 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 <storage>:iso/<datei>
|
||||
# ---------------------------------------------------------------------
|
||||
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 <<EOF
|
||||
|
||||
Beim Anlegen einlegen:
|
||||
|
||||
pvesnap-recovery live <VMID> --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
|
||||
Reference in New Issue
Block a user