User Tools

Site Tools


virtualisation:kvm-core-server

QEMU/KVM: Intégration de Windows Server Core dans KVM/QEM

La version core de Windows Server est globalement moins lourde et plus économe en ressources. Elle ne contient pas les logiciels intégrés de la version “expérience utilisateur” et cela participe à réduire la surface d'attaque du système de Microsoft:

  • Maintenance réduite: étant donné que l'option d'installation Server Core n'installe que ce qui est nécessaire pour disposer d'un serveur gérable pour les rôles AD DS, AD LDS, Serveur DHCP, Serveur DNS, Services de fichiers, Services d'impression et Services de diffusion multimédia en continu, une installation complète de Windows Server avec une interface graphique.
  • Surface d'attaque réduite: étant donné que les installations de Server Core sont minimales, le nombre d'applications exécutées sur le serveur est réduit, ce qui réduit la surface d'attaque.
  • Gestion réduite: étant donné que moins d'applications et de services sont installés sur un serveur exécutant l'installation de Server Core, il y en a moins à gérer.
  • Moins d'espace disque requis: une installation Server Core ne nécessite qu'environ 1 Go d'espace disque à installer et environ 2 Go pour les opérations après l'installation.

Les conteneurs permettent d’avoir de petites « instances » de serveur, chacune ayant un service ou un rôle spécifique.

Cet article présente la confection et l'utilisation d’un conteneur Windows Server Core pour utiliser une fenêtre de commandes MS-Dos.

Configuration et installation de la VM

Pour commencer on va construire une image complète de Windows Server Core – un petit Windows Server 2016 à jour, sans interface graphique et avec tout le nécessaire pour une machine virtuelle fonctionnelle.

Préparation de la VM

Créer le fichier de configuration KVM

Pour commencer, créer un fichier XML compatible avec l'hyperviseur :

<domain type='kvm' id='10'>
  <name>Windows2016core</name>
  <uuid>154d0X-va57-5fc4-f51c-c5d4fgg4rv</uuid>
  <description>None</description>
  <memory unit='KiB'>2000000</memory>
  <currentMemory unit='KiB'>0000000</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.1'>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <bootmenu enable='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-model'>
    <model fallback='allow'/>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/windows2016core'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/windows2016core-vtl'/>
      <target dev='vdb' bus='virtio'/>
      <alias name='virtio-disk1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
        <disk type='file' device='cdrom'>
      <source file='/var/lib/libvirt/iso/Microsoft/fr_windows_server_2016_standard_and_datacenter_x64.iso'/>
      <target dev='hdc' bus='sata'/>
      <readonly/>
    </disk>
    <disk type='file' device='cdrom'>
      <source file='/var/lib/libvirt/iso/Drivers/virtio-windows.iso'/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
    </disk>
    <controller type='usb' index='0'>
      <alias name='usb0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:5f:5v:5v:5v'/>
      <source network='lbr300'/>
      <target dev='vnet13'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/0'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='no' listen='127.0.0.1' keymap='fr'>
      <listen type='address' address='127.0.0.1'/>
    </graphics>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='none'/>
</domain>

Il faut adapter certaines balises à la configuration : chemins des fichiers images, ISO Windows Serveur et l'emplacement du drivers virtio ainsi que la balise network et graphics.

Créer une image disque

Générer d'un fichier image pour le volume C:\ (minimum de 32Go). Dans le cas on a créer deux images : une de 50Go (Système) et une de 100Go (Backups) en approvisionnement dynamique :

qemu-img create -f qcow2 windows2016core 50G
qemu-img create -f qcow2 windows2016core-vtl 100G

Créer et démarrer la VM

Intégrer le fichier de configuration XML: windows2016core.xml dans KVM/QEMU avec virsh :

virsh define windows2016core.xml
virsh start windows2016core

Installation de Windows Server Core

Il est désormais possible en VNC ou via spice (au choix) de réaliser l'installation.

Windows Server 2016 peut s’installer de manière traditionnelle, comprendre par là avec son interface graphique, ou en version minimale avec un simple invite de commandes. Ce mode console est dénommé Core Server et est dédié aux environnements cloud. Sans interface graphique, Windows Core Server 2016 n’occupe qu’une place réduite sur le disque et ne nécessite que peu de ressources en mémoire vive. .

Core Server ne sera pas compatible WoW64 donc les applications 32 bits ne pourront pas être installées dessus.

Télécharger le fichier ISO de Windows Server 2016 Preview

Télécharger le fichier en_windows_server_2016_technical_preview_3_x64_dvd_6942082.iso. Ce fichier d’installation intègre les versions GUI et console. Dans le cas d’une installation sur une machine physique, on peut créer une clé USB ou graver un DVD d’installation.

