Windows 10 servi sur un plateau

Introduction

Le but de cet article est de vous montrer que l’on peut installer un Windows prêt à l’emploi de manière complètement automatisée.

Il s’agit ici d’un Windows 10 en machine virtuelle (VM) fourni par MS pour tester leur navigateur. La licence permet d’utiliser cette VM pendant 90 jours sans interruption. Bien sûr, étant donné que l’on automatise tout, il vous suffira de tout jeter et de relancer l’installation pour revenir retrouver votre environnement.

Outils nécessaires

  • Une ligne de commande
  • Vagrant
  • VirtualBox

Parcours d’obstacles

Téléchargement

Tout d’abord, il faut récupérer la machine virtuelle fournie par MS: https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/



Prenez un Windows 10, au format vagrant.

Il s’agit en fait d’une “box” vagrant, à la sauce “VirtualBox”. Si vous voulez utiliser un autre hyperviseur, il vous faudra passer par une conversion.

Décompression

Il vous faudra ensuite décompresser le fichier récupéré pour accéder à la box vagrant.

Configuration vagrant

C’est là que me sont apparues toutes les difficultés.

L’objectif est de pouvoir prendre la main sur cette VM avec winrm, pour ensuite passer le relai à ansible.

La VM fourni est doté d’un serveur OpenSSH qui embarque un shell minimaliste. Nous allons l’exploiter.

Ensuite, il faut permettre de basculer de ssh à winrm selon l’avancement de notre process.

Petite astuce importante, vagrant démarre “bash -l” comme shell par défaut, alors que c’est “sh -l” dont nous avons besoin ici.

Enfin, la seul chose à faire, c’est de basculer le réseau en mode “private” ou “work”, mais pas “public”. En effet, le service winrm est déjà en place, il faut seulement permettre de l’atteindre.

Vous pourrez alors passer le relai à ansible via winrm.

Voici le résultat:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "msedgewin10"
  config.vm.box_url = "file://./MSEdge - Win10.box"
  config.vm.guest = :windows
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.cpus = 1
    vb.memory = 2048
  end

  config.vm.network :forwarded_port, guest: 22, host: 2322, id: 'ssh'
  config.vm.network :forwarded_port, guest: 5985, host: 6085, id: 'winrm'
  config.vm.network :forwarded_port, guest: 3389, host: 3489, id: 'rdp'

  config.ssh.username = "IEUser"
  config.ssh.password = "Passw0rd!"
  config.ssh.insert_key = false
  config.ssh.sudo_command = ''
  config.ssh.shell = 'sh -l'
  config.winrm.username = "IEUser"
  config.winrm.password = "Passw0rd!"
  config.winrm.transport = :plaintext
  config.winrm.ssl_peer_verification = false

  config.vm.communicator = ENV['communicator'] || 'ssh'

  case config.vm.communicator
  when "ssh"
    puts('ssh communicator')
    config.vm.provision "shell",
      binary: true,
      privileged: false,
      inline: <<-SHELL
      set -x
      whoami
      # winrm - switch to private network
      /cygdrive/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \
        -InputFormat None \
        -NoProfile \
        -ExecutionPolicy Bypass \
        -Command 'Set-NetConnectionProfile -Name "Network" -NetworkCategory "Private"'
    SHELL
  else
    puts('winrm communicator')
    config.vm.provision "shell",
      privileged: false,
      inline: <<-SHELL
      echo hello world
    SHELL
    config.vm.provision "ansible" do |ansible|
      ansible.raw_arguments = ['-e', 'ansible_winrm_scheme=http']
      ansible.verbose = "vvv"
      ansible.playbook = "playbook.yml"
    end
  end
end

L’utilisation de ce Vagrantfile se passe en deux temps.

  • Initialisation de la VM, avec réglage de winrm:
    vagrant up
    
  • Passage de relai à ansible pour l’approvisionnement (provisioning) de la VM:
    communicator=winrm vagrant provision
    

A propos de la licence d’évaluation, Windows s’enregistre automatiquement pour une période de 90 jours.
Si toutefois vous voulez lancer explicitement l’opération, il s’agit de lancer la command VB suivante:

slmgr /ato

Leave a Reply

Your email address will not be published. Required fields are marked *