Home | History | Annotate | Download | only in scripts
      1   2851   jongkis #!/bin/ksh -p
      2      0    stevel #
      3      0    stevel # CDDL HEADER START
      4      0    stevel #
      5      0    stevel # The contents of this file are subject to the terms of the
      6   1777     setje # Common Development and Distribution License (the "License").
      7   1777     setje # You may not use this file except in compliance with the License.
      8      0    stevel #
      9      0    stevel # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10      0    stevel # or http://www.opensolaris.org/os/licensing.
     11      0    stevel # See the License for the specific language governing permissions
     12      0    stevel # and limitations under the License.
     13      0    stevel #
     14      0    stevel # When distributing Covered Code, include this CDDL HEADER in each
     15      0    stevel # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16      0    stevel # If applicable, add the following below this CDDL HEADER, with the
     17      0    stevel # fields enclosed by brackets "[]" replaced with your own identifying
     18      0    stevel # information: Portions Copyright [yyyy] [name of copyright owner]
     19      0    stevel #
     20      0    stevel # CDDL HEADER END
     21      0    stevel #
     22      0    stevel 
     23   8715       Jan # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     24      0    stevel # Use is subject to license terms.
     25      0    stevel #
     26      0    stevel 
     27      0    stevel # utility to pack and unpack a boot/root archive
     28      0    stevel # both ufs and hsfs (iso9660) format archives are unpacked
     29      0    stevel # only ufs archives are generated
     30      0    stevel #
     31      0    stevel # usage: pack   <archive> <root>
     32      0    stevel #        unpack <archive> <root>
     33      0    stevel #        packmedia   <solaris_image> <root>
     34      0    stevel #        unpackmedia <solaris_image> <root>
     35      0    stevel #
     36      0    stevel #   Where <root> is the directory to unpack to and will be cleaned out
     37      0    stevel #   if it exists.
     38      0    stevel #
     39      0    stevel #   In the case of (un)packmedia, the image is packed or unpacked to/from
     40      0    stevel #   Solaris media and all the things that don't go into the ramdisk image
     41      0    stevel #   are (un)cpio'd as well
     42   1777     setje #
     43      0    stevel 
     44      0    stevel usage()
     45      0    stevel {
     46      0    stevel 	printf "usage: root_archive pack <archive> <root>\n"
     47      0    stevel 	printf "       root_archive unpack <archive> <root>\n"
     48      0    stevel 	printf "       root_archive packmedia   <solaris_image> <root>\n"
     49      0    stevel 	printf "       root_archive unpackmedia <solaris_image> <root>\n"
     50  10159     Jerry 	exit 1
     51      0    stevel }
     52      0    stevel 
     53   2334     setje cleanup()
     54   2334     setje {
     55   2334     setje 	if [ -d $MNT ] ; then
     56   2334     setje 		umount $MNT 2> /dev/null
     57   2334     setje 		rmdir $MNT
     58   2334     setje 	fi
     59   2334     setje 
     60   2851   jongkis 	lofiadm -d "$TMR" 2>/dev/null
     61   5648     setje         if [ "$REALTHING" != true ] ; then
     62   5648     setje 		rm -f "$TMR"
     63   5648     setje 	fi
     64   5648     setje 	rm -f "$TMR.gz"
     65   7563    Prasad 	rm -f /tmp/flist$$
     66   2334     setje }
     67   2334     setje 
     68   5822       jhd preload_Gnome()
     69   4889  sjelinek {
     70   4889  sjelinek 	MEDIA="$1"
     71   4889  sjelinek 	MINIROOT="$2"
     72   4889  sjelinek 
     73   4889  sjelinek 	
     74   4889  sjelinek 	(
     75   4889  sjelinek 		# Prepopulate the gconf database. This needs to be done and
     76   4889  sjelinek 		# done first for several reasons. 1) Archiving out the gnome
     77   4889  sjelinek 		# libraries and binaries causes the gconftool-2 to not run
     78   4889  sjelinek 		# appropriately at boot time. 2) The binaries and libraries
     79   4889  sjelinek 		# needed to run this are big and thus we want to archive
     80   4889  sjelinek 		# them separately. 3) Having schemas prepopluated in the
     81   4889  sjelinek 		# miniroot means faster boot times.
     82   4889  sjelinek 		#
     83   4889  sjelinek 
     84   4889  sjelinek 		cd "$MINIROOT"
     85   4889  sjelinek 		HOME="./tmp/root"
     86   4889  sjelinek 		export HOME
     87   4889  sjelinek 		umask 0022
     88   5648     setje 		mumble=.tmp_proto/root/etc/gconf/gconf.xml.defaults
     89   5648     setje 		GCONF_CONFIG_SOURCE="xml:merged:$MINIROOT/$mumble"
     90   4889  sjelinek 		export GCONF_CONFIG_SOURCE
     91   4889  sjelinek 		SCHEMADIR="$MINIROOT/.tmp_proto/root/etc/gconf/schemas"
     92   4889  sjelinek 		export SCHEMADIR
     93   5648     setje 		/usr/bin/gconftool-2 --makefile-install-rule \
     94   5648     setje 		    $SCHEMADIR/*.schemas >/dev/null 2>&1
     95   5571  sjelinek 		echo '
     96   5571  sjelinek 		xml:readwrite:/tmp/root/.gconf
     97   5571  sjelinek 		xml:readonly:/etc/gconf/gconf.xml.defaults
     98   5571  sjelinek 		' > /"$MINIROOT"/.tmp_proto/root/etc/gconf/2/path
     99   5822       jhd 	)
    100   5822       jhd }
    101   5571  sjelinek 
    102   5822       jhd archive_Gnome()
    103   5822       jhd {
    104   5822       jhd 	MEDIA="$1"
    105   5822       jhd 	MINIROOT="$2"
    106   5822       jhd 
    107   5822       jhd 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    108   5822       jhd 	RELEASE=`basename "$RELEASE"`
    109   5822       jhd 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    110   5822       jhd 
    111   5822       jhd 	# Create the gnome archive
    112   5822       jhd 	#
    113   5822       jhd 	(
    114   4889  sjelinek 		# usr/share gnome stuff
    115   4889  sjelinek 		cd "$MINIROOT"
    116   4889  sjelinek 		find usr/share/GConf usr/share/application-registry \
    117  10418       Dan 		    usr/share/autostart usr/share/dtds \
    118   4889  sjelinek 		    usr/share/emacs usr/share/gnome usr/share/gnome-2.0 \
    119   4889  sjelinek 		    usr/share/gnome-background-properties \
    120   4889  sjelinek 		    usr/share/gtk-engines usr/share/gui-install \
    121   4889  sjelinek 		    usr/share/icon-naming-utils usr/share/control-center \
    122   4889  sjelinek 		    usr/share/icons usr/share/locale usr/share/metacity \
    123   4889  sjelinek 		    usr/share/mime usr/share/mime-info usr/share/pixmaps \
    124   4889  sjelinek 		    usr/share/scrollkeeper usr/share/sgml usr/share/themes \
    125   4889  sjelinek 		    usr/share/xml \
    126   4889  sjelinek 		    -print > /tmp/gnome_share.$$ 2>/dev/null
    127   4889  sjelinek 
    128   4889  sjelinek 		if [ ! -f /tmp/gnome_share.$$ ] ; then
    129   4889  sjelinek 			echo "/tmp/gnome_share.$$ file list not found."
    130   5648     setje 			return
    131   4889  sjelinek 		fi
    132   4889  sjelinek 
    133   4889  sjelinek 		# usr/lib gnome stuff
    134   4889  sjelinek 
    135   4889  sjelinek 		find usr/lib/libgnome*\.so\.* \
    136   4889  sjelinek 		    usr/lib/libgst*\.so\.* usr/lib/libgconf*\.so\.* \
    137   4889  sjelinek 		    usr/lib/libgdk*\.so\.* usr/lib/libgtk*\.so\.* \
    138   4889  sjelinek 		    usr/lib/libglade*\.so\.* usr/lib/libmetacity*\.so\.* \
    139   4889  sjelinek 		    usr/lib/libfontconfig*\.so\.* usr/lib/libgmodule*\.so\.* \
    140   4889  sjelinek 		    usr/lib/libgobject*\.so\.* usr/lib/libgthread*\.so\.* \
    141   4889  sjelinek 		    usr/lib/libpopt*\.so\.* usr/lib/libstartup*\.so\.* \
    142   4889  sjelinek 		    usr/lib/libexif*\.so\.* usr/lib/libtiff*\.so\.* \
    143  10418       Dan 		    usr/lib/libstartup*\.so\.* \
    144   4889  sjelinek 		    usr/lib/libexif*\.so\.* usr/lib/libORBit*\.so\.* \
    145   4889  sjelinek 	 	    usr/lib/libmlib*\.so\.* usr/lib/libxsl*\.so\.* \
    146   4889  sjelinek 		    usr/lib/libpango*\.so\.* usr/lib/libpng*\.so\.* \
    147   4889  sjelinek 		    usr/lib/liboil*\.so\.* usr/lib/libbonobo*\.so\.* \
    148   4889  sjelinek 		    usr/lib/libart*\.so\.* usr/lib/libcairo*\.so\.* \
    149   4889  sjelinek 		    usr/lib/libjpeg*\.so\.* \
    150   4889  sjelinek 		    usr/lib/libpolkit*\.so\.* \
    151   4889  sjelinek 			-print | egrep -v '\.so\.[0]$' > \
    152   4889  sjelinek 		       /tmp/gnome_lib.$$ 2>/dev/null
    153   4889  sjelinek 
    154   4889  sjelinek 		find usr/lib/nautilus usr/lib/pango usr/lib/iconv \
    155   4889  sjelinek 		    usr/lib/metacity-dialog usr/lib/window-manager-settings \
    156   4889  sjelinek 		    usr/lib/bonobo-2.0 usr/lib/bononbo usr/lib/gtk-2.0 \
    157   4889  sjelinek 		    usr/lib/GConf usr/lib/bonobo-activation-server \
    158   4889  sjelinek 		    usr/lib/python2.4 usr/lib/gstreamer-0.10 \
    159   4889  sjelinek 		    usr/lib/gconf-sanity-check-2 usr/lib/gconfd \
    160   4889  sjelinek 		    usr/lib/gnome-vfs-2.0 usr/lib/dbus-daemon \
    161   4889  sjelinek 		    usr/lib/gnome-vfs-daemon usr/lib/gnome-settings-daemon \
    162   4889  sjelinek 		    usr/lib/gnome_segv2 usr/lib/orbit-2.0 \
    163   4889  sjelinek 		    usr/lib/libmlib \
    164   4889  sjelinek 		    print > /tmp/gnome_libdir.$$ 2>/dev/null
    165   4889  sjelinek 
    166   4889  sjelinek 		if [ ! -f /tmp/gnome_lib.$$  -a ! -f gnome_libdir.$$ ] ; then
    167   4889  sjelinek 			echo "/tmp/gnome_lib.$$ file list not found."
    168   4889  sjelinek 			return
    169   4889  sjelinek 		fi
    170   4889  sjelinek 
    171   4889  sjelinek 		# /usr/sfw gnome stuff
    172   4889  sjelinek 		find usr/sfw/bin usr/sfw/include usr/sfw/share usr/sfw/src \
    173   4889  sjelinek 		    -print > /tmp/gnome_sfw.$$ 2>/dev/null
    174   4889  sjelinek 
    175   4889  sjelinek 		if [ ! -f /tmp/gnome_sfw.$$ ] ; then
    176   4889  sjelinek 			echo "/tmp/gnome_sfw.$$ file list not found."
    177   4889  sjelinek 			return
    178   4889  sjelinek 		fi
    179   4889  sjelinek 
    180   4889  sjelinek 		# gnome app binaries usr/bin
    181   4889  sjelinek 		find usr/bin/gnome* usr/bin/gui-install usr/bin/bonobo* \
    182   4889  sjelinek 		    usr/bin/gtk-* usr/bin/fax* usr/bin/gdk* usr/bin/gif2tiff \
    183   4889  sjelinek 		    usr/bin/install-lan \
    184   4889  sjelinek 		    usr/bin/metacity* usr/bin/gst-* usr/bin/gconftool-2 \
    185   4889  sjelinek 		    usr/bin/pango* usr/bin/desktop* usr/bin/djpeg \
    186   4889  sjelinek 		    usr/bin/notify-send usr/bin/oil-bugreport \
    187   4889  sjelinek 		    usr/bin/bmp2tiff usr/bin/thembus-theme-applier \
    188   4889  sjelinek 		    usr/bin/thumbnail usr/lib/update-* \
    189   4889  sjelinek 		    usr/bin/ras2tiff usr/bin/raw2tiff usr/bin/rdjpgcom \
    190   4889  sjelinek 		    usr/bin/thumbnail usr/bin/dbus* \
    191   4889  sjelinek 		    usr/bin/tiff* usr/bin/rgb2ycbcr \
    192   4889  sjelinek 		    usr/bin/fc-cache usr/bin/fc-list \
    193   4889  sjelinek 			-print > /tmp/gnome_bin.$$ 2>/dev/null
    194   4889  sjelinek 
    195   4889  sjelinek 		if [ ! -f /tmp/gnome_bin.$$ ] ; then
    196   4889  sjelinek 			echo "/tmp/gnome_bin.$$ file list not found."
    197   5648     setje 			return
    198   4889  sjelinek 		fi
    199   4889  sjelinek 
    200   4889  sjelinek 		# Cat all the files together and create the gnome archive
    201   4889  sjelinek 		#
    202   4889  sjelinek 
    203   4889  sjelinek 		cat /tmp/gnome_libdir.$$ /tmp/gnome_lib.$$ \
    204   4889  sjelinek 		     /tmp/gnome_share.$$ /tmp/gnome_sfw.$$ /tmp/gnome_bin.$$ \
    205   4889  sjelinek 		    > /tmp/gnome.$$
    206   4889  sjelinek 
    207   4889  sjelinek 		if [ ! -f /tmp/gnome.$$ ] ; then
    208   4889  sjelinek 			echo "/tmp/gnome.$$ file not found."
    209   4889  sjelinek 			return
    210   4889  sjelinek 		fi
    211   4889  sjelinek 		# Save off this file in the miniroot for use later
    212   4889  sjelinek 		# when unpacking. Clean up old cruft if there.
    213   4889  sjelinek 		#
    214   4889  sjelinek 
    215   4889  sjelinek 		if [ -f .tmp_proto/gnome_saved ]; then
    216   4889  sjelinek 			rm -f .tmp_proto/gnome_saved
    217   4889  sjelinek 		fi
    218   4889  sjelinek 
    219   4889  sjelinek 		cp /tmp/gnome.$$ .tmp_proto/gnome_saved
    220   4889  sjelinek 
    221   4889  sjelinek 		# Create gnome archive
    222   4889  sjelinek 		#
    223   4889  sjelinek 
    224   4889  sjelinek 		cpio -ocmPuB < /tmp/gnome.$$ 2>/dev/null | bzip2 > \
    225   4889  sjelinek 		    "$CPIO_DIR/gnome.cpio.bz2"
    226   4889  sjelinek 
    227   5648     setje 		# Remove files from miniroot that are in archive.
    228   4889  sjelinek 		# Create symlinks for files in archive
    229   4889  sjelinek 		
    230   4889  sjelinek 		rm -rf `cat /tmp/gnome_share.$$`
    231   4889  sjelinek 
    232   4889  sjelinek 		for i in `cat /tmp/gnome_share.$$`
    233   5648     setje 		do
    234   4889  sjelinek 			ln -s /tmp/root/$i $i 2>/dev/null
    235   4889  sjelinek 		done
    236   4889  sjelinek 
    237   4889  sjelinek 		rm -rf `cat /tmp/gnome_lib.$$`
    238   4889  sjelinek 		for i in `cat /tmp/gnome_lib.$$`
    239   4889  sjelinek 		do	
    240   4889  sjelinek 			ln -s /tmp/root/$i $i 2>/dev/null
    241   4889  sjelinek 		done
    242   4889  sjelinek 
    243   4889  sjelinek 		rm -rf `cat /tmp/gnome_libdir.$$`
    244   4889  sjelinek 		for i in `cat /tmp/gnome_libdir.$$`
    245   5648     setje 		do
    246   4889  sjelinek 			ln -s /tmp/root/$i $i 2>/dev/null
    247   4889  sjelinek 		done
    248   4889  sjelinek 
    249   4889  sjelinek 		rm -rf `cat /tmp/gnome_sfw.$$`
    250   4889  sjelinek 		for i in `cat /tmp/gnome_sfw.$$`
    251   5648     setje 		do
    252   4889  sjelinek 			ln -s /tmp/root/$i $i 2>/dev/null
    253   4889  sjelinek 		done
    254   4889  sjelinek 
    255   4889  sjelinek 		rm -rf `cat /tmp/gnome_bin.$$`
    256   4889  sjelinek 		for i in `cat /tmp/gnome_bin.$$`
    257   5648     setje 		do
    258   4889  sjelinek 			ln -s /tmp/root/$i $i 2>/dev/null
    259   4889  sjelinek 		done
    260   4889  sjelinek 		rm -f /tmp/gnome_share.$$
    261   4889  sjelinek 		rm -f /tmp/gnome_lib.$$
    262   4889  sjelinek 		rm -f /tmp/gnome_libdir.$$
    263   4889  sjelinek 		rm -f /tmp/gnome_bin.$$
    264   4889  sjelinek 	)
    265   4889  sjelinek }
    266   4889  sjelinek 
    267   4889  sjelinek archive_JavaGUI()
    268   4889  sjelinek {
    269   4889  sjelinek 	MEDIA="$1"
    270   4889  sjelinek 	MINIROOT="$2"
    271   4889  sjelinek 
    272   4889  sjelinek 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    273   4889  sjelinek 	RELEASE=`basename "$RELEASE"`
    274   4889  sjelinek 
    275   5648     setje 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    276   4889  sjelinek 	
    277   4889  sjelinek 	# Archive the java wizard components that are only used in the
    278   4889  sjelinek 	# non developer express path.
    279   4889  sjelinek 	#
    280   4889  sjelinek 	(
    281   4889  sjelinek 		# path is usr/lib/install/data
    282   4889  sjelinek 		cd "$MINIROOT"
    283   4889  sjelinek 		find usr/lib/install/data/wizards \
    284   4889  sjelinek 		    -print > /tmp/java_ui.$$ 2>/dev/null
    285   4889  sjelinek 
    286   4889  sjelinek 		if [ ! -f /tmp/java_ui.$$ ] ; then
    287   4889  sjelinek 			echo "/tmp/java_ui.$$ file list not found."
    288   5648     setje 			return
    289   4889  sjelinek 		fi
    290   4889  sjelinek 
    291   4889  sjelinek 		cpio -ocmPuB < /tmp/java_ui.$$ 2>/dev/null | bzip2 > \
    292   4889  sjelinek 		    "$CPIO_DIR/javaui.cpio.bz2"
    293   4889  sjelinek 
    294   4889  sjelinek 		rm -rf `cat /tmp/java_ui.$$`
    295   5648     setje 		ln -s /tmp/root/usr/lib/install/data/wizards \
    296   5648     setje 		    usr/lib/install/data/wizards 2>/dev/null
    297   4889  sjelinek 
    298   4889  sjelinek 		rm -f /tmp/java_ui.$$
    299   4889  sjelinek 	
    300   4889  sjelinek 	)
    301   4889  sjelinek }
    302   4889  sjelinek 
    303   4889  sjelinek archive_Misc()
    304   4889  sjelinek {
    305   4889  sjelinek 	MEDIA="$1"
    306   4889  sjelinek 	MINIROOT="$2"
    307   4889  sjelinek 
    308   4889  sjelinek 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    309   4889  sjelinek 	RELEASE=`basename "$RELEASE"`
    310   4889  sjelinek 
    311   5648     setje 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    312   4889  sjelinek 
    313   4889  sjelinek 	# Archive misc stuff that is needed by non devex installer
    314   4889  sjelinek 	#
    315   4889  sjelinek 	(
    316   4889  sjelinek 		# usr/lib stuff
    317   4889  sjelinek 		cd "$MINIROOT"
    318   4889  sjelinek 		find usr/lib/lp -print > /tmp/lp.$$ 2>/dev/null
    319   4889  sjelinek 		if [ ! -f /tmp/lp.$$ ] ; then
    320   4889  sjelinek 			echo "/tmp/lp.$$ file list not found."
    321   5648     setje 			return
    322   4889  sjelinek 		fi
    323   4889  sjelinek 
    324   4889  sjelinek 		cpio -ocmPuB < /tmp/lp.$$ 2>/dev/null | bzip2 > \
    325   4889  sjelinek 		    "$CPIO_DIR/lpmisc.cpio.bz2"
    326   4889  sjelinek 
    327   4889  sjelinek 		rm -rf `cat /tmp/lp.$$`
    328   4889  sjelinek 		ln -s /tmp/root/usr/lib/lp usr/lib/lp 2>/dev/null
    329   4889  sjelinek 		
    330   4889  sjelinek 		rm -f /tmp/lp.$$
    331   4889  sjelinek 	)
    332   4889  sjelinek 
    333   4889  sjelinek }
    334   4889  sjelinek 
    335   4889  sjelinek archive_Perl()
    336   4889  sjelinek {
    337   4889  sjelinek 	MEDIA="$1"
    338   4889  sjelinek 	MINIROOT="$2"
    339   4889  sjelinek 
    340   4889  sjelinek 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    341   4889  sjelinek 	RELEASE=`basename "$RELEASE"`
    342   4889  sjelinek 
    343   5648     setje 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    344   4889  sjelinek 
    345   4889  sjelinek 	# Archive perl, it is only needed by gnome gui.
    346   4889  sjelinek 	#
    347   4889  sjelinek 	(
    348   4889  sjelinek 		# in usr
    349   4889  sjelinek 		cd "$MINIROOT"
    350   4889  sjelinek 		find usr/perl5 -print > /tmp/perl.$$ 2>/dev/null
    351   4889  sjelinek 
    352   4889  sjelinek 		if [ ! -f /tmp/perl.$$ ] ; then
    353   4889  sjelinek 			echo "/tmp/perl.$$ file list not found."
    354   5648     setje 			return
    355   4889  sjelinek 		fi
    356   4889  sjelinek 		cpio -ocmPuB < /tmp/perl.$$ 2>/dev/null | bzip2 > \
    357   4889  sjelinek 		    "$CPIO_DIR/perl.cpio.bz2"
    358   4889  sjelinek 
    359   4889  sjelinek 		rm -rf `cat /tmp/perl.$$` 2>/dev/null
    360   5571  sjelinek 		ln -s /tmp/root/usr/perl5 usr/perl5 2>/dev/null
    361   4889  sjelinek 
    362   4889  sjelinek 		rm -f /tmp/perl.$$
    363   4889  sjelinek 	)
    364   4889  sjelinek }
    365   1777     setje archive_X()
    366      0    stevel {
    367   1777     setje 	MEDIA="$1"
    368   1777     setje 	MINIROOT="$2"
    369      0    stevel 
    370   1777     setje 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    371   1777     setje 	RELEASE=`basename "$RELEASE"`
    372      0    stevel 
    373   5648     setje 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    374      0    stevel 
    375      0    stevel 	# create the graphics and non-graphics X archive
    376      0    stevel 	#
    377   2851   jongkis 	(
    378   4889  sjelinek 		cd "$MINIROOT"
    379   4889  sjelinek 		find usr/openwin usr/dt usr/X11 -print 2> /dev/null |\
    380   2851   jongkis 		    cpio -ocmPuB 2> /dev/null | bzip2 > "$CPIO_DIR/X.cpio.bz2"
    381      0    stevel 
    382   4889  sjelinek 		find usr/openwin/bin/mkfontdir \
    383   4889  sjelinek 		     usr/openwin/lib/installalias \
    384   4889  sjelinek 		     usr/openwin/server/lib/libfont.so.1 \
    385   4889  sjelinek 		     usr/openwin/server/lib/libtypesclr.so.0 \
    386   2851   jongkis 			 -print | cpio -ocmPuB 2> /dev/null | bzip2 > \
    387   2851   jongkis 			 "$CPIO_DIR/X_small.cpio.bz2"
    388      0    stevel 
    389   4889  sjelinek 		rm -rf usr/dt usr/openwin usr/X11
    390   4889  sjelinek 		ln -s /tmp/root/usr/dt usr/dt
    391   4889  sjelinek 		ln -s /tmp/root/usr/openwin usr/openwin
    392   4889  sjelinek 		ln -s /tmp/root/usr/X11 usr/X11
    393   2851   jongkis 	)
    394   1777     setje }
    395   1777     setje 
    396   5648     setje archive_lu()
    397   5648     setje {
    398   5648     setje 	MEDIA="$1"
    399   5648     setje 	MINIROOT="$2"
    400   5648     setje 
    401   5648     setje 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    402   5648     setje 	RELEASE=`basename "$RELEASE"`
    403   5648     setje 
    404   5648     setje 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    405   5648     setje 
    406   5648     setje 	(
    407   5648     setje 		cd "$MINIROOT"
    408   9931  Sreedhar 		find usr/lib/install usr/snadm usr/sbin usr/lib/locale \
    409   7563    Prasad 		    boot/grub boot/solaris/bootenv.rc \
    410   7563    Prasad 		    tmp/root/boot/grub tmp/root/boot/solaris/bootenv.rc \
    411   7563    Prasad 		    2> /dev/null | cpio -ocmPuB 2> /dev/null | bzip2 \
    412   7563    Prasad 		    > "$CPIO_DIR"/lu.cpio.bz2
    413   5648     setje 		ls platform > "$CPIO_DIR/lu.platforms"
    414   5648     setje 	)
    415   7563    Prasad }
    416   7563    Prasad 
    417   7563    Prasad cleanout_pkgdata()
    418   7563    Prasad {
    419   7563    Prasad 	rm -Rf tmp/root/var/sadm/install tmp/root/var/sadm/pkg
    420   5648     setje }
    421   5648     setje 
    422   1777     setje packmedia()
    423   1777     setje {
    424   1777     setje 	MEDIA="$1"
    425   1777     setje 	MINIROOT="$2"
    426   1777     setje 
    427   1777     setje 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    428   1777     setje 	RELEASE=`basename "$RELEASE"`
    429   5822       jhd 	ARCHIVES="X X_small perl lpmisc javaui gnome"
    430   1777     setje 
    431   1777     setje 	mkdir -p "$MEDIA/$RELEASE/Tools/Boot"
    432   5648     setje 
    433   5648     setje 	if [ -d "$MINIROOT/platform/i86pc" ] ; then
    434   5648     setje 		mkdir -p "$MEDIA/boot/amd64"
    435   5648     setje 		mkdir -p "$MEDIA/boot/platform/i86pc/kernel"
    436   5648     setje 		mkdir -p "$MEDIA/boot/platform/i86pc/kernel/amd64"
    437   5648     setje 		mkdir -p "$MEDIA/boot/platform/i86xpv/kernel"
    438   5648     setje 		mkdir -p "$MEDIA/boot/platform/i86xpv/kernel/amd64"
    439   5648     setje 		cp "$MINIROOT/platform/i86pc/multiboot" "$MEDIA/boot"
    440   5648     setje 		cp "$MINIROOT/platform/i86pc/kernel/unix" \
    441   5648     setje 		    "$MEDIA/boot/platform/i86pc/kernel/unix"
    442   5648     setje 		cp "$MINIROOT/platform/i86pc/kernel/amd64/unix" \
    443   5648     setje 		    "$MEDIA/boot/platform/i86pc/kernel/amd64/unix"
    444   5648     setje 		cp "$MINIROOT/platform/i86xpv/kernel/unix" \
    445   5648     setje 		    "$MEDIA/boot/platform/i86xpv/kernel/unix"
    446   5648     setje 		cp "$MINIROOT/platform/i86xpv/kernel/amd64/unix" \
    447   5648     setje 		    "$MEDIA/boot/platform/i86xpv/kernel/amd64/unix"
    448   5648     setje 		(
    449   5648     setje 			cd "$MEDIA/$RELEASE/Tools/Boot"
    450   5648     setje 			ln -sf ../../../boot/x86.miniroot
    451   5648     setje 			ln -sf ../../../boot/multiboot
    452   5648     setje 			ln -sf ../../../boot/platform/i86pc/kernel/unix
    453   5648     setje 			ln -sf ../../../boot/platform/i86pc/kernel/amd64/unix
    454   5648     setje 			ln -sf ../../../boot/platform/i86xpv/kernel/unix
    455   5648     setje 			ln -sf ../../../boot/platform/i86xpv/kernel/amd64/unix
    456   5648     setje 			ln -sf ../../../boot/grub/pxegrub
    457   5648     setje 		)
    458   5648     setje 	fi
    459   5648     setje 
    460   5648     setje 	if [ -d "$MINIROOT/platform/sun4u" ] ; then
    461   5648     setje 		mkdir -p "$MEDIA/boot"
    462   6319        jg 		dd if="$MINIROOT/platform/sun4u/lib/fs/hsfs/bootblk" \
    463   5648     setje 		    of="$MEDIA/boot/hsfs.bootblock" \
    464   5648     setje 		    bs=1b oseek=1 count=15 conv=sync 2> /dev/null
    465   5648     setje 	fi
    466   5648     setje 
    467   5648     setje 	for arch in sun4u sun4v ; do
    468   5648     setje 		if [ -d "$MINIROOT/platform/$arch" ] ; then
    469   5648     setje 			archdir="$MEDIA/$RELEASE/Tools/Boot/platform/$arch"
    470   5648     setje 			mkdir -p $archdir
    471   5648     setje 			ln -sf ../../../../../boot/sparc.miniroot \
    472   5648     setje 			    "$archdir/boot_archive"
    473   5648     setje 			cp "$MINIROOT/usr/platform/$arch/lib/fs/nfs/inetboot" \
    474   5648     setje 			    "$archdir"
    475   5648     setje 			cp "$MINIROOT/platform/$arch/wanboot" \
    476   5648     setje 			    "$archdir"
    477   5648     setje 			mkdir -p "$MEDIA/platform/$arch"
    478   5648     setje 			ln -sf ../../boot/sparc.miniroot \
    479   5648     setje 			    "$MEDIA/platform/$arch/boot_archive"
    480   8144     Jerry 			ln -sf ../../$RELEASE/Tools/Boot/platform/$arch/wanboot \
    481   8144     Jerry 			    "$MEDIA/platform/$arch/wanboot"
    482   5648     setje 		fi
    483   5648     setje 	done
    484   1777     setje 
    485   1777     setje 	# archive package databases to conserve memory
    486   1777     setje 	#
    487   2851   jongkis 	(
    488   2851   jongkis 		cd "$MINIROOT"
    489   2851   jongkis 		find tmp/root/var/sadm/install tmp/root/var/sadm/pkg -print | \
    490   2851   jongkis 		    cpio -ocmPuB 2> /dev/null | bzip2 > \
    491   2851   jongkis 		    "$MEDIA/$RELEASE/Tools/Boot/pkg_db.cpio.bz2"
    492   7563    Prasad 
    493   7563    Prasad 		cleanout_pkgdata
    494   2851   jongkis 	)
    495   5648     setje 
    496   7563    Prasad 	archive_lu "$MEDIA" "$MINIROOT"
    497   2595     setje 
    498   2595     setje 	archive_X "$MEDIA" "$MINIROOT"
    499   4889  sjelinek 
    500   4889  sjelinek 	# Take out the gnome and java parts of the installer from
    501   4889  sjelinek 	# the miniroot. These are not required to boot the system
    502   4889  sjelinek 	# and start the installers.
    503      0    stevel 
    504   5648     setje 	if [ -d "$MINIROOT/platform/i86pc" ] ; then
    505   5822       jhd 		preload_Gnome "$MEDIA" "$MINIROOT"
    506   5648     setje 		archive_Gnome "$MEDIA" "$MINIROOT"
    507   5648     setje 		archive_JavaGUI "$MEDIA" "$MINIROOT"
    508   5648     setje 		archive_Misc "$MEDIA" "$MINIROOT"
    509   5648     setje 		archive_Perl "$MEDIA" "$MINIROOT"
    510  10159     Jerry 		pack "$MEDIA/boot/amd64/x86.miniroot"
    511   5822       jhd 
    512   5822       jhd         	# Now that the 64-bit archives & miniroot have been created,
    513   5822       jhd         	# restore the files from archives and save the 64-bit
    514   5822       jhd         	# archives. Strip the 64-bit objects and create the
    515   5822       jhd 		# 32-bit archives and miniroot
    516   5822       jhd 
    517   5822       jhd 		unpackmedia "$MEDIA" "$MINIROOT"
    518   7563    Prasad 		cleanout_pkgdata
    519   5822       jhd 		mkdir -p "$MEDIA/$RELEASE/Tools/Boot/amd64"
    520   5822       jhd 		for i in $ARCHIVES; do
    521   5822       jhd 			mv "$MEDIA/$RELEASE/Tools/Boot/${i}.cpio.bz2" \
    522   5822       jhd 				"$MEDIA/$RELEASE/Tools/Boot/amd64"
    523   5822       jhd 		done
    524   5822       jhd 		if [ -z "$STRIP_AMD64" ]; then
    525   5822       jhd 			strip_amd64
    526   5822       jhd 		fi
    527   5822       jhd 
    528   5822       jhd 		archive_X "$MEDIA" "$MINIROOT"
    529   5822       jhd 		archive_Gnome "$MEDIA" "$MINIROOT"
    530   5822       jhd 		archive_JavaGUI "$MEDIA" "$MINIROOT"
    531   5822       jhd 		archive_Perl "$MEDIA" "$MINIROOT"
    532   5822       jhd 		archive_Misc "$MEDIA" "$MINIROOT"
    533   5648     setje 	fi
    534   1821     setje 
    535   1821     setje 	# copy the install menu to menu.lst so we have a menu
    536   1821     setje 	# on the install media
    537   1821     setje 	#
    538   5648     setje 	if [ -f "$MINIROOT/boot/grub/install_menu" ] ; then
    539   5648     setje 		cp $MINIROOT/boot/grub/install_menu \
    540   5648     setje 		    $MEDIA/boot/grub/menu.lst
    541   1821     setje 	fi
    542   7204        jg 
    543   7204        jg 	#
    544   7204        jg 	# jumpstart utilities in usr/sbin/install.d
    545   7204        jg 	#
    546   7204        jg 	if [ -d "$MINIROOT/usr/sbin/install.d" ] ; then
    547   7204        jg 		(
    548   7204        jg 		cd ${MINIROOT}
    549   7204        jg 		find usr/sbin/install.d/chkprobe \
    550   7204        jg 		    -print | cpio -ocmPuB 2> /dev/null | bzip2 > \
    551   7204        jg 		    ${MEDIA}/${RELEASE}/Tools/Boot/usr_sbin_install_d.cpio.bz2
    552   7204        jg 		)
    553   7204        jg 	fi
    554   1777     setje }
    555      0    stevel 
    556   1777     setje unarchive_X()
    557   1777     setje {
    558   1777     setje 	MEDIA="$1"
    559   1777     setje 	UNPACKED_ROOT="$2"
    560   1777     setje 
    561   1777     setje 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    562   1777     setje 	RELEASE=`basename "$RELEASE"`
    563   1777     setje 
    564   5648     setje 	CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot"
    565   1777     setje 
    566   1777     setje 	# unpack X
    567   1777     setje 	#
    568   2851   jongkis 	(
    569   4889  sjelinek 		cd "$UNPACKED_ROOT"
    570   4889  sjelinek 		rm -rf usr/dt usr/openwin usr/X11
    571   2851   jongkis 		bzcat "$CPIO_DIR/X.cpio.bz2" | cpio -icdmu 2> /dev/null
    572   2851   jongkis 	)
    573      0    stevel }
    574      0    stevel 
    575      0    stevel unpackmedia()
    576   1777     setje {
    577   1777     setje 	MEDIA="$1"
    578   1777     setje 	UNPACKED_ROOT="$2"
    579      0    stevel 
    580   1777     setje 	RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*`
    581   1777     setje 	RELEASE=`basename "$RELEASE"`
    582      0    stevel 
    583   1777     setje 	unarchive_X "$MEDIA" "$UNPACKED_ROOT"
    584      0    stevel 
    585      0    stevel 	# unpack package databases
    586      0    stevel 	#
    587   2851   jongkis 	(
    588   2851   jongkis 		cd "$UNPACKED_ROOT"
    589   2851   jongkis 		bzcat "$MEDIA/$RELEASE/Tools/Boot/pkg_db.cpio.bz2" |
    590   2851   jongkis 		    cpio -icdmu 2> /dev/null
    591   4889  sjelinek 
    592   8715       Jan 		if [ -d "$MINIROOT/platform/i86pc" ] ; then
    593   4889  sjelinek 
    594   8715       Jan 			# unpack gnome, perl, java and misc
    595   8715       Jan 			# Remove symlinks left from unpacking x86.miniroot
    596   8715       Jan 			# so that unpacking subsequent archives will populate
    597   8715       Jan 			# appropriately.
    598   8715       Jan 			#
    599   8715       Jan 			rm -rf usr/perl5
    600   8715       Jan 			rm -rf usr/lib/install/data/wizards
    601   8715       Jan 			rm -rf usr/lib/lp
    602   8715       Jan 
    603   8715       Jan 			# Gnome list saved off from packmedia
    604   8715       Jan 			for i in `cat .tmp_proto/gnome_saved`
    605   8715       Jan 			do
    606   8715       Jan 				rm -rf $i
    607   8715       Jan 			done
    608   8715       Jan 			
    609   8715       Jan 			bzcat "$MEDIA/$RELEASE/Tools/Boot/gnome.cpio.bz2" |
    610   8715       Jan 			    cpio -icdmu 2>/dev/null
    611   8715       Jan 			bzcat "$MEDIA/$RELEASE/Tools/Boot/javaui.cpio.bz2" |
    612   8715       Jan 			    cpio -icdmu 2>/dev/null
    613   8715       Jan 			bzcat "$MEDIA/$RELEASE/Tools/Boot/lpmisc.cpio.bz2" |
    614   8715       Jan 			    cpio -icdmu 2>/dev/null
    615   8715       Jan 			bzcat "$MEDIA/$RELEASE/Tools/Boot/perl.cpio.bz2" |
    616   8715       Jan 			    cpio -icdmu 2>/dev/null
    617   8715       Jan 		fi
    618   2851   jongkis 	)
    619      0    stevel }
    620      0    stevel 
    621      0    stevel do_unpack()
    622      0    stevel {
    623   2851   jongkis 	(
    624   2851   jongkis 		cd $MNT
    625   2851   jongkis 		find . -print | cpio -pdum "$UNPACKED_ROOT" 2> /dev/null
    626   2851   jongkis 	)
    627  10159     Jerry 	# increase the chances the unmount will succeed
    628  10159     Jerry 	umount -f $MNT
    629      0    stevel }
    630      0    stevel 
    631      0    stevel unpack()
    632      0    stevel {
    633  10159     Jerry 	MR=$1
    634   1777     setje 	if [ ! -f "$MR" ] ; then
    635  10159     Jerry 		printf "$MR: not found\n"
    636      0    stevel 		usage
    637      0    stevel 	fi
    638      0    stevel 
    639   7563    Prasad 	if [ `uname -i` = i86pc ] ; then
    640   5648     setje 		gzcat "$MR" > $TMR
    641   5648     setje 	else
    642   5648     setje 		REALTHING=true ; export REALTHING
    643   5648     setje 		TMR="$MR"
    644   5648     setje 	fi
    645      0    stevel 
    646   2334     setje 	LOFIDEV=`/usr/sbin/lofiadm -a $TMR`
    647      0    stevel 	if [ $? != 0 ] ; then
    648      0    stevel 		echo lofi plumb failed
    649      0    stevel 		exit 2
    650      0    stevel 	fi
    651      0    stevel 
    652   1777     setje 	mkdir -p $MNT
    653      0    stevel 
    654   2334     setje 	FSTYP=`fstyp $LOFIDEV`
    655      0    stevel 
    656   1777     setje 	if [ "$FSTYP" = ufs ] ; then
    657   2334     setje 		/usr/sbin/mount -o ro,nologging $LOFIDEV $MNT
    658      0    stevel 		do_unpack
    659   1777     setje 	elif [ "$FSTYP" = hsfs ] ; then
    660   2334     setje 		/usr/sbin/mount -F hsfs -o ro $LOFIDEV $MNT
    661      0    stevel 		do_unpack
    662      0    stevel 	else
    663      0    stevel 		printf "invalid root archive\n"
    664      0    stevel 	fi
    665      0    stevel 
    666   5648     setje 
    667      0    stevel 	rmdir $MNT
    668   2851   jongkis 	lofiadm -d $TMR ; LOFIDEV=
    669   5648     setje 	if [ "$REALTHING" != true ] ; then
    670   5648     setje 		rm $TMR
    671   5648     setje 	fi
    672   5648     setje }
    673   5648     setje 
    674   5648     setje compress()
    675   5648     setje {
    676   5648     setje 	SRC=$1
    677   5648     setje 	DST=$2
    678   5648     setje 
    679   5648     setje 	(
    680   5648     setje 		cd $SRC
    681   5648     setje 		filelist=`find .`
    682   5648     setje 
    683   5648     setje 		for file in $filelist ; do
    684   5648     setje 
    685   5648     setje 			file=`echo $file | sed s#^./##`
    686   5648     setje 
    687   5648     setje 			# copy all files over to preserve hard links
    688   5648     setje 			#
    689   5648     setje 			echo $file | cpio -pdum $DST 2> /dev/null
    690   5648     setje 
    691   5648     setje 			if [ -f $file ] && [ -s $file ] && [ ! -h $file ] ; then
    692   5648     setje 				fiocompress -mc $file $DST/$file &
    693   5648     setje 			fi
    694   5648     setje 
    695   5648     setje 		done
    696   5648     setje 
    697   7563    Prasad 		wait `pgrep fiocompress`
    698   7563    Prasad 
    699   5648     setje 		# now re-copy a couple of uncompressed files
    700   5648     setje 
    701   7563    Prasad 		if [ -d "$SRC/platform/i86pc" ] ; then
    702   7563    Prasad 			find `cat boot/solaris/filelist.ramdisk` -type file \
    703   7563    Prasad 			    -print 2> /dev/null > /tmp/flist$$
    704   7563    Prasad 			find usr/kernel -type file -print 2> /dev/null \
    705   7563    Prasad 			    >> /tmp/flist$$
    706   7563    Prasad 			# some of the files are replaced with links into
    707   7563    Prasad 			# tmp/root on the miniroot, so find the backing files
    708   7563    Prasad 			# from there as well and add them to the list ti
    709   7563    Prasad 			# be copied uncompressed
    710   7563    Prasad 			(
    711   7563    Prasad 				cd $SRC/tmp/root
    712   7563    Prasad 				find `cat ../../boot/solaris/filelist.ramdisk` \
    713   7563    Prasad 				    -type file -print 2> /dev/null | \
    714   7563    Prasad 				    sed 's#^#tmp/root/#' >> /tmp/flist$$
    715   7563    Prasad 			)
    716   7563    Prasad 			flist=`cat /tmp/flist$$`
    717   7563    Prasad 			(
    718   7563    Prasad 				cd $DST
    719   7563    Prasad 				rm -f $flist
    720   7563    Prasad 			)
    721   7563    Prasad 			for file in $flist ; do
    722   7563    Prasad 				echo $file | cpio -pdum $DST 2> /dev/null
    723   7563    Prasad 			done
    724   7563    Prasad 		else
    725   7563    Prasad 			find kernel platform -name unix | \
    726   7563    Prasad 			    cpio -pdum $DST 2> /dev/null
    727   7563    Prasad 			find kernel platform -name genunix | cpio -pdum $DST \
    728   7563    Prasad 			    2> /dev/null
    729   7563    Prasad 			find kernel platform -name platmod | cpio -pdum $DST \
    730   7563    Prasad 			    2> /dev/null
    731   7563    Prasad 			find `find kernel platform -name cpu` | \
    732   7563    Prasad 			    cpio -pdum $DST 2> /dev/null
    733   7563    Prasad 			find `find kernel platform -name kmdb\*` | \
    734   7563    Prasad 				cpio -pdum $DST 2> /dev/null
    735   7563    Prasad 			find kernel/misc/sparcv9/ctf kernel/fs/sparcv9/dcfs \
    736   7563    Prasad 			    kernel/misc/ctf kernel/fs/dcfs \
    737   7563    Prasad 			    etc/system etc/name_to_major etc/path_to_inst \
    738  10661       Xun 			    etc/name_to_sysnum  etc/driver_aliases \
    739  10661       Xun 			    etc/driver_classes etc/minor_perm | \
    740  10661       Xun 			    cpio -pdum $DST 2> /dev/null
    741   7563    Prasad 		fi
    742   5648     setje 	)
    743   5648     setje }
    744   5648     setje 
    745   5648     setje root_is_ramdisk()
    746   5648     setje {
    747   5648     setje 	grep -v "set root_is_ramdisk=" "$UNPACKED_ROOT"/etc/system | \
    748   5648     setje 	    grep -v "set ramdisk_size=" > /tmp/system.$$
    749   5648     setje 	cat /tmp/system.$$ > "$UNPACKED_ROOT"/etc/system
    750   5648     setje 	rm /tmp/system.$$
    751   5648     setje 
    752   5648     setje 	echo set root_is_ramdisk=1 >> "$UNPACKED_ROOT"/etc/system
    753   5648     setje 	echo set ramdisk_size=$1 >> "$UNPACKED_ROOT"/etc/system
    754      0    stevel }
    755      0    stevel 
    756      0    stevel pack()
    757      0    stevel {
    758  10159     Jerry 	MR="$1"
    759  10159     Jerry 	[ -d "$UNPACKED_ROOT" ] || usage
    760      0    stevel 
    761   7563    Prasad 	# always compress if fiocompress exists
    762   5648     setje 	#
    763   7563    Prasad 	if [ -x /usr/sbin/fiocompress ] ; then
    764   5648     setje 		COMPRESS=true
    765   5648     setje 	fi
    766   5648     setje 
    767   2511   jongkis 	# Estimate image size and add %10 overhead for ufs stuff.
    768   2511   jongkis 	# Note, we can't use du here in case $UNPACKED_ROOT is on a filesystem,
    769   2511   jongkis 	# e.g. zfs, in which the disk usage is less than the sum of the file
    770   5648     setje 	# sizes.  The nawk code
    771   2511   jongkis 	#
    772   2511   jongkis 	#	{t += ($7 % 1024) ? (int($7 / 1024) + 1) * 1024 : $7}
    773   2511   jongkis 	#
    774   2511   jongkis 	# below rounds up the size of a file/directory, in bytes, to the
    775   2511   jongkis 	# next multiple of 1024.  This mimics the behavior of ufs especially
    776   2511   jongkis 	# with directories.  This results in a total size that's slightly
    777   2511   jongkis 	# bigger than if du was called on a ufs directory.
    778   5648     setje 	#
    779   5648     setje 	# if the operation in turn is compressing the files the amount
    780   5648     setje 	# of typical shrinkage is used to come up with a useful archive
    781   5648     setje 	# size
    782   2511   jongkis 	size=$(find "$UNPACKED_ROOT" -ls | nawk '
    783   2511   jongkis 	    {t += ($7 % 1024) ? (int($7 / 1024) + 1) * 1024 : $7}
    784   2511   jongkis 	    END {print int(t * 1.10 / 1024)}')
    785   5648     setje 	if [ "$COMPRESS" = true ] ; then
    786   7563    Prasad 		size=`echo $size | nawk '{s = $1} END {print int(s * 0.6)}'`
    787   5648     setje 	fi
    788      0    stevel 
    789   2334     setje 	/usr/sbin/mkfile ${size}k "$TMR"
    790   2334     setje 
    791   2334     setje 	LOFIDEV=`/usr/sbin/lofiadm -a "$TMR"`
    792      0    stevel 	if [ $? != 0 ] ; then
    793      0    stevel 		echo lofi plumb failed
    794      0    stevel 		exit 2
    795      0    stevel 	fi
    796      0    stevel 
    797   2334     setje 	RLOFIDEV=`echo $LOFIDEV | sed s/lofi/rlofi/`
    798   5648     setje 	newfs $RLOFIDEV < /dev/null 2> /dev/null
    799   1777     setje 	mkdir -p $MNT
    800   5648     setje 	mount -o nologging $LOFIDEV $MNT
    801   1777     setje 	rmdir $MNT/lost+found
    802   5648     setje 
    803   5648     setje 	if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then
    804   5648     setje 		root_is_ramdisk $size
    805   5648     setje 	fi
    806   5648     setje 
    807   2851   jongkis 	(
    808   2851   jongkis 		cd "$UNPACKED_ROOT"
    809   5648     setje 		if [ "$COMPRESS" = true ] ; then
    810   5648     setje 			compress . $MNT
    811   5648     setje 		else
    812   5648     setje 			find . -print | cpio -pdum $MNT 2> /dev/null
    813   5648     setje 		fi
    814   2851   jongkis 	)
    815      0    stevel 	lockfs -f $MNT
    816      0    stevel 	umount $MNT
    817      0    stevel 	rmdir $MNT
    818   5648     setje 
    819   5648     setje 	if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then
    820   5648     setje 		"$UNPACKED_ROOT/usr/sbin/installboot" \
    821   6319        jg 		    "$UNPACKED_ROOT/platform/sun4u/lib/fs/ufs/bootblk" \
    822   5648     setje 		    $RLOFIDEV
    823   5648     setje 	fi
    824   5648     setje 
    825   2334     setje 	lofiadm -d $LOFIDEV
    826   2851   jongkis 	LOFIDEV=
    827      0    stevel 
    828   2334     setje 	rm -f "$TMR.gz"
    829   5648     setje 
    830   5648     setje 	if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then
    831   5648     setje 		mv "$TMR" "$MR"
    832   5648     setje 	else
    833   5648     setje 		gzip -f "$TMR"
    834   5648     setje 		mv "$TMR.gz" "$MR"
    835   5648     setje 	fi
    836   5648     setje 
    837   1777     setje 	chmod a+r "$MR"
    838      0    stevel }
    839      0    stevel 
    840   5716     setje strip_amd64()
    841   5716     setje {
    842   5716     setje 	find "$UNPACKED_ROOT" -name amd64 -type directory | xargs rm -rf
    843   5716     setje }
    844   5716     setje 
    845      0    stevel # main
    846      0    stevel #
    847   2334     setje 
    848   2334     setje EXTRA_SPACE=0
    849   2851   jongkis STRIP_AMD64=
    850   5648     setje COMPRESS=
    851   2334     setje 
    852   5648     setje PATH=/usr/sbin:/usr/bin:/opt/sfw/bin ; export PATH
    853   5648     setje 
    854   5648     setje while getopts s:6c opt ; do
    855   2334     setje 	case $opt in
    856   2334     setje 	s)	EXTRA_SPACE="$OPTARG"
    857   2334     setje 		;;
    858   2334     setje 	6)	STRIP_AMD64=false
    859   5648     setje 		;;
    860   5648     setje 	c)	COMPRESS=true
    861   2334     setje 		;;
    862   2334     setje 	*)	usage
    863   2334     setje 		;;
    864   2334     setje 	esac
    865   2334     setje done
    866   2334     setje shift `expr $OPTIND - 1`
    867      0    stevel 
    868  10159     Jerry [ $# == 3 ] || usage
    869      0    stevel 
    870   1777     setje UNPACKED_ROOT="$3"
    871   1777     setje BASE="`pwd`"
    872      0    stevel MNT=/tmp/mnt$$
    873   2334     setje TMR=/tmp/mr$$
    874   2334     setje LOFIDEV=
    875   1777     setje MR="$2"
    876      0    stevel 
    877  10159     Jerry # sanity check
    878  10159     Jerry [ "$UNPACKED_ROOT" != "/" ] || usage
    879  10159     Jerry 
    880      0    stevel if [ "`dirname $MR`" = . ] ; then
    881   1777     setje 	MR="$BASE/$MR"
    882      0    stevel fi
    883      0    stevel if [ "`dirname $UNPACKED_ROOT`" = . ] ; then
    884   1777     setje 	UNPACKED_ROOT="$BASE/$UNPACKED_ROOT"
    885      0    stevel fi
    886   2334     setje 
    887   5648     setje 
    888   5648     setje MEDIA="$MR"
    889   5648     setje 
    890   2334     setje trap cleanup EXIT
    891      0    stevel 
    892  10159     Jerry # always unpack into a fresh root
    893  10159     Jerry case $1 in
    894  10159     Jerry 	unpack|unpackmedia)
    895  10159     Jerry 		rm -rf "$UNPACKED_ROOT"
    896  10159     Jerry 		mkdir -p "$UNPACKED_ROOT"
    897  10159     Jerry 		;;
    898  10159     Jerry esac
    899  10159     Jerry [ -d "$UNPACKED_ROOT" ] || usage
    900  10159     Jerry 
    901      0    stevel case $1 in
    902      0    stevel 	packmedia)
    903  10159     Jerry 		packmedia "$MEDIA" "$UNPACKED_ROOT"
    904   1777     setje 		if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then
    905  10159     Jerry 			pack "$MEDIA/boot/sparc.miniroot"
    906   1777     setje 		else
    907  10159     Jerry 			pack "$MEDIA/boot/x86.miniroot"
    908   5648     setje 		fi
    909   5716     setje 
    910   5648     setje 		;;
    911      0    stevel 	unpackmedia)
    912   5648     setje 		if [ -f "$MEDIA/boot/sparc.miniroot" ] ; then
    913  10159     Jerry 			unpack "$MEDIA/boot/sparc.miniroot"
    914   1777     setje 		else
    915  10159     Jerry 			unpack "$MEDIA/boot/x86.miniroot"
    916  10159     Jerry 			unpack "$MEDIA/boot/amd64/x86.miniroot"
    917   5648     setje 		fi
    918   5648     setje 		unpackmedia "$MEDIA" "$UNPACKED_ROOT"
    919   5648     setje 		;;
    920  10159     Jerry 	pack)	pack "$MR"
    921   5648     setje 		;;
    922  10159     Jerry 	unpack)	unpack "$MR"
    923   5648     setje 		;;
    924   5648     setje 	*)	usage
    925   5648     setje 		;;
    926      0    stevel esac
    927