Nevada PXE Boot Install from VMware Fusion Guest
August 31st, 2007 by Lou
I have added a V60x to my lab and want to jumpstart it rather than futz with DVDs. I wanted to have a jumpstart server on my Mac laptop, in a VMware Fusion guest, for portable use. I wanted my jumpstart images on a ZFS share, both to ease the NFS configuration and to allow me to move the jumpstart bits around my network with the ZFS commands later if I wanted to. To recap, my requirements were to
- Jumpstart from a VMware Fusion guest running Solaris Nevada
- The jumpstart bits need to be in an NFS shared ZFS filesystem
- The setup must use my existing Ubuntu DHCP server
- I don’t want physical DVDs, floppies or CDs in the equation
So, when done, my setup consists of the following machines:
- My Mac laptop with a VMware Fusion guest running a jumpstart server on Solaris Nevada
- My network DHCP server configured with the PXE parameters
- My target V60x, booting the install served by the laptop
I haven’t found any step-by-step examples directly applicable to my setup integrating all this, particularly the bit where I need to use a non-Solaris DHCP server. My DHCP server is on Ubuntu. The instructions are all out there, but getting it all put together was a bit confusing.
I could possibly have set up DHCP on the Nevada guest on my laptop, but I was afraid of some manner of conflict with my existing DHCP server. What happens when you run two DHCP servers on the same network? It can’t be good.
The steps are as follows:
- Set up an "install server" with "setup_install_server" from a Nevada iso image
- Add the parameters for the V60x I want to jumpstart using "add_install_client"
- Modify my DHCP server configuration
- Network boot the V60x
Of course, the first thing to do is download the OpenSolaris DVD iso to the Mac. After downloading, unzipping and concatenating the pieces, I used this image to create a Fusion Nevada guest on my laptop. With build 70, currently the latest, this is pretty straightforward, and the VMware tools install without a hitch. You need to configure the Nevada VM with bridged ethernet and a static IP address.
Once this is done, and the Nevada guest VM is booted, the next step is to make the VM jumpstart server. Before this, though, we should create a ZFS filesystem for the bits. In my case, I added another virtual SCSI disk to the VM and created a zpool. After a manadatory paranoia check using "format" to make sure I’m using the right device:
zpool create zpool01 /dev/rdsk/c1t1d0
Then we need to create the zfs file system, mountpoint and go ahead and share it read-only. We are creating a jumpstart hierarchy so the various images can be manages separately.
zfs create zpool01/jumpstart
zfs create zpool01/jumpstart/nv70
zfs set mountpoint=/export/jumpstart
zpool01/jumpstart zfs sharenfs=ro,anon=0 zpool01/jumpstart/nv70
Now that we have the storage set up, we can run "setup_install_server". After mounting the DVD iso to the VMware Fusion VM, we change to the "Tools" directory and run "setup_install_server".
cd /cdrom/sol_11_x86/Solaris_11/Tools
./setup_install_server /export/jumpstart/nv70
This copies the DVD contents to the jumpstart image directory. Time for a coffee break. After the copy is complete, we run "add_install_client". You need the MAC address of the NIC you will be booting from. Since I already had an OS on the V60x, I ran ipconfig -a to get this. If its a new machine, you need to gt this from the BIOS setup screens on the machine. The Intel NICs display the MAC address of the NIC during boot, so this may work for you also. In my case, the MAC address of the V60x is "0:7:e9:7:a:8e".
./add_install_client -d -e 0:7:e9:7:a:8e i86pc
This simple command sets up several files on the jumpstart server and returns information you need for configuring the DHCP server:
If not already configured, enable PXE boot by creating
a macro named 010007E9070A8E with:
Boot server IP (BootSrvA) : 192.168.11.133
Boot file (BootFile) : 010007E9070A8E
You should recognize the IP address as the one of the machine you’ve been typing these commands on. In this case, this is the IP address of the Nevada VM on my Mac. We are ready to update teh configuration on the Ubuntu DHCP server. These instructions should work for most Linux DHCP servers. although file locations may differ. The dhcpd.conf on my server is in /etc. Edit this file adding a "group" block following your other configuraiton entries like the following.
ddns-update-style interim;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.0.0 {
option subnet-mask 255.255.0.0;
option routers 192.168.1.1;
range 192.168.1.1 192.168.1.170;
option domain-name-servers 192.168.1.165;
option domain-name "home.louspringer.com";
}
group {
next-server 192.168.11.133;
filename "010007E9070A8E";
host iphigenia {
hardware ethernet 0:7:e9:7:a:8e;
fixed-address 192.168.11.15;
option host-name "iphigenia";
}
}
The hostname of the machine I’m jumpstarting is "iphigenia", and the filename is what we got from running "add_install_client". Their should be a "host" configuration for each server you would like to jumpstart. So far, I have but one.
After this, "pkill -HUP dhcpd" on the DHCP server, and you should be able to reboot the machine you are jumpstarting and PXE boot it. For the V60x, you press F12 on the keyboard as it’s booting. From that point, its a regular Solaris install. As I get better with this, I’ll be adding configurations to fully automate the install and make it completely scripted.
I found several resources to be of help figuring all this out that you can refer to for more details:
Thanks for this very helpful post. I am stuck with a computer without a cdrom drive and want to install solaris on it. I tried to follow this same exact setup but am running into a roadblock - the BootSrvA that add_install_client returns is 127.0.0.1 - and when I boot the computer i want to install solaris to, I get an error (nfs mount 127.0.0.1: RPC: Rpcbind failure: unable to receive). Is there some way I can set the BootSrvA value to be sensible ?
I am by no means a Jumpstart expert, but have this from Thomas Bauer who IMHO is:
“I am not familiar with BootSrvA but as far as IP address go, add_install_client uses whatever name service the system is using (/etc/nsswitch.conf). To simplify things, I often set nsswitch.conf on the jumpstart server so hosts just looks at files. Make sure that the machine you are building is in /etc/hosts and that your local machine has an IP address there.
“The issue here looks like there is the machines name somewhere next to the localhost entry. I have seen this done accidentally I.E. a host file that says 127.0.0.1 localhost sunhost… Where sunhost is the local machines name. This would cause the issue the guy is seeing.
“Let me know if I this isn’t it or if I can help more.”