39 BUILDNUM=${VERSION//r/}
  40 if [[ ${SRCDIR:0:1} != "/" ]]; then
  41   SRCDIR=`pwd`/$SRCDIR
  42 fi
  43 if [[ -z "${1}" ]]; then
  44   echo "$0 <zfs pool> [checkpoint]"
  45   exit 1
  46 else
  47   BASE=${1}
  48   shift
  49   BASEDIR=`zfs get -o value -H mountpoint $BASE`
  50 fi
  51 MKFILEDIR=/tmp
  52 WORKDIR=$BASEDIR
  53 ROOTDIR=$WORKDIR/root
  54 if [[ ! -d $ROOTDIR ]]; then
  55   zfs create -o compression=off $BASE/root || fail "zfs create failed"
  56 fi
  57 SVCCFG_DTD=${ROOTDIR}/usr/share/lib/xml/dtd/service_bundle.dtd.1
  58 SVCCFG_REPOSITORY=${ROOTDIR}/etc/svc/repository.db
  59 SVCCFG=/usr/sbin/svccfg
  60 export WORKDIR ROOTDIR SVCCFG_DTD SVCCFG_REPOSITORY SVCCFG
  61 
  62 # This was uber-helpful
  63 # http://alexeremin.blogspot.com/2008/12/preparing-small-miniroot-with-zfs-and.html
  64 
  65 PKG=/bin/pkg
  66 
  67 UNNEEDED_MANIFESTS="application/management/net-snmp.xml
  68         application/pkg/pkg-server.xml application/pkg/pkg-mdns.xml
  69         system/rmtmpfiles.xml system/mdmonitor.xml
  70         system/fm/notify-params.xml system/device/allocate.xml
  71         system/device/devices-audio.xml system/auditd.xml
  72         system/metasync.xml system/pkgserv.xml system/fcoe_initiator.xml
  73         system/metainit.xml system/zonestat.xml
  74         system/cron.xml system/rbac.xml system/sac.xml
  75         system/auditset.xml system/hotplug.xml
  76         system/wusb.xml system/zones.xml
  77         system/intrd.xml system/coreadm.xml
  78         system/extended-accounting.xml
  79         system/scheduler.xml
 
 255         chkpt fixup
 256         ;;
 257 
 258         "fixup")
 259 
 260         echo "Fixing up install root"
 261         (cp $ROOTDIR/etc/vfstab $WORKDIR/vfstab && \
 262                 awk '{if($3!="/"){print;}}' $WORKDIR/vfstab > $ROOTDIR/etc/vfstab && \
 263                 echo "/devices/ramdisk:a - / ufs - no nologging" >> $ROOTDIR/etc/vfstab) || \
 264                 fail "vfstab / updated"
 265         rm $WORKDIR/vfstab
 266         cp $ROOTDIR/lib/svc/seed/global.db $ROOTDIR/etc/svc/repository.db
 267 
 268         sed -i 's,PASSREQ=YES,PASSREQ=NO,' $ROOTDIR/etc/default/login
 269 
 270         ${SVCCFG} import ${ROOTDIR}/lib/svc/manifest/milestone/sysconfig.xml
 271         for xml in $UNNEEDED_MANIFESTS; do
 272                 rm -f ${ROOTDIR}/lib/svc/manifest/$xml && echo " --- tossing $xml"
 273         done
 274         echo " --- initial manifest import"
 275         ${ROOTDIR}/lib/svc/method/manifest-import -f ${ROOTDIR}/etc/svc/repository.db \
 276                 -d ${ROOTDIR}/lib/svc/manifest
 277 
 278         ${SVCCFG} -s 'system/boot-archive' setprop 'start/exec=:true'
 279         ${SVCCFG} -s 'system/manifest-import' setprop 'start/exec=:true'
 280         ${SVCCFG} -s "system/intrd:default" setprop "general/enabled=false"
 281         ${SVCCFG} -s "system/initial-boot" setprop "start/timeout_seconds=600"
 282         echo " --- nuetering the manifest import"
 283         echo "#!/bin/ksh" > ${ROOTDIR}/lib/svc/method/manifest-import
 284         echo "exit 0" >> ${ROOTDIR}/lib/svc/method/manifest-import
 285         chmod 555 ${ROOTDIR}/lib/svc/method/manifest-import
 286         chkpt cull
 287         ;;
 288 
 289         "cull")
 290         if [[ -z "$BIGROOT" ]]; then
 291                 load_keep_list data/*
 292                 while read file
 293                 do
 294                         if [[ -n "$file" && \
 295                               ${keep_list[$file]} == "" && \
 296                               -e "$ROOTDIR/$file" && \
 297                               ! -d $ROOTDIR/$file ]] ; then
 298                                 rm -f $ROOTDIR/$file
 299                         fi
 300                 done < <(cd $ROOTDIR && find ./ | cut -c3-)
 301                 for path in $RMRF ; do
 302                         rm -rf ${ROOTDIR}$path && echo " -- tossing $path"      
 
 | 
 
 
  39 BUILDNUM=${VERSION//r/}
  40 if [[ ${SRCDIR:0:1} != "/" ]]; then
  41   SRCDIR=`pwd`/$SRCDIR
  42 fi
  43 if [[ -z "${1}" ]]; then
  44   echo "$0 <zfs pool> [checkpoint]"
  45   exit 1
  46 else
  47   BASE=${1}
  48   shift
  49   BASEDIR=`zfs get -o value -H mountpoint $BASE`
  50 fi
  51 MKFILEDIR=/tmp
  52 WORKDIR=$BASEDIR
  53 ROOTDIR=$WORKDIR/root
  54 if [[ ! -d $ROOTDIR ]]; then
  55   zfs create -o compression=off $BASE/root || fail "zfs create failed"
  56 fi
  57 SVCCFG_DTD=${ROOTDIR}/usr/share/lib/xml/dtd/service_bundle.dtd.1
  58 SVCCFG_REPOSITORY=${ROOTDIR}/etc/svc/repository.db
  59 #SVCCFG=/usr/sbin/svccfg
  60 if [[ -f ${PREBUILT_ILLUMOS}/usr/src/cmd/svc/svccfg/svccfg-native ]]; then
  61         SVCCFG=${PREBUILT_ILLUMOS}/usr/src/cmd/svc/svccfg/svccfg-native
  62 else
  63         echo "WARNING -- Not using 'native' svccfg, may hang on build."
  64         echo "       We recommend a pre-built illumos's svccfg-native."
  65         echo "       Set PREBUILT_ILLUMOS in your environment to point"
  66         echo "       to a built illumos-omnios repository."
  67         SVCCFG=/usr/sbin/svccfg
  68 fi
  69 export WORKDIR ROOTDIR SVCCFG_DTD SVCCFG_REPOSITORY SVCCFG
  70 
  71 # This was uber-helpful
  72 # http://alexeremin.blogspot.com/2008/12/preparing-small-miniroot-with-zfs-and.html
  73 
  74 PKG=/bin/pkg
  75 
  76 UNNEEDED_MANIFESTS="application/management/net-snmp.xml
  77         application/pkg/pkg-server.xml application/pkg/pkg-mdns.xml
  78         system/rmtmpfiles.xml system/mdmonitor.xml
  79         system/fm/notify-params.xml system/device/allocate.xml
  80         system/device/devices-audio.xml system/auditd.xml
  81         system/metasync.xml system/pkgserv.xml system/fcoe_initiator.xml
  82         system/metainit.xml system/zonestat.xml
  83         system/cron.xml system/rbac.xml system/sac.xml
  84         system/auditset.xml system/hotplug.xml
  85         system/wusb.xml system/zones.xml
  86         system/intrd.xml system/coreadm.xml
  87         system/extended-accounting.xml
  88         system/scheduler.xml
 
 264         chkpt fixup
 265         ;;
 266 
 267         "fixup")
 268 
 269         echo "Fixing up install root"
 270         (cp $ROOTDIR/etc/vfstab $WORKDIR/vfstab && \
 271                 awk '{if($3!="/"){print;}}' $WORKDIR/vfstab > $ROOTDIR/etc/vfstab && \
 272                 echo "/devices/ramdisk:a - / ufs - no nologging" >> $ROOTDIR/etc/vfstab) || \
 273                 fail "vfstab / updated"
 274         rm $WORKDIR/vfstab
 275         cp $ROOTDIR/lib/svc/seed/global.db $ROOTDIR/etc/svc/repository.db
 276 
 277         sed -i 's,PASSREQ=YES,PASSREQ=NO,' $ROOTDIR/etc/default/login
 278 
 279         ${SVCCFG} import ${ROOTDIR}/lib/svc/manifest/milestone/sysconfig.xml
 280         for xml in $UNNEEDED_MANIFESTS; do
 281                 rm -f ${ROOTDIR}/lib/svc/manifest/$xml && echo " --- tossing $xml"
 282         done
 283         echo " --- initial manifest import"
 284         # See if we can transform manifest-import to use the 'native' svccfg.
 285         sed 's/\/usr\/sbin\/svccfg/\$SVCCFG/g' \
 286             < ${ROOTDIR}/lib/svc/method/manifest-import \
 287             > /tmp/manifest-import.$$
 288         chmod 0755 /tmp/manifest-import.$$
 289         export SVCCFG
 290         /tmp/manifest-import.$$ -f ${ROOTDIR}/etc/svc/repository.db \
 291                 -d ${ROOTDIR}/lib/svc/manifest
 292         /bin/rm -f /tmp/manifest-import.$$
 293 
 294         ${SVCCFG} -s 'system/boot-archive' setprop 'start/exec=:true'
 295         ${SVCCFG} -s 'system/manifest-import' setprop 'start/exec=:true'
 296         ${SVCCFG} -s "system/intrd:default" setprop "general/enabled=false"
 297         ${SVCCFG} -s "system/initial-boot" setprop "start/timeout_seconds=600"
 298         echo " --- neutering the manifest import"
 299         echo "#!/bin/ksh" > ${ROOTDIR}/lib/svc/method/manifest-import
 300         echo "exit 0" >> ${ROOTDIR}/lib/svc/method/manifest-import
 301         chmod 555 ${ROOTDIR}/lib/svc/method/manifest-import
 302         chkpt cull
 303         ;;
 304 
 305         "cull")
 306         if [[ -z "$BIGROOT" ]]; then
 307                 load_keep_list data/*
 308                 while read file
 309                 do
 310                         if [[ -n "$file" && \
 311                               ${keep_list[$file]} == "" && \
 312                               -e "$ROOTDIR/$file" && \
 313                               ! -d $ROOTDIR/$file ]] ; then
 314                                 rm -f $ROOTDIR/$file
 315                         fi
 316                 done < <(cd $ROOTDIR && find ./ | cut -c3-)
 317                 for path in $RMRF ; do
 318                         rm -rf ${ROOTDIR}$path && echo " -- tossing $path"      
 
 |