<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Windows on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/windows/</link><description>Recent content in Windows on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Wed, 14 Mar 2018 12:45:43 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/windows/index.xml" rel="self" type="application/rss+xml"/><item><title>Hack : diminuer la taille du VMDK d’une VM Linux LVM</title><link>https://blog.zwindler.fr/2018/03/14/diminuer-la-taille-du-vmdk-dune-vm-linux/</link><pubDate>Wed, 14 Mar 2018 12:45:43 +0000</pubDate><guid>https://blog.zwindler.fr/2018/03/14/diminuer-la-taille-du-vmdk-dune-vm-linux/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/07/vmware2.webp" alt="Featured image of post Hack : diminuer la taille du VMDK d’une VM Linux LVM" /&gt;&lt;h2 id="réduire-un-vmdk"&gt;Réduire un VMDK
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Note : cet article n’est pas écrit par moi mais par mon ami et ancien collègue Steve aka ventreachoux85 (ahahah faut assumer maintenant Steve), que j’héberge avec grand plaisir sur le blog :-)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Note 2: &lt;strong&gt;Comme toute opération sur des disques, des partitions, des filesystems, elles sont à faire avec des backups préalables. Cette opération est dangereuse et est à vos risques et périls =&amp;gt; vous voilà prévenus.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sur un serveur Linux (CentOS 6.9 pour la petite histoire) hébergé sur un serveur VMware, je souhaite réduire la taille de mon disque virtuel de 75 Go car la volumétrie ne va pas bouger. S’il est simple d’agrandir un disque virtuel sous VMware, le réduire est une autre paire de manches !&lt;/p&gt;
&lt;p&gt;Si la machine avait été un serveur Windows, voilà ce que j’aurai fais :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Réduction du volume depuis l’utilitaire de gestion de disques&lt;/li&gt;
&lt;li&gt;Modification de l’&lt;em&gt;extent description&lt;/em&gt; directement sur le fichier .vmdk depuis l’ESXi (en SSH)&lt;/li&gt;
&lt;li&gt;Migration de la VM sur un autre datastore =&amp;gt; elle aurait eu la taille voulue à l’issue de l’opération&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je ne détaille volontairement pas cette procédure car celle qui suit est similaire et nous allons prendre le temps de tout voir.&lt;/p&gt;
&lt;p&gt;Et donc du coup, là c’était pas pour des windows, mais pour des machines sous Linux ! J’ai demandé son avis à zwindler, qui m’a demandé en échange de rédiger une petite procédure pour le blog ;-)&lt;/p&gt;
&lt;h2 id="réduction-du-fs"&gt;Réduction du FS
&lt;/h2&gt;&lt;p&gt;Voilà donc à quoi ressemble les disques de mon serveur avant l’opération :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans mon cas, je n’ai pas besoin de réduire les Filesystems, j’ai déjà beaucoup de PE de disponibles. S’il avait fallut le faire, on aurait été obligé de réduire les FS à froid (dans le cas ext*), voire même de passer par un liveCD si on avait du redimensionner « / » ou un autre FS vital pour l’OS.&lt;/p&gt;
&lt;h2 id="réduire-un-vmdk-partitionné-pour-du-lvm"&gt;Réduire un VMDK partitionné pour du LVM
&lt;/h2&gt;&lt;p&gt;Le problème avec la commande &lt;strong&gt;pvs&lt;/strong&gt; est que la taille utilisée et la taille disponible est arrondie pour être au format « human readable » d’Unix. Idéalement, il nous faut une mesure exacte pour redimensionner au plus juste.&lt;/p&gt;
&lt;p&gt;Une des manières simples de le faire est d’utiliser l’unité « secteur » de la commande &lt;strong&gt;pvs&lt;/strong&gt; (512 octets). Il faut faire la différence entre le PSize et le PFree pour avoir la taille définitive du disque :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-1.avif%22"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Après un rapide calcul, si je veux réduire le disque de tous les PE disponibles :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;209453056 – 164757504 = 44695552&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La nouvelle taille du PV sera de 44965552 secteurs&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note de zwindler : Personnellement j’aurai laissé quelques PE, par habitude (limitations de LVM1 pénibles quand il n’y a plus de PE) et parce que je suis un froussard, mais a priori « ça marche ».&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On redimensionne le disque&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-2.avif%22"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;A noter, malgré le fait qu’on ait spécifié qu’il ne devait pas rester de PE de libre, a priori il en reste quand même quelques uns. Je ne sais pas si c’est une sécurité du pvresize ou si c’est lié aux arrondis et à la taille d’un PE sur ce PV.&lt;/del&gt; C’était une erreur de calcul (cf voir les commentaires).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-3.avif%22"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour vérifier que tout va bien, un petit &lt;strong&gt;pvscan/vgscan&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-5.avif%22"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-4.avif%22"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="réduire-la-partition"&gt;Réduire la partition
&lt;/h2&gt;&lt;p&gt;A partir de là, ça se corse. On a réduit sans trop de difficulté le PV qui héberge nos LV, mais il nous reste maintenant à réduire la partition qui héberge ce PV. Même si théoriquement on peut le faire à chaud, &lt;strong&gt;zwindler&lt;/strong&gt; m’a conseillé de faire ça à froid.&lt;/p&gt;
&lt;p&gt;Pour autant, si vous vous sentez l’âme d’un aventurier et/ou avec un OS récent et/ou que vous n’avez pas le choix, vous pouvez toujours aller lire ce post sur &lt;a class="link" href="https://askubuntu.com/questions/24027/how-can-i-resize-an-ext-root-partition-at-runtime" target="_blank" rel="noopener"
&gt;Ask Ubuntu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le plus safe est quand même d’arrêter la VM puis booter sur un liveCD avec GParted.&lt;/p&gt;
&lt;p&gt;Clic droit sur la partition à modifier – désactiver (sinon impossible de la redimensionner)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-6.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Sélectionner la partition puis Redimensionner / Déplacer&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-7.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Attention : lors du premier redimensionnement, GParted ne prend ne réduit pas au maximum la partition. &lt;strong&gt;Il reste 2 Go qui sont inutilisés&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-8.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On lance un nouveau redimensionnement pour récupérer la place disponible !!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note de zwindler : moi j’aurai laissé comme ça ;-)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ATTENTION&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On voit que &lt;strong&gt;/dev/sda2&lt;/strong&gt; fait 21.44 Go après le &lt;strong&gt;pvresize&lt;/strong&gt; (cf. screenshot précédent). En essayant de réduire au maximum la place utilisée, on peut tout casser (expérience vécue !!!). Pour plus de sécurité, je conseille de resizer à l’entier supérieur (donc dans notre exemple 22 Gio soit 22528 Mio)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-9.avif%22"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-10.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-11.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="redimensionner-le-vmdk"&gt;Redimensionner le VMDK
&lt;/h2&gt;&lt;p&gt;Maintenant que le disque est modifié au niveau de l’OS, il faut le redimensionner au niveau de VMware.&lt;/p&gt;
&lt;p&gt;Et là, rebelote : c’est pas « simple » à faire. En effet, &lt;a class="link" href="https://kb.vmware.com/s/article/1002019" target="_blank" rel="noopener"
&gt;VMware ne supporte pas la réduction des VMDK (que ce soit à chaud ou à froid)&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You cannot shrink virtual disks using &lt;strong&gt;vmkfstools&lt;/strong&gt; in ESXi as the hypervisor is not aware of the file system layout and cannot ensure a safe shrink operation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Heureusement, des petits malins ont trouvés la technique depuis bien longtemps :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Se connecter en SSH sur l’ESX qui héberge la VM, se rendre dans le dossier de la VM et faire un &lt;strong&gt;vi&lt;/strong&gt; sur le fichier &lt;em&gt;NomVM.vmdk&lt;/em&gt;, qui est un fichier texte (configuration), contrairement au fichier &lt;em&gt;NomVM-flat.vmdk&lt;/em&gt; qui contient les données réelles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Modifier la valeur suivante :&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Extent description
RW 209715200 VMFS &amp;#34;testsba-flat.vmdk&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;La nouvelle valeur du paramètre &lt;em&gt;extent description&lt;/em&gt; sera « 22 GB = 22 x 1024 x 1024 x 1024 / 512 (octets/secteur) = 46137344 secteurs »&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Extent description
RW 46137344 VMFS &amp;#34;testsba-flat.vmdk&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="déplacer-la-vm-vers-un-autre-datastore"&gt;Déplacer la VM vers un autre Datastore
&lt;/h2&gt;&lt;p&gt;A partir de là, vous vous dites : « cool ! j’ai récupéré l’espace disque ». Et vous êtes déçus car rien ne se passe.&lt;/p&gt;
&lt;p&gt;En effet, ce paramètre n’est pris en compte que lors de la création du disque, lorsque le fichier contenant réellement les données (le fameux &lt;em&gt;NomVM-flat.vmdk&lt;/em&gt; dont je vous ai parlé plus tôt) est créé. Vous pouvez mettre n’importe quoi, ça ne changera rien du tout.&lt;/p&gt;
&lt;p&gt;Cependant, si vous avez la licence qui va bien sur votre cluster, vous pouvez feinter le cluster pour lui faire recréer un disque à chaud de la bonne taille avec un simple &lt;strong&gt;Storage vMotion&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avant le Storage vMotion :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-12.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Après le Storage vMotion :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-13.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="pourquoi-ça-marche-"&gt;Pourquoi ça marche ?
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Petit aparté de zwindler :&lt;/strong&gt; Pour bien comprendre ce qu’il se passe, il faut comprendre comment marche un Storage vMotion. Au moment où vous demandez à VMware de déplacer un disque d’un datastore à l’autre, voici l’enchaînement des opérations :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prise d’un snapshot du disque initial&lt;/li&gt;
&lt;li&gt;Création d’un disque sur le datastore cible. Ce disque est identique au disque initial au moment du snapshot via la commande &lt;strong&gt;vmkfstools&lt;/strong&gt;. Cette commande relis la valeur contenu dans &lt;em&gt;extent description&lt;/em&gt; pour savoir quelle taille le fichier doit faire physiquement, ce qui nous permet de feinter VMware et d’avoir un disque à la bonne taille._&lt;br&gt;
_&lt;/li&gt;
&lt;li&gt;L’ensemble des IO depuis le snapshot sont écrites simultanément sur les deux datastores, ce qui permet d’avoir 2 copies identiques au moment de la fin de la copie du snapshot&lt;/li&gt;
&lt;li&gt;Migration de la VM  sur le nouveau disque&lt;/li&gt;
&lt;li&gt;Suppression de l’ancien disque hébergé par l’ancien datastore&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note de zwindler :&lt;/strong&gt; j’étais persuadé d’avoir fais un article là dessus (et en fait pas du tout) mais &lt;em&gt;il est évidemment possible de faire la même chose à la main sans Storage vMotion&lt;/em&gt;, simplement avec &lt;strong&gt;vmkfstools&lt;/strong&gt; à la main.&lt;/p&gt;
&lt;h2 id="boot-de-la-machine"&gt;Boot de la machine
&lt;/h2&gt;&lt;p&gt;Pour finir, une fois la VM bootée, il reste encore une petite opération de maintenance à réaliser. Il y a une petite différence de nombre de secteurs suite au redimensionnement.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-14.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Il suffit de faire un &lt;strong&gt;pvresize&lt;/strong&gt; avec le nombre de secteurs indiqué par la commande &lt;strong&gt;pvs&lt;/strong&gt; précédente :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-15.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Tout est dorénavant OK :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2018/03/word-image-16.avif%22"
loading="lazy"
&gt;&lt;/p&gt;</description></item><item><title>Déployer des VM VMware avec Ansible – part 2</title><link>https://blog.zwindler.fr/2017/11/14/deployer-vm-vmware-ansible-part-2/</link><pubDate>Tue, 14 Nov 2017 12:45:27 +0000</pubDate><guid>https://blog.zwindler.fr/2017/11/14/deployer-vm-vmware-ansible-part-2/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/03/ansible_vpshere.webp" alt="Featured image of post Déployer des VM VMware avec Ansible – part 2" /&gt;&lt;h2 id="où-est-ce-quon-en-était-"&gt;Où est ce qu’on en était ?
&lt;/h2&gt;&lt;p&gt;La dernière fois qu’on a parlé de [machines virtuelles déployées à l’aide d’Ansible sur une infrastructure VMware][1], on avait un playbook fonctionnel, mais il me manquait encore un petit quelque chose.&lt;/p&gt;
&lt;p&gt;En fait, à l’issue du déploiement de la VM, je n’avais pas encore trouvé la possibilité d’enchaîner sur l’exécution d’autres playbooks permettant de configurer la VM. L’objectif ultime étant de faire en une seule étape de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;déployer la VM (que j’appellerai « déploiement »)&lt;/li&gt;
&lt;li&gt;et de la configurer, c’est à dire modifier les fichiers de configuration de la VM, installer les logiciels, etc&amp;hellip; (que j’appellerai « configuration »).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="premier-problème-connectionlocal"&gt;Premier problème, connection:local
&lt;/h2&gt;&lt;p&gt;Pour rappel, le premier problème quand on veut déployer une VM qui n’existe pas encore&amp;hellip; est justement le fait qu’elle n’existe pas encore !&lt;/p&gt;
&lt;p&gt;Si j’exécute un playbook deploy_vm.yml sur une VM « ma-vm » tel quel, je vais me prendre un message d’erreur (&lt;a class="link" href="https://blog.zwindler.fr/2017/06/20/deployer-machines-virtuelles-ansible-vmware/" &gt;pour plus de détails, lire l’article précédent&lt;/a&gt;) car Ansible tente de se connecter à la machine pour récupérer des informations sur elle.&lt;/p&gt;
&lt;p&gt;La méthode pour s’affranchir de ce genre de problèmes est de feinter Ansible en lui disant :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;de ne pas récupérer les informations de la machine&lt;/li&gt;
&lt;li&gt;d’exécuter le playbook sur une autre machine (le plus simple c’est localhost)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pour le premier point, la solution est mettre en haut du playbook l’option &lt;strong&gt;gather_facts: false&lt;/strong&gt;. Cela aura un impact mais on verra ça plus loin.&lt;/p&gt;
&lt;p&gt;Pour le second point, il existe 2 solutions. La première, que je préconisais dans l’article précédent, consiste à utiliser en haut du playbook l’option &lt;strong&gt;connection: local&lt;/strong&gt;. Cette option permet d’exécuter l’ensemble du playbook sur la machine locale et non pas la machine qu’on déploie.&lt;/p&gt;
&lt;p&gt;En réalité, il est en fait plus simple d’utiliser l’option &lt;strong&gt;delegate_to&lt;/strong&gt;, qui se limite à une seule tâche ou à un rôle, ce qui permet de déléguer la partie déploiement à localhost, puis tenter d’exécuter les autres playbooks sur la VM qu’on veut configurer.&lt;/p&gt;
&lt;h2 id="un-problème-de-nom--pas-si-facile-à-résoudre"&gt;Un problème de nom &amp;hellip; pas si facile à résoudre
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Vous avez vu le jeu de mot ? Ok, je sors&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bien sûr, on va se heurter à plusieurs problèmes&amp;hellip; Le premier est la résolution de nom. A moins d’avoir réalisé la mise à jour de votre DNS à l’avance (à la main du coup&amp;hellip; c’est nul), dès que le déploiement sera terminé et qu’on passera à la partie configuration de la VM, Ansible essayera de contacter votre nouveau serveur.&lt;/p&gt;
&lt;p&gt;Le plus propre serait d’ajouter à la partie « déploiement » une tâche permettant de mettre à jour le DNS. Dans mon environnement professionnel, le service DNS est géré par un serveur Windows Active Directory. La simple mise à jour du DNS depuis Linux est un vrai casse tête et le plus simple est d’intégrer la machine (qu’elle soit Windows ou Linux) dans le domaine Active Directory qui se charge alors de mettre à jour le DNS lui même.&lt;/p&gt;
&lt;p&gt;C’est un gros sujet et je ferai un article à part dessus. Dans un premier temps on peut se contenter de juste mettre à jour le fichier &lt;strong&gt;/etc/hosts&lt;/strong&gt; de la machine localhost.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- name: add to /etc/hosts file
lineinfile:
dest: /etc/hosts
line: &amp;#39;{{ custom_ip }} {{ inventory_hostname }} {{ inventory_hostname }}.zwindler.fr&amp;#39;
with_items: &amp;#39;{{play_hosts}}&amp;#39;
when: &amp;#34;hostvars[item].inventory_hostname == inventory_hostname&amp;#34;
delegate_to: localhost
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="accès-concurrents"&gt;Accès concurrents
&lt;/h3&gt;&lt;p&gt;Si vous vous y connaissez un peu en Ansible, vous remarquerez que je ne me suis pas contenté d’un simple &lt;strong&gt;lineinfile&lt;/strong&gt;, mais que j’ai utilisé un &lt;em&gt;with_items&lt;/em&gt; et un &lt;em&gt;when&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;En fait, on peut utiliser mon playbook pour déployer en parallèle un grand nombre de VMs en même temps. Le souci que j’ai rapidement eu a été un accès concurrent sur le fichier, et des noms de VMs ont alors manqué.&lt;/p&gt;
&lt;p&gt;Il existe une fonction « serial » qui permet de désactiver la parallélisation des tâches, mais malheureusement, on ne peut l’appliquer qu’au playbook entier. Peut être qu’un jour la fonctionnalité sera ajoutée (la demande est référencée sur &lt;a class="link" href="https://github.com/ansible/ansible/issues/1217" target="_blank" rel="noopener"
&gt;Github&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;J’ai donc du passer par une boucle pour enregistrer tous les serveurs du play courant.&lt;/p&gt;
&lt;h2 id="clé-ssh"&gt;Clé SSH
&lt;/h2&gt;&lt;p&gt;OK, maintenant, on sait résoudre la (ou les) machine(s) qu’on vient d’ajouter. Cependant on est pas sorti de l’auberge !&lt;/p&gt;
&lt;p&gt;En partant du principe que vous n’avez pas oublié de déposer la clé SSH du serveur &lt;em&gt;localhost&lt;/em&gt; pour qu’Ansible puisse se connecter sur votre nouvelle machine, voilà ce qui va se passer :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;TASK [gather facts] *************************************************************************************************************************************************************************
The authenticity of host &amp;#39;zwindler01 (x.x.x.x)&amp;#39; can&amp;#39;t be established.
Are you sure you want to continue connecting (yes/no)? The authenticity of host &amp;#39;zwindler02 (x.x.x.x)&amp;#39; can&amp;#39;t be established.
Are you sure you want to continue connecting (yes/no)? The authenticity of host &amp;#39;zwindler03 (x.x.x.x)&amp;#39; can&amp;#39;t be established.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ansible bloque à la première connexion SSH vers votre VM nouvellement crée car il faut accepter l&amp;rsquo;empreinte de chaque VM manuellement au préalable. Même si on essaye de renseigner &lt;strong&gt;yes&lt;/strong&gt; à toutes les questions, ce n’est clairement pas idéal et encore moins automatisé !&lt;/p&gt;
&lt;h3 id="la-solution-temporaire-host_key_checkingfalse"&gt;La solution temporaire, host_key_checking=False
&lt;/h3&gt;&lt;p&gt;Il existe un paramètre dans Ansible qui permet de passer outre la vérification de l&amp;rsquo;empreinte de la machine, soit en modifiant le fichier de configuration &lt;strong&gt;ansible.cfg&lt;/strong&gt;, soit ajouter un flag à l’exécution de playbook, soit configurer une variable d’environnement.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -l zwindler* -i hosts_deploy -e &amp;#39;host_key_checking=False&amp;#39; deploy_vmware_guest.yml
#OU
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook -l zwindler* -i hosts_deploy deploy_vmware_guest.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous trouverez plus d’informations sur cette solution de contournement sur les sites suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://stackoverflow.com/questions/23074412/how-to-set-host-key-checking-false-in-ansible-inventory-file" target="_blank" rel="noopener"
&gt;stackoverflow.com/questions/23074412/how-to-set-host-key-checking-false-in-ansible-inventory-file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://docs.ansible.com/ansible/latest/intro_getting_started.html#id7" target="_blank" rel="noopener"
&gt;docs.ansible.com/ansible/latest/intro_getting_started.html#id7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette solution de contournement est à proscrire en production, car elle va ignorer l&amp;rsquo;empreinte de TOUTES les machines et pour TOUS vos playbooks. Au delà du problème évident de sécurité que ça pose, si vous enlevez l’option à un moment donné, c’est retour à la case départ. Vous aurez de nouveau la question sur tous les serveurs dont vous n’avez pas explicitement accepté l&amp;rsquo;empreinte.&lt;/p&gt;
&lt;h3 id="ssh-keyscan-à-la-rescousse"&gt;ssh-keyscan à la rescousse
&lt;/h3&gt;&lt;p&gt;On va donc ajouter la tâche suivante à notre playbook de déploiement :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- name: accept new ssh fingerprints
shell: ssh-keyscan {{ custom_ip }},{{inventory_hostname}} &amp;gt;&amp;gt; ~/.ssh/known_hosts
with_items: &amp;#39;{{play_hosts}}&amp;#39;
when: &amp;#34;hostvars[item].inventory_hostname == inventory_hostname&amp;#34;
delegate_to: localhost
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Je sais&amp;hellip; c’est terrible : la solution que j’ai à l’heure actuelle, bien que fonctionnelle, N’EST PAS IDEMPOTENTE&amp;hellip; :-( mais elle fonctionne.&lt;/p&gt;
&lt;p&gt;Et on fini par un petit &lt;strong&gt;setup&lt;/strong&gt; pour récupérer les facts.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- name: gather facts
setup:
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="et-maintenant-"&gt;Et maintenant ?
&lt;/h2&gt;&lt;p&gt;Et bien ! Maintenant, ça marche ! Vous pouvez enchainer d’autres tâches (ou des rôles) en ne mettant plus delegate_to, et ces tâches de « configuration » seront bien lancées sur le serveur que vous venez de déployer, dans un seul et même playbook.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;---
- hosts: all
gather_facts: false
vars_prompt:
- name: &amp;#34;vsphere_password&amp;#34;
prompt: &amp;#34;vSphere Password&amp;#34;
- name: &amp;#34;esxi_host&amp;#34;
promt: &amp;#34;ESXi host&amp;#34;
private: no
- name: &amp;#34;notes&amp;#34;
prompt: &amp;#34;VM notes&amp;#34;
private: no
default: &amp;#34;Deployed with ansible&amp;#34;
roles:
- deploy_vmware_guest
- other_role_for_configuration
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pari réussi !&lt;/p&gt;
&lt;h2 id="et-le-playbook-il-est-où-"&gt;Et le playbook, il est où ?
&lt;/h2&gt;&lt;p&gt;Une fois de plus, je suis sympa, &lt;a class="link" href="https://github.com/zwindler/ansible-deploy-vmware-guest" target="_blank" rel="noopener"
&gt;je vous donne un exemple de code sur mon Github&lt;/a&gt; !&lt;/p&gt;</description></item><item><title>Problème de pointeur souris sur la console dans OracleVM 3.4</title><link>https://blog.zwindler.fr/2017/02/09/probleme-de-pointeur-souris-sur-la-console-dans-oraclevm-3-4/</link><pubDate>Thu, 09 Feb 2017 13:00:44 +0000</pubDate><guid>https://blog.zwindler.fr/2017/02/09/probleme-de-pointeur-souris-sur-la-console-dans-oraclevm-3-4/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/02/SimpleMouse.gif" alt="Featured image of post Problème de pointeur souris sur la console dans OracleVM 3.4" /&gt;&lt;h2 id="oraclevm-quelques-faiblesses-sur-la-console-comme-les-autres"&gt;OracleVM, quelques faiblesses sur la console, comme les autres&amp;hellip;
&lt;/h2&gt;&lt;p&gt;Dans la série des articles sur OracleVM avant que je n’en reparle plus (le PoC est &lt;del&gt;terminé&lt;/del&gt; enterré chez nous), voici un petit retour sur un des problèmes que j’ai pu rencontrer.&lt;/p&gt;
&lt;p&gt;Comme beaucoup de technologies de visualisation d’écrans consoles pas totalement maîtrisées (ça vaut pour les vieux ILO en Java ou autres : que de bons souvenirs), le pointeur de la souris fait littéralement n’importe quoi. Généralement c’est décalé mais pas de manière linéaire sur tout l’écran pour bien qu’on se marre.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/02/SimpleMouse.gif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Crédits : GameDev.net&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le problème vient du client web VNC proposé par Oracle VM Manager et est un problème archi-connu mais pour autant pas totalement résolu.&lt;/p&gt;
&lt;h2 id="accéder-directement-au-flux-vnc"&gt;Accéder directement au flux VNC
&lt;/h2&gt;&lt;p&gt;Comme je l’explique juste avant, il arrive couramment que les technologies de virtualisations intégrées vers l’écran (virtuel) de la machine virtuelle soient mal calibrées. Mais c’est encore plus courant lorsque ce déport d’écran est réalisé avec un connexion VNC elle même affichée dans une console HTTP.&lt;/p&gt;
&lt;p&gt;Un moyen de contourner le problème de ce type de clients VNC web (et ça vaut pour d’autres outils qui utilisent les mêmes techniques) est de simplement se « brancher » sur le flux VNC sans passer par la console web. A priori sur les versions précédentes de OVMM, il était possible de se brancher directement sur le flux VNC, tout simplement parce que le serveur VNC était en écoute sur l’interface LAN.&lt;/p&gt;
&lt;p&gt;Au delà du fait que ce soit du bidouillage, cette technique n’est aujourd’hui plus permise depuis OVMM 3 et il faut donc &amp;hellip; bidouiller encore plus ! Voici ce que propose le support d’Oracle :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can redirect the remote port to local using the ssh(1) command. For example, the VM guest vnc port is 5900 on Oracle VM Server and listening on localhost:&lt;/p&gt;
&lt;p&gt;# xm list -l 2|grep 59&lt;br&gt;
(location 127.0.0.1:5900)&lt;/p&gt;
&lt;p&gt;Then you can run this to redirect the port to your desktop:&lt;/p&gt;
&lt;p&gt;$ ssh -L 12345:localhost:5900 root@OVS&lt;/p&gt;
&lt;p&gt;The « 5900 » port will be redirected to « 12345 » of your local desktop, so that you can run the following command to connect the guest console:&lt;/p&gt;
&lt;p&gt;$ vncviewer localhost:12345&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En gros, ce qu’il faut en comprendre, c’est que le serveur VNC n’est maintenant plus disponible depuis autre part que localhost et qu’on peut contourner la limitation en faisant un tunnel SSH. Rien de bien sorcier, mais est ce qu’il n’y a pas un peu plus simple ?&lt;/p&gt;
&lt;h2 id="la-vraie-solution"&gt;La vraie solution
&lt;/h2&gt;&lt;p&gt;En fait si.&lt;/p&gt;
&lt;p&gt;Au début, je n’ai même pas cherché à appliquer cette solution car elle ne s’applique normalement que pour les machines virtuelles Windows.&lt;/p&gt;
&lt;p&gt;Si vous avez un problème du type de celui que je décris sur une VM Windows, on vous conseille chez Oracle d’ajouter un paramètre à la machine virtuelle qui permet de mieux suivre les mouvements de la souris.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Add below your config to force the device model to use absolute (tablet) coordinates:&lt;/p&gt;
&lt;p&gt;usbdevice=’tablet’&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mais sur le papier, la solution est bien indiquée « For Windows virtual machines (guests) ». Mon problème moi, c’était sur les machines virtuelles CentOS, indiquées comme pas impactées par ce genre de problèmes.&lt;/p&gt;
&lt;h2 id="bon-jai-bien-compris-ou-tu-veux-en-venir-comment-on-modifie-ce-paramètre-"&gt;Bon j’ai bien compris ou tu veux en venir. Comment on modifie ce paramètre ?
&lt;/h2&gt;&lt;p&gt;En fait, c’est TRES mal indiqué dans la documentation. Il s’agit de la configuration de la machine virtuelle, &lt;strong&gt;VM éteinte&lt;/strong&gt;, mais où faire la modification ? Ahah ! Mystère !&lt;/p&gt;
&lt;p&gt;La documentation fait elle état d’un fichier de configuration de la machine virtuelle mais je n’ai pas su trouver ce fichier. Cependant, et &lt;strong&gt;ce n’était pas dit dans la documentation&lt;/strong&gt; on peut modifier ce paramètre directement depuis la GUI de Oracle VM Manager !&lt;/p&gt;
&lt;p&gt;Dans les paramètres de la machine virtuelle, dans l’onglet Configuration, on trouve le paramètre &lt;strong&gt;Mouse Device Type&lt;/strong&gt;. Sur les machines Windows, comme le problème est connu, il me semble d’ailleurs que le paramètre est passé à « tablet » par défaut.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm45.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois validé, on peut vérifier que cette configuration a effectivement été modifiée en affichant ce fameux &lt;strong&gt;VM Config File&lt;/strong&gt; que je ne sais pas où trouver :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm46.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm47.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A partir de là, la souris ne devrait plus vous faire de blagues. Même si avec Oracle VM, on ne sait jamais trop ;-) #Troll&lt;/p&gt;
&lt;h2 id="source"&gt;Source
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://support.oracle.com/rs?type=doc&amp;amp;id=1548825.1" target="_blank" rel="noopener"
&gt;How To Access Guest Console In OVM 3 Using VNC Without Using OVM Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://support.oracle.com/rs?type=doc&amp;amp;id=466379.1" target="_blank" rel="noopener"
&gt;Mouse Pointer Fails to Track Cursor on a VNC / Oracle VM Manager Window&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Administrer des serveurs Windows avec Ansible</title><link>https://blog.zwindler.fr/2016/11/15/administrer-des-serveurs-windows-avec-ansible/</link><pubDate>Tue, 15 Nov 2016 13:00:11 +0000</pubDate><guid>https://blog.zwindler.fr/2016/11/15/administrer-des-serveurs-windows-avec-ansible/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/09/ansible-windows.webp" alt="Featured image of post Administrer des serveurs Windows avec Ansible" /&gt;&lt;h2 id="ansible-sur-windows"&gt;Ansible sur Windows
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Depuis que j’ai découvert Ansible, ma vie d’Ops a changée.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tout doit pouvoir être géré par Ansible. Tous les playbooks doivent être &lt;strong&gt;idempotent&lt;/strong&gt; (je reviendrais la dessus très probablement). Et du coup, ça vaut aussi pour les serveurs Windows qu’il nous reste !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/11/73068978.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Il n’existe pas encore de version compatible Windows pour l’exécution locale des playbooks. Cependant, il existe tout de même des modules pour administrer via &lt;em&gt;PowerShell remoting&lt;/em&gt; des serveur Windows.&lt;/p&gt;
&lt;p&gt;La liste des modules pour Windows est disponible &lt;a class="link" href="https://docs.ansible.com/ansible/2.9/modules/list_of_windows_modules.html#windows-modules" target="_blank" rel="noopener"
&gt;sur cette page&lt;/a&gt;. La plupart ne sont pas intégrés au cœur d’Ansible mais font partis des &lt;em&gt;extra-modules&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="prérequis-côté-serveur"&gt;Prérequis côté serveur
&lt;/h2&gt;&lt;h3 id="configuration-de-base-connexion-distante-avec-des-comptes-locaux"&gt;Configuration de base (connexion distante avec des comptes locaux)
&lt;/h3&gt;&lt;p&gt;Il est nécessaire d’installer un module Python permettant la connexion aux Windows via PowerShell sur le serveur Linux qui servira a exécuter les playbooks.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install &amp;#34;pywinrm&amp;gt;=0.1.1&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="configuration-kerberos-connexion-distante-avec-des-comptes-de-domaine-ad"&gt;Configuration Kerberos (connexion distante avec des comptes de domaine AD)
&lt;/h3&gt;&lt;p&gt;La configuration de base ne permet pas d’utiliser des comptes de domaine. Dans un environnement d’entreprise, la plupart des serveurs Windows sont intégrés à un domaine Active Directory.&lt;/p&gt;
&lt;p&gt;Il est donc intéressant d’installer les clients kerberos qui permettront au serveur Linux avec Ansible de s’authentifier sur un domaine AD.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum -y install python-devel krb5-devel krb5-libs krb5-workstation
pip install kerberos
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut ensuite configurer le fichier &lt;strong&gt;/etc/krb5.conf&lt;/strong&gt; en fonction du contexte. Voici les variables à renseigner :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[...]
[realms]
ZWINDLER.INFO = {
kdc = dc01.zwindler.info
kdc = dc02.zwindler.info
kdc = dc03.zwindler.info
}
[domain_realm]
.zwindler.info = ZWINDLER.INFO
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut tester que la configuration fonctionne avec la commande &lt;strong&gt;kinit&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kinit zwindler@ZWINDLER.INFO
Password for zwindler@ZWINDLER.INFO:
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;ATTENTION : Il faut obligatoirement donner le nom du domaine en majuscules, et indiquer le nom complet du domaine et pas le nom Netbios. Ca vaut pour le fichier de configuration krb5.conf ET lors de l’appel de la commande kinit.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La commande ne doit pas retourner d’erreur et on peut vérifier que tout fonctionne avec la commande &lt;strong&gt;klist&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;klist
Default principal: zwindler@ZWINDLER.INFO
Valid starting Expires Service principal
23/08/2016 15:15:33 24/08/2016 01:15:33 krbtgt/ZWINDLER.INFO@ZWINDLER.INFO
renew until 30/08/2016 15:15:30
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="ajout-dun-serveur-windows"&gt;Ajout d’un serveur Windows
&lt;/h3&gt;&lt;h4 id="méthode-1--compte-local-variables-de-connexion-dans-un-fichier-chiffré"&gt;Méthode 1 : Compte local, variables de connexion dans un fichier chiffré
&lt;/h4&gt;&lt;p&gt;A la différence d’Ansible sous Linux où l’authentification peut se faire sans mot de passe à l’aide de certificats, sous Windows, il sera nécessaire de stocker à un moment donné le mot de passe d’un compte qui pourra se connecter sur les serveurs Windows.&lt;/p&gt;
&lt;p&gt;On ajoute d’abord les serveurs windows dans le fichiers hosts dans un groupe séparé&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[zwindler_windows_prod]
antivirus
wsus
[zwindler_prod:children]
zwindler_ansible_prod
zwindler_linux_prod
zwindler_windows_prod
[zwindler_windows:children]
zwindler_windows_prod
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On sécurise l’accès au fichier des variables qui contiendra les comptes d’accès aux machines Windows avec l’utilitaire &lt;strong&gt;ansible-vault&lt;/strong&gt;. Le fichier ne pourra alors être lu/édité qu’avec le mot de passe.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-vault create group_vars/zwindler_windows.yml
New Vault password:
cat group_vars/zwindler_windows.yml
$ANSIBLE_VAULT;1.1;AES256
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
1111
ansible-vault edit group_vars/zwindler_windows.yml
Vault password:
---
ansible_user: local_admin
ansible_password: xxxxxxxx
ansible_port: 5986
ansible_connection: winrm
#Decommenter si vous utiliser Python 2.7.9+ et des certificats WinRM autosignes (defaut)
#ansible_winrm_server_cert_validation: ignore
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Comme les serveurs qui ont été ajoutés dans le groupe &lt;em&gt;zwindler_windows_prod&lt;/em&gt; héritent des variables définies pour &lt;em&gt;zwindler_windows&lt;/em&gt; dans &lt;em&gt;group_vars/zwindler_windows.yml&lt;/em&gt;, Ansible les utilisera pour s’y connecter.&lt;/p&gt;
&lt;h4 id="méthode-2--utiliser-kinit-pour-la-connexion"&gt;Méthode 2 : utiliser kinit pour la connexion
&lt;/h4&gt;&lt;p&gt;Plutôt que d’utiliser un compte local et stocker le mot de passe dans des variables (de préférence chiffré donc) mais quand même devoir taper le mode de passe du vault à chaque fois, il est possible d’utiliser le binaire &lt;strong&gt;kinit&lt;/strong&gt; pour gérer l’authentification AD via un ticket Kerberos.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# kinit domain_admin@ZWINDLER.INFO
Password for domain_admin@ZWINDLER.INFO:
# klist
Ticket cache: KEYRING:persistent:0:krb_ccache_B82OOxI
Default principal: domain_admin@ZWINDLER.INFO
Valid starting Expires Service principal
23/08/2016 16:37:37 24/08/2016 02:37:37 krbtgt/ZWINDLER.INFO@ZWINDLER.INFO
renew until 30/08/2016 16:36:57
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cependant ce n’est pas suffisant. Pour que l’authentification Kerberos soit tentée par Ansible, il est tout même nécessaire que les variables &lt;strong&gt;ansible_user&lt;/strong&gt;, &lt;strong&gt;ansible_port&lt;/strong&gt; et &lt;strong&gt;ansible_connection&lt;/strong&gt; soient renseignées (bizarrement&amp;hellip;).&lt;/p&gt;
&lt;p&gt;On doit dont créer un fichier de variable similaire à celui de la méthode précédente, mais sans pour autant nécessiter de le chiffrer puisqu’on ne stockera pas le mot de passe.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi group_vars/zwindler_windows.yml
---
ansible_user: auth@by.kerberos
ansible_port: 5986
ansible_connection: winrm
#Decommenter si vous utiliser Python 2.7.9+ et des certificats WinRM autosignes (defaut)
#ansible_winrm_server_cert_validation: ignore
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A noter, la valeur &lt;strong&gt;ansible_user&lt;/strong&gt; n’est pas du tout utilisée. C’est écrit sur le site d’Ansible :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ansible will first attempt Kerberos authentication. This method uses the principal you are authenticated to Kerberos with on the control machine and not ‘ansible_user’.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="prérequis-côté-client"&gt;Prérequis côté client
&lt;/h2&gt;&lt;p&gt;Pour pouvoir se connecter il est également nécessaire de réaliser des modifications sur les serveurs que l’on souhaite administrer avec Ansible.&lt;/p&gt;
&lt;p&gt;La commande &lt;strong&gt;win_ping&lt;/strong&gt; permet de vérifier la connectivité avec les serveurs Windows. Ici la commande échoue car l’exécution de commande PowerShell à distance nécessite l’autorisation explicite sur l’ensemble des serveurs concernés.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible wsus03 -m win_ping --ask-vault-pass
Vault password:
wsus03 | UNREACHABLE! =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;msg&amp;#34;: &amp;#34;kerberos: 500 WinRMTransport. [Errno 111] Connection refused, ssl: 500 WinRMTransport. [Errno 111] Connection refused&amp;#34;,
&amp;#34;unreachable&amp;#34;: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;De plus, les serveurs dont le pare-feu est activés doivent laisser passer les connexions vers le port 5986 défini dans le fichier &lt;em&gt;group_vars/zwindler_windows.yml&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="powershell-3-pour-windows-2008"&gt;Powershell 3 (pour Windows 2008)
&lt;/h3&gt;&lt;p&gt;Sur les serveurs antérieurs à Windows 2012, seul Powershell 2 est installé et c’est Powershell 3 qu’il faut !&lt;/p&gt;
&lt;p&gt;Ansible fournit un script pour aider à l’installation si la machine a accès à Internet&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;powershell https://raw.githubusercontent.com/cchurch/ansible/devel/examples/scripts/upgrade_to_ps3.ps1
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="optionnel-ajouter-une-exception-au-pare-feu-pour-le-port-5986"&gt;(Optionnel) ajouter une exception au pare-feu pour le port 5986
&lt;/h3&gt;&lt;p&gt;Cette exception n’est plus nécessaire car le script Ansible qui suit l’ajoute de lui même. Cependant si vous souhaitez gérer cela vous même, voici quoi faire.&lt;/p&gt;
&lt;p&gt;Se connecter sur le serveur, puis lancer un prompt Powershell avec les droits administrateurs&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/ansible_windows_firewall1.png"
loading="lazy"
&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;netsh advfirewall firewall add rule name=&amp;#34;WinRM pour Ansible&amp;#34; dir=in localport=5986 protocol=TCP action=allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/09/ansible_windows_firewall2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="autoriser-ansible-à-réaliser-des-actions-à-distance-winrm"&gt;Autoriser Ansible à réaliser des actions à distance (WinRM)
&lt;/h3&gt;&lt;p&gt;Récupérer le script disponible sur la branch « devel » et l’exécuter sur le serveur en question via un prompt Powershell administrateur.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" target="_blank" rel="noopener"
&gt;github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/09/ansible_windows_winrm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Autoriser l’exécution de script Powershell si nécessaire.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Set-ExecutionPolicy Unrestricted
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="tests-et-troubleshooting"&gt;Tests et troubleshooting
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ansible wsus03 -m win_ping --ask-vault-pass
Vault password:
wsus03 | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans le cas où on souhaite réinitialiser les tickets kerberos pour valider le bon fonctionnement, on peut utiliser les commandes &lt;strong&gt;klist&lt;/strong&gt; et &lt;strong&gt;kdestroy&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;klist
Ticket cache: KEYRING:persistent:0:krb_ccache_B82OOxI
Default principal: domain_admin@ZWINDLER.INFO
Valid starting Expires Service principal
23/08/2016 16:38:45 24/08/2016 02:37:37 HTTP/wsus03.zwindler.info@ZWINDLER.INFO
renew until 30/08/2016 16:36:57
23/08/2016 16:37:37 24/08/2016 02:37:37 krbtgt/ZWINDLER.INFO@ZWINDLER.INFO
renew until 30/08/2016 16:36:57
kdestroy -A
klist
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Have fun !&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://www.it-connect.fr/debutez-avec-ansible-et-gerez-vos-serveurs-windows/" target="_blank" rel="noopener"
&gt;www.it-connect.fr/debutez-avec-ansible-et-gerez-vos-serveurs-windows/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ansible.com/ansible/2.9/modules/list_of_windows_modules.html#windows-modules" target="_blank" rel="noopener"
&gt;docs.ansible.com/ansible/2.9/modules/list_of_windows_modules.html#windows-modules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ansible.com/ansible/devel/os_guide/intro_windows.html" target="_blank" rel="noopener"
&gt;docs.ansible.com/ansible/devel/os_guide/intro_windows.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[Tutoriel] Installation d’Oracle VM for x86 – partie 2</title><link>https://blog.zwindler.fr/2016/10/18/tutoriel-installation-doracle-vm-for-x86-part-2/</link><pubDate>Tue, 18 Oct 2016 12:00:57 +0000</pubDate><guid>https://blog.zwindler.fr/2016/10/18/tutoriel-installation-doracle-vm-for-x86-part-2/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/10/oracle-vm.webp" alt="Featured image of post [Tutoriel] Installation d’Oracle VM for x86 – partie 2" /&gt;&lt;p&gt;Cet article fait suite à l’article &lt;a class="link" href="https://blog.zwindler.fr/2016/10/11/tutoriel-installation-doracle-vm-for-x86-part-1/" &gt;&lt;strong&gt;Installation d’Oracle VM for x86 - partie 1&lt;/strong&gt;&lt;/a&gt; dans lequel j’ai introduis Oracle VM et installé la console de management Oracle VM Manager. Je vous conseille de commencer par là ;-).&lt;/p&gt;
&lt;h2 id="connexion-du-serveur-oracle-vm-avec-la-console-ovmm"&gt;Connexion du serveur Oracle VM avec la console OVMM
&lt;/h2&gt;&lt;p&gt;Maintenant que la console OVMM est opérationnelle et qu’on a pu s’y connecter, on remarque que les menus sont assez intuitifs bien qu’un peu austères !&lt;/p&gt;
&lt;p&gt;Un onglet Health donne l’état général de la plateforme, puis les autres onglets permettent de configurer les différents aspects attendus d’une console d’administration de virtualisation x86.&lt;/p&gt;
&lt;p&gt;La première étape pour nous est donc bien entendu d’ajouter dans OVMM le serveur Oracle VM préalablement installé, au même titre qu’on pourrait le faire avec un ESXi dans un vCenter.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Hormis les icônes pas forcément très parlantes, le menu de « découverte » de nouveaux serveurs est très simple. On a juste besoin de l’IP et du compte OVM Agent créé lors du déploiement de l’ISO d’installation.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm2-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En bas de l’écran, un bandeau vous donne l’état des dernières opérations déclenchées sur le cluster.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm3-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm4-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Un bref coup d’œil permet de voir que le serveur est bien ajouté. Des informations sur sa configuration s’affichent.&lt;/p&gt;
&lt;h2 id="créer-un-groupe-de-serveurs-server-pool"&gt;Créer un groupe de serveurs « server pool »
&lt;/h2&gt;&lt;p&gt;Vous aurez peut être remarqué que votre serveur de virtualisation a été ajouté dans le groupe de serveurs « Unassigned ». Intellectuellement ça me gène, et j’ai donc voulu créer un groupe de serveurs, pour « faire propre ».&lt;/p&gt;
&lt;p&gt;Au delà de ça, c’est notamment via la création de ces groupes (clusters dans VMware) que l’on peut gérer la haute disponibilité et les clusters de machines. C’est donc plutôt important ;-).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm4-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ce groupe peut se créer via l’icône située juste à droite de celle sur laquelle nous avons cliqué pour « découvrir » le serveur Oracle VM.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm20.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm21.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm22.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm23.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cependant, lorsque j’ai tenté de créer mon groupe de serveurs, j’ai reçu l’erreur suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;OVMAPI_4010E Attempt to send command: create_server_pool to server: lab01 failed.
OVMAPI_4004E Sync command failed on server: x.x.x.32.
Command: create_server_pool, Server error: org.apache.xmlrpc.XmlRpcException: &amp;lt;type &amp;#39;exceptions.Exception&amp;#39;&amp;gt;:
Invalid hostname resolution: lab01 -&amp;gt; 127.0.0.1 [Wed Jul 20 16:30:40 CEST 2016]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Lors de l’installation automatique de l’ISO Oracle VM, le hostname lab01 a été ajouté par défaut dans le fichier &lt;strong&gt;/etc/hosts&lt;/strong&gt;. Or, ceci pose problème.&lt;/p&gt;
&lt;p&gt;Connectez vous en SSH sur le serveur et retirez le hostname (ici lab01) du fichier &lt;strong&gt;/etc/hosts&lt;/strong&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/hosts
127.0.0.1 lab01 localhost localhost.localdomain localhost4 localhost4.localdomain4
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="création-de-pools-de-stockage"&gt;Création de pools de stockage
&lt;/h2&gt;&lt;p&gt;La seconde opération consiste à ajouter du stockage au cluster.&lt;/p&gt;
&lt;p&gt;Avec Oracle VM, on peut utiliser du stockage local via des disques inutilisés. La procédure est détaillée à &lt;a class="link" href="https://docs.oracle.com/cd/E26996_01/E18549/html/CHDIGACB.html" target="_blank" rel="noopener"
&gt;l’adresse suivante&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On peut également découvrir des cibles iSCSI ou éventuellement utiliser l’espace disponible sur le filesystem local. Pour ce dernier choix, l’espace ne sera cependant bien entendu uniquement visible depuis le serveur local uniquement.&lt;/p&gt;
&lt;p&gt;Pour l’exemple, j’ai créé un disque de test de 200 Go sur un NAS Windows.&lt;/p&gt;
&lt;p&gt;La procédure est la suivante. On commence par ouvrir l’onglet « Storage ». Dans SAN Servers, il n’y a encore aucun serveur déclaré. Au même titre que pour le serveur de virtualisation, il y a un bouton « Discover SAN Server ».&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm6.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm7.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On peut déclarer un ou plusieurs hôtes, avec ou non de l’authentification. J’ai rarement vu des contextes où l’authentification CHAP (côté client ou serveur) était activée, mais je trouve ça bien en production. Pour autant, dans le cas du PoC je n’en ai pas mis.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm8.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Editer les access groups&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm12.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm11.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et enfin, on ajoute les serveurs qui peuvent avoir accès aux périphériques de stockage. Ici lab01.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm9.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cliquer sur Finish pour valider.&lt;/p&gt;
&lt;p&gt;Dans mon cas, juste avec la configuration de cet article, je suis tombé sur l’erreur suivante. A l’écran d’avant j’avais loupé la modification des access groups et en particulier l’onglet storage initiators. Si vous avez une erreur, c’est surement le même problème.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm10.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le stockage nouvellement intégré apparait maintenant avec les volumes disponibles&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm13.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm15.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm14.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="créer-des-repositories-pour-stocker-des-images"&gt;Créer des repositories pour stocker des images
&lt;/h2&gt;&lt;p&gt;Une fois les périphériques de stockage déclarés auprès de vos serveurs de virtualisation, on peut maintenant créer des pools appelés repositories.&lt;/p&gt;
&lt;p&gt;L’ensemble des opérations qui suivent sont a effectuer dans l’onglet Repositories. Ces pools logiques de stockage vous permettent de stocker vos fichiers ISO, mais aussi vos templates et vos disques durs virtuels pour vos machines virtuelles. Sur VMware on parlerait de &lt;strong&gt;Datastores&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="avec-le-disque-local"&gt;Avec le disque local
&lt;/h3&gt;&lt;p&gt;Comme indiqué précédemment, ce type de stockage aura l’inconvénient de n’être accessible que d’une seule machine. Cependant c’est le plus simple à utiliser.&lt;/p&gt;
&lt;p&gt;Cliquer sur le logo « + » pour créer un nouveau repository.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm24.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On doit d’abord renseigner quelques informations descriptives et d’appartenance.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm26.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Enfin, on sélectionne le disque (Physical Disk) sur lequel placer le repository.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm25.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;La dernière étape consiste à ajouter les serveurs qui verront ce stockage. Dans ce cas précis, seul lab01 pourra le voir.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm27.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Après validation, le nouveau repository apparait dans la liste des repositories.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm28.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="avec-le-disque-san"&gt;Avec le disque SAN
&lt;/h3&gt;&lt;p&gt;Le principe est le même pour les disques SAN, à ceci près que celui ci pourra bien être partagé entre plusieurs serveurs d’un même cluster (pour peu que les serveurs concernés aient bien été autorisés à voir ce stockage lors de l’étape précédente).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm29.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm30.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="gestion-du-réseau"&gt;Gestion du réseau
&lt;/h2&gt;&lt;p&gt;Vous l’aurez deviné, pour la gestion du réseau, tout se passe dans l’onglet « Network » de la console OVMM.&lt;/p&gt;
&lt;p&gt;Petite subtilité, par défaut, le réseau de management ne peut pas être utilisé par les VMs. Vous ne pourrez donc pas affecter de réseaux virtuels aux machines virtuelles en l’état actuel des choses.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm16.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans mon cas (PoC), je ne souhaite pas créer un nouveau réseau pour me simplifier la vie, et j’ai donc ajouté « Virtual Machine » au réseau de &lt;em&gt;management&lt;/em&gt; créé par défaut lors de l’installation du serveur OracleVM.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm17.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm18.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans un contexte de production, on préfèrera en ajouter un nouveau et lui affecter des interfaces réseaux et des VLANs (comme on le ferait sur VMware ou RHEV).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm19.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="créer-une-nouvelle-vm"&gt;Créer une nouvelle VM
&lt;/h2&gt;&lt;p&gt;Maintenant que les aspects stockage et réseau ont été réglés, on peut enfin créer une machine virtuelle. La documentation officielle donne &lt;a class="link" href="https://docs.oracle.com/cd/E27300_01/E27309/html/vmusg-vm-create.html" target="_blank" rel="noopener"
&gt;quelques informations utiles sur le sujet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le début de la création de machine virtuelle est similaire à n’importe quel outil de virtualisation.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm31.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm32.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm33.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="hvm-hvm--pv-pvm"&gt;HVM, HVM + PV, PVM
&lt;/h3&gt;&lt;p&gt;Cependant, par rapport aux autres hyperviseurs (full virtualisation vs paravirtualisation, &lt;a class="link" href="https://blog.zwindler.fr/2016/08/25/when-should-we-have-containers/" &gt;différences que j’aborde dans cet article&lt;/a&gt;), Xen et donc OracleVM apporte une subtilité dans la méthode de virtualiser : la paravirtualisation (PVM). On a le choix entre HVM, HVM + PV et PVM.&lt;/p&gt;
&lt;p&gt;En réalité il s’agit de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Xen HVM:&lt;/strong&gt; Hardware virtualization, or fully virtualized&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xen HVM, PV Drivers:&lt;/strong&gt; Identical to Xen HVM, but with additional paravirtualized drivers for improved performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xen PVM:&lt;/strong&gt; Paravirtualized&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En théorie, vous aurez donc de meilleures performances lorsque vous disposerez d’un OS capable d’être paravirtualisé (mode Xen PVM) que lorsque vous aurez une HVM.&lt;/p&gt;
&lt;p&gt;Ça c’est la théorie. En fait en pratique, certains OS, même Linux, seront plus performants en HVM + PV selon Oracle. Pour plus d’informations, voir la page de &lt;a class="link" href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=757719.1#aref18" target="_blank" rel="noopener"
&gt;documentation officielle qui traite du sujet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La liste des OS supporté pour chaque mode est disponible dans &lt;a class="link" href="http://www.oracle.com/technetwork/documentation/vm-096300.html" target="_blank" rel="noopener"
&gt;les release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="créer-des-interfaces-virtuelles"&gt;Créer des interfaces virtuelles
&lt;/h3&gt;&lt;p&gt;La seconde étape du wizard permet de configurer les interfaces virtuelles et les réseaux qui y sont associés.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm34.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="ajouter-des-disques-virtuels"&gt;Ajouter des disques virtuels
&lt;/h3&gt;&lt;p&gt;L’étape d’après permet de configurer les différents périphériques qui sont associés à la VM. Dans le cas du disque dur virtuel, il faut le créer ou en réutiliser un existant.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm35.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Lorsqu’on clique sur le « + », on peut créer un nouveau disque virtuel qui sera stocké sur le repository choisi.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm36.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Enfin, on peut affecter ou non les différents périphériques éligibles à la séquence de boot et les ordonner.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm37.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois la VM créée, on peut la démarrer et ouvrir sa console.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm38.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="boot"&gt;Boot
&lt;/h2&gt;&lt;p&gt;Dans l’état actuel des choses, la VM démarre mais n’a aucun disque bootable (CD ou HDD). En effet, il faut monter un ISO sur la VM, mais pour ça on doit l’uploader dans un premier temps sur un des repositories précédemment créés.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm39.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm40.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A priori, dans le menu d’import du repository, on ne peut uploader &lt;strong&gt;que&lt;/strong&gt; des ISO &lt;strong&gt;depuis un partage web HTTP&lt;/strong&gt;. Une solution alternative probable est que l’on peut simplement aller déposer le fichier en SSH mais je trouve que clairement il manque une fonctionnalité à la console d’upload en directe depuis un navigateur !&lt;/p&gt;
&lt;p&gt;Une fois qu’on dispose d’un ISO pour booter notre VM, on peut éditer la machine virtuelle et y ajouter l’ISO.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm41.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm42.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm43.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On redémarre la machine virtuelle qui boote sur l’ISO comme souhaité.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/10/oraclevm44-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://docs.oracle.com/cd/E64076_01/" target="_blank" rel="noopener"
&gt;docs.oracle.com/cd/E64076_01/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://www.oracle.com/technetwork/server-storage/vm/downloads/index.html" target="_blank" rel="noopener"
&gt;www.oracle.com/technetwork/server-storage/vm/downloads/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://docs.oracle.com/cd/E64076_01/E64078/html/index.html" target="_blank" rel="noopener"
&gt;docs.oracle.com/cd/E64076_01/E64078/html/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://docs.oracle.com/cd/E64076_01/E64078/html/vmiug-server-installation.html" target="_blank" rel="noopener"
&gt;docs.oracle.com/cd/E64076_01/E64078/html/vmiug-server-installation.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Mise à jour Windows 10 pour les professionnels : gratuit ou payant ?</title><link>https://blog.zwindler.fr/2016/06/23/mise-a-jour-windows-10-professionnels-gratuit-payant/</link><pubDate>Thu, 23 Jun 2016 11:30:06 +0000</pubDate><guid>https://blog.zwindler.fr/2016/06/23/mise-a-jour-windows-10-professionnels-gratuit-payant/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/02/57UKydQS.webp" alt="Featured image of post Mise à jour Windows 10 pour les professionnels : gratuit ou payant ?" /&gt;&lt;p&gt;A l’approche de la fin du compte à rebours (prévue pour le 29 juillet 2016) de la promotion de Microsoft pour Windows 10 qui permet aux propriétaires de licences Windows 7 et Windows 8, la question est relancée :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Est ce que seuls les particuliers sont concernés par la promotions Windows 10 ou est ce que les professionnels peuvent aussi en profiter ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="lorigine"&gt;L’origine
&lt;/h2&gt;&lt;p&gt;Revenons un peu en arrière.&lt;/p&gt;
&lt;p&gt;Fin janvier 2015, c’est l’effervescence. Microsoft vient d’annoncer à la surprise générale que les possesseurs de licences Windows à partir de la version 7 auraient droit à une mise à jour gratuite pendant un an de leur système vers Windows 10.&lt;/p&gt;
&lt;p&gt;Rétrospectivement, c’est assez malin de la part de Microsoft, après une mort de Windows XP dans la douleur, entre autre provoquée par un Vista détesté qui a fait camper beaucoup d’utilisateurs (et de professionnels) sur leurs positions. La décision est saluée et tout le monde a hâte (sauf les libristes).&lt;/p&gt;
&lt;p&gt;Mais rapidement, des questions existentielles secouent la bloguosphère, la twittosphère, &amp;hellip; : Dans quel conditions ? Est ce que les licences « pirates » seront concernées ? Et Windows phone ? Et Windows RT ?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Et les pro ???&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C’est la panique, tout le monde informatique ne parle plus que de ça ;-).&lt;/p&gt;
&lt;h2 id="la-confusion"&gt;La confusion
&lt;/h2&gt;&lt;p&gt;Rapidement, Microsoft met les points sur les I. Les versions concernées sont Windows 7 Home et Pro et Windows 8.1 Home et Pro. Les détenteurs de Windows 8 devront migrer préalablement vers Windows 8.1. Toutes les autres licences ne sont pas concernées : RT, Mediacenter et donc &amp;hellip; Entreprise.&lt;/p&gt;
&lt;p&gt;Deuxième vent de panique. Le plutôt sérieux Monde Informatique (loin d’être une exception) titre alors &lt;a class="link" href="http://www.lemondeinformatique.fr/actualites/lire-windows-10-ne-sera-pas-gratuit-pour-les-entreprises-60096.html" target="_blank" rel="noopener"
&gt;Windows 10 ne sera pas gratuit pour les entreprises 11111!!!!1!!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On y lit même&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour les entreprises en revanche, &lt;em&gt;&lt;strong&gt;c’est la douche froide&lt;/strong&gt;&lt;/em&gt;. Ou tout du moins un dur retour à la réalité. Car la firme de Redmond a fait savoir &lt;a class="link" href="http://blogs.windows.com/business/2015/01/30/windows-10-for-enterprise-more-secure-and-up-to-date/" target="_blank" rel="noopener"
&gt;dans un blog&lt;/a&gt; daté de vendredi que la gratuité de la mise à jour vers Windows 10 ne sera pas de la partie.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ça me fait encore rire.&lt;/p&gt;
&lt;p&gt;Pour autant, Le Monde Informatique et tous les autres n’ont pas écrit d’erreurs à proprement parler (ou alors ils l’ont corrigé). Le version Entreprise des OS Windows (tout comme RT) ne seront bien pas gratuitement mises à jour.&lt;/p&gt;
&lt;p&gt;Cependant, il faut savoir que ces versions Entreprise, spéciales, sont bien à distinguer des versions Home et Pro qui sont livrées avec nos PC. Ces versions sont souvent acquises par les très grands groupes, notamment dans le cadre d’une souscription « Software assurance ». Une rente annuelle pour Microsoft que vous payez au volume et qui vous donne bien évidemment le droit d’accéder aux nouvelles versions lorsqu’elles sortent.&lt;/p&gt;
&lt;h2 id="et-donc-"&gt;Et donc ?
&lt;/h2&gt;&lt;p&gt;Ainsi, les personnes ayant acquis des Windows 7 ou 8 &lt;strong&gt;Entreprise&lt;/strong&gt; payent donc probablement de manière annuelle un volume de licence. Si leurs cotisations sont à jour elles peuvent donc &lt;em&gt;gratuitement&lt;/em&gt; mettre à jour leur parc vers les nouvelles versions de Windows et donc vers Windows 10, puisque c’est inclus dans leur contrat. C’est pareil pour l’ensemble des logiciels édités par Microsoft, dont les Windows Server par exemple.&lt;/p&gt;
&lt;p&gt;Pour les autres, que ce soient des particuliers, des PME ou même de plus grosses entreprises, qui ont des licences Windows Home ou Pro, soit acquises séparément du terminal, soit achetée avec, la promotion est bien applicable (tant que vous migrez avant la fin du compte à rebours bien sûr !).&lt;/p&gt;
&lt;p&gt;Amis professionnels, vous pouvez donc vous rassurer et faire la mise à jour vers Windows 10 gratuitement si vous le souhaitez sans vous mettre hors la loi ;-).&lt;/p&gt;
&lt;p&gt;Quelques lectures complémentaires pour vous rassurer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://www.journaldunet.com/solutions/dsi/1154797-windows-10-pour-qui-est-il-gratuit/" target="_blank" rel="noopener"
&gt;www.journaldunet.com/solutions/dsi/1154797-windows-10-pour-qui-est-il-gratuit/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://web.archive.org/web/20170929231736/http://windowsitpro.com/windows-10/microsofts-windows-10-upgrade-policy-business-not-what-you-might-think" target="_blank" rel="noopener"
&gt;windowsitpro.com/windows-10/microsofts-windows-10-upgrade-policy-business-not-what-you-might-think (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Une erreur grave s’est produite lors de l’exécution de sysprep sur l’ordinateur</title><link>https://blog.zwindler.fr/2016/03/05/a-fatal-error-occurred-while-trying-to-sysprep-the-machine/</link><pubDate>Sat, 05 Mar 2016 13:00:52 +0000</pubDate><guid>https://blog.zwindler.fr/2016/03/05/a-fatal-error-occurred-while-trying-to-sysprep-the-machine/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/01/sysprep_error-1.webp" alt="Featured image of post Une erreur grave s’est produite lors de l’exécution de sysprep sur l’ordinateur" /&gt;&lt;h2 id="dépassement-du-nombre-de-sysprep-autorisé"&gt;Dépassement du nombre de sysprep autorisé
&lt;/h2&gt;&lt;p&gt;A force d&amp;rsquo;(ab)user de virtualisation de serveurs, on prend forcément gout aux fonctionnalités offertes par l’infrastructure. Hormis VMware qui fait encore payer les templates (tacle gratuit, même si on peut &lt;a class="link" href="https://blog.zwindler.fr/2011/03/20/copier-une-vm-windows-xp-sous-esxi-sans-vcenter/" &gt;s’en sortir comme ceci&lt;/a&gt;), la plupart des éditeurs d’hyperviseurs proposent &lt;em&gt;&lt;strong&gt;gratuitement&lt;/strong&gt;&lt;/em&gt; la fonctionnalité qui permet, à partir d’une machine virtuelle existante, de créer un modèle qui servira de socle pour les déploiement futurs.&lt;/p&gt;
&lt;p&gt;On gagnera un temps fou en s’évitant l’installation de l’OS à chaque fois (même si ça s’automatise d’autres façons je l’accorde) et surtout à toujours reparametrer les mêmes choses comme les DNS, le NTP, le client de supervision, &amp;hellip;&lt;/p&gt;
&lt;p&gt;Ça marchera plutôt bien sur vos bons vieux Linux (sauf dans pour &lt;a class="link" href="https://blog.zwindler.fr/2016/02/20/nettoyage-carte-ethernet-apres-deploiement-dun-template-centos-rhel-6/" &gt;la gestion du réseau CentOS/RHEL6&lt;/a&gt;, corrigé en 7), mais Microsoft, lui, ne l’entendra pas de cette oreille !&lt;/p&gt;
&lt;p&gt;Lorsque vous déployez un serveur ou un poste de travail sous Windows, vous êtes limités dans le nombre de &lt;strong&gt;sysprep&lt;/strong&gt; consécutifs que vous pouvez exécuter pour réinitialiser les variables de types SID dans le registre de la machine.&lt;/p&gt;
&lt;p&gt;Or, pour des raisons de stabilité et de sécurité, de nombreux administrateurs réalisent un &lt;strong&gt;sysprep&lt;/strong&gt; une fois que leur template est terminé, ce qui permet de réinitialiser le SID du modèle, ce qui rendra par la suite la future VM unique au moment de son déploiement. Et si vous modifiez régulièrement vos templates, la limite peut arriver vite.&lt;/p&gt;
&lt;h2 id="lerreur-et-sa-solution"&gt;L’erreur et sa solution
&lt;/h2&gt;&lt;p&gt;Lorsque l’on déploie une image sur un poste ou un serveur et qu’on reçoit le message d’erreur suivant :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Une erreur grave s’est produite lors de l’exécution de sysprep sur l’ordinateur&lt;/p&gt;
&lt;p&gt;A fatal error occurred while trying to sysprep the machine&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La procédure pour contourner le compteur de Microsoft se passe en plusieurs étapes.&lt;/p&gt;
&lt;h3 id="regedit"&gt;Regedit
&lt;/h3&gt;&lt;p&gt;Premièrement, il faut commencer par modifier les trois chaînes regedit suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\CleanupState:2&lt;/li&gt;
&lt;li&gt;HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\GeneralizationState:7&lt;/li&gt;
&lt;li&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\SkipRearm:1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Éventuellement, on peut préférer exécuter un fichier &lt;strong&gt;.reg&lt;/strong&gt; contenant les lignes suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus]
&amp;#34;GeneralizationState&amp;#34;=dword:00000007
&amp;#34;CleanupState&amp;#34;=dword:00000002
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform]
&amp;#34;SkipRearm&amp;#34;=dword:00000001
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Deuxièmement, effectuer deux commandes (dans l’invité de commandes ou exécuter Powershell en tant qu’administrateur), en attendant 5 à 10 secondes entre chaque commandes. Cette opération est réellement nécessaire car j’ai eu des échecs en essayant de ne pas le faire, pour voir.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;msdtc -uninstall
msdtc -install
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="dernière-étape-avant-le-sysprep--le-skiprearmxml"&gt;Dernière étape avant le sysprep : le skiprearm.xml
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Attention, ce fichier dépend de votre version.&lt;/strong&gt; Suite à un commentaire je me suis rendu compte que le fichier que je fournissais ne fonctionne plus sur les versions « récentes » de Windows.&lt;/p&gt;
&lt;p&gt;Pour les vielles versions (2003 jusqu’à 2008 mais pas trop à jour?)&lt;/p&gt;
&lt;p&gt;Troisièmement, créer un fichier nommé &lt;strong&gt;c:\Windows\system32\sysprep\skiprearm.xml&lt;/strong&gt; contenant le texte suivant :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;
&amp;lt;unattend xmlns=&amp;#34;urn:schemas-microsoft-com:unattend&amp;#34;&amp;gt;
&amp;lt;settings pass=&amp;#34;generalize&amp;#34;&amp;gt;
&amp;lt;component name=&amp;#34;Microsoft-Windows-Security-Licensing-SLC&amp;#34; processorArchitecture=&amp;#34;x86&amp;#34; publicKeyToken=&amp;#34;31bf3856ad364e35&amp;#34; language=&amp;#34;neutral&amp;#34; versionScope=&amp;#34;nonSxS&amp;#34; xmlns:wcm=&amp;#34;http://schemas.microsoft.com/WMIConfig/2002/State&amp;#34; xmlns:xsi=&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&amp;gt;
&amp;lt;SkipRearm&amp;gt;1&amp;lt;/SkipRearm&amp;gt;
&amp;lt;/component&amp;gt;
&amp;lt;/settings&amp;gt;
&amp;lt;/unattend&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour les versions plus récentes et à jour&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;
&amp;lt;unattend xmlns=&amp;#34;urn:schemas-microsoft-com:unattend&amp;#34;&amp;gt;
&amp;lt;settings pass=&amp;#34;generalize&amp;#34;&amp;gt;
&amp;lt;component name=&amp;#34;Microsoft-Windows-Security-SPP&amp;#34; processorArchitecture=&amp;#34;amd64&amp;#34; publicKeyToken=&amp;#34;31bf3856ad364e35&amp;#34; language=&amp;#34;neutral&amp;#34; versionScope=&amp;#34;nonSxS&amp;#34; xmlns:wcm=&amp;#34;http://schemas.microsoft.com/WMIConfig/2002/State&amp;#34; xmlns:xsi=&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&amp;gt;
&amp;lt;SkipRearm&amp;gt;1&amp;lt;/SkipRearm&amp;gt;
&amp;lt;/component&amp;gt;
&amp;lt;/settings&amp;gt;
&amp;lt;/unattend&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="le-sysprep"&gt;Le sysprep
&lt;/h3&gt;&lt;p&gt;Une fois que ces trois étapes ont été réalisées, on reboot le serveur et on peut exécuter le sysprep en ligne de commande à la suite.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd c:\windows\system32\sysprep
sysprep /generalize /oobe /shutdown /unattend:c:\Windows\system32\sysprep\skiprearm.xml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans mon exemple, je ne fais que couper la machine en fin de processus, il n’y a pas de reboot. Ceci me permet de transformer ma machine virtuelle en modèle à la suite. Ainsi, les VMs qui seront déployées avec ce modèle auront déjà eu leur sysprep au moment du premier boot, ce qui me gagne du temps.&lt;/p&gt;
&lt;h2 id="note-complémentaire"&gt;Note complémentaire
&lt;/h2&gt;&lt;p&gt;Il y a débat sur le fait que le &lt;strong&gt;sysprep&lt;/strong&gt; soit toujours nécessaire aujourd’hui, surtout depuis l’article du TechNet « &lt;em&gt;The Machine SID Duplication Myth (and Why Sysprep Matters)&lt;/em&gt; » de Mark Russinovich, auteur de NewSID.exe, &lt;strong&gt;l’Utilitaire&lt;/strong&gt;  (avec un grand U) utilisé pour réinitialiser les SID sous XP/2003.&lt;/p&gt;
&lt;p&gt;On y apprend en gros qu’il n’y a aucun risques à cloner des machines Windows sans réinitialiser les SID et que dans la grande majorité des cas, le sysprep n’est donc pas nécessaire depuis 2008. C’est d’ailleurs pour cela que l’auteur indique ne plus maintenir son NewSID.exe.&lt;/p&gt;
&lt;p&gt;Pour autant, je peux attester personnellement de deux contextes en Windows 2008 et pour lesquels la duplication du SID a provoqué un dysfonctionnement majeur du fonctionnement des applications Microsoft (notamment l’installation d’un domaine Active Directory). Donc jusqu’à preuve du contraire, je continuerai à faire des sysprep sur mes clones/templates Windows Server.&lt;/p&gt;
&lt;h2 id="nombre-de-sysprep-restants"&gt;Nombre de sysprep restants
&lt;/h2&gt;&lt;p&gt;Il existe une commande pour vérifier le nombre de sysprep qu’on peut encore refaire (trouvé sur &lt;a class="link" href="http://power-shell.blogspot.fr/2011/11/comment-eviter-que-la-commande-sysprep.html" target="_blank" rel="noopener"
&gt;Power Shell&lt;/a&gt;) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;slmgr.vbs /dlv
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/03/sysprep_1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="sources-additionnelles"&gt;Sources additionnelles
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://support.microsoft.com/en-us/kb/929828" target="_blank" rel="noopener"
&gt;Le KB Microsoft qui explique le problème et donne quelques pistes pour le contourner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blogs.technet.microsoft.com/markrussinovich/2009/11/03/the-machine-sid-duplication-myth-and-why-sysprep-matters/" target="_blank" rel="noopener"
&gt;L’article TechNet censé nous expliquer que les duplications de SID ne pose aucun problèmes réels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://www.infoworld.com/article/2628004/microsoft-windows/the-sid-debate--to-sysprep-or-not-to-sysprep.html" target="_blank" rel="noopener"
&gt;Une autre analyse sur le sujet de chez InfoWorld&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Debug : Client NTP Linux vers NTP Windows Server</title><link>https://blog.zwindler.fr/2015/09/05/debug-client-ntp-linux-vers-ntp-windows-server/</link><pubDate>Sat, 05 Sep 2015 10:30:12 +0000</pubDate><guid>https://blog.zwindler.fr/2015/09/05/debug-client-ntp-linux-vers-ntp-windows-server/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/09/ntp.webp" alt="Featured image of post Debug : Client NTP Linux vers NTP Windows Server" /&gt;&lt;p&gt;Si vous travaillez comme moi dans un contexte mixant les serveurs Linux et des serveurs Windows, vous avez probablement un serveur Active Directory pour gérer votre annuaire d’entreprise (ou au moins gérer vos serveurs Windows dans un ensemble cohérent).&lt;/p&gt;
&lt;p&gt;Et comme les serveurs Windows dans un domaine Active Directory sont tous automatiquement synchronisés sur le temps du serveur maitre de l’AD, vous vous êtes probablement dit que ça serait une bonne idée de synchroniser tout le monde sur le même serveur.&lt;/p&gt;
&lt;p&gt;Ou alors, vous avez un vieux serveur Windows connecté à une horloge hertzienne (ou autre, GPS, etc) et vous voudriez qu’il serve de source de temps fiable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mais rien n’y fait, ces fichus linux refusent de se mettre à jour ! Pourquoi ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="configurer-notre-ntp-windows"&gt;Configurer notre NTP Windows
&lt;/h2&gt;&lt;h3 id="w32time-est-il-un-serveur-ntp-"&gt;w32time est il un serveur NTP ?
&lt;/h3&gt;&lt;p&gt;D’abord, avant de vous lancer, il faut que vous sachiez que Microsoft n’a pas fait un boulot terrible avec w32time. On ne peut pas vraiment qu’il s’agit d’un « vrai » serveur NTP. En fait, il s’agit plutôt d’une adaptation du service du temps w32time pour servir de serveur aux éventuels clients assez fous pour demander l’heure.&lt;/p&gt;
&lt;p&gt;A ma connaissance, w32time n’a même pas de « driftfile » : si la source de temps n’est pas disponible et que l’horloge interne du serveur dérive, le serveur sera incapable de se corriger de lui même et votre heure se décalera de plus en plus.&lt;/p&gt;
&lt;p&gt;Pour en terminer avec ce démontage en règle, c’est tellement du bidouillage qu’une des méthodes les plus répandues pour configurer le « serveur de temps » Windows consiste à modifier des clés de registre. Moi je vous donne la version « lignes de commandes », mais bon, tout est dit&amp;hellip;&lt;/p&gt;
&lt;h3 id="méthode-ligne-de-commandes"&gt;Méthode ligne de commandes
&lt;/h3&gt;&lt;p&gt;Si le serveur Windows en question est un serveur Active Directory, vous pouvez passez à l’étape « Linux » de l’article, car le serveur w32time est déjà configuré&lt;/p&gt;
&lt;p&gt;Toutes les commandes sont à entrer dans un prompt « administrateur »&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Couper le temps windows&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;net stop w32time
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Synchroniser le serveur par rapport à une source de temps (soit un autre serveur NTP, soit l’horloge locale)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;w32tm /config /syncfromflags:manual /manualpeerlist:[hostname] #si on souhaite connecter ce serveur à un autre serveur (sur Internet ou local)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ou&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;w32tm /config /syncfromflags:manual #s&amp;#39;il n&amp;#39;y a pas de &amp;#34;père&amp;#34; et qu&amp;#39;on veut prendre la &amp;#34;local clock&amp;#34; comme source de temps
&lt;/code&gt;&lt;/pre&gt;&lt;p style="padding-left: 30px;"&gt;
Pour information, on peut spécifier plusieurs serveurs dans [hostname], il faut juste les séparer par des virgules
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Définir le serveur en tant que source de temps fiable&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;w32tm /config /reliable:yes
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Relancer le temps windows&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;net start w32time
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Afficher la configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;w32tm /query /configuration
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Resynchronisation (dans le cas où vous avez spécifié un serveur dans manualpeerlist)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;w32tm /resync /rediscover
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="et-la-méthode-regedit-alors-"&gt;Et la méthode regedit alors ?
&lt;/h3&gt;&lt;p&gt;Les clés de registre à modifier se situent dans le noeud de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config. Principalement, vous devrez modifier AnnounceFlags et NTPServer pour indiquer que vous êtes serveur NTP&lt;/p&gt;
&lt;p&gt;Vous trouverez les valeurs des clés de registre sur la page officiel du support à l’adresse suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://support.microsoft.com/fr-fr/kb/223184" target="_blank" rel="noopener"
&gt;support.microsoft.com/fr-fr/kb/223184&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mais-rien-ny-fait-ces-fichus-linux-refusent-de-se-mettre-à-jour--pourquoi-"&gt;Mais rien n’y fait, ces fichus Linux refusent de se mettre à jour ! Pourquoi ?
&lt;/h2&gt;&lt;p&gt;Je ne vais pas couvrir ici comment installer le client NTP sur les serveurs Linux, il y a suffisamment de documentations et de blogs qui traitent du sujet. Ce qu’ils expliquent plus rarement en revanche, c’est comment ça se fait que les clients NTP Linux refusent le temps provenant d’un serveur Windows.&lt;/p&gt;
&lt;p&gt;Assurez vous déjà de ne pas avoir laissé plus de « restrict » que nécessaire. En effet, pas sécurité, les clients NTP sont souvent paramétrés de manière très sécurisée, ce qui est bien mais génère souvent des erreurs.&lt;/p&gt;
&lt;p&gt;Voici un exemple de fichier de configuration minimaliste pour un client NTP sur un serveur RedHat Entreprise Linux&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/ntp.conf
server ntp1.mondomaine.fr iburst #enlever iburst hors debugging
server mondomaine.fr
server serveurntp.de.linternet.fr
driftfile /var/lib/ntp/drift
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et c’est tout. Dans la plupart des contexte, vous n’aurez pas besoin de plus. Et comme le mieux est l’ennemi du bien &amp;hellip;&lt;/p&gt;
&lt;h3 id="je-nai-pas-de-restrict-et-ça-ne-fonctionne-toujours-pas-"&gt;Je n’ai pas de restrict, et ça ne fonctionne toujours pas !
&lt;/h3&gt;&lt;p&gt;Tout à l’air correct, votre client Linux est paramétré pour se connecter sur les serveurs Windows, le démon tourne, mais ça ne fonctionne pas.&lt;/p&gt;
&lt;p&gt;C’est la que le « fun » commence vraiment : on va débuguer NTP.&lt;/p&gt;
&lt;p&gt;Pour ça, je vous propose d’utiliser la commande &lt;strong&gt;ntpq&lt;/strong&gt; et ses nombreuses fonctions, qui soyons honnête, n’est pratiquement jamais utile, à part dans des cas comme ça !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# ntpq
ntpq&amp;gt; peers
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.mondom 111.0.111.151 4 u 34 64 377 0.272 -184.31 9.019
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ici, j’affiche les serveurs NTP avec la fonction &lt;strong&gt;peers&lt;/strong&gt;. Je n’ai paramétré que le serveur Windows ntp1.mondomaine.com pour simplifier le diagnostic.&lt;/p&gt;
&lt;p&gt;Normalement, tout à gauche, juste avant le nom, je devrais avoir un symbole * qui indique que le client s’est connecté à ce serveur, ou éventuellement + pour annoncé que le serveur est utilisable (si vous avez plusieurs serveurs).&lt;/p&gt;
&lt;p&gt;Ici ce n’est pas le cas. Avec la fonction &lt;strong&gt;as&lt;/strong&gt;, on peut obtenir plus d’informations.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ntpq&amp;gt; as
ind assID status conf reach auth condition last_event cnt
===========================================================
1 8950 9014 yes yes none reject reachable 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mon serveur ntp1 avec l’ID assID=8950 est en condition &lt;strong&gt;reject&lt;/strong&gt;, malgré qu’il soit &lt;strong&gt;reachable&lt;/strong&gt;. Ce n’est donc pas un souci réseau ou pare-feu. Pour avoir plus de détails, on peut utiliser la fonction &lt;strong&gt;rv&lt;/strong&gt;, qui prend en argument l’assID du serveur&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ntpq&amp;gt; rv 8950
assID=8950 status=9014 reach, conf, 1 event, event_reach,
srcadr=ntp1.mondomaine.com, srcport=123, dstadr=111.0.111.130,
dstport=123, leap=00, stratum=4, precision=-6, rootdelay=93.750,
rootdispersion=10329.788, refid=111.0.111.151, reach=377, unreach=0,
hmode=3, pmode=4, hpoll=6, ppoll=6, flash=400 peer_dist, keyid=0, ttl=0,
offset=-184.319, delay=0.272, dispersion=17.890, jitter=7.364,
reftime=d58e6c8b.deb41e80 Mon, Jul 15 2013 14:41:47.869,
org=d58e6cf5.7eb41e80 Mon, Jul 15 2013 14:43:33.494,
rec=d58e6cf5.adb21a64 Mon, Jul 15 2013 14:43:33.678,
xmt=d58e6cf5.ad9d86ac Mon, Jul 15 2013 14:43:33.678,
filtdelay= 0.31 0.30 0.29 0.27 0.36 0.35 6.65 1.05,
filtoffset= -183.41 -183.41 -183.98 -184.32 -185.32 -192.70 -173.01 -170.95,
filtdisp= 15.63 16.57 17.56 18.51 19.45 20.40 21.37 22.33
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="quest-ce-quil-faut-comprendre-là-dedans-"&gt;Qu’est ce qu’il faut comprendre là dedans ?
&lt;/h3&gt;&lt;p&gt;Ce qui va vraiment nous aider à comprendre le souci ici, c’est le code flash, qui peut d’ailleurs vous servir si vous avez d’autres problème de NTP complexes à débuguer :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;The flash status word is displayed by the ntpq program rv command. It consists of a number of bits coded in hexadecimal as follows:
Code Tag Message Description
0001 TEST1 pkt_dup duplicate packet
0002 TEST2 pkt_bogus bogus packet
0004 TEST3 pkt_unsync server not synchronized
0008 TEST4 pkt_denied access denied
0010 TEST5 pkt_auth authentication failure
0020 TEST6 pkt_stratum invalid leap or stratum
0040 TEST7 pkt_header header distance exceeded
0080 TEST8 pkt_autokey Autokey sequence error
0100 TEST9 pkt_crypto Autokey protocol error
0200 TEST10 peer_stratum invalid header or stratum
0400 TEST11 peer_dist distance threshold exceeded
0800 TEST12 peer_loop synchronization loop
1000 TEST13 peer_unreach unreachable or nonselect
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ici, &lt;strong&gt;400 peer_dist&lt;/strong&gt; signifie que le « distance threshold » du serveur Windows (un paramètre à priori arbitraire puisqu’on peut le changer comme on le souhaite) est considéré comme trop important par le client NTP. Il y a donc deux méthodes pour résoudre ce problème :&lt;/p&gt;
&lt;h2 id="les-solutions"&gt;Les solutions
&lt;/h2&gt;&lt;h3 id="côté-linux"&gt;Côté Linux
&lt;/h3&gt;&lt;p&gt;Dans votre configuration NTP, vous pouvez ajouter la ligne suivante, puis redémarrer le client NTP.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/ntp.conf
[...]
tos maxdist 20 #utile pour les serveurs windows qui par défaut on un localclockdisp à 10 secondes par défaut
#sinon le débuging NTP loguera un condition reject sans plus de détails
#Ce paramètre windows est d&amp;#39;ailleurs modifiable avec un w32tm /config /localclockdisp X
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Au bout de quelques secondes il devrait se synchroniser (vous pouvez vérifier avec ntpq -p ou ntpstat)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;watch &amp;#34;ntpq -p&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ntpstat ntp2.mondomaine.com
synchronised to NTP server (111.0.111.13) at stratum 2
time correct to within 10100 ms
polling server every 64 s
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="côté-windows"&gt;Côté Windows
&lt;/h3&gt;&lt;p&gt;A l’inverse, vous pouvez tout à fait décider d’abaisser la dispersion au maximum (sous 3 secondes, je crois que ça fonctionne) sur le serveur Windows.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;w32tm /config /localclockdispersion:3 /update
w32tm /resync /rediscover
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le client Linux devrait alors se montrer plus coopératif&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ntpstat
synchronised to NTP server (111.0.111.147) at stratum 2
time correct to within 3046 ms
polling server every 64 s
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="ressources-utiles"&gt;Ressources utiles
&lt;/h2&gt;&lt;p&gt;Pour en arriver à écrire cet article, je peux vous dire que j’ai passé pas mal de temps à fouiller Internet. Voici l’ensemble des ressources qui m’ont aidé à trouver la solution :&lt;/p&gt;
&lt;p&gt;NTP 4 pour Windows&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://web.archive.org/web/20240119043605/https://www.eecis.udel.edu/~mills/ntp/html/hints/winnt.html" target="_blank" rel="noopener"
&gt;www.eecis.udel.edu/~mills/ntp/html/hints/winnt.html (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Debuguer NTP&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://rags.wordpress.com/2011/10/17/how-to-debug-ntp-issues/" target="_blank" rel="noopener"
&gt;rags.wordpress.com/2011/10/17/how-to-debug-ntp-issues/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://web.archive.org/web/20240918132045/https://www.eecis.udel.edu/~mills/ntp/html/debug.html" target="_blank" rel="noopener"
&gt;www.eecis.udel.edu/~mills/ntp/html/debug.html (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wiki du support NTP officiel&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="http://support.ntp.org/bin/view/Support/ConfiguringNTP" target="_blank" rel="noopener"
&gt;support.ntp.org/bin/view/Support/ConfiguringNTP&lt;/a&gt;
NTP serveur pour Windows (interaction avec Linux)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="http://yadhutony.blogspot.fr/2012/10/ntp-time-server-configuration-in.html" target="_blank" rel="noopener"
&gt;yadhutony.blogspot.fr/2012/10/ntp-time-server-configuration-in.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="http://blog.galsungen.net/?tag=ntp" target="_blank" rel="noopener"
&gt;blog.galsungen.net/?tag=ntp&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class="link" href="http://inf0blog.canalblog.com/archives/2010/07/27/18679194.html" target="_blank" rel="noopener"
&gt;inf0blog.canalblog.com/archives/2010/07/27/18679194.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Codes NTP&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://web.archive.org/web/20150225052251/https://www.eecis.udel.edu/~mills/ntp/html/decode.html#flash" target="_blank" rel="noopener"
&gt;www.eecis.udel.edu/~mills/ntp/html/decode.html#flash (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>