How to reconstruct Parted Magic ISO through adding packages from Slackware

Estimated Reading Time: 5 minutes

Parted Magic is a complete hard disk management solution.Parted Magic is a small live CD/USB/PXE with its elemental purpose being to partition hard drives. As per the definition on partedmagic.com,

“PartedMagic has the tools to get the job done. With the Partition Editor you can re-size, copy, and move partitions. You can grow or shrink your C: drive. Create space for new operating systems. Attempt data rescue from lost partitions.”

Recently I dirtied my hands on reconstructing Parted Magic ISO through adding packages from Slackware. Here is how I achieved it –

Step-1:

Starting with Parted Magic 5.9 the mkgriso script is provided in the root of the iso. It is recommended to follow the instructions in there and to use that script to recreate the iso.

Follow the below steps:

#mkdir /mnt/cdrom
#mount -o loop pmagic-x.x.iso /mnt/cdrom
#cp -a /mnt/cdrom .
#umount /mnt/cdrom

Step-2: Adding Slackware Packages:

Parted Magic is not Slackware based, but the main tool chain was compiled on Slackware. If you would like to add programs your best bet is to use TXZ packages from Slackware 13.x.

If you would like to add programs, put the txz files in cdrom/pmagic/pmodules directory.Parted Magic will install any packages it finds in the /pmagic/pmodules directory.

The most comprehensive place for Slackware packages is slackbuilds.org. You download the source and a build file which you use to compile the program and make the package. Slackware packages are basically just ordinary compressed tar files.

Let’s download an example build, say apache-maven

ls
PMAGIC_2015_01_13.SQFS  scripts
[root@localhost pmodules]# wget http://slackbuilds.org/slackbuilds/14.1/development/apache-maven.tar.gz
–2015-04-20 05:17:34–  http://slackbuilds.org/slackbuilds/14.1/development/apache-maven.tar.gz
Resolving moxy.us.dell.com (moxy.us.dell.com)… 10.35.178.212
Connecting to moxy.us.dell.com (moxy.us.dell.com)|10.35.178.212|:3128… connected.
Proxy request sent, awaiting response… 200 OK
Length: 2160 (2.1K) [application/x-gzip]
Saving to: ‘apache-maven.tar.gz’

100%[======================================>] 2,160       –.-K/s   in 0s

2015-04-20 05:17:35 (120 MB/s) – ‘apache-maven.tar.gz’ saved [2160/2160]

[root@localhost pmodules]# wget http://archive.apache.org/dist/maven/binaries/apache-maven-3.1.1-bin.tar.gz
–2015-04-20 05:17:43–  http://archive.apache.org/dist/maven/binaries/apache-maven-3.1.1-bin.tar.gz
Proxy request sent, awaiting response… 200 OK
Length: 5494427 (5.2M) [application/x-gzip]
Saving to: ‘apache-maven-3.1.1-bin.tar.gz’

100%[======================================>] 5,494,427    144KB/s   in 43s

2015-04-20 05:18:27 (126 KB/s) – ‘apache-maven-3.1.1-bin.tar.gz’ saved [5494427/5494427]

[root@localhost pmodules]#

#pwd
/mnt/isoss/pmagic/pmodules
[root@localhost pmodules]# ls
PMAGIC_2015_01_13.SQFS  scripts
[root@localhost pmodules]#

So, now we have the following source and builds downloaded

[root@localhost pmodules]# ls
apache-maven-3.1.1-bin.tar.gz  PMAGIC_2015_01_13.SQFS
apache-maven.tar.gz            scripts

Step-3: Remastering the ISO

Now as I have added these sources(packages) into pmodules directory.
Its time to run mkgriso script:

cp -rf mkgriso pmagic-custom/
cp: overwrite ‘pmagic-custom/mkgriso’? y
[root@localhost opt]# ls
GPL  mkgriso  pmagic-custom
[root@localhost opt]# cd pmagic-custom/
[root@localhost pmagic-custom]# ls
boot  EFI  GPL  mkgriso  pmagic  rh
[root@localhost pmagic-custom]# chmod +x mkgriso
[root@localhost pmagic-custom]# ./mkgriso
Warning: creating filesystem that does not conform to ISO-9660.
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage 1.1.11 (Linux)
Scanning .
Scanning ./boot
Scanning ./boot/chntpw
Scanning ./boot/grub
Scanning ./boot/ipxe
Scanning ./boot/memtest
Scanning ./boot/mhdd
Scanning ./boot/plpbt
Scanning ./boot/pxelinux
Scanning ./boot/sgd
Scanning ./boot/syslinux
Scanning ./EFI
Scanning ./EFI/boot
Scanning ./EFI/boot/x86_64-efi
Scanning ./pmagic
Scanning ./pmagic/pmodules
Scanning ./pmagic/pmodules/scripts
Scanning ./rh
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Eltorito Volume Descriptor              Start Block 17
Size of boot image is 4 sectors -> No emulation
Size of boot image is 6600 sectors -> No emulation
Done with: Eltorito Volume Descriptor              Block(s)    1
Writing:   Joliet Volume Descriptor                Start Block 18
Done with: Joliet Volume Descriptor                Block(s)    1
Writing:   End Volume Descriptor                   Start Block 19
Done with: End Volume Descriptor                   Block(s)    1
Writing:   Version block                           Start Block 20
Done with: Version block                           Block(s)    1
Writing:   Path table                              Start Block 21
Done with: Path table                              Block(s)    4
Writing:   Joliet path table                       Start Block 25
Done with: Joliet path table                       Block(s)    4
Writing:   Directory tree                          Start Block 29
Done with: Directory tree                          Block(s)    35
Writing:   Joliet directory tree                   Start Block 64
Done with: Joliet directory tree                   Block(s)    25
Writing:   Directory tree cleanup                  Start Block 89
Done with: Directory tree cleanup                  Block(s)    0
Writing:   Extension record                        Start Block 89
Done with: Extension record                        Block(s)    1
Writing:   The File(s)                             Start Block 90
2.22% done, estimate finish Mon Apr 20 05:41:18 2015
4.44% done, estimate finish Mon Apr 20 05:41:40 2015
6.66% done, estimate finish Mon Apr 20 05:41:33 2015
8.87% done, estimate finish Mon Apr 20 05:41:29 2015
11.09% done, estimate finish Mon Apr 20 05:41:27 2015
13.31% done, estimate finish Mon Apr 20 05:41:33 2015
15.53% done, estimate finish Mon Apr 20 05:41:30 2015
17.75% done, estimate finish Mon Apr 20 05:41:29 2015
19.96% done, estimate finish Mon Apr 20 05:41:28 2015
22.18% done, estimate finish Mon Apr 20 05:41:27 2015
24.40% done, estimate finish Mon Apr 20 05:41:26 2015
26.61% done, estimate finish Mon Apr 20 05:41:25 2015
28.83% done, estimate finish Mon Apr 20 05:41:28 2015
31.05% done, estimate finish Mon Apr 20 05:41:27 2015
33.27% done, estimate finish Mon Apr 20 05:41:27 2015
35.49% done, estimate finish Mon Apr 20 05:41:29 2015
37.70% done, estimate finish Mon Apr 20 05:41:28 2015
39.92% done, estimate finish Mon Apr 20 05:41:28 2015
42.14% done, estimate finish Mon Apr 20 05:41:27 2015
44.36% done, estimate finish Mon Apr 20 05:41:29 2015
46.57% done, estimate finish Mon Apr 20 05:41:28 2015
48.79% done, estimate finish Mon Apr 20 05:41:30 2015
51.01% done, estimate finish Mon Apr 20 05:41:29 2015
53.23% done, estimate finish Mon Apr 20 05:41:31 2015
55.44% done, estimate finish Mon Apr 20 05:41:30 2015
57.66% done, estimate finish Mon Apr 20 05:41:30 2015
59.88% done, estimate finish Mon Apr 20 05:41:29 2015
62.10% done, estimate finish Mon Apr 20 05:41:29 2015
64.31% done, estimate finish Mon Apr 20 05:41:28 2015
66.53% done, estimate finish Mon Apr 20 05:41:30 2015
68.75% done, estimate finish Mon Apr 20 05:41:29 2015
70.97% done, estimate finish Mon Apr 20 05:41:29 2015
73.18% done, estimate finish Mon Apr 20 05:41:28 2015
75.40% done, estimate finish Mon Apr 20 05:41:28 2015
77.62% done, estimate finish Mon Apr 20 05:41:29 2015
79.84% done, estimate finish Mon Apr 20 05:41:29 2015
82.05% done, estimate finish Mon Apr 20 05:41:28 2015
84.27% done, estimate finish Mon Apr 20 05:41:28 2015
86.49% done, estimate finish Mon Apr 20 05:41:29 2015
88.71% done, estimate finish Mon Apr 20 05:41:29 2015
90.92% done, estimate finish Mon Apr 20 05:41:28 2015
93.14% done, estimate finish Mon Apr 20 05:41:29 2015
95.36% done, estimate finish Mon Apr 20 05:41:29 2015
97.58% done, estimate finish Mon Apr 20 05:41:30 2015
99.79% done, estimate finish Mon Apr 20 05:41:30 2015
Total translation table size: 2048
Total rockridge attributes bytes: 29243
Total directory bytes: 69632
Path table size(bytes): 244
Done with: The File(s)                             Block(s)    225233
Writing:   Ending Padblock                         Start Block 225323
Done with: Ending Padblock                         Block(s)    150
Max brk space used 5d000
225473 extents written (440 MB)
>>> /opt/pmagic_2015_01_13T.iso created
[root@localhost pmagic-custom]# ls
boot  EFI  GPL  mkgriso  pmagic  rh
[root@localhost pmagic-custom]# cd ..
[root@localhost opt]# ls
GPL  mkgriso  pmagic_2015_01_13T.iso  pmagic-custom