Installer Windows Server 2016 Technical Preview 3

  1. Charger le fichier ISO pour une VM ou insérer le DVD / la clé USB d’installation de WS2016TP3 pour une machine physique.
  2. La langue du système sera l’anglais mais on peut changer le fuseau horaire et le clavier sur French (France).
  3. Cliquer sur Install now .
  4. Choisir la première ligne Windows Server 2016 Technical Preview 3 pour installer Windows Server sans son environnement graphique. Sans le GUI, WS2016 s’administre en PowerShell en local ou à distance.
  5. Accepter le contrat de licence.
  6. Demander une installation « Custom » .
  7. Indiquer où installer Windows Core Server 2016.

Intégrer les drivers virtio de RedHat pour Windows Server

L'intégration des drivers virtio contenu dans l'ISO est très importante. Elle permet de charger à l'installation dans Windows du pilote du bus virtio pour la reconnaissance des images disques avec visostor.

Le pilote NetKVM prends en charge la reconnaissance de la carte réseau

Configuration du shell Windows Server Core

Une fois le passe administrateur configuré: une interface cmd.exe s'affiche. Pour profiter des fonctionnalités de Windows 2016, il est nécessaire de basculer vers PowerShell comme ceci :

start powershell

A chaque connexion, il faut jongler entre cmd.exe et powershell.exe. Afin de démarrer par défaut avec powershell, changer la valeur de la clé Winlogon dans le registre :

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name Shell -Value 'PowerShell.exe -NoExit'

Configuration du mode core

Lancer la commande serveur :

sconfig

Un menu apparaît avec différents choix numéroté de 1 à 15, voici serveur actuellement :

Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. Tous droits réservés.

Inspection en cours du système...

===============================================================================
                         Configuration du serveur
===============================================================================

1) Domaine ou groupe de travail :               Domaine:  kassianoff.local
2) Nom d’ordinateur :                           DC-W2K16
3) Ajouter l’administrateur local
4) Configurer l’administration à distance       désactivé

5) Paramètres de Windows Update :               Manuel
6) Télécharger et installer les mises à jour
7) Bureau à distance :                          Activé (tous les clients)

8) Paramètres réseau
9) Date et Heure
10) Paramètres de télémétrie                  Sécurité
11) Activation de Windows

12) Fermer la session utilisateur
13) Redémarrer le serveur
14) Arrêter le serveur
15) Quitter pour revenir à la ligne de commande

Entrez un nombre pour sélectionner une option :
  1. renommer l'ordinateur (2)
  2. modifier les paramétres réseau (8)
  3. vérifier la date et l'heure (9)

Pour le reste ceci est une question d'appréciation personnelle. Un fois fait : un redémarrage est nécessaire.

Initialisation du second disque

  • Initialiser le second disque présent sur le serveur de 100GB :
Get-Disk |
Where partitionstyle -eq 'raw' |
Initialize-Disk -PartitionStyle MBR -PassThru |
New-Partition -AssignDriveLetter -UseMaximumSize |
Format-Volume -FileSystem NTFS -NewFileSystemLabel "disk2" -Confirm:$false
  • lister les volumes présents sur le serveur :
Get-PSDrive -PSProvider 'FileSystem'

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
C                  15,60         33,91 FileSystem    C:\                                               Windows\system32
D                   0,29          0,00 FileSystem    D:\
E                   5,36          0,00 FileSystem    E:\
G                   0,11         99,89 FileSystem    G:\

Note: Pour assigner une autre lettre à un volume : exemple de la lettre G vers V

Get-Partition -DriveLetter G | Set-Partition -NewDriveLetter V.
  • désactiver la protection en temps réel de Windows Defender :
Set-MpPreference -DisableRealtimeMonitoring $true

Installation et configuration d'active directory

  • AJouter les services de domaine Active Directory :
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
  • Réaliser la promotion du système Server Core vers le contrôleur de domaine :
Install-ADDSforest -DomainName kassianoff.local

Finalisation de l'installation

A la fin du processus d’installation fournir un mot de passe pour le mode restauration des services d'annuaire. Une fois fait, redémarrerle serveur pour découvrir la promotion du serveur.

Une solution standard, est également possible pour continuer la configuration des objets dans l'Active Directory. Utiliser un client Windows compatible avec les les outils d'administration AD DS - AD LDS et DNS. Celles-ci permettent simplement d'ouvrir une mmc distance pour manager le serveur comme l'experience utilisateur standard.

Commandes utiles

Création d'utilisateur en powershell

