{"id":3014,"date":"2021-11-29T07:00:00","date_gmt":"2021-11-29T06:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3014"},"modified":"2021-11-18T14:32:24","modified_gmt":"2021-11-18T13:32:24","slug":"vmware-esxi-vmdk-datei-einer-gast-vm-mit-virt-sysprep-bereinigen","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/vmware-esxi-vmdk-datei-einer-gast-vm-mit-virt-sysprep-bereinigen\/","title":{"rendered":"VMware ESXi: VMDK-Datei einer Gast-VM mit virt-sysprep bereinigen"},"content":{"rendered":"\n<p>Soll eine virtuelle Maschine (VM) als Vorlage (engl. template) f\u00fcr weitere VMs dienen, so ist es in der Regel ausreichend, eine VM mit dem gew\u00fcnschten Betriebssystem zu installieren und zuk\u00fcnftig als Vorlage zu verwenden. Anschlie\u00dfend kann diese VM \u00fcber die Werkzeuge im ESXi-Host- bzw. vSphere-Client geklont werden. Die dabei erzeugte VM kann w\u00e4hrend dieses Vorgangs mithilfe einer Gast-Anpassungsspezifikation angepasst werden, um z.B. einen neuen Hostnamen oder eine abweichende IP-Adresse zu vergeben.<\/p>\n\n\n\n<p>Klont man nach dem beschriebenen Verfahren eine Linux-VM, enth\u00e4lt diese noch die Historie des Originals. So werden z.B. bash-history, crontabs, ssh-hostkeys, ssh-userdirs, etc. vom Original \u00fcbernommen und bestehen in der neuen VM fort. Um dies zu verhindern, sind diese Informationen zuvor aus der VM, welche als Vorlage dient, zu entfernen. Dazu kann man sich eigener Skripte bedienen oder auf das Programm <a href=\"https:\/\/libguestfs.org\/virt-sysprep.1.html\">virt-sysprep<\/a> zur\u00fcckgreifen, welches genau f\u00fcr diese Aufgabe geschaffen wurde.<\/p>\n\n\n\n<p>Im Folgenden dokumentiere exemplarisch, wie man mit virt-sysprep eine VMDK-Datei bearbeiten kann, die im Datenspeicher eines ESXi-Hosts abgelegt ist.<\/p>\n\n\n\n<p><strong>Warnung:<\/strong> Folgende Schritte werden von VMware nicht unterst\u00fctzt. Es besteht die Gefahr des Datenverlusts durch besch\u00e4digte VMDK-Dateien. Wer diesem Tutorial folgt, tut dies auf eigene Gefahr. Zuvor sollte gepr\u00fcft werden, ob ein aktuelles Backup existiert, welches bei Bedarf wiederhergestellt werden kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<p>F\u00fcr dieses Tutorial wird ein Linux-Arbeitsplatz verwendet, auf dem die Pakete <code>libguestfs-tools<\/code> und <code>sshfs<\/code> zu installieren sind.<\/p>\n\n\n\n<p>Die zu bearbeitende VMDK-Datei hei\u00dft in diesem Beispiel vmname-flat.vmdk und liegt im Datenspeicher eines ESXi-Hosts.<\/p>\n\n\n\n<p>Vom Linux-Arbeitsplatz aus kann via SSH auf den Root-Account des ESXi-Hosts zugegriffen werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ein virt-sysprep-wrapper-Skript<\/h2>\n\n\n\n<p>Ich m\u00f6chte auf meine VMDK-Dateien die Standard-Operationen von virt-sysprep, mit Ausnahme der Operation ssh-userdir anwenden (siehe <a href=\"https:\/\/libguestfs.org\/virt-sysprep.1.html#operations\">OPERATIONS<\/a> in virt-sysprep(1)). Dazu habe ich ein kurzes Wrapper-Skript erstellt, welches eine notwendige Umgebungsvariable setzt, den Pfad zur zu bearbeitenden VMDK-Datei als Argument \u00fcbergeben bekommt und die gew\u00fcnschten Operationen darauf ausf\u00fchrt. Das Skript ist im Folgenden dargestellt. Die eigentliche Aktion passiert in den letzten beiden Zeilen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# Author: Joerg Kastning\n# Description:\n# Sysprep RHEL vSphere templates using `virt-sysprep` from `libguestfs-tools`.\n\nusage()\n{\n  cat &lt;&lt; EOF\n  usage: $0 OPTIONS $1\n\n  This script use virt-sysprep to reset, unconfigure or customize a virtual machine so clones can be made (virt-sysprep(1)).\n\n  The path to the file VMNAME-flat.vmdk has to be provided as $1.\n\n  OPTIONS:\n  -h Shows this help message.\nEOF\n}\n\nexport LIBGUESTFS_BACKEND=direct\nvirt-sysprep --operations defaults,-ssh-userdir -a $1<\/code><\/pre>\n\n\n\n<p>Das Skript liegt im Verzeichnis <em>bin<\/em>, im HOME-Verzeichnis meines Benutzers. Damit befindet sich das Skript im <em>PATH<\/em> und kann ohne den vollqualifizierten Pfad aufgerufen werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Der Ablauf<\/h2>\n\n\n\n<p><strong>Wichtig:<\/strong> Die VM, deren VMDK-Datei bearbeitet werden soll, MUSS ausgeschaltet sein.<\/p>\n\n\n\n<p>Zuerst m\u00fcssen die Pakete <code>libguestfs-tools<\/code> und <code>sshfs<\/code> auf dem Linux-Arbeitsplatz installiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo &#91;apt|yum|dnf] install libguestfs-tools sshfs<\/code><\/pre>\n\n\n\n<p>Alle weiteren Schritte werden auf dem Linux-Arbeitsplatz ausgef\u00fchrt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mkdir vmfs\n$ sshfs root@esxi-host.beispiel.de:\/vmfs vmfs\n$ cd vmfs\/pfad\/zum\/verzeichnis\/der\/VM\/\n$ virt-sysprep-wrapper.sh vmname-flat.vmdk\n&#91;   0,0] Examining the guest ...\n&#91;  15,1] Performing \"abrt-data\" ...\n&#91;  15,3] Performing \"backup-files\" ...\n&#91;  24,4] Performing \"bash-history\" ...\n&#91;  24,5] Performing \"blkid-tab\" ...\n&#91;  24,7] Performing \"crash-data\" ...\n&#91;  24,7] Performing \"cron-spool\" ...\n&#91;  24,8] Performing \"dhcp-client-state\" ...\n&#91;  25,0] Performing \"dhcp-server-state\" ...\n&#91;  25,0] Performing \"dovecot-data\" ...\n&#91;  25,0] Performing \"logfiles\" ...\n&#91;  28,2] Performing \"machine-id\" ...\n&#91;  28,3] Performing \"mail-spool\" ...\n&#91;  28,3] Performing \"net-hostname\" ...\n&#91;  28,6] Performing \"net-hwaddr\" ...\n&#91;  28,8] Performing \"pacct-log\" ...\n&#91;  28,9] Performing \"package-manager-cache\" ...\n&#91;  30,5] Performing \"pam-data\" ...\n&#91;  30,5] Performing \"passwd-backups\" ...\n&#91;  30,6] Performing \"puppet-data-log\" ...\n&#91;  30,7] Performing \"rh-subscription-manager\" ...\n&#91;  30,8] Performing \"rhn-systemid\" ...\n&#91;  30,9] Performing \"rpm-db\" ...\n&#91;  31,0] Performing \"samba-db-log\" ...\n&#91;  31,1] Performing \"script\" ...\n&#91;  31,1] Performing \"smolt-uuid\" ...\n&#91;  31,1] Performing \"ssh-hostkeys\" ...\n&#91;  31,2] Performing \"sssd-db-log\" ...\n&#91;  31,3] Performing \"tmp-files\" ...\n&#91;  31,8] Performing \"udev-persistent-net\" ...\n&#91;  31,9] Performing \"utmp\" ...\n&#91;  31,9] Performing \"yum-uuid\" ...\n&#91;  32,0] Performing \"customize\" ...\n&#91;  32,2] Setting a random seed\n&#91;  32,3] Setting the machine ID in \/etc\/machine-id\n&#91;  32,9] Performing \"lvm-uuids\" ...\n$ cd\n$ fusermount -u vmfs<\/code><\/pre>\n\n\n\n<p>Damit ist die VM von ihrer Geschichte befreit und kann nun als bereinigte Vorlage f\u00fcr weitere VMs dienen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quellen und weiterf\u00fchrende Links<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>virt-sysprep &#8211; Reset, unconfigure or customize a virtual machine so clones can be made; <a href=\"https:\/\/libguestfs.org\/virt-sysprep.1.html\">https:\/\/libguestfs.org\/virt-sysprep.1.html<\/a><\/li><li>Tip: Use libguestfs on VMware ESX&nbsp;guests; Richard WM Jones; 2011-05-10; <a href=\"https:\/\/rwmj.wordpress.com\/2011\/05\/10\/tip-use-libguestfs-on-vmware-esx-guests\/\">https:\/\/rwmj.wordpress.com\/2011\/05\/10\/tip-use-libguestfs-on-vmware-esx-guests\/<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Soll eine virtuelle Maschine (VM) als Vorlage (engl. template) f\u00fcr weitere VMs dienen, so ist es in der Regel ausreichend, eine VM mit dem gew\u00fcnschten Betriebssystem zu installieren und zuk\u00fcnftig als Vorlage zu verwenden. Anschlie\u00dfend kann diese VM \u00fcber die Werkzeuge im ESXi-Host- bzw. vSphere-Client geklont werden. Die dabei erzeugte VM kann w\u00e4hrend dieses Vorgangs<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/vmware-esxi-vmdk-datei-einer-gast-vm-mit-virt-sysprep-bereinigen\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[156,662,664,663,121,158],"class_list":["post-3014","post","type-post","status-publish","format-standard","hentry","category-linux","tag-esxi","tag-gast-vm","tag-libguestfs-tools","tag-virt-sysprep","tag-vmdk","tag-vmware"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3014"}],"version-history":[{"count":3,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3014\/revisions"}],"predecessor-version":[{"id":3017,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3014\/revisions\/3017"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}