Hence the pmagic_2015_01_13T.iso is created.

Just mount the ISO and you will see the particular packages and module is loaded. If the module is bind to kernel, you might need to compile the kernel.

Hope it helps !!!

Automating Hyper-V VM deployment & configuration through PowerShell

Estimated Reading Time: 4 minutes

I am not Microsoft guy but recently I have been asked by my colleague to assist him in automating Hyper-V VM provisioning process. There are various resources available on the internet and I was able to bring those scripts together under one hood and was able to automate HyperV role enablement, VM creation process, choose hardware configuration, automate Windows 2k12 installation with static IP, setup AD domain.. all through PowerShell.

Here are the scripts:


Script-1 : vmcreation.ps1


#This script will automatically create 2 Hyper-V Virtual machines.
#Ensure that you have PS version 3.0 installed and Win2k12+ running as a pre-requisite.
#Please change the settings according to your need.

# Variables
$VM1 = “WinVM1”                                        # Name of VM1
$VM2 = “WinVM2”                                        # Name of VM2
$VM1RAM = 6144MB                        # RAM assigned to VM1
$VM2RAM = 6144MB                        # RAM assigned to VM2
$VM1VHD = 80GB                                # Size of Hard-Drive for VM1
$VM2VHD = 40GB                                # Size of Hard-Drive for VM2
$VMLOC = “C:\vhd”                            # Location of the VM and VHDX files
$NetworkSwitch1 = “VirtualSwitch1”
$NEtworkSwitch2 = “Corp”                    # Name of the Corporate Network Switch
$WIN2k12ISO = “C:\ISO\KC7THA00_98B7E2C4_12R2_MUI_STD.iso”               # Windows Server 2012 R2 ISO

# Create VM Folder and Network Switch
MD $VMLOC -ErrorAction SilentlyContinue
$TestSwitch = Get-VMSwitch -Name $NetworkSwitch1 -ErrorAction SilentlyContinue; if ($TestSwitch.Count -EQ 0){New-VMSwitch -Name $NetworkSwitch1 -SwitchType Private}

# Create Virtual Machines
New-VM -Name $VM1 -Path $VMLOC  -NewVHDPath $VMLOC\$VM1.vhdx -MemoryStartupBytes $VM1RAM -NewVHDSizeBytes $VM1VHD -SwitchName $NetworkSwitch1 -Generation 2
New-VM -Name $VM2 -Path $VMLOC  -NewVHDPath $VMLOC\$VM2.vhdx -MemoryStartupBytes $VM2RAM -NewVHDSizeBytes $VM2VHD -SwitchName $NetworkSwitch1 -Generation 2

# Configure Virtual Machines

#Adding DVD Drive to mount ISO

Add-VMDvdDrive -VMName $VM1
Add-VMDvdDrive -VMName $VM2

#Changing Boot Order to FirstBootDevice as DVD