New-ADUser -Name "Jérémie KASSIANOFF" -GivenNaMe Jeremie -Surname KASSIANOFF -SamAccountName Jeremie -Ac
countPassword (Read-Host -AsSecureString "AccountPassword") -PassThru | Enable-ADAccount

Ou avec dsadd:

dsadd user "cn=Jeremie, dc=kassianoff, dc=local" -fn Jeremie -ln KASSIANOFF -pwd (Read-Host -AsSecureString "pwd") -disabled no
pwd: ***********************
dsadd réussite:cn=Jeremie,dc=kassianoff,dc=local

Gestion des groupes d'utilisateur

Pour afficher le groupe principale utilisateur :

Get-ADPrincipalGroupMembership Jeremie | select name

name
-----
Utilisateurs du domaine

Pour ajouter un utilisateur dans un autre groupe, par exemple en tant que : “admins du domaine”

Add-ADGroupMember "Admins du domaine" Jeremie

Gestion des mots de passe

En cas d'oubli on a la possibilité de changer le mot de passe d'un utilisateur de façon sécurisé en deux étapes :

$newpwd = Read-Host "Enter the new password" -AsSecureString
Enter the new password: ********

Puis terminer par la commande en y incluant la variable sécurisée :

Set-ADAccountPassword Jeremie -NewPassword $newpwd –Reset

Sauvegarde du l'état du système Windows

La sauvegarde du “systemstate” permet de conserver la configuration l'Active Directory mais également des fichiers systèmes (Boot et WFP), Sysvol, les certificats de l'autorité, la base de registre et les bases des Component Service Class. Pour ce faire il faut installer l'outil en ligne de commande Windows Backup Server :

Installer Windows Backup Server

Install-WindowsFeature -Name Windows-Server-Backup

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {Sauvegarde Windows Server}

Sauvegarde de l'état du système Windows

Utiliser la commande wbadmin, pour sauvegarder l'état du système Windows vers la cible V:\ :

wbadmin.exe start systemstatebackup -backuptarget:v:

wbadmin 1.0 - Outil en ligne de commande de sauvegarde
(C) Copyright 2013 Microsoft Corporation. Tous droits réservés.

Démarrage de la sauvegarde de l’état du système [17/10/2017 18:23]...
Récupération des informations de volume...
Cette opération va sauvegarder l’état du système du ou des volumes Réservé au système (500.00 Mo),(C:) vers v:.
Voulez-vous démarrer l’opération de sauvegarde ?
[O] Oui [N] Non O

Création d’un cliché instantané des volumes spécifiés pour la sauvegarde...
Création d’un cliché instantané des volumes spécifiés pour la sauvegarde...
La Sauvegarde `Windows Server` met à jour la sauvegarde existante pour supprimer les fichiers
qui ont été supprimés du serveur depuis la dernière sauvegarde.
Cette opération peut prendre quelques minutes.
(128) fichiers trouvés.
(128) fichiers trouvés.
(5759) fichiers trouvés.
(16838) fichiers trouvés.
(25640) fichiers trouvés.
(27545) fichiers trouvés.
(32136) fichiers trouvés.
(38401) fichiers trouvés.
(40891) fichiers trouvés.
(46330) fichiers trouvés.
(51592) fichiers trouvés.
(57589) fichiers trouvés.
(62223) fichiers trouvés.
(65702) fichiers trouvés.
(67775) fichiers trouvés.
(74302) fichiers trouvés.
(80408) fichiers trouvés.
(86037) fichiers trouvés.
(91284) fichiers trouvés.
(93183) fichiers trouvés.
La recherche des fichiers sur l’état du système est terminée.
Démarrage de la sauvegarde des fichiers...
La sauvegarde des fichiers signalés par « Task Scheduler Writer » est terminée.
La sauvegarde des fichiers signalés par « VSS Metadata Store Writer » est terminée.
La sauvegarde des fichiers signalés par « Performance Counters Writer » est terminée.
État d’avancement : 0 %.
Sauvegarde des fichiers signalés par « System Writer » en cours...
État d’avancement : 100 %.
Sauvegarde des fichiers signalés par « System Writer » en cours...

Récapitulatif de l’opération de sauvegarde :
-------------------------

L’opération de sauvegarde a abouti.
La sauvegarde de l’état du système a abouti [16/10/2017 16:37].
Journal des fichiers sauvegardés correctement :
C:\Windows\Logs\WindowsServerBackup\Backup-16-10-2017_16-23-37.log

Planification de la sauvegarde

Une planification de tache est recommandé pour sauvegarder l'état du système :

wbadmin enable backup -addtarget:V: -schedule:00:00 -systemState -quiet

