From auto-net-request@math.gatech.edu Wed Jun 21 15:24:27 1995
>From auto-net-request@math.gatech.edu  Wed Jun 21 15:24:26 1995
Received: from gatech.edu (gatech.edu [130.207.244.244]) by babbage.ece.uc.edu (8.6.12/8.6.9) with SMTP id PAA00475 for <montjoy@ece.uc.edu>; Wed, 21 Jun 1995 15:24:21 -0400
Received: from math (math.skiles.gatech.edu) by gatech.edu with SMTP id AA07537
  (5.65c/Gatech-10.0-IDA for <montjoy@ece.uc.edu>); Wed, 21 Jun 1995 15:21:03 -0400
Received: by math (5.x/SMI-SVR4)
	id AA10101; Wed, 21 Jun 1995 15:18:17 -0400
Resent-Date: Wed, 21 Jun 1995 15:13:34 -0400
Old-Return-Path: <coleman@math.gatech.edu>
Message-Id: <9506211913.AA03776@redwood.skiles.gatech.edu>
X-Mailer: exmh version 1.5.3 12/28/94
To: auto-net@math.gatech.edu
Subject: SUMMARY:  JumpStarting SunOS_4.1.4 via SunOS_5.x JumpStart (updated)
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Wed, 21 Jun 1995 15:13:34 -0400
From: Richard Coleman <coleman@math.gatech.edu>
Resent-Message-Id: <"_TBns.0.AT2.d-6wl"@math>
Resent-From: auto-net@math.gatech.edu
X-Mailing-List: <auto-net@math.gatech.edu> archive/latest/216
X-Loop: auto-net@math.gatech.edu
Precedence: list
Resent-Sender: auto-net-request@math.gatech.edu
Status: RO

This is forwarded from z055084@uprc.com (Kohler R. P. (Robert))
who accidently sent this to auto-net-request@math.gatech.edu.
Please only send administrative requests to auto-net-request.
Send all submissions to auto-net@math.gatech.edu.

Thanks,

Richard Coleman
coleman@math.gatech.edu

------- Forwarded Message

HOW TO CONFIGURE Solaris 2.x to jumpstart SunOS_4.1.4
=====================================================

WRITTEN 02/24/95 Robert Kohler (robert.kohler@uprc.com)
UPDATED 06/20/95 Robert Kohler (robert.kohler@uprc.com)

Purpose:  I have searched for a way to install SunOS_4.1.4 with minimal
	to no intervention.  I pondered various scenarios, and finally
	succeeded.

    1:  I first tried to make a boot floppy, which would boot into an OS,
	then run my preconfigured scripts which would install the SunOS_4.1.4
	over the network onto the internal disk.

	After trying this myself and from various responses from the
	sun-managers mailing list, I concluded that SunOS_4.1.4 will not
	fit in 1.44MB of floppy disk space.  If you want the details, please
	send a request to robert.kohler@uprc.com.

    2:	Second try involved Configuring Solaris 2.x JumpStart to install
	SunOS_4.1.4 for me.  This would eliminate the need for a floppy disk.
	After several trial and error scenarios, I feel I have created one of
	the best ways to install SunOS_4.1.4 over the net.
	NOTE:  Current delimna is the fact that each machine we install must
		be on the same subnet.  This is because we filter broadcasts
		on our routers.  This can be remedied, will discuss later.

	Details:

	  1.  Install Solaris 2.x JumpStart onto an install server.
		NOTE: Mount Solaris 2.x CD, and run "add_install_server".
		We are using a SparcLX currently. (named "grunt"), and
		installed it into the following directory..
		/usr/export/data2/install_images
		NOTE: Don't need Solaris 2.x CD anymore.

	  2.  Now you must install from CD your first SunOS_4.1.4 system.
		Install it exactly as you want using suninstall.  Perform
		all configurations so that it will work on your network.

	      We need this image to "dump" to our install server (grunt).
                                                                
		We configured the following on our 207MB internal drives.
		Packages include:
		  root
		  usr
		  Kvm
		  Install
		  Networking
		  System_V
		  Sys
		  Text
		  OpenWindows_Users
		  OpenWindows_Fonts
		  Security

		Disk layout is as follows:
		
