No more criminals for president. Not this time. Never again.

No more Hillary Clinton - no more fraudI rarely speak out on specific presidential candidates, but I’ve pretty much had enough of this comedy unfolding that we call our political process. With Trump making a complete arse of himself, Ted Cruz saying “we need another war president” and other candidates flat-out lying, making up facts and paying third-party companies to create false campaigns and disinformation on their competition, I’ve had it.

The worst offender? That’s right… Hillary Rodham Clinton. A felon, admittedly breaking dozens of federal laws, and trying to use her fame to erase the legality of those laws. Her campaign continues to build on its own corruption, greed and malice.

Now, after openly admitting she had classified information in the form of emails and attachments, on her own private email server in her home, the State Department is trying to delay the release of those emails until after the Iowa caucus, because the release would be so utterly damaging to her campaign, that she would lose that caucus and have to forego the general election.

But we’re not talking about a few classified emails, we’re talking about 50,000 classified emails. The first wave is to release 9,000 of them, but her campaign wants a 1-month extension, until just after the Iowa numbers are counted, before releasing them. They have the emails now, they’re not going anywhere, so why the delay?

Of course we know why. Because most people don’t know the fraud she’s committing and the federal laws she’s breaking. If this was any citizen in the US population, anyone in the service, active duty military, reservist or retired veteran, they would be put into prison and charged with treason along with other crimes.

I’m still floored that anyone would electively put their vote to this woman to put her into office.

To vote for Hillary Clinton would be a vote against the foundational morals this country was founded upon. It would, quite-literally, be un-American to give her your vote.

You don’t need more reasons than she’s a felon, running for president, but let’s total those crimes, misdeeds, outright deception and lies and see what else she’s done to further hurt this country:

  1. Takes millions in speaking fees from Wall Street while pretending to speak for the little people 1 2 3 4 5 6

  2. Says she doesn't know what Bernie Sanders means by "the establishment", says she's not a part of it 1 2

  3. Transmitted classified intelligence over unsecured channels… 1 2 3 4 5

  4. … then joked during a press conference about wiping her server clean "with a cloth or something" 1

  5. … and laughs off everything she doesn't want to talk about in general 1

  6. … including when she was asked by a reporter whether she would release the transcript from her paid speeches at Goldman Sachs 1

  7. Offered a Vermont newspapers off the record anti-Sanders tips 1 2

  8. Lies about her opponent's health care program 1

  9. Is said, by an ex Wall Street trader with 20 years of experience, to have turned the Democratic Party "from a party against Wall Street to a party of Wall Street" 1

  10. Sends her daughter to lie about her opponent's health care program 1

  11. … and to speak to NYC fundraisers hosted by Wall Street bankers, where attendees can "pay $2700 for a picture" with her 1

  12. Has a son-in-law who is an ex Goldman Sachs investment banker and hedgefund co-founder 1

  13. Voted for the invasion of Iraq 1

  14. Voted for the PATRIOT Act 1

  15. Voted for the 2006 renewal of the PATRIOT Act 1

  16. Questions her older opponent's health while she was hospitalized for a concussion and a blood clot 3 years ago 1

  17. Voted for the 2001 Bankruptcy Legislation which would have made it harder for struggling Americans to declare bankruptcy, after expressing her opposition to the bill when she was First Lady 1

  18. Believed that marriage was defined as between a man and woman and reversed her position only in 2013 when it became politically convenient 1

  19. Received millions in shady donations for her foundation while she was Secretary of State… 1

  20. … the same foundation whose donors got weapons deals when she was Secretary of State 1

  21. Makes her fans wait hours for a five-minute speech… 1

  22. … while she gives closed doors fundraisers for rich donors 1 2 3

  23. Is the first presidential candidate in History to be under investigation by the FBI during a campaign 1 2

  24. Pretends to speak for the black community when she campaigned for Barry Goldwater back in the '60s, who was fighting against civil rights 1

  25. Led a legislative campaign against video games in 2005, by pushing for the Family Entertainment Protection Act, which would have criminalized the sale of games rated "Mature" or "Adults Only" to minors, arguing that "violent video games are stealing the innocence of our children" 1 2 3 4

  26. Doesn't support clemency for Edward Snowden 1

  27. Wants a "Manhattan Project" to break encryption and force tech companies to plant backdoors in their products 1 2 3 4 5 6

  28. Praised the repeal of Glass-Steagall 1

  29. Supported the TPP 1 calling it the "gold standard in trade agreements".

  30. Opposes a carbon tax 1

  31. Took donations from federally registered lobbyists or PACs for private prison companies until October 2015 1

  32. Originally supported the Keystone pipeline, and now says "no comment"

  33. Clinton Slams Sanders' Free College Idea By Invoking Donald Trump's Kids 1

  34. On Marijuana, Hillary Clinton Sides with Big Pharma and gets more money from them than any other candidate 1 and despite naming the pharmaceutical industry as one of her greatest "enemies", has received more money from drug companies than any other candidate 2 3 4 5

  35. No Reporters Allowed At Hillary’s Wall Street Speeches 1

