SUMMARY: Boot Floppy SunOS_4.1.4 / Automatic Install of SunOS_4.1.4

From: Kohler R. P. (z055084@uprc.com)
Date: Wed Mar 01 1995 - 07:03:33 CST


My original post was:

> I'm starting to venture out and make a Sun_4.1.4 boot floppy (1.44MB).
>
> Has anyone been sucessful in doing this? (Any 4.x arch)?
>
> I have been stripping the kernel down and stripping the symbols out and
> can fit the kernel on the floppy, but all the necessary files like
> sh, init, /dev/fd, etc.. were not able to fit.
>
> Any suggestions or help you can shove my way would be appreciated.
>
> Actual reason for diskette is to script an upload procedure to format the
> internal disk, load / and /usr over net to disk, then configure and reboot.
> (ie. Simulate something like Solaris's jumpstart).

Thanks for all the feedback. Concensus told me it couldn't be done.
Tried myself with no luck.

BUT!!! Another idea worked.... Here is a SORT OF FAQ, Note sure how to post..

Robert Kohler

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

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 I will work on your network.
                                           ^it
              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.sun4c.Solaris_2.3 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.3
lrwxrwxrwx 1 root other 26 Feb 24 16:53 905E30C8.SUN4C -> inetboot.sun4c.Solaris_2.3
-rwxr-xr-x 1 root other 162932 Feb 24 16:53 inetboot.sun4c.Solaris_2.3
-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.3 which
                is the boot program for Solaris_2.3.

                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: z055084@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: z055084@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"
#
#-----------------------------------------------
# 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}/${KERNEL}/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.3 (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}/${KERNEL}/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."
#
echo "Done installing system."
#
 
=============================================================================
           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.3 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.3
                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"...

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.
          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.sun4c.Solaris_2.3 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.3
lrwxrwxrwx 1 root other 26 Feb 24 16:53 905E30C8.SUN4C -> inetboot.sun4c.Solaris_2.3
-rwxr-xr-x 1 root other 162932 Feb 24 16:53 inetboot.sun4c.Solaris_2.3
-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....

        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.

        Run this off of Solaris 2.4 Jump Start...(Maybe fixes for the above
        already implemented).
        
   _______________________________________________________
  /\-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-=-\
  L_@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
    | Robert Kohler |
    | Union Pacific Resources |
    | P.O. Box 7, MS3503 |
    | Fort Worth, TX. 76101-0007 |
    | |
    | OFFICE VOICE: (817)-877-6993 |
    | FAX: (817)-877-6598 |
    | WORK(7-4) E-MAIL: robert.kohler@uprc.com |
    | HOME E-MAIL: robert@fastlane.net |
  __@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@
  \/______________________________________________________/



This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:10:17 CDT