Jumpstart from OSX
I recently built a new file server on which I planned to install Solaris 10 10/08. I’m not a fan of CD/DVD installs, so wanted to jumpstart via PXE, though I only had OSX handy.
Here’s how I installed my new machine (gromit.adsl.perkin.org.uk/192.168.1.10) from my iMac (192.168.1.30) over the local network.
Note that since writing this piece I’ve updated to Solaris 10 10/09, and have changed the examples to use that instead.
Step 1, Prepare File System
First off, create a dedicated file system which we can export our jumpstart configuration from. You can probably skip this and just use any existing file system but this way everything is self-contained and we avoid NFS exporting more than we need.
We use HFSX to ensure that the file system is case sensitive, HFS+ can cause
problems with pkgadd(1M)
.
Next up, download and mount sol-10-u8-ga-x86-dvd.iso
.
Step 2, NFS
Share /install
and the DVD via NFS with the correct options. -alldirs
allows clients to mount from any point within that file system (which jumpstart
requires), and -maproot=root
is also required by jumpstart. As this allows
root-owned files to be created, make sure you understand the security risks.
Step 3, DHCP
For DHCP I happen to already use my Cisco router as a DHCP server on the local network, so added the following configuration:
however, given this is a guide for setting everything up under OSX I also tried using ISC DHCP on OSX to prove it can be done that way too.
I used pkgsrc to install it (I’ll add another blog some time showing how to set up pkgsrc)
And here is my DHCP configuration file in full:
Finally, start DHCP with:
Most parts of these configurations should be self-explanatory. The
/boot/grub/pxegrub
entry is important for our next step, and I’d recommend
using that exact pathname for reasons explained later.
Step 4, TFTP
Now, enable the TFTP server which comes with OSX. I added the -s
option so
tftpd would chroot to the tftpboot directory, both for security reasons and
also to ensure that paths specified as /path/to/file
would work correctly
(relative to /install/tftpboot
).
I also changed the location of the tftpboot directory so that everything was self-contained within the UFS image. In previous attempts I didn’t do this and ran into problems with GRUB which I think are again caused by case-insensitive file systems.
You can then create a test file and check that it’s working as you expect, using:
Step 5, GRUB
Next up, configure PXE booting using GRUB. We need to copy the GRUB images and configuration from the Solaris install DVD then modify it for our environment:
As we are copying the boot files from the DVD, they come hardcoded with
particular pathnames to e.g. the menu.lst
file. While it may be possible to
pass extra parameters to pxegrub and load this from a different path, I simply
recommend doing as I do and replicating the /boot/grub/
path structure so
that everything Just Works.
The menu.lst
file includes kernel arguments and allows you to choose which
type of install to perform at startup. My file listed below has 3 choices:
- Unattended install using a graphical environment (if available). The “install” keyword after the kernel instructs it to perform an unattended install, so long as it can find the necessary settings from sysidcfg etc.
- As above, but force the use of the console and do not start a graphical environment (using the “nowin” keyword)
- A manual install, so you need to go through the steps of layout out disks, selecting packages, etc.
Anyone used to doing jumpstart but with RARP/bootparams will notice the
symmetry between install_config
etc in the GRUB configuration and similar
options in /etc/bootparams
. Make sure that the full kernel arguments are all
on one line, and that there are no spaces in between the
install_media=..,sysid_config=..
options.
Step 6, Jumpstart
Finally, set up your Jumpstart configuration. Here’s what I personally use, you may want something different:
Ordinarily this file is processed using a check
script available in the
jumpstart_sample
directory on the Solaris DVD, however this only works from a
Solaris host. To create the rules.ok
file, we need to strip out any comments
and put entries on one line, then create the checksum (although this isn’t
actually necessary).
Machine profile. This gives me a full Solaris install (minus OEM stuff) on mirrored ZFS disks with additional dump/swap space (the defaults made dump a bit too small I found).
Step 7, Make A Cup Of Tea
With everything set up you should be able to enable PXE booting in your BIOS and watch it automatically install. One small minor problem you may have if you don’t have a BIOS which allows you to hit F12 or similar and choose PXE booting for one boot only is that it will infinitely cycle through installing, rebooting, installing, rebooting.. until you change your boot options.
If this happens, I recommend making more cups of tea until you happen to return in time to change the BIOS settings. If you aren’t able to do this for a while, you may need to add the extra steps 8, 9 and 10 titled “Visit The Bathroom”.
All Posts
- 16 Jul 2015 » Reducing RAM usage in pkgin
- 03 Mar 2015 » pkgsrc-2014Q4: LTS, signed packages, and more
- 06 Oct 2014 » Building packages at scale
- 04 Dec 2013 » A node.js-powered 8-bit CPU - part four
- 03 Dec 2013 » A node.js-powered 8-bit CPU - part three
- 02 Dec 2013 » A node.js-powered 8-bit CPU - part two
- 01 Dec 2013 » A node.js-powered 8-bit CPU - part one
- 21 Nov 2013 » MDB support for Go
- 30 Jul 2013 » What's new in pkgsrc-2013Q2
- 24 Jul 2013 » Distributed chrooted pkgsrc bulk builds
- 07 Jun 2013 » pkgsrc on SmartOS - creating new packages
- 15 Apr 2013 » What's new in pkgsrc-2013Q1
- 19 Mar 2013 » Installing SVR4 packages on SmartOS
- 27 Feb 2013 » SmartOS is Not GNU/Linux
- 18 Feb 2013 » SmartOS development preview dataset
- 17 Jan 2013 » pkgsrc on SmartOS - fixing broken builds
- 15 Jan 2013 » pkgsrc on SmartOS - zone creation and basic builds
- 10 Jan 2013 » Multi-architecture package support in SmartOS
- 09 Jan 2013 » Solaris portability - cfmakeraw()
- 08 Jan 2013 » Solaris portability - flock()
- 06 Jan 2013 » pkgsrc-2012Q4 illumos packages now available
- 23 Nov 2012 » SmartOS and the global zone
- 24 Oct 2012 » Setting up Samba on SmartOS
- 10 Oct 2012 » pkgsrc-2012Q3 packages for illumos
- 23 Aug 2012 » Creating local SmartOS packages
- 10 Jul 2012 » 7,000 binary packages for OSX Lion
- 09 Jul 2012 » 9,000 packages for SmartOS and illumos
- 07 May 2012 » Goodbye Oracle, Hello Joyent!
- 13 Apr 2012 » SmartOS global zone tweaks
- 12 Apr 2012 » Automated VirtualBox SmartOS installs
- 30 Mar 2012 » iptables script for Debian / Ubuntu
- 20 Feb 2012 » New site design
- 11 Jan 2012 » Set up anonymous FTP upload on Oracle Linux
- 09 Jan 2012 » Kickstart Oracle Linux in VirtualBox
- 09 Jan 2012 » Kickstart Oracle Linux from Ubuntu
- 22 Dec 2011 » Last day at MySQL
- 15 Dec 2011 » Installing OpenBSD with softraid
- 21 Sep 2011 » Create VirtualBox VM from the command line
- 14 Sep 2011 » Creating chroots for fun and MySQL testing
- 30 Jun 2011 » Graphing memory usage during an MTR run
- 29 Jun 2011 » Fix input box keybindings in Firefox
- 24 Jun 2011 » How to lose weight
- 23 Jun 2011 » How to fix stdio buffering
- 13 Jun 2011 » Serving multiple DNS search domains in IOS DHCP
- 13 Jun 2011 » Fix Firefox URL double click behaviour
- 20 Apr 2011 » SSH via HTTP proxy in OSX
- 09 Nov 2010 » How to build MySQL releases
- 29 Apr 2010 » 'apt-get' and 5,000 packages for Solaris10/x86
- 16 Sep 2009 » ZFS and NFS vs OSX
- 12 Sep 2009 » pkgsrc on Solaris
- 09 Dec 2008 » Jumpstart from OSX
- 31 Dec 2007 » Set up local caching DNS server on OSX 10.4