Is that enough? Or do you need more proof?

HOWTO: Run multiple Zwift sessions on the same PC (Windows only)

Zwift LogoMany people have asked me to write this up and I’m happy to be the first person to push Zwift this far with multiple, simultaneous sessions.

I can say with confidence that up to this point, I’m actually the only person who has this working correctly without overwriting or clobbering critical logs and data files. Others have tried some hacky methods, but they all result in instability and data loss (see “What does NOT work, and why” below).

I started this quest because I am working on a product design (“Secret Sauce” to be withheld in this HOWTO) that involves running multiple Zwift sessions on a single, 100% wireless PC, with the only wire being the single power cable to the wall. No USB cables, no video cables, no HDMI cables, no network cables.

Let’s get some general housekeeping out of the way first…

Read the rest of this entry »

HOWTO: Correct and avoid clock skew on Windows and OS X platforms

ntpd-server-statsThis has come up a lot recently in the context of Zwift rides and races, becasue many rider’s PC and Mac gaming rigs are suffering clock skew. In short, it can be defined as:

“Clock skew is when the clock arrives at different points of the circuit at different times due to the distance, capacitance etc which may cause it to malfunction.”

If you want more detailed set of diagrams and explanations describing clock skew, there’s a great discussion on the StackExchange electronics forum about it.

When your machine is suffering from clock skew, you can inadvertently enter a ride or race earlier or later than you meant to do, and your overall finish time can be later than you expect. For races where the winner is separated from the other podium places by mere seconds or less, having an accurate clock matters!

Here’s how to fix it for both Microsoft Windows and Mac OS X platforms!
Read the rest of this entry »

HOWTO: Fully automated Zwift login on Mac OS X

Zwift LogoQuite a few riders on the Facebook Zwift Riders group have expressed an interest in this, so I decided to take a couple of hours, learn AppleScript and knock this out. Done! (if you’re on Windows, you want this other HOWTO instead)

What this code does, is allows you to create a single icon that will log you into Zwift, with no human interaction needed. It will put in your email, password, click the “Start Ride” button and away you go!

This also leverages the OS X Keychain to store your Zwift email address and password, so it’s secure, not leaked into the filesystem and is able to be called on by any other apps that might need it (ahem, like… Zwift itself!) :D

So here’s how to get it working…

First, we need to create a separate keychain to store the Zwift credentials. You could store them in the main keychain, but I’m a fan of credential separation, so let’s use that.

Launch Keychain Access on your Mac (cmd + spacebar, type in “Keychain”).
Mac OS X Keychain Access

You’ll see a number of keychains listed there in the upper-left of Keychain Access. We’re going to create a new one, so go to File -> New Keychain and call it whatever you want.

I called mine “Zwift” so I can remember it when I see it on the filesystem or in the app later. It should default to save in ~/Library/Keychains/. Don’t change this path for now.

When you click “Create”, you’ll be prompted for a password to secure that keychain. Make it something relatively strong if you want to protect your credentials. If you don’t care, make it weak. Click on “Ok” and it will be created and saved.

Creating the Zwift keychain

Now right-click on the new keychain you just created in the list and select “Change Settings for Keychain Zwift”. We’re going to adjust the timeout when you have to re-enter your password to unlock this keychain.

