12851Sjongkis#!/bin/ksh -p 20Sstevel@tonic-gate# 30Sstevel@tonic-gate# CDDL HEADER START 40Sstevel@tonic-gate# 50Sstevel@tonic-gate# The contents of this file are subject to the terms of the 61777Ssetje# Common Development and Distribution License (the "License"). 71777Ssetje# You may not use this file except in compliance with the License. 80Sstevel@tonic-gate# 90Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 100Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing. 110Sstevel@tonic-gate# See the License for the specific language governing permissions 120Sstevel@tonic-gate# and limitations under the License. 130Sstevel@tonic-gate# 140Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each 150Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 160Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the 170Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying 180Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner] 190Sstevel@tonic-gate# 200Sstevel@tonic-gate# CDDL HEADER END 210Sstevel@tonic-gate# 220Sstevel@tonic-gate 233446Smrj# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 240Sstevel@tonic-gate# Use is subject to license terms. 250Sstevel@tonic-gate# 261777Ssetje# ident "%Z%%M% %I% %E% SMI" 270Sstevel@tonic-gate 280Sstevel@tonic-gate# utility to pack and unpack a boot/root archive 290Sstevel@tonic-gate# both ufs and hsfs (iso9660) format archives are unpacked 300Sstevel@tonic-gate# only ufs archives are generated 310Sstevel@tonic-gate# 320Sstevel@tonic-gate# usage: pack <archive> <root> 330Sstevel@tonic-gate# unpack <archive> <root> 340Sstevel@tonic-gate# packmedia <solaris_image> <root> 350Sstevel@tonic-gate# unpackmedia <solaris_image> <root> 360Sstevel@tonic-gate# 370Sstevel@tonic-gate# Where <root> is the directory to unpack to and will be cleaned out 380Sstevel@tonic-gate# if it exists. 390Sstevel@tonic-gate# 400Sstevel@tonic-gate# In the case of (un)packmedia, the image is packed or unpacked to/from 410Sstevel@tonic-gate# Solaris media and all the things that don't go into the ramdisk image 420Sstevel@tonic-gate# are (un)cpio'd as well 430Sstevel@tonic-gate# 441777Ssetje# This utility is also used to pack parts (in essence the window system, 451777Ssetje# usr/dt and usr/openwin) of the non ramdisk SPARC 461777Ssetje# miniroot. (un)packmedia will recognize that they are being run a SPARC 471777Ssetje# miniroot and do the appropriate work. 481777Ssetje# 490Sstevel@tonic-gate 500Sstevel@tonic-gateusage() 510Sstevel@tonic-gate{ 520Sstevel@tonic-gate printf "usage: root_archive pack <archive> <root>\n" 530Sstevel@tonic-gate printf " root_archive unpack <archive> <root>\n" 540Sstevel@tonic-gate printf " root_archive packmedia <solaris_image> <root>\n" 550Sstevel@tonic-gate printf " root_archive unpackmedia <solaris_image> <root>\n" 560Sstevel@tonic-gate} 570Sstevel@tonic-gate 582334Ssetjecleanup() 592334Ssetje{ 602334Ssetje if [ -d $MNT ] ; then 612334Ssetje umount $MNT 2> /dev/null 622334Ssetje rmdir $MNT 632334Ssetje fi 642334Ssetje 652851Sjongkis lofiadm -d "$TMR" 2>/dev/null 662851Sjongkis rm -f "$TMR" "$TMR.gz" 672334Ssetje} 682334Ssetje 69*4889Ssjelinekarchive_Gnome() 70*4889Ssjelinek{ 71*4889Ssjelinek MEDIA="$1" 72*4889Ssjelinek MINIROOT="$2" 73*4889Ssjelinek 74*4889Ssjelinek RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 75*4889Ssjelinek RELEASE=`basename "$RELEASE"` 76*4889Ssjelinek 77*4889Ssjelinek if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 78*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/miniroot_extra" 79*4889Ssjelinek mkdir -p "$CPIO_DIR" 80*4889Ssjelinek else 81*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot" 82*4889Ssjelinek fi 83*4889Ssjelinek 84*4889Ssjelinek 85*4889Ssjelinek # Create the gnome archive 86*4889Ssjelinek # 87*4889Ssjelinek ( 88*4889Ssjelinek # Prepopulate the gconf database. This needs to be done and 89*4889Ssjelinek # done first for several reasons. 1) Archiving out the gnome 90*4889Ssjelinek # libraries and binaries causes the gconftool-2 to not run 91*4889Ssjelinek # appropriately at boot time. 2) The binaries and libraries 92*4889Ssjelinek # needed to run this are big and thus we want to archive 93*4889Ssjelinek # them separately. 3) Having schemas prepopluated in the 94*4889Ssjelinek # miniroot means faster boot times. 95*4889Ssjelinek # 96*4889Ssjelinek 97*4889Ssjelinek cd "$MINIROOT" 98*4889Ssjelinek HOME="./tmp/root" 99*4889Ssjelinek export HOME 100*4889Ssjelinek umask 0022 101*4889Ssjelinek GCONF_CONFIG_SOURCE="xml:merged:"$MINIROOT"/.tmp_proto/root/etc/gconf/gconf.xml.defaults" 102*4889Ssjelinek export GCONF_CONFIG_SOURCE 103*4889Ssjelinek SCHEMADIR="$MINIROOT/.tmp_proto/root/etc/gconf/schemas" 104*4889Ssjelinek export SCHEMADIR 105*4889Ssjelinek /usr/bin/gconftool-2 --makefile-install-rule $SCHEMADIR/*.schemas >/dev/null 2>&1 106*4889Ssjelinek # usr/share gnome stuff 107*4889Ssjelinek cd "$MINIROOT" 108*4889Ssjelinek find usr/share/GConf usr/share/application-registry \ 109*4889Ssjelinek usr/share/autostart usr/share/dbus-1 usr/share/dtds \ 110*4889Ssjelinek usr/share/emacs usr/share/gnome usr/share/gnome-2.0 \ 111*4889Ssjelinek usr/share/gnome-background-properties \ 112*4889Ssjelinek usr/share/gtk-engines usr/share/gui-install \ 113*4889Ssjelinek usr/share/icon-naming-utils usr/share/control-center \ 114*4889Ssjelinek usr/share/icons usr/share/locale usr/share/metacity \ 115*4889Ssjelinek usr/share/mime usr/share/mime-info usr/share/pixmaps \ 116*4889Ssjelinek usr/share/scrollkeeper usr/share/sgml usr/share/themes \ 117*4889Ssjelinek usr/share/xml \ 118*4889Ssjelinek -print > /tmp/gnome_share.$$ 2>/dev/null 119*4889Ssjelinek 120*4889Ssjelinek if [ ! -f /tmp/gnome_share.$$ ] ; then 121*4889Ssjelinek echo "/tmp/gnome_share.$$ file list not found." 122*4889Ssjelinek return 123*4889Ssjelinek fi 124*4889Ssjelinek 125*4889Ssjelinek # usr/lib gnome stuff 126*4889Ssjelinek 127*4889Ssjelinek find usr/lib/libgnome*\.so\.* \ 128*4889Ssjelinek usr/lib/libgst*\.so\.* usr/lib/libgconf*\.so\.* \ 129*4889Ssjelinek usr/lib/libgdk*\.so\.* usr/lib/libgtk*\.so\.* \ 130*4889Ssjelinek usr/lib/libglade*\.so\.* usr/lib/libmetacity*\.so\.* \ 131*4889Ssjelinek usr/lib/libfontconfig*\.so\.* usr/lib/libgmodule*\.so\.* \ 132*4889Ssjelinek usr/lib/libgobject*\.so\.* usr/lib/libgthread*\.so\.* \ 133*4889Ssjelinek usr/lib/libpopt*\.so\.* usr/lib/libstartup*\.so\.* \ 134*4889Ssjelinek usr/lib/libexif*\.so\.* usr/lib/libtiff*\.so\.* \ 135*4889Ssjelinek usr/lib/libdbus*\.so\.* usr/lib/libstartup*\.so\.* \ 136*4889Ssjelinek usr/lib/libexif*\.so\.* usr/lib/libORBit*\.so\.* \ 137*4889Ssjelinek usr/lib/libmlib*\.so\.* usr/lib/libxsl*\.so\.* \ 138*4889Ssjelinek usr/lib/libpango*\.so\.* usr/lib/libpng*\.so\.* \ 139*4889Ssjelinek usr/lib/liboil*\.so\.* usr/lib/libbonobo*\.so\.* \ 140*4889Ssjelinek usr/lib/libart*\.so\.* usr/lib/libcairo*\.so\.* \ 141*4889Ssjelinek usr/lib/libjpeg*\.so\.* \ 142*4889Ssjelinek usr/lib/libpolkit*\.so\.* \ 143*4889Ssjelinek -print | egrep -v '\.so\.[0]$' > \ 144*4889Ssjelinek /tmp/gnome_lib.$$ 2>/dev/null 145*4889Ssjelinek 146*4889Ssjelinek find usr/lib/nautilus usr/lib/pango usr/lib/iconv \ 147*4889Ssjelinek usr/lib/metacity-dialog usr/lib/window-manager-settings \ 148*4889Ssjelinek usr/lib/bonobo-2.0 usr/lib/bononbo usr/lib/gtk-2.0 \ 149*4889Ssjelinek usr/lib/GConf usr/lib/bonobo-activation-server \ 150*4889Ssjelinek usr/lib/python2.4 usr/lib/gstreamer-0.10 \ 151*4889Ssjelinek usr/lib/gconf-sanity-check-2 usr/lib/gconfd \ 152*4889Ssjelinek usr/lib/gnome-vfs-2.0 usr/lib/dbus-daemon \ 153*4889Ssjelinek usr/lib/gnome-vfs-daemon usr/lib/gnome-settings-daemon \ 154*4889Ssjelinek usr/lib/gnome_segv2 usr/lib/orbit-2.0 \ 155*4889Ssjelinek usr/lib/libmlib \ 156*4889Ssjelinek print > /tmp/gnome_libdir.$$ 2>/dev/null 157*4889Ssjelinek 158*4889Ssjelinek if [ ! -f /tmp/gnome_lib.$$ -a ! -f gnome_libdir.$$ ] ; then 159*4889Ssjelinek echo "/tmp/gnome_lib.$$ file list not found." 160*4889Ssjelinek return 161*4889Ssjelinek fi 162*4889Ssjelinek 163*4889Ssjelinek # /usr/sfw gnome stuff 164*4889Ssjelinek find usr/sfw/bin usr/sfw/include usr/sfw/share usr/sfw/src \ 165*4889Ssjelinek -print > /tmp/gnome_sfw.$$ 2>/dev/null 166*4889Ssjelinek 167*4889Ssjelinek if [ ! -f /tmp/gnome_sfw.$$ ] ; then 168*4889Ssjelinek echo "/tmp/gnome_sfw.$$ file list not found." 169*4889Ssjelinek return 170*4889Ssjelinek fi 171*4889Ssjelinek 172*4889Ssjelinek # gnome app binaries usr/bin 173*4889Ssjelinek find usr/bin/gnome* usr/bin/gui-install usr/bin/bonobo* \ 174*4889Ssjelinek usr/bin/gtk-* usr/bin/fax* usr/bin/gdk* usr/bin/gif2tiff \ 175*4889Ssjelinek usr/bin/install-lan \ 176*4889Ssjelinek usr/bin/metacity* usr/bin/gst-* usr/bin/gconftool-2 \ 177*4889Ssjelinek usr/bin/pango* usr/bin/desktop* usr/bin/djpeg \ 178*4889Ssjelinek usr/bin/notify-send usr/bin/oil-bugreport \ 179*4889Ssjelinek usr/bin/bmp2tiff usr/bin/thembus-theme-applier \ 180*4889Ssjelinek usr/bin/thumbnail usr/lib/update-* \ 181*4889Ssjelinek usr/bin/ras2tiff usr/bin/raw2tiff usr/bin/rdjpgcom \ 182*4889Ssjelinek usr/bin/thumbnail usr/bin/dbus* \ 183*4889Ssjelinek usr/bin/tiff* usr/bin/rgb2ycbcr \ 184*4889Ssjelinek usr/bin/fc-cache usr/bin/fc-list \ 185*4889Ssjelinek -print > /tmp/gnome_bin.$$ 2>/dev/null 186*4889Ssjelinek 187*4889Ssjelinek if [ ! -f /tmp/gnome_bin.$$ ] ; then 188*4889Ssjelinek echo "/tmp/gnome_bin.$$ file list not found." 189*4889Ssjelinek return 190*4889Ssjelinek fi 191*4889Ssjelinek 192*4889Ssjelinek # Cat all the files together and create the gnome archive 193*4889Ssjelinek # 194*4889Ssjelinek 195*4889Ssjelinek cat /tmp/gnome_libdir.$$ /tmp/gnome_lib.$$ \ 196*4889Ssjelinek /tmp/gnome_share.$$ /tmp/gnome_sfw.$$ /tmp/gnome_bin.$$ \ 197*4889Ssjelinek > /tmp/gnome.$$ 198*4889Ssjelinek 199*4889Ssjelinek if [ ! -f /tmp/gnome.$$ ] ; then 200*4889Ssjelinek echo "/tmp/gnome.$$ file not found." 201*4889Ssjelinek return 202*4889Ssjelinek fi 203*4889Ssjelinek # Save off this file in the miniroot for use later 204*4889Ssjelinek # when unpacking. Clean up old cruft if there. 205*4889Ssjelinek # 206*4889Ssjelinek 207*4889Ssjelinek if [ -f .tmp_proto/gnome_saved ]; then 208*4889Ssjelinek rm -f .tmp_proto/gnome_saved 209*4889Ssjelinek fi 210*4889Ssjelinek 211*4889Ssjelinek cp /tmp/gnome.$$ .tmp_proto/gnome_saved 212*4889Ssjelinek 213*4889Ssjelinek # Create gnome archive 214*4889Ssjelinek # 215*4889Ssjelinek 216*4889Ssjelinek cpio -ocmPuB < /tmp/gnome.$$ 2>/dev/null | bzip2 > \ 217*4889Ssjelinek "$CPIO_DIR/gnome.cpio.bz2" 218*4889Ssjelinek 219*4889Ssjelinek # Remove files from miniroot that are in archive. 220*4889Ssjelinek # Create symlinks for files in archive 221*4889Ssjelinek 222*4889Ssjelinek rm -rf `cat /tmp/gnome_share.$$` 223*4889Ssjelinek 224*4889Ssjelinek for i in `cat /tmp/gnome_share.$$` 225*4889Ssjelinek do 226*4889Ssjelinek ln -s /tmp/root/$i $i 2>/dev/null 227*4889Ssjelinek done 228*4889Ssjelinek 229*4889Ssjelinek rm -rf `cat /tmp/gnome_lib.$$` 230*4889Ssjelinek for i in `cat /tmp/gnome_lib.$$` 231*4889Ssjelinek do 232*4889Ssjelinek ln -s /tmp/root/$i $i 2>/dev/null 233*4889Ssjelinek done 234*4889Ssjelinek 235*4889Ssjelinek rm -rf `cat /tmp/gnome_libdir.$$` 236*4889Ssjelinek for i in `cat /tmp/gnome_libdir.$$` 237*4889Ssjelinek do 238*4889Ssjelinek ln -s /tmp/root/$i $i 2>/dev/null 239*4889Ssjelinek done 240*4889Ssjelinek 241*4889Ssjelinek rm -rf `cat /tmp/gnome_sfw.$$` 242*4889Ssjelinek for i in `cat /tmp/gnome_sfw.$$` 243*4889Ssjelinek do 244*4889Ssjelinek ln -s /tmp/root/$i $i 2>/dev/null 245*4889Ssjelinek done 246*4889Ssjelinek 247*4889Ssjelinek rm -rf `cat /tmp/gnome_bin.$$` 248*4889Ssjelinek for i in `cat /tmp/gnome_bin.$$` 249*4889Ssjelinek do 250*4889Ssjelinek ln -s /tmp/root/$i $i 2>/dev/null 251*4889Ssjelinek done 252*4889Ssjelinek rm -f /tmp/gnome_share.$$ 253*4889Ssjelinek rm -f /tmp/gnome_lib.$$ 254*4889Ssjelinek rm -f /tmp/gnome_libdir.$$ 255*4889Ssjelinek rm -f /tmp/gnome_bin.$$ 256*4889Ssjelinek ) 257*4889Ssjelinek} 258*4889Ssjelinek 259*4889Ssjelinekarchive_JavaGUI() 260*4889Ssjelinek{ 261*4889Ssjelinek MEDIA="$1" 262*4889Ssjelinek MINIROOT="$2" 263*4889Ssjelinek 264*4889Ssjelinek RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 265*4889Ssjelinek RELEASE=`basename "$RELEASE"` 266*4889Ssjelinek 267*4889Ssjelinek if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 268*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/miniroot_extra" 269*4889Ssjelinek mkdir -p "$CPIO_DIR" 270*4889Ssjelinek else 271*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot" 272*4889Ssjelinek fi 273*4889Ssjelinek 274*4889Ssjelinek # Archive the java wizard components that are only used in the 275*4889Ssjelinek # non developer express path. 276*4889Ssjelinek # 277*4889Ssjelinek ( 278*4889Ssjelinek # path is usr/lib/install/data 279*4889Ssjelinek cd "$MINIROOT" 280*4889Ssjelinek find usr/lib/install/data/wizards \ 281*4889Ssjelinek -print > /tmp/java_ui.$$ 2>/dev/null 282*4889Ssjelinek 283*4889Ssjelinek if [ ! -f /tmp/java_ui.$$ ] ; then 284*4889Ssjelinek echo "/tmp/java_ui.$$ file list not found." 285*4889Ssjelinek return 286*4889Ssjelinek fi 287*4889Ssjelinek 288*4889Ssjelinek cpio -ocmPuB < /tmp/java_ui.$$ 2>/dev/null | bzip2 > \ 289*4889Ssjelinek "$CPIO_DIR/javaui.cpio.bz2" 290*4889Ssjelinek 291*4889Ssjelinek rm -rf `cat /tmp/java_ui.$$` 292*4889Ssjelinek ln -s /tmp/root/usr/lib/install/data/wizards usr/lib/install/data/wizards 2>/dev/null 293*4889Ssjelinek 294*4889Ssjelinek rm -f /tmp/java_ui.$$ 295*4889Ssjelinek 296*4889Ssjelinek ) 297*4889Ssjelinek} 298*4889Ssjelinek 299*4889Ssjelinekarchive_Misc() 300*4889Ssjelinek{ 301*4889Ssjelinek MEDIA="$1" 302*4889Ssjelinek MINIROOT="$2" 303*4889Ssjelinek 304*4889Ssjelinek RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 305*4889Ssjelinek RELEASE=`basename "$RELEASE"` 306*4889Ssjelinek 307*4889Ssjelinek if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 308*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/miniroot_extra" 309*4889Ssjelinek mkdir -p "$CPIO_DIR" 310*4889Ssjelinek else 311*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot" 312*4889Ssjelinek fi 313*4889Ssjelinek 314*4889Ssjelinek # Archive misc stuff that is needed by non devex installer 315*4889Ssjelinek # 316*4889Ssjelinek ( 317*4889Ssjelinek # usr/lib stuff 318*4889Ssjelinek cd "$MINIROOT" 319*4889Ssjelinek find usr/lib/lp -print > /tmp/lp.$$ 2>/dev/null 320*4889Ssjelinek if [ ! -f /tmp/lp.$$ ] ; then 321*4889Ssjelinek echo "/tmp/lp.$$ file list not found." 322*4889Ssjelinek return 323*4889Ssjelinek fi 324*4889Ssjelinek 325*4889Ssjelinek cpio -ocmPuB < /tmp/lp.$$ 2>/dev/null | bzip2 > \ 326*4889Ssjelinek "$CPIO_DIR/lpmisc.cpio.bz2" 327*4889Ssjelinek 328*4889Ssjelinek rm -rf `cat /tmp/lp.$$` 329*4889Ssjelinek ln -s /tmp/root/usr/lib/lp usr/lib/lp 2>/dev/null 330*4889Ssjelinek 331*4889Ssjelinek rm -f /tmp/lp.$$ 332*4889Ssjelinek ) 333*4889Ssjelinek 334*4889Ssjelinek} 335*4889Ssjelinek 336*4889Ssjelinekarchive_Perl() 337*4889Ssjelinek{ 338*4889Ssjelinek MEDIA="$1" 339*4889Ssjelinek MINIROOT="$2" 340*4889Ssjelinek 341*4889Ssjelinek RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 342*4889Ssjelinek RELEASE=`basename "$RELEASE"` 343*4889Ssjelinek 344*4889Ssjelinek if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 345*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/miniroot_extra" 346*4889Ssjelinek mkdir -p "$CPIO_DIR" 347*4889Ssjelinek else 348*4889Ssjelinek CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot" 349*4889Ssjelinek fi 350*4889Ssjelinek 351*4889Ssjelinek # Archive perl, it is only needed by gnome gui. 352*4889Ssjelinek # 353*4889Ssjelinek ( 354*4889Ssjelinek # in usr 355*4889Ssjelinek cd "$MINIROOT" 356*4889Ssjelinek find usr/perl5 -print > /tmp/perl.$$ 2>/dev/null 357*4889Ssjelinek 358*4889Ssjelinek if [ ! -f /tmp/perl.$$ ] ; then 359*4889Ssjelinek echo "/tmp/perl.$$ file list not found." 360*4889Ssjelinek return 361*4889Ssjelinek fi 362*4889Ssjelinek cpio -ocmPuB < /tmp/perl.$$ 2>/dev/null | bzip2 > \ 363*4889Ssjelinek "$CPIO_DIR/perl.cpio.bz2" 364*4889Ssjelinek 365*4889Ssjelinek rm -rf `cat /tmp/perl.$$` 2>/dev/null 366*4889Ssjelinek ln -s /tmp/root/perl5 usr/perl5 2>/dev/null 367*4889Ssjelinek 368*4889Ssjelinek rm -f /tmp/perl.$$ 369*4889Ssjelinek ) 370*4889Ssjelinek} 3711777Ssetjearchive_X() 3720Sstevel@tonic-gate{ 3731777Ssetje MEDIA="$1" 3741777Ssetje MINIROOT="$2" 3750Sstevel@tonic-gate 3761777Ssetje RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 3771777Ssetje RELEASE=`basename "$RELEASE"` 3780Sstevel@tonic-gate 3791777Ssetje if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 3801777Ssetje CPIO_DIR="$MEDIA/$RELEASE/Tools/miniroot_extra" 3811777Ssetje mkdir -p "$CPIO_DIR" 3821777Ssetje else 3831777Ssetje CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot" 3841777Ssetje fi 3850Sstevel@tonic-gate 3860Sstevel@tonic-gate # create the graphics and non-graphics X archive 3870Sstevel@tonic-gate # 3882851Sjongkis ( 389*4889Ssjelinek cd "$MINIROOT" 390*4889Ssjelinek find usr/openwin usr/dt usr/X11 -print 2> /dev/null |\ 3912851Sjongkis cpio -ocmPuB 2> /dev/null | bzip2 > "$CPIO_DIR/X.cpio.bz2" 3920Sstevel@tonic-gate 393*4889Ssjelinek find usr/openwin/bin/mkfontdir \ 394*4889Ssjelinek usr/openwin/lib/installalias \ 395*4889Ssjelinek usr/openwin/server/lib/libfont.so.1 \ 396*4889Ssjelinek usr/openwin/server/lib/libtypesclr.so.0 \ 3972851Sjongkis -print | cpio -ocmPuB 2> /dev/null | bzip2 > \ 3982851Sjongkis "$CPIO_DIR/X_small.cpio.bz2" 3990Sstevel@tonic-gate 400*4889Ssjelinek rm -rf usr/dt usr/openwin usr/X11 401*4889Ssjelinek ln -s /tmp/root/usr/dt usr/dt 402*4889Ssjelinek ln -s /tmp/root/usr/openwin usr/openwin 403*4889Ssjelinek ln -s /tmp/root/usr/X11 usr/X11 4042851Sjongkis ) 4051777Ssetje} 4061777Ssetje 4071777Ssetjepackmedia() 4081777Ssetje{ 4091777Ssetje MEDIA="$1" 4101777Ssetje MINIROOT="$2" 4111777Ssetje 4121777Ssetje RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 4131777Ssetje RELEASE=`basename "$RELEASE"` 4141777Ssetje 4151777Ssetje mkdir -p "$MEDIA/$RELEASE/Tools/Boot" 4163446Smrj mkdir -p "$MEDIA/boot/platform/i86pc/kernel" 4171777Ssetje 4181777Ssetje # archive package databases to conserve memory 4191777Ssetje # 4202851Sjongkis ( 4212851Sjongkis cd "$MINIROOT" 4222851Sjongkis find tmp/root/var/sadm/install tmp/root/var/sadm/pkg -print | \ 4232851Sjongkis cpio -ocmPuB 2> /dev/null | bzip2 > \ 4242851Sjongkis "$MEDIA/$RELEASE/Tools/Boot/pkg_db.cpio.bz2" 4252851Sjongkis ) 4261777Ssetje 4271777Ssetje rm -rf "$MINIROOT/tmp/root/var/sadm/install" 4281777Ssetje rm -rf "$MINIROOT/tmp/root/var/sadm/pkg" 4291777Ssetje 4300Sstevel@tonic-gate # clear out 64 bit support to conserve memory 4310Sstevel@tonic-gate # 4322851Sjongkis if [ "$STRIP_AMD64" != false ] ; then 4332334Ssetje find "$MINIROOT" -name amd64 -type directory | xargs rm -rf 4342334Ssetje fi 4350Sstevel@tonic-gate 4362595Ssetje archive_X "$MEDIA" "$MINIROOT" 4372595Ssetje 438*4889Ssjelinek # Take out the gnome and java parts of the installer from 439*4889Ssjelinek # the miniroot. These are not required to boot the system 440*4889Ssjelinek # and start the installers. 441*4889Ssjelinek 442*4889Ssjelinek archive_Gnome "$MEDIA" "$MINIROOT" 443*4889Ssjelinek archive_JavaGUI "$MEDIA" "$MINIROOT" 444*4889Ssjelinek archive_Perl "$MEDIA" "$MINIROOT" 445*4889Ssjelinek archive_Misc "$MEDIA" "$MINIROOT" 446*4889Ssjelinek 4471777Ssetje cp "$MINIROOT/platform/i86pc/multiboot" "$MEDIA/boot" 4483446Smrj cp "$MINIROOT/platform/i86pc/kernel/unix" \ 4493446Smrj "$MEDIA/boot/platform/i86pc/kernel/unix" 4500Sstevel@tonic-gate 4511821Ssetje # copy the install menu to menu.lst so we have a menu 4521821Ssetje # on the install media 4531821Ssetje # 4541821Ssetje if [ -f "${MINIROOT}/boot/grub/install_menu" ] ; then 4551821Ssetje cp ${MINIROOT}/boot/grub/install_menu \ 4561821Ssetje ${MEDIA}/boot/grub/menu.lst 4571821Ssetje fi 4581821Ssetje 4592851Sjongkis ( 4602851Sjongkis cd "$MEDIA/$RELEASE/Tools/Boot" 4612851Sjongkis ln -sf ../../../boot/x86.miniroot 4622851Sjongkis ln -sf ../../../boot/multiboot 4632851Sjongkis ln -sf ../../../boot/grub/pxegrub 4642851Sjongkis ) 4651777Ssetje} 4660Sstevel@tonic-gate 4671777Ssetjeunarchive_X() 4681777Ssetje{ 4691777Ssetje MEDIA="$1" 4701777Ssetje UNPACKED_ROOT="$2" 4711777Ssetje 4721777Ssetje RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 4731777Ssetje RELEASE=`basename "$RELEASE"` 4741777Ssetje 4751777Ssetje if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 4761777Ssetje CPIO_DIR="$MEDIA/$RELEASE/Tools/miniroot_extra" 4771777Ssetje else 4781777Ssetje CPIO_DIR="$MEDIA/$RELEASE/Tools/Boot" 4790Sstevel@tonic-gate fi 4801777Ssetje 4811777Ssetje # unpack X 4821777Ssetje # 4832851Sjongkis ( 484*4889Ssjelinek cd "$UNPACKED_ROOT" 485*4889Ssjelinek rm -rf usr/dt usr/openwin usr/X11 4862851Sjongkis bzcat "$CPIO_DIR/X.cpio.bz2" | cpio -icdmu 2> /dev/null 4872851Sjongkis ) 4880Sstevel@tonic-gate} 4890Sstevel@tonic-gate 4900Sstevel@tonic-gateunpackmedia() 4911777Ssetje{ 4921777Ssetje MEDIA="$1" 4931777Ssetje UNPACKED_ROOT="$2" 4940Sstevel@tonic-gate 4951777Ssetje RELEASE=`/bin/ls -d "$MEDIA/Solaris_"*` 4961777Ssetje RELEASE=`basename "$RELEASE"` 4971777Ssetje 4981777Ssetje unarchive_X "$MEDIA" "$UNPACKED_ROOT" 4990Sstevel@tonic-gate 5000Sstevel@tonic-gate # unpack package databases 5010Sstevel@tonic-gate # 5022851Sjongkis ( 5032851Sjongkis cd "$UNPACKED_ROOT" 5042851Sjongkis bzcat "$MEDIA/$RELEASE/Tools/Boot/pkg_db.cpio.bz2" | 5052851Sjongkis cpio -icdmu 2> /dev/null 506*4889Ssjelinek 507*4889Ssjelinek # unpack gnome, perl, java and misc 508*4889Ssjelinek # Remove symlinks left from unpacking x86.miniroot so that 509*4889Ssjelinek # unpacking subsequent archives will populate appropriately. 510*4889Ssjelinek # 511*4889Ssjelinek rm -rf usr/perl5 512*4889Ssjelinek rm -rf usr/lib/install/data/wizards 513*4889Ssjelinek rm -rf usr/lib/lp 514*4889Ssjelinek 515*4889Ssjelinek # Gnome list saved off from packmedia 516*4889Ssjelinek for i in `cat .tmp_proto/gnome_saved` 517*4889Ssjelinek do 518*4889Ssjelinek rm -rf $i 519*4889Ssjelinek done 520*4889Ssjelinek 521*4889Ssjelinek bzcat "$MEDIA/$RELEASE/Tools/Boot/gnome.cpio.bz2" | 522*4889Ssjelinek cpio -icdmu 2>/dev/null 523*4889Ssjelinek bzcat "$MEDIA/$RELEASE/Tools/Boot/javaui.cpio.bz2" | 524*4889Ssjelinek cpio -icdmu 2>/dev/null 525*4889Ssjelinek bzcat "$MEDIA/$RELEASE/Tools/Boot/lpmisc.cpio.bz2" | 526*4889Ssjelinek cpio -icdmu 2>/dev/null 527*4889Ssjelinek bzcat "$MEDIA/$RELEASE/Tools/Boot/perl.cpio.bz2" | 528*4889Ssjelinek cpio -icdmu 2>/dev/null 5292851Sjongkis ) 5300Sstevel@tonic-gate} 5310Sstevel@tonic-gate 5320Sstevel@tonic-gatedo_unpack() 5330Sstevel@tonic-gate{ 5341777Ssetje rm -rf "$UNPACKED_ROOT" 5351777Ssetje mkdir -p "$UNPACKED_ROOT" 5362851Sjongkis ( 5372851Sjongkis cd $MNT 5382851Sjongkis find . -print | cpio -pdum "$UNPACKED_ROOT" 2> /dev/null 5392851Sjongkis ) 5400Sstevel@tonic-gate umount $MNT 5410Sstevel@tonic-gate} 5420Sstevel@tonic-gate 5430Sstevel@tonic-gateunpack() 5440Sstevel@tonic-gate{ 5450Sstevel@tonic-gate 5461777Ssetje if [ ! -f "$MR" ] ; then 5470Sstevel@tonic-gate usage 5480Sstevel@tonic-gate exit 1 5490Sstevel@tonic-gate fi 5500Sstevel@tonic-gate 5511777Ssetje gzcat "$MR" > $TMR 5520Sstevel@tonic-gate 5532334Ssetje LOFIDEV=`/usr/sbin/lofiadm -a $TMR` 5540Sstevel@tonic-gate if [ $? != 0 ] ; then 5550Sstevel@tonic-gate echo lofi plumb failed 5560Sstevel@tonic-gate exit 2 5570Sstevel@tonic-gate fi 5580Sstevel@tonic-gate 5591777Ssetje mkdir -p $MNT 5600Sstevel@tonic-gate 5612334Ssetje FSTYP=`fstyp $LOFIDEV` 5620Sstevel@tonic-gate 5631777Ssetje if [ "$FSTYP" = ufs ] ; then 5642334Ssetje /usr/sbin/mount -o ro,nologging $LOFIDEV $MNT 5650Sstevel@tonic-gate do_unpack 5661777Ssetje elif [ "$FSTYP" = hsfs ] ; then 5672334Ssetje /usr/sbin/mount -F hsfs -o ro $LOFIDEV $MNT 5680Sstevel@tonic-gate do_unpack 5690Sstevel@tonic-gate else 5700Sstevel@tonic-gate printf "invalid root archive\n" 5710Sstevel@tonic-gate fi 5720Sstevel@tonic-gate 5730Sstevel@tonic-gate rmdir $MNT 5742851Sjongkis lofiadm -d $TMR ; LOFIDEV= 5750Sstevel@tonic-gate rm $TMR 5760Sstevel@tonic-gate} 5770Sstevel@tonic-gate 5780Sstevel@tonic-gatepack() 5790Sstevel@tonic-gate{ 5801777Ssetje if [ ! -d "$UNPACKED_ROOT" -o -z "$MR" ] ; then 5810Sstevel@tonic-gate usage 5820Sstevel@tonic-gate exit 1 5830Sstevel@tonic-gate fi 5840Sstevel@tonic-gate 5852511Sjongkis # Estimate image size and add %10 overhead for ufs stuff. 5862511Sjongkis # Note, we can't use du here in case $UNPACKED_ROOT is on a filesystem, 5872511Sjongkis # e.g. zfs, in which the disk usage is less than the sum of the file 5882511Sjongkis # sizes. The nawk code 5892511Sjongkis # 5902511Sjongkis # {t += ($7 % 1024) ? (int($7 / 1024) + 1) * 1024 : $7} 5912511Sjongkis # 5922511Sjongkis # below rounds up the size of a file/directory, in bytes, to the 5932511Sjongkis # next multiple of 1024. This mimics the behavior of ufs especially 5942511Sjongkis # with directories. This results in a total size that's slightly 5952511Sjongkis # bigger than if du was called on a ufs directory. 5962511Sjongkis size=$(find "$UNPACKED_ROOT" -ls | nawk ' 5972511Sjongkis {t += ($7 % 1024) ? (int($7 / 1024) + 1) * 1024 : $7} 5982511Sjongkis END {print int(t * 1.10 / 1024)}') 5990Sstevel@tonic-gate 6002334Ssetje /usr/sbin/mkfile ${size}k "$TMR" 6012334Ssetje 6022334Ssetje LOFIDEV=`/usr/sbin/lofiadm -a "$TMR"` 6030Sstevel@tonic-gate if [ $? != 0 ] ; then 6040Sstevel@tonic-gate echo lofi plumb failed 6050Sstevel@tonic-gate exit 2 6060Sstevel@tonic-gate fi 6070Sstevel@tonic-gate 6082334Ssetje RLOFIDEV=`echo $LOFIDEV | sed s/lofi/rlofi/` 6092334Ssetje newfs $RLOFIDEV < /dev/null 2> /dev/null 6101777Ssetje mkdir -p $MNT 6112334Ssetje mount -o nologging $LOFIDEV $MNT 6121777Ssetje rmdir $MNT/lost+found 6132851Sjongkis ( 6142851Sjongkis cd "$UNPACKED_ROOT" 6152851Sjongkis find . -print | cpio -pdum $MNT 2> /dev/null 6162851Sjongkis ) 6170Sstevel@tonic-gate lockfs -f $MNT 6180Sstevel@tonic-gate umount $MNT 6190Sstevel@tonic-gate rmdir $MNT 6202334Ssetje lofiadm -d $LOFIDEV 6212851Sjongkis LOFIDEV= 6220Sstevel@tonic-gate 6232334Ssetje rm -f "$TMR.gz" 6242334Ssetje gzip -f "$TMR" 6252334Ssetje mv "$TMR.gz" "$MR" 6261777Ssetje chmod a+r "$MR" 6270Sstevel@tonic-gate} 6280Sstevel@tonic-gate 6290Sstevel@tonic-gate# main 6300Sstevel@tonic-gate# 6310Sstevel@tonic-gate 6322334SsetjeEXTRA_SPACE=0 6332851SjongkisSTRIP_AMD64= 6342334Ssetje 6352334Ssetjewhile getopts s:6 opt ; do 6362334Ssetje case $opt in 6372334Ssetje s) EXTRA_SPACE="$OPTARG" 6382334Ssetje ;; 6392334Ssetje 6) STRIP_AMD64=false 6402334Ssetje ;; 6412334Ssetje *) usage 6422334Ssetje exit 1 6432334Ssetje ;; 6442334Ssetje esac 6452334Ssetjedone 6462334Ssetjeshift `expr $OPTIND - 1` 6472334Ssetje 6480Sstevel@tonic-gateif [ $# != 3 ] ; then 6490Sstevel@tonic-gate usage 6500Sstevel@tonic-gate exit 1 6510Sstevel@tonic-gatefi 6520Sstevel@tonic-gate 6531777SsetjeUNPACKED_ROOT="$3" 6541777SsetjeBASE="`pwd`" 6550Sstevel@tonic-gateMNT=/tmp/mnt$$ 6562334SsetjeTMR=/tmp/mr$$ 6572334SsetjeLOFIDEV= 6581777SsetjeMR="$2" 6590Sstevel@tonic-gate 6600Sstevel@tonic-gateif [ "`dirname $MR`" = . ] ; then 6611777Ssetje MR="$BASE/$MR" 6620Sstevel@tonic-gatefi 6630Sstevel@tonic-gateif [ "`dirname $UNPACKED_ROOT`" = . ] ; then 6641777Ssetje UNPACKED_ROOT="$BASE/$UNPACKED_ROOT" 6650Sstevel@tonic-gatefi 6660Sstevel@tonic-gate 6672334Ssetjetrap cleanup EXIT 6682334Ssetje 6690Sstevel@tonic-gatecase $1 in 6700Sstevel@tonic-gate packmedia) 6711777Ssetje MEDIA="$MR" 6721777Ssetje MR="$MR/boot/x86.miniroot" 6731777Ssetje 6741777Ssetje if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 6751777Ssetje archive_X "$MEDIA" "$UNPACKED_ROOT" 6761777Ssetje else 6771777Ssetje packmedia "$MEDIA" "$UNPACKED_ROOT" 6781777Ssetje pack 6791777Ssetje fi ;; 6800Sstevel@tonic-gate unpackmedia) 6811777Ssetje MEDIA="$MR" 6821777Ssetje MR="$MR/boot/x86.miniroot" 6831777Ssetje 6841777Ssetje if [ -d "$UNPACKED_ROOT/kernel/drv/sparcv9" ] ; then 6851777Ssetje unarchive_X "$MEDIA" "$UNPACKED_ROOT" 6861777Ssetje else 6871777Ssetje unpack 6881777Ssetje unpackmedia "$MEDIA" "$UNPACKED_ROOT" 6891777Ssetje fi ;; 6900Sstevel@tonic-gate pack) pack ;; 6910Sstevel@tonic-gate unpack) unpack ;; 6920Sstevel@tonic-gate *) usage ;; 6930Sstevel@tonic-gateesac 694