Current partition table (original sd0):
        partition a - starting cyl      0, # blocks    20736 (64/0/0)
        partition b - starting cyl     64, # blocks    65772 (203/0/0)
        partition c - starting cyl      0, # blocks   406296 (1254/0/0)
        partition d - starting cyl      0, # blocks        0 (0/0/0)
        partition e - starting cyl      0, # blocks        0 (0/0/0)
        partition f - starting cyl      0, # blocks        0 (0/0/0)
        partition g - starting cyl    267, # blocks   319788 (987/0/0)
        partition h - starting cyl      0, # blocks        0 (0/0/0)

		NOTE: partition a is /		10MB
		      partition b is swap	32MB
		      partition g is /usr	REMAINING

	   3.	Back on install server (grunt), make a sub-directory tree
		for images.  We set up the following...
		grunt:/usr/export/data2/os_images/SunOS_4.1.4/sun4c/GENERIC
		I made a link for /os to point to /usr/export/data2/os_images
		so our scenario now looks like the following.
		grunt:/os/${OS_VERSION}/${ARCHITECTURE}/${KERNEL}

		Inside each kernel directory will be 2 files root and usr
		(dump images of the original SunOS_4.1.4 configured).

		NOTE: I chose dump/restore for it's flexibility of partition
			sizes and disk sizes.

	 4.	Now it is time to dump the SunOS_4.1.4 install image of the
		preconfigured machine to the install server.
		Using NFS, we can "cd /data/grunt2/os/SunOS_4.1.4/sun4c/GENERIC
		which is actually "grunts" disk.
		From here we run the following command.
		"dump 0dsf 54000 13000 root /dev/rsd0a"
		"dump 0dsf 54000 13000 usr /dev/rsd0g"

		This will make 2 files on the install server (root and usr)
		which sould be the same size as the preconfigured machine.

	   5.	Now you need to configure your install server's tftpboot and
		bootparams area so as to respond to the broadcast from the
		machine you are installing.

		Since we use NIS, I had to update our master yp server's
		ethers database and host database.  (ie. the ethers will map
		Ethernet address of machine to install to hostname, and the
		hosts database will map hostname to IP address.)  Note: you
		could just edit the local /etc/hosts and /etc/ethers files.

		Say we want to upgrade machine name "cronkite" which is a sun4c
		architecture.

		On install server, cd /usr/export/data2/install_images, you
		will find a script called "add_install_client".

		Run "./add_install_client sun4c cronkite" which sets up the
		following files... /etc/bootparams" and "/tftpboot/*".

		Here is our /etc/bootparams file.
* install_config=grunt:/usr/export/data2/install_images/configs
cronkite root=grunt:/usr/export/data2/install_images/export/exec/kvm/sparc.sun4
c.Solaris_2.4 	install=grunt:/usr/export/data2/install_images  

		Here is our /tftpboot directory
# ls -al /tftpboot
total 348
drwxrwxr-x   2 root     other        512 Feb 24 16:53 .
drwxr-xr-x  29 root     root        1024 Feb 24 16:53 ..
lrwxrwxrwx   1 root     other         26 Feb 24 16:53 905E30C8 -> 
inetboot.sun4c.Solaris_2.4
lrwxrwxrwx   1 root     other         26 Feb 24 16:53 905E30C8.SUN4C -> 
inetboot.sun4c.Solaris_2.4
- -rwxr-xr-x   1 root     other     162932 Feb 24 16:53 
inetboot.sun4c.Solaris_2.4
- -rw-r--r--   1 root     other        316 Feb 24 16:53 rm.144.94.48.200
lrwxrwxrwx   1 root     other          1 Feb 24 16:53 tftpboot -> .

		The files of interest are the 905E30C8 which is the IP address
		translated into HEX, and the inetboot.sun4c.Solaris_2.4 which
		is the boot program for Solaris_2.4.

		Also, the "add_install_client" will start a daemon called
		"bootparamd" which will respond to boot net broadcasts.

	   6.	Now make a configuration directory.  We made the following
		grunt:/usr/export/data2/install_images/configs

		This holds the info on how JumpStart reacts to the boot.
		(ie. what to install where).

		Copy the auto_install_sample directory into the configs area.

		Edit the file "rules", at the bottom add an entry like the
		following...
hostname cronkite && karch sun4c pre_install_4.x 207MB.SunOS_4 post_install_4.x

		This means if the machine booting is named "cronkite" and the
		"arch -k" returns "sun4c" then run the "pre_install" script,
		then the 207MB.SunOS_4 configuration, then the "post_install"
		script.  Upon completion, the system automatically reboots.

		Create the following files:
# more pre_install_4.x 207MB.SunOS_4 post_install_4.x | cat
::::::::::::::
pre_install_4.x
::::::::::::::
#!/bin/sh
#====================================================================
#        Name: pre_install_4.x       Date: 2/24/95                  =
#  Programmer: Robert Kohler         E-Mail: robert.kohler@uprc.com =
#    Language: Bourne Shell                                         =
#-------------------------------------------------------------------=
#  Purpose:  This script will run prior to system installation and  =
#            pre-configure the defaultrouter interface.  It then    =
#            creates a variable list readable by a "post_install"   =
#            script to minimize system work.                        =
#  Method:   /etc/hosts is configured by "JumpStart" from the       =
#            ethers and host databases.  Read the valid IP address  =
#            and change the last field to 1 for the defaultrouter.  =
#====================================================================
#
echo "Running pre_install_4.x script..."
#
#  Gather all variables needed from the system.
#
HOSTNAME=`uname -n`
IP_ADDRESS=`egrep -v '(127\.0\.0\.1|^#)' /etc/hosts | cut -f1`
DEFAULT_ROUTER=`echo $IP_ADDRESS | awk -F. '{printf("%s.%s.%s.1",$1,$2,$3)}'`
#
if [ "${DEFAULT_ROUTER}" = "144.94.128.1" ]; then
  DEFAULT_ROUTER="144.94.128.172"	# One exception to our network.
fi
#
#-----------------------------------------------
#
#  Set the default gateway.
#
route add net default ${DEFAULT_ROUTER} 1
#
#-----------------------------------------------
#
#  Put the variables in /tmp so the JumpStart "post_script" can use them.
#
cat - << EOF > /tmp/pre_install_vars_${HOSTNAME}
IP_ADDRESS=${IP_ADDRESS}
DEFAULT_ROUTER=${DEFAULT_ROUTER}
EOF
#
cat /tmp/pre_install_vars_${HOSTNAME}
#
#-----------------------------------------------
#
#  Now return control back to JUMPSTART for Solaris Cluster install.
#
echo "pre_install_4.x script Complete."
::::::::::::::
207MB.SunOS_4
::::::::::::::
install_type	initial_install
system_type	standalone
partitioning	explicit
filesys	c0t3d0s0	10	/restore_root
filesys	c0t3d0s1	32	swap
filesys	c0t3d0s6	free	/
cluster	SUNWCreq
::::::::::::::
post_install_4.x
::::::::::::::
#!/bin/sh
#====================================================================
#        Name: post_install_4.x      Date: 2/24/95                  =
#  Programmer: Robert Kohler         E-Mail: robert.kohler@uprc.com =
#    Language: Bourne Shell                                         =
#-------------------------------------------------------------------=
#  Purpose:  This script will run after system installation and     =
#            load SunOS_4.1.4 into the system instead.  A new       =
#            boot block is written, and configuration files are     =
#            automatically setup.                                   =
#  Method:   Some variables are read from a file created by the     =
#            pre_install script.  Then the partitions declared are  =
#            restored from an images of a SunOS_4.1.4 architecuture =
#            and Kernel.  After install, I reconfigure root's       =
#            password.                                              =
#====================================================================
#
echo "Running post_install_4.x script"
#
#-----------------------------------------------
# Added by SUN to mount all disk partitions. RPK 3/23/95
# Recieved via E-Mail from lou@sunesc.East.Sun.COM
# Sun2.4 Jumpstart bug, after install only / is mounted.
#
vfstab=/a/etc/vfstab
 
exec < ${vfstab} 
        {
        while read special fsckdev mountp fstype fsckpass automnt mntopts
        do
                case ${special} in
                '#'* | ' ')      #  Ignore comments, empty lines
                                continue ;;
                '-')            #  Ignore no-action lines
                                continue
                esac
 
        if [ "${fstype}" = "ufs" ]
then
 
                        if [ -d "/a${mountp}/lost+found" ]
                                then
                                        echo "/a"$mountp "is already mounted"
                                else
            echo "mounting" ${special} "on /a"${mountp} 
                                        /sbin/mount ${special} /a${mountp}
                        fi
 
                fi
 
        done
        }
#
#-----------------------------------------------
#  Set local variables for SunOS_4.1.4 "dump/restore" images.
#
INSTALL_SERVER_IP="144.94.120.6"		# grunt
OS_VERSION="SunOS_4.1.4"
ARCHITECTURE="sun4c"
KERNEL="GENERIC"
#
#-----------------------------------------------
#  Read some local variables from the pre_install script.
#	( IP_ADDRESS, DEFAULT_ROUTER)
#
HOSTNAME=`uname -n`
#
. /tmp/pre_install_vars_${HOSTNAME}
#
#-----------------------------------------------
#
#  Install SunOS_4.1.4 (root) into /a/restore_root partition.
#
  echo "Installing SunOS_4.1.4 (root) on partition 0.....please wait..."
  cd /a/restore_root
  ufsrestore -rf ${INSTALL_SERVER_IP}:/os/${OS_VERSION}/${ARCHITECTURE}/${KERNE
L}/root
  echo "  done."
#
#-----------------------------------------------
#
#  Configure SunOS_4.1.4 system files.
#
  echo "Installing SunOS_4.1.4 system files..."
  echo "${DEFAULT_ROUTER}" > /a/restore_root/etc/defaultrouter
  cp /a/etc/hosts /a/restore_root/etc/hosts
  cp /a/etc/hostname.le0 /a/restore_root/etc/hostname.le0
  rm /a/restore_root/etc/.UNCONFIGURED
  echo "  done."
#
#-----------------------------------------------
#
#  Clean /a out so you can Load SunOS_4.1.4 into it.
#
  echo "Removing Solaris 5.4 (root) to install SunOS_4.1.4 (usr)..."
  cd /a
  rm -r `ls | egrep -v '(restore_root|lost\+found)'`
  echo "  done."
#
#-----------------------------------------------
#
#  Install SunOS_4.1.4 (usr) into /a partition.
#
  echo "Installing SunOS_4.1.4 (usr) on partition 6.....please wait..."
  ufsrestore -rf ${INSTALL_SERVER_IP}:/os/${OS_VERSION}/${ARCHITECTURE}/${KERNE
L}/usr
  echo "  done."
#
#-----------------------------------------------
#
#  Install SunOS_4.1.4 boot block on internal disk.
#
  echo "Installing SunOS_4.1.4 boot block..."
  cd /a/kvm/mdec
  ./installboot -vlt /a/restore_root/boot bootsd /dev/rdsk/c0t3d0s0
  echo "  done."
#
#-----------------------------------------------
#
#  Install root password.
#
  echo "Installing SunOS_4.1.4 root password..."
  STRING="xxxxxxxx"		# roots passwd.
  PASSWD_FILE="/a/restore_root/etc/passwd"
  cp -p ${PASSWD_FILE} ${PASSWD_FILE}.save;
  sed -e '1s:\:[^\:]*\::\:'$STRING'\::' ${PASSWD_FILE}.save > ${PASSWD_FILE}
  echo "  done."
#
#-----------------------------------------------
#
#  Site Specific Configs.
#	Note:  inetd.wrap.4x is merely an "inetd" wrapper which will fire off
#		and install script upon bootup when the inetd daemon tries
#		to start.  It removes itself after bootup.
#
  echo "Starting 4.1.4 Configuration setup."
  rcp grunt:/usr/export/data2/install/rc3/inetd.wrap.4x 
/a/restore_root/bin/inetd
  rcp grunt:/usr/export/data2/install/rc3/install_machine.4x 
/a/restore_root/install_machine.4x

  chown root /a/restore_root/bin/inetd
  chmod 744  /a/restore_root/bin/inetd
  chown root /a/restore_root/install_machine.4x
  chmod 744  /a/restore_root/install_machine.4x
#

echo "Done installing system."
# 
 
=============================================================================
# cat inetd.wrap.4x
#!/bin/sh
#
#  Date : 5/4/95
#  Script written by Robert Kohler to install Site specific information.
#
#  This script needs to be copied into /bin/inetd file on
#	the newly installed system.  It will run the install and remove itself.
#	This will automatically be executed upon bootup.
#
HOSTNAME=`uname -n`

/usr/etc/inetd
echo -n " install_machine"

(sleep 8; stty sane; /install_machine.4x) &

(sleep 2; rm /bin/inetd) &
# 
=============================================================================
# cat install_machine.4x
#!/bin/sh
#
#  Date : 5/4/95
#  Script written by Robert Kohler to install UPRC specific information.
#
#  This script needs to be copied into the / directory on
#	the newly installed system.  It will update and remove itself.
#	An "inetd" wrapper is almost the last thing run in "rc",
#	thus this will automatically be executed near bootup completion.
#
HOSTNAME=`uname -n`

echo " "
echo "Running Install_Machine for SunOS_4.1.4...Please Wait"
echo " "
/usr/ucb/rsh -n xxxx "cd /usr/export/data/system/Install_Machine; 
./install_sun_4.1.4 ${HOSTNAME}"
echo " "
echo "Completed Install..."
echo "****************************************************"
echo "**  WARNING!!!  System will automatically reboot  **"
echo "**              in 10 seconds...Please wait!!!    **"
echo "****************************************************"
echo " "
(sleep 5; rm /install_machine.4x) &
(sleep 10; reboot) &
# 
=============================================================================
	   7.	Now check to ensure your files were made correctly.
		Run "./check", this should parse the "rules" file, 
			"pre_install_4.x, post_install_4.x, and 207MB.SunOS_4"
		Upon completion, this makes a "rules.ok" file.

	   8.   Now you are ready to try to install your new system.
		Plug new system into ethernet connection, and at the ok
		prompt type 'boot net - install'

		NOTE: If the system is live, and running (say SunOS_4.1.x) and
		you want to upgrade to SunOS_4.1.4, then log into that system
		and run 'reboot "net - install"' as root.

	   9.	System should take 35 minutes for install.  It installs core
		Solaris 2.4 into system, but then I remove it and overwrite
		with SunOS_4.1.4.  Delay of 10 minutes.
		I have not found a way to install nothing from Solaris_2.4
		inside JumpStart.

	  10.	Upon completion remove the machine from the tftp boot area.

		On install server: (grunt),
		cd /usr/export/data2/install_images
		"run rm_install_client cronkite"...

	  11.   Upon first reboot, the inetd wrapper is executed, thus
		installs all latest patches, rdists pertinent files, and
		updates motd (message of the day), etc...  It removes
		itself then reboot automatically.

Tada, complete...
  Now for every other system you want to install,
	  1.	Add to hosts database, or (/etc/hosts).
	  2.	Add to ethers database, or (/etc/ethers).
	  3.	Run "add_install_client <arch> <hostname>"
	  4.	Boot <hostname> using "boot net - install" from prom.
		If system already on up...run # reboot "net - install"
	  5.	Run "rm_install_client <hostname>".

=============================================================================

Now to get around the single subnet issue...

	   1.  Go to a new install server on a different subnet.
		NFS mount the disk from the install server.
		cd /data/grunt2/install_images
		run add_install_server script.  Put on a machine which
		is on the other subnet and has 16MB + disk space for each
		architecture you want loaded.

	  2.  Now run add_install_client via NFS and let it add the clients.
		If it fails, remember you just need the files listed below...
# cat /etc/bootparams
* install_config=grunt:/usr/export/data2/install_images/configs
cronkite root=grunt:/usr/export/data2/install_images/export/exec/kvm/sparc.sun4
c.Solaris_2.4 	install=grunt:/usr/export/data2/install_images  
# ls -al /tftpboot
total 348
drwxrwxr-x   2 root     other        512 Feb 24 16:53 .
drwxr-xr-x  29 root     root        1024 Feb 24 16:53 ..
lrwxrwxrwx   1 root     other         26 Feb 24 16:53 905E30C8 -> 
inetboot.sun4c.Solaris_2.4
lrwxrwxrwx   1 root     other         26 Feb 24 16:53 905E30C8.SUN4C -> 
inetboot.sun4c.Solaris_2.4
- -rwxr-xr-x   1 root     other     162932 Feb 24 16:53 
inetboot.sun4c.Solaris_2.4
- -rw-r--r--   1 root     other        316 Feb 24 16:53 rm.144.94.48.200
lrwxrwxrwx   1 root     other          1 Feb 24 16:53 tftpboot -> .

	  3.	Make sure bootparamd is running on the second boot server.
	  4.	Boot the systems on that net as "boot net - install".

=============================================================================

NOTE:  Additions to be made and suggestions for improvement....

	Copy some machine specific files out prior to upgrade/install so that
	the system can keep its same configuration.
	(ie. /var/spool/mail/*, /var/spool/calendar/*, /etc/fstab, etc...)

	Find better work around for subnet restriction.

	Put everything in pre_install script.  This way you wouldn't have
	to load any of SunOS_5.x to install 4.1.4.  This means you would
	have to partition your disks in the scripts also.  Newfs them, etc.
	I like having the system do it, and the extra 10 minutes is not
	an issue to us.  Maybe future workarounds will bypass this bug,
	namely putting a "-" as the configuration package doesn't work.

=============================================================================
Enjoy!!!

Robert Kohler
Union Pacific Resources
robert.kohler@uprc.com


------- End of Forwarded Message