Changing Zwift keychain settings

If you want a fully automated login, where you never have to enter a password or interact with this at all, uncheck both boxes, so it doesn’t lock after inactivity or when your computer goes to sleep.

If you prefer a bit more control/security, change the settings as you see fit.

Mine looks like this:

Zwift keychain timeout settings

Click on “Save” to save those settings.

Next, we need to add an account to the keychain. This will be your Zwift account, the same one you use to log into Zwift itself in the app and on the website. Click the little [+] at the bottom of the Keychain Access window to create a new entry. Here’s what it should look like when you’ve got it filled out correctly:

Creating a new Zwift keychain entry

Click on “Add” to add this entry to the keychain. Now you’ll see one entry in your list.

Zwift keychain user login entry

If you right-click on the entry, you can add some more details to it, but you don’t need to. I left it at the defaults.

Zwift keychain account additional details

Now let’s test that it locks and unlocks properly. Right-click on the keychain in the list on the left side and choose “Lock Keychain Zwift” (do not accidentally choose “Make Keychain Zwift Default”, or you’ll have a bad time)

Locking the Zwift keychain

Once locked, you’ll see the litte padlock icon next to it show “closed”. Right-click again and select “Unlock Keychain Zwift”, put in your password and see that it cleanly unlocks and that the padlock shows “open” next to the name:

Unlocking the Zwift keychain

That’s just about the hardest part of this process. Now on to the code!

I’ve never written a single byte of AppleScript until today, so I decided to give it a shot, learn the language, tried a few early attempts at this storing passwords in the code, then in files I’d read from disk, then encrypted files I’d decrypt, but that was messy. Why reinvent the wheel when OS X already has an encrypted keystore I can use? So I did.

Launch “Automator” (cmd + spacebar) and when prompted, select “Application” and click “Choose” to create one.
Mac OS X Automator
Mac OS X Automator Start screen

You’ll see a blank screen on the right and some macros and variables on the left. Don’t be scared, this is going to be EASY!

In the search dialog in the upper-left area, start typing “AppleScript”. You should see the list of items shorten to only one, as shown here:

Automator with AppleScript

Click that one entry and drag it to the empty canvas area on the right side of the Automator screen. When you let go, you’ll see something that looks like this on the right:

AppleScript starting point

Put your cursor in that window, select all of that default boilerplate and delete it, we’re going to start with a blank script here.

Blank AppleScript script

I’ve already written the code for you, so all you need to do here is cut and paste it into this window. Here’s the code (also available as a downloadable file by clicking this link)

on run {input, parameters}
  set userName to long user name of (system info)                 # User's full name
  set userHome to (system attribute "HOME")                       # User's home directory
  set secBin to "/usr/bin/security"                               # Full path to 'security' binary
  set kcName to "\"Zwift Login\""                                 # Keychain Name
  set kcPath to userHome & "/Library/Keychains/Zwift.keychain"    # Path to where the Zwift keychain lives
  set mySedMess to "sed 's/.*\"acct\"<blob>=\"\\(.*\\)\"/\\1/'"   # A horrible mess of sed. Nuff sed.
  
  # This is ugly, but it's the only way I could find to pull the account name from the Keychain.
  # Don't forget all of those escaping backslashes! (LTS - Leaning Toothpick Syndrome)  
  set zUser to do shell script (secBin & " " & "find-generic-password 2>&1 /dev/null -gs " & kcName & " " & kcPath & " | grep acct | " & mySedMess)
 
  set zPass to do shell script (secBin & " " & "find-generic-password -wa " & zUser & " -gs " & kcName & " " & kcPath)
  
  activate application "Zwift"

  tell application "System Events"
    delay 3                                              # Wait for the login dialog to show up
    set frontmost of process "Zwift" to true             # Force Zwift process to the front
    keystroke tab                                        # Put the cursor into the Email field
    keystroke zUser                                      # Send the username (from above)
    keystroke tab                                        # Jump to the Password field
    keystroke zPass                                      # Send the password
    keystroke return                                     # Press Enter to start the fun!
    
  end tell
  return input
end run

