Back to the main page

Jumpstart server setup - for x86 client

Note again: this is only if you want to configure Jumpstart server for x86 clients. 

So let's first do quick introduction about JumpStart Server. 

It consists of three servers (yes, all can be in one machine): 

1.  Boot  (provides RARP, TFTP and bootparam services)
2.  Configuration  (specifies client's profile, list of software, begin and finish scripts)
3.  Install Server  (provides OS/software to be installed on a client) 

Basically next tasks are necessary for setting up jumpstart server: 

1. Installing Solaris OS distribution 
2. Setup configuration server with configuration files, and verify them (config file syntax) 
3. Share installation directories (NFS server is running, right?) 
4. Make sure client has access  

 Installing OS distribution 

Mount Solaris OS DVD ISO image,  see how .

And install the server (yes in designated location, like /jumpstart/server/x86). 

# /mnt/Solaris_10/Tools> ./setup_install_server /jumpstart/server/x86 
Verifying target directory...
Calculating the required disk space for the Solaris_10 product
Calculating space required for the installation boot image
Copying the CD image to disk...
Copying Install Boot Image hierarchy...
Copying /boot netboot hierarchy...
Install Server setup complete
Making Configuration server You need: 1. profile text file (defines software to be installed) 2. rules text file (defines rules/steps for install) 3. scripts for pre and post install tasks 4. sysidcfg (configuration information) Note: Sun provides 'check' script that you run to verify rule file, if everything okay, script will generate rules.ok file. Basically this works like: 1. Jumpstart reads rules.ok file 2. Jumpstart finds profile in rules.ok and use it for installation 3. If rule(s) doesn't match, regular interactive installation occurs. Profile file This file defines how to install software. Check Sun docs for many profiles' keywords/values. Example of profile with comments:
# keyword		value
# ============================

# Keyword install_type is MANDATORY
install_type    initial_install

# If system_type omitted, standalone will be also used
system_type     standalone

# Cluster is collection of packages that makes functional unit. 
# Meta-cluster is collection of clusters and packages that creates configuration.
# They are listed in /mnt/Solaris_10/Product/.clustertoc file.
# If add/delete is not specified, add is used 
cluster SUNWCreq
cluster	SUNWCdhcp       add
cluster SUNWC-name      add  nfs server:/servername/path

# fdisk directive is MUST for x86 client !!!!
fdisk          all     solaris all

# partitioning - Defines how disk is divided in slices
# Must be combined with keyword filesys
partitioning    explicit
filesys         rootdisk.s0     4096    /
filesys         rootdisk.s1     4096    swap
filesys         rootdisk.s3     4096    /var
filesys         rootdisk.s4     4096   /usr
filesys         rootdisk.s5     free    /backup
filesys         rootdisk.s7     256
Notes about fdisk directive in profile file (only for x86 client): The fdisk is partition of the disk that is dedicated to particular OS. It must be at least one fdisk partition on x86 system for Solaris to be installed. The x86 system allows max 4 fdisk partitions. But only one Solaris fdisk partition can be per physical disk. So what fdisk all solaris all does? fdisk = defines how fdisk partitions are setup on x86 system all = this should be disk name, so do it on all disks solaris = this is type of OS all = this is size, so fdisk partition will take whole disk Rules file Example of the file, use && (logical AND) to join keywords/values in same rule:
# rules keyword & values   begin script  profile    finish script
#-----------------------------------------------------------------
hostname unixlab && arch i386   -    profile     finish_script
And verify the rules file:
/jumpstart/config/client_hostname # ./check
Validating rules...
Validating profile profile...
The custom JumpStart configuration is ok.
Note: check Sun docs for other rule's keywords/values. Begin (Bourne shell) script Here you place action to be performed before Solaris software is installed. After installation, logs will be in /var/sadm/system/logs/begin.log Finish (Bourne shell) script This performs action after Solaris software is installed but before system reboots. It's ideal for installing third party software, setting root's password, etc. After installation, logs will be in /var/sadm/system/logs/finish.log Note that file system remains mounted on /a until system reboots. File sysidcfg The sysidcfg file defines system identification, like system locale, time zone, terminal, nameservices, net interface, root password, etc. See 'man sysidcfg'. Share installation directories Add line to /etc/dfs/dfstab file
share -F nfs -o ro,anon=0 -d "Jumpstart_Share" /jumpstart
Share directory:
# shareall
Check results:
# showmount -e localhost
export list for localhost:
/jumpstart (everyone)
Secure client's access Have client's hostname and IP in /etc/hosts file. Add client (run command without arguments to see help output)
# /jumpstart/server/x86/Solaris_10/Tools> ./add_install_client
ERROR: Either client name or client platform group is not specified.
Usage: ./add_install_client [-i ipaddr] [-e ethernetid] [-s server:path]
                [-c server:path] [-p server:path]
                [-n [name_server]:name_service[(netmask)]]
                [-t install boot image path] client_name platform_group

DHCP clients:
       ./add_install_client -d [-s server:path] [-c server:path]
                [-p server:path] [-t install boot image path]
                [-f boot file name] platform_name platform_group
       ./add_install_client -d -e ethernetid [-s server:path]
                [-b "property=value"] (i86pc platform only)
                [-c server:path] [-p server:path]
                [-t install boot image path] [-f boot file name]
                platform_group
Example (DHCP client):
./add_install_client -d -e xx:xx:xx:xx:xx:xx \  (-d = client will use DHCP)
-s servername:/jumpstart/server/x86/5.10 \	(-s = location of distribution)
-c servername:/jumpstart/config/clientname \	(-c = location of client's configuration directory)
-p servername:/jumpstart/config/clientname \	(-p = location of client's sysidcfg file)
i86pc						(i86pc = correct, this is platform group)
Expect similar output:
If not already configured, enable PXE boot by creating
a macro named 0100144F017EE8 with:    (macro name is 01+Client_MAC, which is 00:14:4F:01:7E:E8) 
  Boot server IP (BootSrvA) : 192.168.etc.etc   (IP of my jumpstart server) 
  Boot file      (BootFile) : 0100144F017EE8
Next files appear in /tftpboot directory:
rm.0100144F017EE8 (shell script - cleanup file for 00:14:4F:01:7E:E8)
menu.lst.0100144F017EE8 (check this ascii file)
nbp.0100144F017EE8 -> pxegrub.I86PC.Solaris_10-1
0100144F017EE8 -> pxegrub.I86PC.Solaris_10-1
pxegrub.I86PC.Solaris_10-1 (this is "inetboot" file for x86 client)
The file menu.lst.0100144F017EE8 needs verification and maybe some additional editing. It looks like:
default=0
timeout=30
title Solaris_10 Jumpstart for your_hostname!
        kernel /I86PC.Solaris_10-1/multiboot kernel/unix - install dhcp -B console=ttya,install_config=192.168.x.x:/jumpstart/config/your_hostname,sysid_config=192.168.x.x:/jumpstart/config/your_hostname,install_media=192.168.x.x:/jumpstart/distrib/x86/5.10,install_boot=192.168.28.x:/jumpstart/distrib/x86/5.10/boot
        module /I86PC.Solaris_10-1/x86.miniroot
The important thing here is to verify that you have - install dhcp after kernel/unix and console=ttya, right in front of install_config.

DHCP and Jump Start

Okay, since we are installing OS on x86 client, we'll have to bring DHCP server into the game. 

Client get network configuration from DHCP server during booting.

DHCP (or jumpstart server) doesn't need to be on same subnet as client, since client doesn't send RARP request for IP. 
Instead it is broadcasting dhcpdiscover request and yes, modern routers support dhcp relays. 

My jumpstart/dhcp server is Solaris 10. 

DHCP server macros are group of options having info like boot server name, path to boot and install image, etc. 
This is stored in  /var/dhcp/SUNWfiles1_dhcptab  file.  Use command  dhtadm  to edit this file. 

Information with clients IP/MAC, etc (all clients in one subnet) is stored in  /var/dhcp/SUNWfiles1_xxx_xxx_xxx_xxx  file (something like SUNWfiles1_192_168_15_0).  
Use command  pntadm  to edit this file. 

Start DHCP:

#svcadm -v enable svc:/network/dhcp-server:default
svc:/network/dhcp-server:default enabled.
Also check file /etc/inet/dhcpsvc.conf
DAEMON_ENABLED=TRUE
RESOURCE=SUNWfiles
RUN_MODE=server
PATH=/var/dhcp
CONVER=1
INTERFACE=eri0  (make sure this is your interface to listen dhcp requests to)
VERBOSE=TRUE (set to TRUE to get error messages in case of debugging)
LOGGING_FACILITY=6
Let's configure DHCP using configuration tool dhcpconfig
# dhcpconfig -D -r SUNWfiles -p /var/dhcp
dhcpconfig: Error - DHCP service is already configured on this server.
Right, it's configured from before, but if not this command will create directory /var/dhcp and populate with files like .SUNWfiles1_dhcptab.lock and SUNWfiles1_dhcptab. The file /etc/inet/dhcpsvc.conf is created and DHCP service started. Example follows.
# dhcpconfig -D -r SUNWfiles -p /var/dhcp
Created DHCP configuration file.
Created dhcptab.
Added "Locale" macro to dhcptab.
Added server macro to dhcptab - servername.
DHCP server started.
-D = configure DHCP -r = specify data resource (SUNWfiles stored data in ASCII files, but hand-editing is still discouraged) -p = specify path where to store config files Check status of DHCP service
# dhcpconfig -S -q
DHCP server enabled.
DHCP server running.
In case you need to add additional subnet:
# dhcpconfig -N 192.168.24.0 -t 192.168.24.1
Added network macro to dhcptab - 192.168.28.0.
Created network table.
-t = specifies Router for subnet This will create new file /var/dhcp/SUNWfiles1_192_168_28_0 and update SUNWfiles1_dhcptab. Another command for adding new subnet:
# pntadm -C 192.168.24.0
To list DHCP network tables:
#  pntadm -L
192.168.28.0
192.168.24.0
Finally ready to add a client (check man pntadm)
# pntadm -A 192.168.xx.xx -c X4200 -e 01/01/2010 -f 00 -h client_hostname -i 01XXXXXXXXXXXX -m macroname -s dhcp_server network
-A = add client with IP -c = comment -e = absolute lease mm/dd/yyyy, some day in future -f = flag value, say 00 -h = client hostname -i = client ID, 01MAC (MAC must be CAPITAL letters) -m = macro name, say same as hostname -s = server's IP network = subnet where installation is happening My example:
# pntadm -A 192.168.24.43 -c X4200 -e 01/01/2100 -f 00 -h gita -i 0100144F017EE8 -m gita -s 192.168.28.100 192.168.24.0
pntadm: Warning - No hosts resource value found in DHCP configuration file.
Operation succeeded, but hosts table was not updated.

# echo $?
3 (this is Non-critical error)
File /var/dhcp/ SUNWfiles1_192_168_24_0 got below line.
192.168.24.43|0100144F017EE8|00|192.168.28.100|4102473600|8320118836590280705|gita|X4200
Check how table looks with new client for specific subnet.
# pntadm -P 192.168.24.0
Client ID       Flags   Client IP       Server IP       Lease Expiration                Macro           Comment
0100144F017EE8  00      192.168.24.43   192.168.28.100  Forever                         gita            X4200
We also need macro about client to be added in dhcptab table.
# dhtadm -A -m gita -d ":BootSrvA=192.168.28.100:BootFile=pxegrub.I86PC.Solaris_10-1:"
-A = add macro -m = macro name, say same as hostname -d = must be between ", like "symbol=value:symbol=value:" Note: command add_install_client created boot file (pxegrub.I86PC.Solaris_10-1) I am using now. Client gets this file from TFTP server and executes by Preboot eXecution Environment (PXE). The file /var/dhcp/SUNWfiles1_dhcptab got below line:
gita|m|9884275282171396097|:BootSrvA=192.168.28.100:BootFile=pxegrub.I86PC.Solaris_10-1:
Let's display dhcptab
# dhtadm -P
Name            Type            Value
==================================================
gita            Macro   :BootSrvA=192.168.28.100:BootFile=pxegrub.I86PC.Solaris_10-1:
192.168.24.0    Macro   :Subnet=255.255.255.0:RDiscvyF=1:Broadcst=192.168.24.255:
unixlab         Macro   :Include=Locale:Timeserv=xx.xx.xx.xx:LeaseTim=86400:LeaseNeg:DNSdmain="xxxx.ca":DNSserv=xx.xx.xx.xx:
Locale          Macro   :UTCoffst=-28800:

Preboot eXecution Environment

The x86 system can boot directly from NIC using PXE. This works like: 

1. After POST (Power on Self test), PXE session starts 
2. Client (with PXE-capable NIC) sends DHCPDISCOVER request (port 67) looking for IP and other network stuff
3. Client also gets information (DHCPOFFER port 68) about TFTP server (has  Network Bootstrap Program - boot file)
4. Now client can configure its own IP and start TFTP transfer (port 69) of boot file (and store it in client's RAM)
5. Previous is possible since client got BootSrvA and BootFile info from DHCP 
6. Client executes boot file (NBP) 
7. NBP  loads the kernel into the memory  

Example  - Sun Fire X4200

Turn on X4200, press  Ctrl + N  (for network boot) and you should see below stuff (I guess you have console access) 

GNU GRUB  version 0.95  (615K lower / 4062144K upper memory)
	*******************************************
	* Solaris_10 Jumpstart                    *
	*                                         *
	*******************************************
      	Use the * and * keys to select which entry is highlighted.
      	Press enter to boot the selected OS, 'e' to edit the
      	commands before booting, or 'c' for a command-line.
   	The highlighted entry will be booted automatically in 24 seconds.
You are good to go now.
Back to the main page