[Spacewalk-list] VMware from spacewalk kickstart

James Hogarth james.hogarth at gmail.com
Fri Dec 18 09:37:40 UTC 2009


After a little head scratching and hiccups I managed to get my vmware guests
kickstarting and including the vmware tools install and config as part of
the kickstart process... using the vmxnet driver.

Testing in our environments has shown the vmxnet driver to be superior and
we wanted to use it on our guests but of course since it isn't part of the
kernel source the guests had to be built with e1000 emulated NICs and then
changed over afterwards....

Seeing that there are probably others in the same situation I thought that
popping the steps I took onto the mailing list would be good for others -
and when I have to do it in 6 months for Centos 5.5 again (or 6) I can
search this list for the instructions ;)

This should work in any rpm based kickstartable distrobution but was tested
on Centos 5.4 x86_64.

First you will need a reference system with VMwareTools already installed
onto in order to get the kernel module and check the PCI IDs your modules
are.

>From the PXE or kickstart ISO you are using unpack your initrd to a work
directory....

mkdir /tmp/work
cd /tmp/work
cp /mnt/dvd/images/pxeboot/initrd.img .
mkdir initrd
cd initrd
zcat ../initrd.img | cpio -id

On the reference PC check the PCI ID for your modules....


lspci | grep -i -E 'vmware.*ethernet|ethernet.*vmware'


It will look something like:


00:11.0 Ethernet controller: VMware VMXNET Ethernet Controller (rev 10)


Next get the full vendor/product ID for the driver where the PCI ID is
00:11.0 in the example above.


lspci -n | grep -i  '15ad'


Look for the line matching the PCI ID found above and make a note of the
product ID...

The example from my case is:

lspci -n00:11.0 0200: 15ad:0720 (rev 10) | grep -i  '15ad'


Where the vendor ID can be seen as 15ad and the product ID to make a note of
is above is 0720

Next we need to expand the modules cpio archive to add our vmware module to
it.

mkdir /tmp/work/modules
cd /tmp/work/modules
zcat ../initrd/modules/modules.cgz  | cpio -id
cd /tmp/work/modules/2.6.*/x86_64
cp /lib/modules/`uname -r`/misc/vmxnet*.ko .
chmod 744 vmxnet*

Depending on the version of VMwareToosl you have you may have separate
vmxnet.o and vmxnet.ko modules in /lib/modules/`uname -r`/misc - and you may
also jave vmxnet and vmxnet3 modules.... For the 2.6 kernel you will need
the vmxnet*.ko modules. If your module is symlinked to the .o version (as in
my case) make sure you grab the actual file ;)

Next pack back up the modules cpio archive....

cd /tmp/work/modules
find . | cpio -o -H crc | gzip -9 > /tmp/work/initrd/modules/modules.cgz


Note that the type is crc here....

Next we need to tell our kernel/initrd about our new modules....

cd /tmp/work/initrd/modules
vi pci.ids


Look for the section with the vmware vendor ID of 15ad and add your ethernet
modules to this... for reference here is my part of that file after the
addition:

15ad  VMware
        0405  SVGA II Adapter
        0710  SVGA Adapter
        0720  VMware VMXNET Ethernet Controller (rev 10)


Note that you might need the vmxnet3 driver added too depending on your
version of VMwareTools....

Next append to the initrd modules-info alias info....

vmxnet
        eth
        "VMware VMXNET Ethernet Controller (rev 10)"

Remember to add a vmxnet3 section if required... On the reference system get
the entries required for the modules.alias file....

grep vmxnet /lib/modules/2.6.18-164.6.1.el5/modules.alias
alias pci:v000015ADd00000720sv*sd*bc*sc*i* vmxnet
alias pci:v00001022d00002000sv*sd*bc*sc*i* vmxnet


Append these to the modules.alias file in /tmp/work/initrd/modules

Next pack all this back up....

cd /tmp/work/initrd
find . | cpio -o -H newc | gzip -9 > /tmp/work/initrd.img.vmxnet


Copy this initrd.img file to your PXE tree or ISO or however you want to use
this (renaming it if need be)...

That's the hard work done and that will allow a kickstart of the system
using the vmxnet network driver instead of the e1000 driver. But that is
only good for the kickstart itself this next final bit is to allow the
system to still have a network interface after the kickstart is over....

On the spacewalk server create a post script for your kickstart containing
something like the following:

/usr/bin/yum install -y --nogpgcheck VMwareTools
sed -i -e '/^\#.*$/d' -e '/^HWADDR=.*$/d'
/etc/sysconfig/network-scripts/ifcfg-eth0
echo "rkernel=`uname -r`
if [ -e /etc/vmware-tools/not_configured ]; then
    echo "vmware-tools not configured for running kernel $rkernel"
    echo "running vmware-config-tools.pl"
    /usr/bin/vmware-config-tools.pl -d
    echo "vmware-tools now compiled for running kernel $rkernel"
    echo "restarting system"
    reboot
fi" >> /etc/rc.local

This assumes that the VMwareToosl rpm is somewhere in your channels. It
removes any comments from the ifcfg-eth0 file and removes the HWADDR
restriction so that the system doesn't rename it to ifcfg-eth0.bak or
somesuch on changes to network interface - this was valid for Centos 5.4
YMMV.... The rc.local addition is important as
vmware-tools-config.pldetects module to install based on the running
kernel - this is of course
different in the kickstart. This will also allow a kernel upgrade and if
need be the system will auto-configure on next boot. The reboot is there to
ensure that any network services etc or any dependencies on network/vmware
running during start up are met.

Hope this is helpful to someone apart from me next distro update ;)

James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/spacewalk-list/attachments/20091218/102ac3c6/attachment.htm>


More information about the Spacewalk-list mailing list