Cut and paste that into the script window (or use the direct link to the file).

At the very top of the file are a couple of minor tunables. Make sure those match what your system and environment are set up with. If you chose a different name for your keychain file for example, you’ll need to change that here. Likewise with the name of the account’s title within that keychain; change that here as well. If you called it “Zwift” and used “Zwift Login” as I did, you don’t need to change anything.

Also, there are some delays built into the script (search for the word ‘delay’). If your system is a bit slower, you may need to increase that delay by a few seconds.

cmd + S to save the script, which should prompt you for a name. I called this one “AutoZwift”, but you can call it whatever you like. This will become its own standalone .app file you can launch from anywhere by double-clicking on it, so feel free to put it wherever you want.

We’re not quite done! Before you close Automator, let’s make sure it works as expected. Click the little “Run” button on the far, upper-right corner of the Automator GUI to test the script. If you got everything correct, you should get no warnings, errors or popup dialog boxes.

Automator Run button

One last thing: Because you’re asking Automator to read events and pass keyboard events into windows owned by other processes, you need to grant Automator the permission and access to do so. To do that, go into your System Preferences -> Security & Privacy and make sure you enable (check the box) Automator to do so:

OS X Security & Privacy

OS X Automator Permissions

Now you should have a fully-automated Zwift login icon with credentials secured by your OS’ built-in encrypted keystore.

Good luck and #RideOn!

(p.s. For those run Zwift on Microsoft Windows, I’ve written a detailed HOWTO for you too! Stay tuned for more great HOWTOs for Zwift!)

HOWTO: Configure Windows to remember Zwift application passwords

Zwift Virtual Gaming Environnent
This will be a quick-n-dirty post to solve a very tactical problem. (if you’re a Mac user, use this other HOWTO I wrote for OS X instead)

This topic has been talked about dozens to hundreds of times in the Zwift Riders Facebook group and on the Zwift Support area through their Feature Request tracker. It’s become enough of an itch, that I decided to write up this post to detail how to “fix” the “problem” (not a Zwift bug, however).

First, make sure you’re using the latest available launcher from the Zwift website. Even if you have Zwift installed and it’s updating itself regularly, the launcher itself does not yet auto-update, so you need to go back to the website from time to time to pull a new version and update that.

Once installed, launch Zwift, and you’ll see a familiar dialog:
Zwift Application Login Dialog

Also, if you right-click on the Zwift icon in the System Tray, you should see the versions of both the Launcher and the Game itself:

Zwift System Tray applet details

If you double-click in the “Email” field of the Zwift login dialog, you should see nothing at all happen. This is what we expect, if your machine is not configured to remember stored passwords. We’re going to fix this in a moment…

Now enter your Zwift login email address and your password, and click “Log In”. When you do, you should see something like this pop up:

Zwift Internet Explorer Remember Passwords Dialog

If you don’t see this pop up at all, it means your machine (through a browser control) is not configured to remember passwords. We’re going to fix this.

If you do see this, you’re in good shape! Just click “Yes” on the dialog and your password will be remembered. You can head straight to “Go” and collect your 200W credit. If you log out and launch Zwift again, double-clicking on the “Email” field should now show you a drop-down with your saved username and password in it.

Back to those who aren’t seeing this dialog, let’s walk through the steps to fix it.

First, close the Zwift login window and then right-click the Zwift applet in the System Tray and select “Exit”.

Now launch Microsoft Internet Explorer. If you don’t use this browser, that’s ok, you may have never launched it before. Is it within this browser that we’re going to tell your OS to start saving your passwords.

Go to Start → Run and type in inetcpl.cpl to launch the Internet Settings Control Panel:

Windows - Start - Run dialog

Internet Settings Control Panel

Once here, click the “Content” tab, and then click “Settings” next to the Auto-complete section:

MSIE Content Settings

Now you’ll see a dialog that looks like the below. Don’t change any checkboxes there, but make sure the two boxes listed “User names and passwords on forms” and “Ask me before saving passwords” is checked, then click on “Delete Autocomplete Content”

MSIE Delete AutoComplete History...

