Friday, July 31, 2015

Updating Appliances Offline? Sure!

// This is a guest post by Jeremy (@nakedhitman)


If you are a VMware user that has discovered the joys and simplicity of Virtual Appliances, you have probably run in to applications built on top of VMware Studio's VAMI utilities. VAMI is the background service that provides the administration page for configuring and updating VMware Studio-based appliances.

VAMI is super cool, and supports multiple upgrade methods. In addition to downloading straight from the web, there are options for secure environments to use local repositories and ISO images as your update source. As nice as this is however, there is almost no documentation for making these offline update repositories, and not every product provides an ISO image for offline use. There are a few blog posts out there that provide workarounds, but they are often more effort than they are worth if you have a lot of updates to do. Is there an easier way?

Thanks to the work of William Lam, the necessary steps to make an offline repository were at least well documented. So I set out on a mission to make this process easier, and created the VAMI Update Repository Appliance (or VURA for short). VURA is fairly straightforward. Once deployed, it will display the address of its web interface on the console and from there you can start adding repositories to it.


For every public web repository URL you give it, it will download the repository locally and serve up a mirror for it. It also will optionally create an ISO image that you can attach to your appliances and use as the update source. Once it is loaded up with repositories, you can move the VM to your internal network and use it to serve up updates to your appliances.

Since it is quite likely that multiple repositories will fill up its tiny disk, I wanted to make it easy to expand it as needed. At boot time, it will scan for new disks and automatically partition them for use as storage for the local repositories. If you plan to use this to host many repositories, all you have to do is slap a new disk on it and reboot.

If you find this project useful, please be sure to comment and share!

[contact-form to='' subject='New comment regarding VURA!'][contact-field label='Name' type='name' required='1'/][contact-field label='Email' type='email' required='1'/][contact-field label='Website' type='url'/][contact-field label='Comment' type='textarea' required='1'/][/contact-form]

Thursday, July 23, 2015

Deploying Linux VDI Pools with Horizon 6

LinuxSee the updated version for Horizon 7 here.

Horizon 6 brought us many exciting changes. One of the more memorable ones is the addition of support for certified Linux Guests. At the time of this writing, Horizon 6 supports RHEL 6.6, Ubuntu 12.04, CentOS 6.6, and Neoukylin 6/6U1.

NOTE: newer versions may work just fine, but aren't certified to work. Meaning, if you want VMware Support to back you up, you should probably stick with the versions listed above.

To get started using Linux with your VDI implementation, make sure you have the prereqs:
  • vSphere 5.5 U2 or vSphere 6.0 and later
  • Horizon 6.1.1 or later
  • Horizon Client 3.4 or later
  • Note that Zero and mobile are not supported at this time
For the purposes of this post, we'll be using Ubuntu 12.04 with vSphere 5.5 U2e and Horizon 6.1.1. I'm going to cover building both a manual pool, as well as a bulk linked clone pool.
  1. First, let's build the template VM.

    1. Create a new VM and install Ubuntu 12.04 with 2vCPU and 2GB of RAM

  2. After it's installed, run Ubuntu's Update Manager and get the system fully patched (be sure to decline the 14.04 dist upgrade)

  3. Now we'll install VMware Tools
    1. Right click VM > All vCenter Actions > Guest OS > Install VMware Tools
    2. Click Mount
    3. Once mounted, you should see a folder pop up

    4. I like to copy the VMwareTools-9*.tar.gz file to the Desktop.
      1. Right click the .tar.gz and choose Copy to > Desktop
    5. Right click the .tar.gz on the desktop and choose Extract Here
    6. Open Terminal, change directory into the folder, and run
      To accept defaults, hit Enter for each question unless you understand what you're customizing.

    7. Reboot Ubuntu

  4. Ensure DNS is working to and from the View Connection Server
    DNS DNS-broker

  5. Proceed to building a manual pool or bulk linked clone pool below.

