From 09d536204b773e65fccc0d92ea95762293d5d105 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 7 Oct 2025 10:18:43 +0200 Subject: [PATCH] Initial commit. --- 00-Install-Configure-LVM_file-ah.txt | 48 ++ 01-Install-KVM-system_file-ah.txt | 236 ++++++++ 02-Install-Windows-Server-2025.txt | 99 ++++ 03a-Install-Qemu-Guest-Agent.txt | 128 +++++ 03b-Nacharbeiten-Feinschliff-libvirt.txt | 162 ++++++ 03c-Feinschliff-features-und-clock.txt | 58 ++ 04-Configure-Windows-Server-2025.txt | 260 +++++++++ 05a-Autom-Updates-konfigurieren-lokal.txt | 95 ++++ 05b-Autom-Updates-konfigurieren-GPO.txt | 128 +++++ 06-Install-Remote-Desktop-Service.txt | 384 +++++++++++++ 07-RDS-CALs-aktivieren.txt | 168 ++++++ 08-OU-und-GPO-Struktur-erstellen.txt | 628 ++++++++++++++++++++++ 12 files changed, 2394 insertions(+) create mode 100644 00-Install-Configure-LVM_file-ah.txt create mode 100644 01-Install-KVM-system_file-ah.txt create mode 100644 02-Install-Windows-Server-2025.txt create mode 100644 03a-Install-Qemu-Guest-Agent.txt create mode 100644 03b-Nacharbeiten-Feinschliff-libvirt.txt create mode 100644 03c-Feinschliff-features-und-clock.txt create mode 100644 04-Configure-Windows-Server-2025.txt create mode 100644 05a-Autom-Updates-konfigurieren-lokal.txt create mode 100644 05b-Autom-Updates-konfigurieren-GPO.txt create mode 100644 06-Install-Remote-Desktop-Service.txt create mode 100644 07-RDS-CALs-aktivieren.txt create mode 100644 08-OU-und-GPO-Struktur-erstellen.txt diff --git a/00-Install-Configure-LVM_file-ah.txt b/00-Install-Configure-LVM_file-ah.txt new file mode 100644 index 0000000..904bf6d --- /dev/null +++ b/00-Install-Configure-LVM_file-ah.txt @@ -0,0 +1,48 @@ +# ----- +# - Configure LVM system on file-ah +# ----- + +# Installiere lvm2 package +# +apt-get install lvm2 + +# kpartx +# +# reads the partition table and creates device files for the partitions in /dev/mapper . +# Each device file represents a disk volume or a disk partition on a device or within an +# image file. +# +# Note: +# The 'kpartx' package is primarily used to mount an LCM partition. +# +apt-get install kpartx + + + +# --- +# Initialisiere Partition zur Benutzung als LVM Device: +# --- + +# for Windows Server 2025 +# +pvcreate /dev/mapper/kvm-system + + + +# --- +# Erstelle Volume Groups +# --- + +# For Windows Server 2025 +# +vgcreate VG-Windows-Server /dev/mapper/kvm-system + + + +# --- +# Erstelle LVM Partition(en) +# --- + +# For Windows Server 2025: +# +lvcreate -L 1000G -n WinSystem VG-Windows-Server diff --git a/01-Install-KVM-system_file-ah.txt b/01-Install-KVM-system_file-ah.txt new file mode 100644 index 0000000..61b4c13 --- /dev/null +++ b/01-Install-KVM-system_file-ah.txt @@ -0,0 +1,236 @@ +# ========== +# - Install KVM system on file-ah +# ========== + +# - NTFS Treiber und Programm Utils +# - +# - only needed for mounting windows partition directly +# +apt-get install ntfs-3g + + + +# ----- +# - Installiere KVM und notwendige Pakete +# ----- + +# - Note !! +# - See if files /etc/pam.d/common-* has changed +# - Backup these files first. +# - +cp -a /etc/pam.d /root/etc_pam.d + + +# Install TPM (Trusted Platform Module) Emulator 'swtpm' +# +apt install swtpm swtpm-tools + + +# Enable secure-boot/UEFI on KVM. +# +# The secure boot/UEFI is available by default when you have installed the KVM +# program on your machine. If it is not available by any chance, you may enter +# the command below to install it. +# +apt install ovmf + + + +# ----- +# - Install KVM System +# ----- + +# - Install KVM System on Debian trixie +# +# apt install qemu-system libvirt-clients libvirt-daemon-system libosinfo-bin +# +# When installing on a server, you can add the --no-install-recommends apt option, +# to prevent the installation of extraneous graphical packages: +# +# apt install --no-install-recommends qemu-system libvirt-clients libvirt-daemon-system libosinfo-bin +# +apt install --no-install-recommends qemu-system libvirt-clients libvirt-daemon-system libosinfo-bin + + +# To support creating KVM guest system via console install package 'virtinst'. +# +# +apt install virtinst qemu-kvm + + +# Anzeige der grafischen Konsole einer virtuellen Maschine +# +apt install virt-viewer + + +# Maybe you want also install package 'libguestfs-tools'. +# +# this package provides guest disk image management system and diagnostic tools like: +# +# guestmount +# guestunmount +# libguestfs-test-tool +# ... +# virt-copy-in +# virt-copy-out +# ... +# virt-rescue +# virt-resize +# ... +# virt-tail +# ... +# +apt install libguestfs-tools + + +# - Einloggen und nachsehen, ob KVM erfolgreich installiert wurde +# - +# - Es sollte eine leere Tabelle aber KEIN Fehler angezeigt werden +# - +# - Id Name State +# - ---------------------------------- +# - +virsh -c qemu:///system list + + + +# ----- +# - Configure KVM System +# ----- + + +# - In order to be able to manage virtual machines as regular user, that user +# - needs to be added to some groups. +# - +#usermod -a -G libvirt root +usermod -a -G libvirt chris +usermod -a -G libvirt sysadm + +#usermod -a -G libvirt-qemu root +usermod -a -G libvirt-qemu chris +usermod -a -G libvirt-qemu sysadm + + + +# activate/enable ksm support +# +# Kernel Samepage Merging (KSM) erlaubt eine Deduplizierung des Memory unter Linux +# und wurde mit der Kernel Version 2.6.32 eingeführt. KSM versucht gleiche Memory +# Pages zu erkennen und diese zusammenzuführen um den doppelt belegten Memory +# freizugeben. Es versucht möglichst Memory Pages zu finden welche selten aktualisiert +# werden, da es sich ansonsten als ineffizient erweisen könnte. +# +# Ursprünglich wurde KSM für den Einsatz von virtuellen Maschinen entwickelt. Wenn +# diese virtuellen Maschinen die gleichen Programme oder Betriebssystem einsetzen, +# kann der gesamte Memory Verbrauch unter Umständen dramatisch reduziert werden und +# mehr virtuelle Maschinen mit dem vorhandenem RAM betrieben werden. +# +# Erste Tests von Red Hat haben gezeigt, dass 52 virtuelle Maschinen mit Windows XP +# und 1 GB RAM auf einem Server mit nur 16 GB RAM betrieben werden können. +# +# Die Virtualisierung KVM unterstützt den Einsatz von KSM. Basierend auf diesem +# Bug-Report (http://bugzilla.openvz.org/show_bug.cgi?id=1623) unterstützt OpenVZ +# KSM nicht. +# +# Ob KSM in Ihrem Kernel integriert ist können Sie anhand der Kernel Konfiguration +# überprüfen: +# +# $ grep KSM /boot/config-`uname -r` +# CONFIG_KSM=y +# +# Install ksm.service: +# +apt-get install ksmtuned --no-install-recommends + + +# VNC is configured to listen on 127.0.0.1 by default. +# To make it listen on all public interfaces, uncomment +# this next option in file /etc/libvirt/qemu.conf. +# +# vnc_listen = "0.0.0.0" +# +# NB, strong recommendation to enable TLS + x509 certificate +# verification when allowing public access +# +# +vim /etc/libvirt/qemu.conf + + + +# ----- +# - Download virtio-win driver +# ----- + + +# link image directory to /misc/libvirt_images +# +mkdir -p /misc/libvirt_images +rmdir /var/lib/libvirt/images/ + +ln -s /misc/libvirt_images /var/lib/libvirt/images + + +# Download virtio driver, see: +# +# https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ +# +# Currently up-to-date driver: virtio-win-0.1.285.iso +# +cd /misc/libvirt_images +wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.285-1/virtio-win-0.1.285.iso + + + +# ----- +# - Configure network +# ----- + +# - Install bridge-utils +# - +apt-get install bridge-utils + + +# Configure bridge using netwoerk interface 'eno1np0' +# +# auto br0 +# iface br0 inet static +# hwaddress 7c:c2:55:c0:26:74 +# address 192.168.100.20/24 +# gateway 192.168.100.254 +# +# # bridge settings +# bridge_ports eno1np0 +# bridge_stp off +# bridge_fd 5 +# bridge_hello 2 +# bridge_maxage 12 +# +# # hook scripts +# pre-up ip link set dev eno1np0 up + + +# --- +# --- Some hints +# --- + +# 1.) Festplatten unter Windows sind deutlich schneller wenn man cache='none' setzt: +# +# +# +# +# +# +# +# 2.) Das Netzwerk ist schneller mit einer Intel-NIC: +# +# +# +# +# +# + + +# If you modify a guest's xml file (located in the /etc/libvirt/qemu/ +# directory) i.e. vm10.xml, afterwords you must redefine the guest: +# +virsh --connect qemu:///system define /etc/libvirt/qemu/vm10.xml diff --git a/02-Install-Windows-Server-2025.txt b/02-Install-Windows-Server-2025.txt new file mode 100644 index 0000000..682d191 --- /dev/null +++ b/02-Install-Windows-Server-2025.txt @@ -0,0 +1,99 @@ +# ===== +# - Aufsetzen Windows 2025 +# ===== + +virt-install \ + --name WinServer2025 \ + --metadata title=Windows-Server-2025-Standard \ + --memory 200704 \ + --vcpus 32,sockets=1,cores=16,threads=2 \ + --cpu host-passthrough,cache.mode=passthrough \ + --features kvm_hidden=on,hyperv_relaxed=on,hyperv_vapic=on,hyperv_spinlocks=on,hyperv_synic=on,hyperv_reset=on \ + --machine q35 \ + --boot uefi \ + --virt-type kvm \ + --os-variant win2k25 \ + --cdrom /misc/libvirt_images/de-de_windows_server_2025_updated_nov_2024_x64_dvd.iso \ + --disk path=/dev/VG-Windows-Server/WinSystem,format=raw,bus=virtio,cache=none,io=native,discard=unmap,serial=WS2025SYS \ + --disk path=/misc/libvirt_images/virtio-win-0.1.285.iso,device=cdrom \ + --graphics vnc,listen=0.0.0.0,port=5900,keymap=de,password='chnarzfo' \ + --video virtio \ + --rng /dev/urandom \ + --network bridge=br0,model=virtio,driver.name=vhost,driver.queues=16 \ + --check path_in_use=off + + Bemerkung: + Es erschien das BIOS der KVM Maschine (Sprachauswahle). Ich musste mehrmals + 'Continue' abschicken ohne Änderungen gemacht zu habenE + + Grund war: zu spät im GUI - 'Taste drücken um von der DVD zu starten' war + bereits abgelaufen + + +# ---------- +# Basisi-Installation +# ---------- + +# 1.Windows Setup booten, bei Datenträgerauswahl: +# =============================================== +# +# - "Treiber laden' von der virtio-win ISO: +# viostor (oder vioscsi, falls du virtio-scsi nutzt) für den System-Datenträger. +# +# Installation normal fortführen. + +# 2. Nach dem ersten Logon Treiber von der virtio-win ISO: +# +# virtio-win-guest-tools.exe ausführen: +# installiert NetKVM, Balloon, Storage, Virtio GPU WDDM, RNG, QEMU Guest Agent +# +# Für TeamViewer/hohe Auflösung ist der Virtio GPU (DOD) WDDM-Treiber entscheidend. +# Danach kannst du in Windows praktisch jede sinnvolle Auflösung einstellen (auch 4K), +# ohne GPU-Passthrough. + + +# ---------- +# Erste Nacharbeiten in der Windows Gast Maschine +# ---------- + +# Pwershell (Admin) öffnern: +# +# # TRIM prüfen/aktivieren (wichtig für discard=unmap): +# fsutil behavior query DisableDeleteNotify +# # Bei 0 ist TRIM aktiv; sonst: +# fsutil behavior set DisableDeleteNotify 0 +# +# # RSS für Virtio-Net aktivieren (bessere Netz-Performance): +# Enable-NetAdapterRss -Name "*" -Confirm:$false +# # optional: begrenzen/feintunen +# # Set-NetAdapterRss -Name "Ethernet" -MaxProcessors 16 +# +# # Large Send Offload / Checksum Offload sollten standardmäßig an sein: +# Get-NetAdapterAdvancedProperty -Name "*" | ft Name,DisplayName,DisplayValue +# +# # Zeitquelle sauber setzen (nicht auf Host verlassen): +# w32tm /config /syncfromflags:manual /manualpeerlist:"pool.ntp.org" /reliable:no /update +# Restart-Service w32time +# +# # Energieprofil auf Höchstleistung: +# powercfg /setactive scheme_min + + +# Weitere sinnvolle Treiber aus den Guest Tools: +# +# - Balloon (dynamischer RAM, wenn du später Memory Ballooning nutzt), +# - RNG (Zufall) +# +# - QEMU Guest Agent (graceful shutdown, IP-Report, Freeze/Thaw für Backups). +# + +# QEMU Guest Agent installieren - Installer Datei ist auf dem virtio-win ISO +# image (E:) enthalten +# +Doppelklick auf E:\\virtio-win-0.1.285\guest-agent\qemu-ga-x86_64 + + + + + + diff --git a/03a-Install-Qemu-Guest-Agent.txt b/03a-Install-Qemu-Guest-Agent.txt new file mode 100644 index 0000000..4600b41 --- /dev/null +++ b/03a-Install-Qemu-Guest-Agent.txt @@ -0,0 +1,128 @@ + + +# --- +# 'Kein aktiver Guest-Agent erkannt' - Ursachen & Fix +# --- + + +# virsh domfsinfo VM liefert nur dann Daten, wenn alle drei Punkte stimmen: +# +# - In Windows läuft der Dienst 'QEMU Guest Agent'. +# +# - Prüfen: services.msc -> 'QEMU Guest Agent' = Running; Starttyp Automatic. +# +# Falls nicht vorhanden: von der virtio-win ISO installieren: guest-agent\qemu-ga-x64.msi. +# +# +# - Virtio-Serial Treiber ist installiert (Device Manager -> VirtIO Serial Driver ohne gelbes Zeichen). +# +# - Fehlt? Von derselben ISO: vioserial/2k25/amd64/vioser (? virtio-win\amd64\virtio-serial) +# via Treiber aktualisieren. +# +# +# Der Kanal ist in der VM-XML vorhanden (libvirt-Seite): +# +# Du brauchst einen virtio-serial Controller und einen Channel org.qemu.guest_agent.0. + + + +# QEMU Guest Agent installieren +# +# Installer Datei ist auf dem virtio-win ISO image (Laufwer E:) enthalten +# +Doppelklick auf E:\\virtio-win-0.1.285\guest-agent\qemu-ga-x86_64 + + + +# Virtio-Serial Treiber +# +# - via tools auf der virtio-win disk +# +# Auf der Windows Server 2025 installation von der virtio-win disk ausführen: +# +# Doppelklick auf E:\virtio-win-0.2.285\virtio-win-gt-x64 +# Doppelklick auf E:\virtio-win-0.2.285\virtio-win-guest-tools +# +# +# - direkt installieren von E:\virtio-win-0.2.285\vioserial/2k25/amd64/vioser: +# +# 1. Variante: +# +# Powershell: pnputil /add-driver "E:\virtio-win-0.2.285\vioserial\2k25\amd64\vioser.inf" /install +# Erfolg: +# Driver package added successfully. +# Driver installed successfully. +# +# +# 2.Variante +# +# Öffne den Geräte-Manager +# +# Win + X -> Geräte-Manager +# (oder: devmgmt.msc im Ausführen-Dialog) +# +# Nicht erkannte Geräte anzeigen +# +# Suche nach einem Gerät mit gelbem Warnsymbol, meist unter Andere Geräte oder Unbekanntes Gerät. +# +# Falls der serielle Port bereits da ist, sollte er z. B. heißen: +# +# VirtIO Serial Port +# +# PCI Simple Communications Controller +# +# Treiber manuell installieren +# +# - Rechtsklick -> Treiber aktualisieren +# +# - Auf dem Computer nach Treibern suchen +# +# - Pfad angeben: +# +# E:\virtio-win-0.2.285\vioserial\2k25\amd64\ +# +# -> Weiter klicken. +# +# Windows sollte den Treiber erkennen und installieren: +# +# Danach erscheint das Gerät als 'VirtIO Serial Driver' oder 'VirtIO Serial Port' im +# Geräte-Manager unter Systemgeräte. + + + + +# Controller und Channel dr XML Konfiguration hinzufügen: +# +# +# Controller (falls keiner da): +# +# +# +# +# Channel +# +# +# +# +# +# +# +# direkt konfigurieren: +# +# virsh edit WinServer2025 +# +# oder 'attach-device' nutzen: +# +cat >/tmp/virtio-serial-controller.xml <<'EOF' + +EOF +virsh attach-device WinServer2025 /tmp/virtio-serial-controller.xml --live --config + +# Guest-Agent Channel +cat >/tmp/qga-channel.xml <<'EOF' + + + + +EOF +virsh attach-device WinServer2025 /tmp/qga-channel.xml --live --config^ diff --git a/03b-Nacharbeiten-Feinschliff-libvirt.txt b/03b-Nacharbeiten-Feinschliff-libvirt.txt new file mode 100644 index 0000000..452b75d --- /dev/null +++ b/03b-Nacharbeiten-Feinschliff-libvirt.txt @@ -0,0 +1,162 @@ +# ========== +# Nacharbeiten - Libvirt-Feinschliff +# ========== + + +# ---------- +# Libvirt-Feinschliff +# ---------- + +nach der Installation, via virsh edit WinServer2025: + + +a) HugePages (stabilere Latenz & weniger Overhead) + + + + + + Host-seitig HugePages bereitstellen (2M oder 1G), Dienst neu starten oder Host reboot. + VM dann ohne Memory-Ballooning betreiben. + + +b) I/O-Threads & Multiqueue für Disk + + 4 + + + + 1 + + + + Alternativ virtio-scsi nutzen: controller type='scsi' model='virtio-scsi' und mehrere + queues setzen - bringt oft bessere Skalierung bei vielen I/Os. + + +c) NUMA-Pinning (AMD EPYC, 32 vCPUs) + + VCPUs an zusammenhängende NUMA-Node(s) binden, gleiches für iothreads. Beispiel: + + + + + ... + + + + + + + Passe cpuset/nodeset an die Host-Topologie an (EPYC CCDs/NUMA-Nodes). + + +d) Hyper-V-Enlightenments (falls nicht via virt-install gesetzt) + + + + + + + + + + + + + + + + +e) Secure Boot (optional, empfehlenswert) + + Nutze OVMF mit Secure-Boot-Vars (paketspezifische Pfade variieren): + + + /usr/share/OVMF/OVMF_CODE.secboot.fd + /var/lib/libvirt/qemu/nvram/WinServer2025_VARS.fd + + + Microsoft-DB ist in den secboot-Varianten enthalten; Windows 2025 bootet damit. + + +f) VNC nach Setup einschränken/entfernen + + + + oder + + + + + +# ---------- +# Netzwerk & Host-Tuning +# ---------- + + - Host-Bridge (br0): prüfe, dass txqueuelen, GRO/LRO-Einstellungen und Offloads sinnvoll sind. + Häufig gut: GRO/LRO an, TSO an. + + - vhost-net ist bereits aktiv (driver.name=vhost). Mit driver.queues=16 nutzt der Gast + Multiqueue - passt zu 16 Cores. + + Im Gast: Enable-NetAdapterRss (s.o.) und prüfe, dass mehrere IRQs/Queues genutzt werden + (Perfmon -> Netzwerk-Adapter > "Empfangene Pakete/s" per Queue). + + - Für sehr hohe PPS-Raten: ethtool -L combined 16 auf dem Host (abhängig vom Treiber). + + + +# ---------- +# Storage-Hinweise (LVM als Block-Device) +# ---------- + + Du nutzt RAW auf LVM – gut für Performance und Trim (discard=unmap). In Windows regelmäßig „Laufwerke optimieren“ (TRIM) laufen lassen (oder per Task Scheduler wöchentlich). + + Falls du später Snapshots brauchst: lieber in LVM (COW) als in QEMU-Blocksnapshots – oder Windows-seitig über VSS + Backup-Software (sauberer). + + + +# ---------- +# Anzeige & TeamViewer – Best Practices +# ---------- + + Virtio GPU WDDM (aus Guest Tools) liefert hohe, freie Auflösungen → in Anzeigeeinstellungen manuell auf z. B. 2560×1440/3840×2160 stellen. + + Windows Server hat teils die „Grafik-Arbeitsplatzerfahrung“/Desktop Experience bereits, andernfalls Desktopdarstellung/„Server mit Desktopdarstellung“ aktivieren (bei Core-Install nicht nötig, falls du nur TeamViewer verwendest – aber für GUI-Apps natürlich schon). + + VNC/SPICE brauchst du danach nicht mehr; TeamViewer kapselt den Desktop. + + + +# ---------- +# Backup, Wartung, Sicherheit +# ---------- + + QEMU Guest Agent ist Pflicht für konsistente Backups (Freeze/Thaw). + + Windows VSS aktiv: nutze Backup-Lösungen, die VSS-aware sind. + + Secure Boot (s.o.), TPM-Emulation (falls BitLocker/Attestation): + + + + + + Windows Updates: automatisieren, Neustarts in Wartungsfenster legen. + + Zeit: Nicht vom Host syncen; NTP im Gast (s.o.). + + + +# ---------- +# Häufige Varianten +# ---------- + + virtio-scsi statt virtio-blk: bei mehreren Disks/hoher Queue-Tiefe oft im Vorteil. Dann beim Setup den vioscsi-Treiber laden. + + CPU-Topologie: bei EPYC ggf. --cpu host-passthrough + Topologie so wählen, dass vCPUs nicht über zu viele NUMA-Nodes streuen. + + Ballooning: Wenn du HugePages nutzt, kein Ballooning. Sonst Balloon-Treiber installieren und in libvirt . + diff --git a/03c-Feinschliff-features-und-clock.txt b/03c-Feinschliff-features-und-clock.txt new file mode 100644 index 0000000..9b1533c --- /dev/null +++ b/03c-Feinschliff-features-und-clock.txt @@ -0,0 +1,58 @@ +# ========== +# Feinschliff Features und Uhr/Timer +# ========== + + +# -Sektion - Beispiel +# ============================= +# +# Wichtig: +# In der Domain-XML darf es nur eine -Sektion geben und die Position muss zur +# libvirt-Reihenfolge passen (nicht irgendwo am Ende ein zweites einfügen). + + + + + + + + + + + + + + + + + + + + + + + + Prüfen, was dein Host unterstützt: + + virsh domcapabilities | sed -n '//,/<\/hyperv>/p' + + Nur die dort aufgeführten Einträge solltest du aktivieren. Wenn stimer dort fehlt, ist + deine libvirt/QEMU-Kombi zu alt -> dann stimer weglassen. + + +# Uhr/Timer sauber setzen (statt "hyperv time") +# ============================================= +# +# Für stabile Zeit und gute Tick-Politik nutze die Clock-Sektion: + + + + + + + + + + Damit hast du i. d. R. die beste Zeitbasis unter KVM; Windows 2025 kommt damit + hervorragend klar. Eine spezielle