Here, you’ll want to uncheck everything except “Passwords”, as shown here. Note, by changing this, you will be enabling Zwift to prompt you with the dialog to save passwords, but you will also be deleting any saved passwords you may have saved while using MSIE as an actual browser.

The next time you go to websites that you had saved passwords for, you just have to enter them again one time, and it will save them again. Unfortunately, there’s no way for MSIE to delete individual saved passwords, it’s an all-or-nothing ordeal.

MSIE Delete Browsing History Passwords

Now click “Delete” at the bottom to purge that data:

MSIE Delete Saved Passwords

Now if you click “Ok” on your way back to the main settings dialog for MSIE, and close the browser, your work there is done.

Launch Zwift again, put in your username and password, then click “Log In”, and it should prompt you to save your password. If it does, you’ve fixed the issue.

Close Zwift, re-launch it and now double-click the “Email” field in the login dialog, and your previously saved username should now show up there.

Zwift with Saved Passwords

Selecting it from that dropdown should also populate the password field, so you don’t have to type it in. Now you click “Log In”, and you’re done!

Not so painful, right? #RideOn!

2015 Tour de France Stages Mapped and Ready


The 2015 Tour de France is almost here! I did some searching and noticed there aren’t a lot of detailed maps and routes for this year’s Tour yet, as it’s still pretty early. Sooo I decided to start putting the routes together, road by road, turn by turn, lane change by lane change, as close to accurate as I could find them.

I’ll continue to update this blog post with detailed route maps, commentary, links to stage videos and more as more details come in. They’re still early and not 100% locked-down yet, so it’s unclear exactly which roads might be used for some of the later stages (as of 2015-07-01).

Here are the stages for the 2015 Tour de France, the 102nd tour:

July 4, Stage 1: Utrecht, individual time trial, 13.7km

July 5, Stage 2: Utrecht – Zélande, 166km

July 6, Stage 3: Anvers – Huy, 154km

July 7, Stage 4: Seriang – Cambrai, 221km

July 8, Stage 5: Arras – Amiens Métropole, 189km

July 9, Stage 6: Abbeville – Le Havre, 191km

July 10, Stage 7: Livarot – Fougères, 190km

July 11, Stage 8: Rennes – Mûr-de-Bretagne, 719km

July 12, Stage 9: Vannes – Plumelec, team time trial, 28km

July 13, rest day: Pau

July 14, Stage 10: Tarbes – La Pierre Saint-Martin, 167km

July 15, Stage 11: Pau – Cauterets-Vallée de Saint-Savin, 188km

July 16, Stage 12: Lannemazen – Plateau de Beille, 195km

July 17, Stage 13: Muret – Rodez, 200km

July 18, Stage 14: Rodez – Mende – Montée Laurent Jalabert, 178km

July 19, Stage 15: Mende – Valence, 182km

July 20, Stage 16: Bourg-de-Péage – Gap, 201km

July 21, Rest day: Gap/Digne-les-Bains

July 22, Stage 17: Digne-les-Bains – Pra-Loup, 161km

July 23, Stage 18: Gap – Saint-Jean-de-Maurienne, 185km

July 24, Stage 19: Saint-Jean-de-Maurienne – La Toussuire – Les Sybelles, 138km

July 25, Stage 20: Modane Valfréjus – Alpe d’Huez, 110km

July 26, Stage 21: Sèvres – Grand Paris Seine Ouest – Paris Champs-Élysées, 107km

HOWTO: Enable Docker API through firewalld on CentOS 7.x (el7)

centos-dockerPlaying more and more with Docker across multiple Linux distributions has taught me that not all Linux distributions are treated the same.

There’s a discord right now in the Linux community about systemd vs. SysV init. In our example, CentOS 7.x uses systemd, where all system services are spawned and started.

I am using this version of Linux to set up my own Docker lab host for tire-kicking, but it needs some tweaks.

I also wanted to see if I could use the Docker API from my Android phone, using DockerDroid, which (after configuring this) works famously!