$dvd = Get-VMDvdDrive -VMName $VM1
Set-VMFirmware -VMName $VM1 -FirstBootDevice $dvd
$dvd1 = Get-VMDvdDrive -VMName $VM2
Set-VMFirmware -VMName $VM2 -FirstBootDevice $dvd1

Set-VMDvdDrive -VMName $VM1 -Path $WIN2k12ISO
Set-VMDvdDrive -VMName $VM2 -Path $WIN2k12ISO

#Adding a corporate virtual switch
Add-VMNetworkAdpater -VMName $VM1 -SwitchName $VirtualSwitch2
Add-VMNetworkAdapter -VMName $VM2 -SwitchName $VirtualSwitch2

Start-VM $VM2
Start-VM $VM1


Script2 : Setup_IP_Ethernet.ps1


#A Powershell script to set Static IP for 1st Ethernet port

#Import NetAdapter Module

Import-Module NetAdapter

#Retrieve the network adapter that you want to configure

$netadapter = Get-NetAdapter -Name Ethernet

#Take input from user for network configurations

$ipaddress = Read-Host “Enter the IP for AD Server[e.g.192.168.211.x”
#example $ipaaddress = “192.168.211.20”
$ipprefix = “24”
$ipgw = Read-Host “Enter the Gateway[e.g. 192.168.211.1]”
#ipgw = “192.168.211.1”
$ipdns = Read-Host “Enter the DNS IP[e.g. 192.168.211.20]”
#ipdns = “192.168.211.20”

echo $ipaddress
echo $ipgw
echo $ipdns

#Disable DHCP server
$netadapter | Set-NetIPInterface -DHCP Disabled

#$ipif = (Get-NetAdapter).ifIndex

$netadapter | New-NetIPAddress -AddressFamily IPv4  -IPAddress $ipaddress -PrefixLength $ipprefix -DefaultGateway $ipgw

#Setting up DNS server

Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses $ipdns

#rename the computer
$newname = “delloem”
Rename-Computer -NewName $newname -force
#install features
$featureLogPath = “c:\log\featurelog.txt”
New-Item $featureLogPath -ItemType file -Force
$addsTools = “RSAT-AD-Tools”
Add-WindowsFeature $addsTools
Get-WindowsFeature | Where installed >>$featureLogPath
#restart the computer
Restart-Computer


Script3: Setup_IP_Ethernet2.ps1


#A Powershell script to set Static IP for Ethernet1

#Import NetAdapter Module

Import-Module NetAdapter

#Retrieve the network adapter that you want to configure

$netadapter = Get-NetAdapter -Name Ethernet1

#Take input from user for network configurations

$ipaddress = Read-Host “Enter the IP for AD Server[e.g.10.94.214.x”
#example $ipaaddress = “192.168.211.20”
$ipprefix = “24”
$ipgw = Read-Host “Enter the Gateway[e.g. 10.94.214.1]”
#ipgw = “192.168.211.1”
$ipdns = Read-Host “Enter the DNS IP[e.g. 163.244.180.39]”
#ipdns = “192.168.211.20”

echo $ipaddress
echo $ipgw
echo $ipdns

#Disable DHCP server
$netadapter | Set-NetIPInterface -DHCP Disabled

#$ipif = (Get-NetAdapter).ifIndex

$netadapter | New-NetIPAddress -AddressFamily IPv4  -IPAddress $ipaddress -PrefixLength $ipprefix -DefaultGateway $ipgw

#Setting up DNS server

Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses $ipdns

#rename the computer
$newname = “delloem”
Rename-Computer -NewName $newname -force
#install features
$featureLogPath = “c:\log\featurelog.txt”
New-Item $featureLogPath -ItemType file -Force
$addsTools = “RSAT-AD-Tools”
Add-WindowsFeature $addsTools
Get-WindowsFeature | Where installed >>$featureLogPath
#restart the computer
Restart-Computer


Script4: AD_Domain_setup.ps1


## This script installs Active Directory Domain Services.
#As an example, corp.dell.com is being chosen as a domain which can be changed anytime in the script.
Install-WindowsFeature ‘AD-Domain-Services’ -IncludeAllSubFeature -IncludeManagementTools

# Create New Forest, add Domain Controller
$domainname = ‘corp.dell.com’
$netbiosName = ‘DAADEnviron’
Import-Module ADDSDeployment

$ad_params = @{
CreateDnsDelegation=$false;
DatabasePath=’C:NTDS’;
DomainMode=’Win2012′;
DomainName=$domainname;
DomainNetbiosName=$netbiosName;
ForestMode=’Win2012′;
InstallDns=$true;
NoRebootOnCompletion=$false;
Force=$true;
SafeModeAdministratorPassword=(ConvertTo-SecureString ‘p@$$w0rd12’ -AsPlainText -Force);
}

Install-ADDSForest @ad_params

Script6: Setup_DHCP_DNS.ps1

## Install the bits on the server for DHCP
Install-WindowsFeature ‘DHCP’ -IncludeAllSubFeature -IncludeManagementTools

## Authorize the DHCP server in Active Directory
Add-DhcpServerInDC -DnsName test-dc.test.local -IPAddress 192.168.10.20

## Create an IPv4 DHCP scope
Add-DhcpServerv4Scope -Name ‘Test Scope’ -StartRange ‘192.168.10.100’ -EndRange ‘192.168.10.250’ -SubnetMask ‘255.255.255.0’

## Set the DNS server to use for all clients to use on the DHCP server
Set-DhcpServerv4OptionValue -DnsDomain test.local -DnsServer 192.168.10.20

Building Docker-Ready Virtual Infrastructure through Docker Machine

Estimated Reading Time: 3 minutes

“Is VM passe?” ~ this is an important debate ongoing around the globe among the CEOs, CFOs and CIOs. Most of the industry experts believe that VM is not going to die, atleast for next few decades. An emerging “Hybrid Docker + VM based solution” is gaining momentum among the Enterprise IT.

Docker_mach1  docker_machine

Docker is based on Linux containers, and cannot run Virtual machines. This limitation is crucial when testing applications within the Enterprise world, which today, run primarily on Virtualization. Usually one has to login to vSphere Client or VMware vCenter to create a virtual machine of choice, install Docker engine in the VM post installation and run the service to get started with the images and containers. Docker machine makes this a lot more easy. Just a single command and there you get docker ready VM.

Today evening I quickly grabbed a fresh Ubuntu 14.04.3 machine to try out Docker machine to connect to vSphere 6.0 to setup Docker VM in few minutes. Here is what I did:

Setting up Docker Machine

root@dell-virtual-machine:/home/dell# curl -L

https://github.com/docker/machine/releases/download/v0.5.0/docker-

machine_linux-amd64.zip >machine.zip && \
> unzip machine.zip && \
>     rm machine.zip && \
>     mv docker-machine* /usr/local/bin
% Total    % Received % Xferd  Average Speed   Time    Time     Time

Current
Dload  Upload   Total   Spent    Left  Speed
100   607    0   607    0     0    530      0 –:–:–  0:00:01 –:–:–

544
100 37.3M  100 37.3M    0     0   272k      0  0:02:20  0:02:20 –:–:–

290k
Archive:  machine.zip
inflating: docker-machine
inflating: docker-machine-driver-amazonec2
inflating: docker-machine-driver-azure
inflating: docker-machine-driver-digitalocean
inflating: docker-machine-driver-exoscale
inflating: docker-machine-driver-generic
inflating: docker-machine-driver-google
inflating: docker-machine-driver-hyperv
inflating: docker-machine-driver-none
inflating: docker-machine-driver-openstack
inflating: docker-machine-driver-rackspace
inflating: docker-machine-driver-softlayer
inflating: docker-machine-driver-virtualbox
inflating: docker-machine-driver-vmwarefusion
inflating: docker-machine-driver-vmwarevcloudair
inflating: docker-machine-driver-vmwarevsphere
root@dell-virtual-machine:/home/dell#

Verifying the Docker machine version:

#docker-machine -v
docker-machine version 0.5.0 (04cfa58)

Setting up govc tool:

#wget https://github.com/vmware/govmomi/releases/download/v0.2.0/govc_linux_amd64.gz
#gunzip govc_linux_amd64.gz
#mv govc_linux_amd64 /usr/local/bin/govc
#chmod +x /usr/local/bin/govc

Verify the govc tool:

Verify the govc setup:

root@dell-virtual-machine:~# govc
Usage of govc:
about
datacenter.create
datacenter.destroy
datastore.cp
datastore.download
datastore.info
datastore.ls
datastore.mkdir
datastore.mv
datastore.rm
datastore.upload
device.boot
device.cdrom.add
device.cdrom.eject
device.cdrom.insert
device.connect
device.disconnect
device.floppy.add
device.floppy.eject
device.floppy.insert
device.info
device.ls
device.remove
device.scsi.add
device.serial.add
device.serial.connect
device.serial.disconnect
events
fields.add
fields.ls
fields.rename
fields.rm
fields.set
guest.chmod
guest.download
guest.getenv
guest.kill
guest.ls
guest.mkdir
guest.mktemp
guest.ps
guest.rm
guest.rmdir
guest.start
guest.upload
host.add
host.autostart.add
host.autostart.configure
host.autostart.info
host.autostart.remove
host.esxcli
host.info
host.portgroup.add
host.portgroup.remove
host.vswitch.add
host.vswitch.info
host.vswitch.remove
import.ova
import.ovf
import.spec
import.vmdk
license.add
license.list
license.remove
ls
pool.change
pool.create
pool.destroy
pool.info
version
vm.change
vm.create
vm.destroy
vm.disk.attach
vm.disk.create
vm.info
vm.ip
vm.network.add
vm.network.change
vm.power
vm.question
vm.vnc

That’s it. I am all ready to create VM in my vSphere 6.0 box with Docker ready..

#docker-machine -D create -d vmwarevsphere –vmwarevsphere-vcenter
“10.94.214.184” –vmwarevsphere-cpu-count “2”  –vmwarevsphere-datacenter “HA
proxy” –vmwarevsphere-datastore “datastore1”  –vmwarevsphere-memory-size
“2048” –vmwarevsphere-compute-ip “10.94.214.184” –vmwarevsphere-username
“root” –vmwarevsphere-password “password” –vmwarevsphere-network=”VM
Network” docker-vm4
Docker Machine Version: 0.5.0 (04cfa58)
Found binary path at /usr/local/bin/docker-machine-driver-vmwarevsphere
Launching plugin server for driver vmwarevsphere
Plugin server listening at address 127.0.0.1:40977
() Calling RpcServerDriver.GetVersion
Using API Version 1
() Calling RpcServerDriver.SetConfigRaw
() Calling RpcServerDriver.GetMachineName
(flag-lookup) Calling RpcServerDriver.GetCreateFlags
Making call to close connection to plugin binary
Making call to close driver server
(flag-lookup) Calling RpcServerDriver.Close
Successfully made call to close driver server
Found binary path at /usr/local/bin/docker-machine-driver-vmwarevsphere
Launching plugin server for driver vmwarevsphere
Plugin server listening at address 127.0.0.1:42447
() Calling RpcServerDriver.GetVersion
Using API Version 1
() Calling RpcServerDriver.SetConfigRaw
() Calling RpcServerDriver.GetMachineName
(docker-vm4) Calling RpcServerDriver.GetMachineName
(docker-vm4) Calling RpcServerDriver.DriverName
(docker-vm4) Calling RpcServerDriver.GetCreateFlags
(docker-vm4) Calling RpcServerDriver.SetConfigFromFlags
Running pre-create checks…
(docker-vm4) Calling RpcServerDriver.PreCreateCheck
(docker-vm4) Calling RpcServerDriver.GetConfigRaw
(docker-vm4) Calling RpcServerDriver.GetConfigRaw
Creating machine…
(docker-vm4) Calling RpcServerDriver.Create
(docker-vm4) OUT | Generating SSH Keypair…
(docker-vm4) OUT | Uploading Boot2docker ISO …
(docker-vm4) DBG | govcOutErr executing: govc datastore.ls —
u=root:ca@10.94.214.184 –k=true –ds=datastore1 –dc=HA proxy docker-vm4
(docker-vm4) DBG | govcOutErr executing: govc datastore.mkdir —
u=root:ca@10.94.214.184 –k=true –ds=datastore1 –dc=HA proxy docker-vm4
(docker-vm4) OUT | Creating directory docker-vm4 on datastore datastore1 of
vCenter 10.94.214.184..

Hurray !!! You just got a Docker-ready VM configured on your vSphere box.
Docker Machine just does it so well.