Wednesday, November 18, 2009

Solaris JumpStart Crib Sheet

I don't muck with JumpStart as often as I have in the past. It seems every time that I need to build a new JumpStart server, I spend an hour or two trying to dig up my notes and figure everything out again. In order to save a few future brain cells, I put together this basic crib sheet as a personal reference for one way to setup a basic Solaris JumpStart server using the JumpStart Enterprise Toolkit (a.k.a. jet). Not covered here but also a great complement to JET is the Solaris Security Toolkit. The Solaris Security Toolkit is formerly known as the JumpStart Architecture and Security Scripts (a.k.a. jass).

Lets get started. Here is the outline for setting up a basic JumpStart server using jet.
  1. Find suitable server with sufficient memory and storage.
    1. If installing, install the server with the latest and greatest version of Solaris and apply latest updates. Also, be sure disable all remote services but ssh.
    2. If using an existing server, be sure it is running a recent version of Solaris with the latest patches.
  2. If necessary, delete the default export and export/home zfs filesystems and then create ZPool that will contain everything pertaining to the JumpStart server.
    zfs destroy -r export
    zpool create export raidz c0t1d0 c0t2d0 c0t3d0 c0t4d0 c0t5d0
    mkdir -p /export/install/pkgs /export/install/patches /export/install/media /export/bin /export/bits

    Notes:
    * I like to keep all iso images and various software in /export/bits.
    * I like to keep all my custom scripts in /export/bin.
  3. Download and Install the JET
    pkgadd -d ./SUNWjet.pkg SUNWjet
  4. Add /opt/SUNWjet/bin to the path of the root user
    PATH=$PATH:/opt/SUNWjet/bin; export PATH
  5. Install Solaris install media
    copy_solaris_media [-d target-dir] [-n osname] mediadir
    copy_solaris_media [-d target-dir] [-n osname] -i

    For Example:
    copy_solaris_media -d /export/install/media/S10_2009_06_i86pc -n s10_2009_06_i86pc -i /export/bits sol-10-u8-ga-x86-dvd.iso
  6. make sure that all jumpstart client hostname resolution is either in DNS or in the /etc/hosts file of the JumpStart server in the form of: IP FQDN HostName. For example:
    10.10.0.20 server1.example.com server1
  7. If you plan to jumpstart x64 servers, you will need to setup a DHCP server. Do this with the following steps:
    1. Set JS_DHCP_VENDOR="i86pc" in /opt/SUNWjet/etc/jumpstart.conf
    2. cp /opt/SUNWjet/Products/base_config/solaris/make_dhcp /export/bin/setup_dhcp
    3. Edit /export/setup_dhcp and set the appropriate values for the following variables:
      NETWORK=
      NETMASK=
      ROUTER=
    4. Set execution permissions on the script: chmod 700 /export/setup_dhcp
    5. Run the DHCP setup script: /export/bin/setup_dhcp
  8. Make a JumpStart client template:
    /opt/SUNWjet/bin/make_template server1
  9. Edit the new template and configure to your liking.
    # vi /opt/SUNWjet/Templates/server1

    Minimum variables for an x64 server include the following:
    base_config_ClientArch=i86pc
    base_config_ClientEther=00:08:1c:63:12:e9
    base_config_ClientOS=s10_2009_06_i86pc
    base_config_client_allocation="dhcp"

    Optional variables that I often configure.

    base_config_x86_safetoreboot="yes" # If PXE boot is one time event.
    base_config_profile_cluster=SUNWCall # I prefer to install everything.
    base_config_nodename="server1" # The nodename is often different than the jumpstart hostname.
    base_config_defaultrouter="192.168.44.1"
    base_config_notrouter="true"
    base_config_dns_domain="thezonemanager.com"
    base_config_dns_nameservers="151.164.1.8 151.164.11.201"
    base_config_networkifs="e1000g0 e1000g1"
    base_config_networkif_e1000g0="admin 255.255.255.0 server1z 10.10.0.41"
    base_config_networkif_e1000g1="public 255.255.255.0 server1 192.168.44.41"
  10. Configure the build environment for this client. May need to use -F if updating the client.
    # make_client server1
  11. Start the JumpStart build of the client.
    For Sparc: ok boot net - install
    For x86/64: Force a PXE boot (Often just hitting F12 on the keyboard of the client during boot)
Once you have a good working template, you can use that template as the basis of other new templates with the -T . For example, I made a new template server1 based on a former template sever2 with the following command:
make_template -T server1 server2


Once you have the basic JumpStart working, you can then add your own custom files and scripts and placing them in /opt/SUNWjet/Clients/common.files of the JumpStart server. You can use variables like custom_scripts_1, custom_scripts_m, and custom_scripts_n within the JET template file to specify what scripts and when to run them.

That is it!

Enjoy!


Brad