Here’s what you need to do:

  1. Log into your CentOS machine and update to the most-current Docker version. The version shipped with CentOS 7 in the repo as I write this post, is “docker-1.3.2-4.el7.centos.x86_64”. You want to be using something more current, and 1.4 is the latest. To fetch that (and preserve your existing version), run the following:
    $ su -
    # cd /bin && mv /bin/docker /bin/docker.el7
    # wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O docker
    # systemctl restart docker
    # exit
    $ 
    

    Now you should have a working Docker with the right version (current). You can verify that:

    $ sudo docker version
    Client version: 1.4.1
    Client API version: 1.16
    Go version (client): go1.3.3
    Git commit (client): 5bc2ff8
    OS/Arch (client): linux/amd64
    Server version: 1.4.1
    Server API version: 1.16
    Go version (server): go1.3.3
    Git commit (server): 5bc2ff8
  2. So far, so good! Now we need to make sure firewalld has a rule to permit this port to be exposed for external connections:
    $ sudo firewall-cmd --zone=public --add-port=4243/tcp --permanent
    $ sudo firewall-cmd --reload
    success
    

    You can verify that this new rule was added, by looking at /etc/firewalld/zones/public.xml, which should now have a line that looks like this:

    <port protocol="tcp" port="4243"/>
  3. Now let’s reconfigure Docker to expose the API to external client connections, by making sure the OPTIONS line in /etc/sysconfig/docker looks like this (note the portion in bold):
    OPTIONS=--selinux-enabled -H fd:// -H tcp://0.0.0.0:4243
    
  4. Restart the Docker service to enact the API on that port (if successful, you will not see any output):
    sudo systemctl restart docker
  5. To test the port locally, install telnet and then try telnet’ing to the port on localhost:
    $ sudo telnet localhost 4243
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
    HTTP/1.1 400 Bad Request
    
    Connection closed by foreign host.

    All looks good so far!

  6. Lastly, install DockerDroid and configure it to talk to your server on this port:

    DockerDroid connecting to CentOS via API

  7. Now you should be able to use DockerDroid to navigate your Images, Containers and API.

    Good luck!

Tuesday Tip: rsync Command to Include Only Specific Files

I find myself using rsync a lot, both for moving data around, for creating backups using rsnapshot (yes, even on Windows!) and for mirroring public Open Source projects and repositories.

I used to create all sorts of filters and scripts to make sure I was getting only the files I wanted and needed, but I found a better way, and it wasn’t exactly intuitive.

--include="*/" --include="*.iso" --exclude="*"

In order for this to work as intended, the “include” patterns have to come before the “excludes”. This is because the very first pattern that matches is the one that gets evaluated. If your intended filename matches the specified exclude pattern first, it gets excluded from the scope.

When dealing with a very large, possibly unknown remote directory structure, you either have to include all of the remote subdirectories individually like this:

--include="/opt" --include="/var" --include="/home"

Or you can use the following syntax to include all directories (not files) in the scope:

--include="*/"

Once you’ve included every directory below your target scope, you can pass the filespec you’re interested in (in this case, I wanted every bootable ISO file from a remote CentOS mirror), and then you exclude everything else that doesn’t match that filespec. It looks like this:

1.) Include every directory:

--include="*/"

2.) Include *.iso as your intended matching scope

--include="*.iso"

3.) Exclude everything else

--exclude="*"

That’s the magic sauce.

Some of these options and the order they appear in may seem very non-intuitive, so please read the rsync documentation carefully paying specific attention to the “EXCLUDE PATTERNS” section of the docs.

When in doubt, always use “–dry-run –stats” to check your work before copying or modifying any data.

Measure twice, cut once.

HOWTO: Run boot2docker in VMware Fusion and ESXi with Shipyard to Manage Your Containers

fbbb494a7eef5f9278c6967b6072ca3eThis took me awhile to piece together, and I had to go direct to the maintainers of several of these components to get clarity on why some things worked, while others did not, even following the explicit instructions. Here, I present the 100% working HOWTO:

I started with a post I found written by someone on the boot2docker project page, describing how to get this working in VMware. But he missed some crucial steps, and the syntax is wrong. Also, Shipyard has gone to a new version, and the method of starting the containers is very different from the steps posted.

Creating the boot2docker VM Instance

First, we need to create a VM inside VMware Fusion and/or ESXi. If you’re using VMware Workstation, the steps are roughly the same, but the screenshots may differ slightly.