Outils d'interface graphique

Théoriquement, voire formellement, Server Core ne peut être géré localement que via la ligne de commande (ou Powershell), car il n'inclut pas les outils intégrés pour la gestion locale via une interface utilisateur graphique (GUI).

Installer l'interface graphique

Dans la dernière version de Windows Server Technical Preview, l’interface graphique n’était plus une option dans une installation par défaut. A l'invite à sélectionner le système d'exploitation que vous souhaitez installer, on a le choix entre deux options.

  • La première option, Windows Server Technical Preview 2 est l’installation classique de Server Core qui n’inclut pas l’interface graphique.
  • La deuxième option, Windows Server Technical Preview 2 (avec les outils d’administrateur local), est l’installation MinShell qui contient une interface graphique minimale comprenant le Gestionnaire de serveur et les autres outils d’administration de l’interface graphique, mais pas de bureau traditionnel.

La version MinShell de Windows Server 2016 inclut le Gestionnaire de serveur et les autres outils d’administration de l’interface graphique.

Sur Windows Server l’installation de l’interface graphique complète est plutôt simple. À l'invite de commande à l'issue de la connection, exécuter powerShell puis exécuter la commande suivante:

Install-WindowsFeature Server-Gui-Shell -Restart

Dans Server Core si on exécute cette commande PowerShell, elle échouera.

Install-WindowsFeature: La demande d'ajout ou de suppression de fonctionnalités sur le serveur spécifié a échoué. L'installation d'un ou de plusieurs rôles, services de rôle ou fonctionnalités a échoué. Les fichiers source sont introuvables.

L'utilisation de la commande Get-WindowsFeature *gui* montre que les options de l’interface graphique installable sur le serveur sont à l'état Supprimé. Comme il s'agit d'une installation Server Core, des options telles que l'interface graphique ne sont pas mises en cache sur le disque pour une installation rapide. Au lieu de cela,il faut utiliser le fichier WIM d'installation du système d'exploitation pour installer l'interface graphique:

Install-WindowsFeature Server-Gui-Shell –Restart -Source wim:D:\sources\install.wim:4

Après un redémarrage sur Windows Server 2016 MinShell ou Server Core, on aura l'interface utilisateur graphique complète

Programmes fournis avec Windows Server Core

La liste suivante répertorie les programmes basés sur une interface graphique fournis avec Windows Server Core:

  • Control.exe intl.cpl - configure les informations de région
  • Control.exe timedate.cpl - configure la date et l'heure
  • Regedit - éditeur de registre
  • Bloc-notes - éditeur de texte
  • Msinfo32.exe - affiche des informations système complètes
  • Taskmgr.exe - peut également être exécuté via ctrl-alt-del
  • Msiexec.exe - Windows Installer
  • Cmd.exe et Powershell.exe

Utilitaires SysInternals pour Server Core

Des outils supplémentaires basés sur une interface graphique sont fournis par Microsoft et peuvent être téléchargés gratuitement, directement à partir du «référentiel» Sysinternals.

La liste suivante répertorie partiellement les utilitaires Sysinternals basés sur une interface graphique et compatibles avec Core.

  • Adexplorer.exe - explorateur de répertoire actif
  • Procexp.exe - explorateur de processus
  • Procmon.exe - un moniteur de processus bien établi et capable
  • Tcpview.exe - affiche les listes détaillées de tous les points de terminaison TCP et UDP
  • Vmmap.exe - outil d'analyse de mémoire virtuelle et physique, par processus
  • Rammap 1.50 - utilitaire d'analyse de l'utilisation de la mémoire physique
  • Protqueryui.exe - analyse de port, interface utilisateur pour la ligne de commande PortQry; non disponible avec SysInternals mais peut être téléchargé ici (téléchargement direct)

Add-On supplémentaire basé sur une interface graphique

D'autres options pour les applications à interface graphique de Micrsoft peuvent être installées via la commande Powershell Install-WindowsFeature.

Outre ce que Microsoft fournit, il existe de nombreux outils tiers basés sur une interface graphique, qui peuvent être installés avec succès sur Server Core.

Par exemple pour installer Chrome par exemple:

  • télécharger le programme d'installation à partir du Web via Powershell: Invoke-WebRequest http://somewebsite.com/ChromeSetup.exe -OutFile C:\Chrome\ChromeSetup.exe
  • exécuter le programme d'installation via la ligne de commande en exécutant: C:\Chrome\ChromeSetup.exe
  • démarrer l'application en appelant son exécutable. C:\Program Files (x86)\Google\Chrome\Application\Chrome.exe.
virtualisation/kvm-core-server.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1