Building a manual Pool

  1. Now we're ready to install the Linux View Agent!

    1. NOTE: if using Windows Server 2012/R2 AD, follow the step 8 on page 11 from this doc

    2. NOTE: if your Ubuntu VM doesn't have internet access, follow step 9 on page 12 from the above doc

  2. Unpack the tar ball, and run -b -d -u -p appropriately:

    1. When the install completes successfully, it should prompt you to reboot or logout

  3. Reboot Ubuntu

  4. Back in the View Admin page, ensure the VM is registered to View

  5. In the View Admin page, create a new Manual Desktop Pool and add the VM.

    1. NOTE: This pool can only contain Linux VMs

Building a bulk Linked Clone pool

Building a Linux linked clone pool is not quite as simple as creating a Windows linked clone pool (yet .. crossing fingers). Essentially we automate the cloning process with PowerCLI, then add the created linked clones to a manual pool within View.

  1. Create a View Administrative user (viewuser) in the Ubuntu Guest OS. This account is dedicated for installing the View Agent.

    1. Settings > User Accounts > Create Admin User

    2. The account will remain disabled until you set a password. Hover your mouse over Password under Login Options and set the password.

    3. Edit /etc/sudoers and add viewuser ALL=(ALL) NOPASSWD:ALLsudoers

  2. Shutdown the VM and take a vCenter Snapshot

  3. Build the guest customization script

    1. From vSphere Web Client Home page, click Rules and Profiles > Customization Specification Manager

    2. Click the Create a New Specification button

    3. Select Linux for the target OS and enter your desired input

      custom-spec-name custom-spec-review

    4. Note the specification name you entered as this will be referenced in your CloneVMs.csv file later

  4. On your PowerCLI machine, create a folder to store the Horizon Linux PowerCLI scripts

  5. Download these three files to your folder (Sometimes my file server is down for maintenance): CloneVMs.csv, CloneVMs.ps1 and InstallAgent.ps1. If you'd rather copy the text from the official VMware docs, you'll want to copy it from the HTML version here. You'll also want to include the Linux Agent installer in your folder for later.

  6. Customize CloneVMs.csv to match the details of your environment - in my file, I'm only building 2 VMs


Once this file is tweaked to match your environment, we can starting running the PowerCLI scripts

  1. Launch PowerCLI and change directory into the folder we created containing the scripts

  2. Invoke the CloneVMs.ps1 script and answer the prompts
    You should start seeing the clones show up in vCenterpowerCLI_linked_creation

  3. Once the linked clones have been created, we'll run the Agent Installation script

  4. If you run into any errors, check out the troubleshooting section below.

  5. Assuming this completes successfully, you should see the machines show up as registered VMs in View Administrator: View Configuration > Registered Machines > Other
    NOTE: at this point you shouldn't see a Pool assigned already like my screenshot. We'll perform that next

  6. Now let's create a manual pool to add our freshly baked Ubuntu Linked Clones

    1. Catalog > Desktop Pools > Add

    2. Select Manual Desktop Pool

    3. Pick your assignment preferences

    4. On Machine Source page, choose Other Sources

    5. After selecting your VMs, don't change the Remote Display Protocol - it needs to be left default.

    6. NOTE: Don't add Windows VMs to this pool, it will cause the Linux machines to become unavailable

  7. Victory! Ensure you're on the latest Horizon Client before connecting

Troubleshooting VM cloning and Agent install

When running the InstallAgent.ps1 script, you see the error 

sudo: no tty present and no askpass program specified
Sorry, try again
:: Double check your sudoers file we edited earlier. There is likely a typo, or the username wasn't entered in all lowercase.

When running InstallAgent.ps1 you see the error
Failed to authenticate with the guest operating system

:: Verify password is correct. Check username is lowercase in script as that's the default case for new accounts

When running InstallAgent.ps1 you see the errorHostname not resolvable, terminating installation
Ensure host is registered with name service or listed in hosts file

:: Ensure your Custom Specification file is properly referenced and the vm naming is correct

View Administrator shows VMs as Agent Unreachable

:: Check out the official troubleshooting doc for this one here.

Wednesday, July 15, 2015

Site relaunch!

Welcome to the new That Virtual Boy blog! I'm excited to relaunch the site with a new domain, new site host, and new authors! Be sure to bookmark the new link ( and check back often!

Follow by Email