You’ll create a new VM, and add two NICs and a single IDE HDD to the VM. Something like 10GB should be fine to hold all of your containers, build scripts and any other persistent data you might need. Follow the screenshots below for some specifics and details. There are a few subtle tweaks you’ll need to maximize your boot2docker VM.

Read the rest of this entry »

SOLVED: Installing VMware Tools in Ubuntu 5.04 under ESXi

It may seem odd, that it’s almost 2015, and I’m writing a post describing how to install VMware Tools inside Ubuntu 5.04, a Linux distribution that was released on April 8th, 2005 and went End of Life on October 31, 2006.

I run a home lab here with a number of test machines (all VMs now), which includes every single major Linux distribution and version. Yes, really. I’ve been going back trying to update all of them to current tools, VMHW versions, NIC drivers and tweaking other things. Among these, were a number of very old Linux distributions who did not support VMware drivers natively (eg: open-vm-tools didn’t exist at that time).

If you run the standard configuration (I run it non-interactive as below)…

# ./vmware-install.pl --clobber-kernel-modules=vmci     \
                      --clobber-kernel-modules=vmxnet3  \ 
                      --clobber-kernel-modules=pvscsi   \
                      --clobber-kernel-modules=vmmemctl \
                      --clobber-kernel-modules=vsock    \ 
                      -d

At some point after the X11 configuration, you’ll see this error displayed:

Creating a new initrd boot image for the kernel.

$Id: mkinitrd,v 1.201 2004/05/16 22:00:48 herbert Exp $

Usage: /usr/sbin/mkinitrd [OPTION]... <-o outfile> [version]

Options:
  -d confdir  Specify an alternative configuration directory.
  -k          Keep temporary directory used to make the image.
  -m command  Set the command to make an initrd image.
  -o outfile  Write to outfile.
  -r root     Override ROOT setting in mkinitrd.conf.

See mkinitrd(8) for further details.
ERROR: "/usr/sbin/mkinitrd" exited with non-zero status.

Your system currently may not have a functioning init image and may not boot
properly.  DO NOT REBOOT!  Please ensure that you have enough free space
available in your /boot directory and run this configuration script again.

Execution aborted.

Found VMware Tools CDROM mounted at /media/cdrom0. Ejecting device /dev/hdc ...

But there’s a one-line fix! Open up “vmware-tools-distrib/bin/vmware-config-tools.pl” in an editor and go down to line 7692, and you’ll see something that looks like this:

      $initmodfile = '/etc/sysconfig/kernel';
      if ($gSystem{'distribution'} eq 'suse') {
          $syscmd = join(' ', $binary, $kernelList, $initrdList);
      } else {
          $syscmd = $binary;
      }

You’ll want to modify that last “$syscmd” line to look as follows:

      $initmodfile = '/etc/sysconfig/kernel';
      if ($gSystem{'distribution'} eq 'suse') {
          $syscmd = join(' ', $binary, $kernelList, $initrdList);
      } else {
          $syscmd = join(' ', $binary, '-o', "/boot/initrd-$kernRel.img", $kernRel);
      }

That will now result in the following successful output:

Creating a new initrd boot image for the kernel.
   Checking acpi hot plug                                              done
Starting VMware Tools services in the virtual machine:
   Switching to guest configuration:                                   done
   Guest operating system daemon:                                      done
The configuration of VMware Tools 9.0.5 build-1065307 for Linux for this
running kernel completed successfully.

You must restart your X session before any mouse or graphics changes take
effect.

You can now run VMware Tools by invoking "/usr/bin/vmware-toolbox-cmd" from the
command line.

To enable advanced X features (e.g., guest resolution fit, drag and drop, and
file and text copy/paste), you will need to do one (or more) of the following:
1. Manually start /usr/bin/vmware-user
2. Log out and log back into your desktop session; and,
3. Restart your X session.

Enjoy,

--the VMware team

Voila! Now you have a successful build of the native VMware modules and can switch your ethernet module to VMXNET3 from E1000 to save a little memory on the ESXi side.

Bad Behavior has blocked 888 access attempts in the last 7 days.