1 #!/bin/bash
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License, Version 1.0 only
   7 # (the "License").  You may not use this file except in compliance
   8 # with the License.
   9 #
  10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  11 # or http://www.opensolaris.org/os/licensing.
  12 # See the License for the specific language governing permissions
  13 # and limitations under the License.
  14 #
  15 # When distributing Covered Code, include this CDDL HEADER in each
  16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  17 # If applicable, add the following below this CDDL HEADER, with the
  18 # fields enclosed by brackets "[]" replaced with your own identifying
  19 # information: Portions Copyright [yyyy] [name of copyright owner]
  20 #
  21 # CDDL HEADER END
  22 #
  23 #
  24 # Copyright 2012 OmniTI Computer Consulting, Inc.  All rights reserved.
  25 # Use is subject to license terms.
  26 #
  27 fail() {
  28         echo "ERROR: $*"
  29         exit 1
  30 }
  31 
  32 # NOTE --> The URL needs to be updated with every release.
  33 # Change "bloody" to whatever release the current branch is.
  34 PUBLISHER=omnios
  35 : ${PKGURL:=http://pkg.omniti.com/omnios/bloody}
  36 : ${GZIP_CMD:=gzip}
  37 SRCDIR=$(dirname $0)
  38 DIDWORK=0
  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
 
 101         network/rpc/meta.xml network/rpc/metamh.xml
 102         network/socket-filter-kssl.xml network/network-netcfg.xml
 103         network/nfs/status.xml network/nfs/cbd.xml
 104         network/nfs/nlockmgr.xml network/nfs/mapid.xml
 105         network/nfs/client.xml network/network-ipqos.xml
 106         network/security/ktkt_warn.xml network/security/krb5kdc.xml
 107         network/security/kadmin.xml network/network-install.xml
 108         network/bridge.xml network/network-initial.xml
 109         network/network-ipmgmt.xml network/routing/legacy-routing.xml
 110         network/network-service.xml network/network-physical.xml
 111         network/network-netmask.xml network/dlmgmt.xml
 112         network/network-location.xml network/ibd-post-upgrade.xml
 113         network/network-routing-setup.xml network/network-loopback.xml
 114         network/dns/client.xml network/dns/install.xml
 115         network/dns/multicast.xml platform/i86pc/acpihpd.xml
 116         system/hostid.xml system/power.xml system/pfexecd.xml
 117         system/consadm.xml system/pools.xml system/console-login.xml
 118         system/stmf.xml system/fmd.xml system/utmp.xml
 119         system/poold.xml system/dumpadm.xml"
 120 
 121 SYSTEM="system/boot/grub system/boot/real-mode system/boot/wanboot/internal
 122         system/boot/loader system/boot/wanboot system/data/hardware-registry
 123         system/data/keyboard/keytables system/data/terminfo
 124         system/data/zoneinfo system/extended-system-utilities
 125         system/file-system/autofs system/file-system/nfs
 126         system/file-system/smb system/file-system/udfs
 127         system/file-system/zfs system/flash/fwflash
 128         system/fru-id/platform system/fru-id system/ipc
 129         system/kernel/dynamic-reconfiguration/i86pc
 130         system/kernel/security/gss system/library/math
 131         system/library/platform system/library/policykit
 132         system/library/processor
 133         system/library/storage/fibre-channel/hbaapi
 134         system/library/storage/fibre-channel/libsun_fc
 135         system/library/storage/ima/header-ima
 136         system/library/storage/ima
 137         system/library/storage/libmpapi
 138         system/library/storage/libmpscsi_vhci
 139         system/library/storage/scsi-plugins
 140         system/library system/network
 141         system/prerequisite/gnu system/storage/luxadm
 
 
 147         driver/graphics/agpgart driver/graphics/atiatom driver/graphics/drm
 148         driver/i86pc/fipe driver/i86pc/ioat driver/i86pc/platform
 149         driver/misc/virtio
 150         driver/network/afe driver/network/amd8111s driver/network/atge
 151         driver/network/bfe driver/network/bge driver/network/bnx
 152         driver/network/bnxe driver/network/bpf driver/network/chxge
 153         driver/network/dmfe driver/network/e1000g driver/network/elxl
 154         driver/network/emlxs driver/network/eoib driver/network/fcip
 155         driver/network/fcp driver/network/fcsm driver/network/fp
 156         driver/network/hermon driver/network/hme driver/network/hxge
 157         driver/network/ib driver/network/ibdma driver/network/ibp
 158         driver/network/igb driver/network/iprb driver/network/ixgb
 159         driver/network/ixgbe driver/network/mxfe driver/network/myri10ge
 160         driver/network/nge driver/network/ntxn driver/network/nxge
 161         driver/network/vmxnet3s driver/network/sfxge driver/network/i40e
 162         driver/network/ofk driver/network/pcn driver/network/platform
 163         driver/network/qlc driver/network/rds driver/network/rdsv3
 164         driver/network/rge driver/network/rpcib driver/network/rtls
 165         driver/network/sdp driver/network/sdpib driver/network/sfe
 166         driver/network/tavor driver/network/usbecm driver/network/vr
 167         driver/network/xge driver/network/yge driver/pcmcia driver/serial/pcser
 168         driver/serial/usbftdi driver/serial/usbsacm driver/serial/usbser
 169         driver/serial/usbser_edge driver/serial/usbsksp
 170         driver/serial/usbsksp/usbs49_fw driver/serial/usbsprl
 171         driver/storage/aac driver/storage/adpu320 driver/storage/ahci
 172         driver/storage/amr driver/storage/arcmsr driver/storage/ata
 173         driver/storage/bcm_sata driver/storage/blkdev driver/storage/cpqary3
 174         driver/storage/glm driver/storage/lsimega driver/storage/marvell88sx
 175         driver/storage/mega_sas driver/storage/mpt_sas driver/storage/mr_sas
 176         driver/storage/nv_sata driver/storage/pcata driver/storage/pmcs
 177         driver/storage/sbp2 driver/storage/scsa1394 driver/storage/sdcard
 178         driver/storage/ses driver/storage/si3124 driver/storage/smp
 179         driver/usb driver/usb/ugen driver/xvm/pv driver/storage/vioblk
 180         driver/network/vioif driver/storage/nvme driver/storage/pvscsi"
 181 
 182 PARTS="release/name release/notices service/picl install/beadm SUNWcs SUNWcsd
 183         library/libidn shell/pipe-viewer text/less editor/vim
 184         developer/linker file/gnu-coreutils openssh openssh-server
 185         diagnostic/diskinfo"
 186 
 187 PKGS="$PARTS $SYSTEM $DRIVERS"
 188 
 189 if [ -n "$DEBUG" ]; then
 190         PKGS="$PKGS $DEBUG_PKGS"
 191         BIGROOT=1
 192 fi
 193 CULL="perl python package/pkg snmp"
 194 RMRF="/var/pkg /usr/share/man /usr/lib/python2.7 /usr/lib/iconv"
 195 
 196 ID=`id -u`
 197 if [[ "$ID" != "0" ]]; then
 198         echo "must run as root"
 199         exit 1
 200 fi
 201 
 202 chkpt() {
 203         SNAP=`zfs list -H -t snapshot $BASE/root@${1} 2> /dev/null`
 
 333         lofidev=`/usr/sbin/lofiadm -a $MKFILEDIR/miniroot`
 334         rlofidev=`echo $lofidev |sed s/lofi/rlofi/`
 335         yes | /usr/sbin/newfs -m 0 $rlofidev 2> /dev/null > /dev/null || fail "newfs"
 336         chkpt mount
 337         ;;
 338 
 339         "mount")
 340         mkdir -p $WORKDIR/mnt
 341         /usr/sbin/mount -o nologging $lofidev $WORKDIR/mnt || fail "mount"
 342         chkpt copy
 343         ;;
 344 
 345         "copy")
 346         pushd $ROOTDIR >/dev/null
 347         /usr/bin/find . | /usr/bin/cpio -pdum $WORKDIR/mnt 2> /dev/null > /dev/null || fail "populate root"
 348         /usr/sbin/devfsadm -r $WORKDIR/mnt > /dev/null
 349         popd >/dev/null
 350         mkdir $WORKDIR/mnt/kayak
 351         cp $SRCDIR/*.sh $WORKDIR/mnt/kayak/
 352         chmod a+x $WORKDIR/mnt/kayak/*.sh
 353         make_initial_boot $WORKDIR/mnt/.initialboot
 354         if [[ -n "$DEBUG" ]]; then
 355                 cp $SRCDIR/anon.system $WORKDIR/mnt/etc/system
 356                 cp $SRCDIR/anon.dtrace.conf $WORKDIR/mnt/kernel/drv/dtrace.conf
 357         fi
 358         chkpt umount
 359         ;;
 360 
 361         "umount")
 362         /usr/sbin/umount $WORKDIR/mnt || fail "umount"
 363         /usr/sbin/lofiadm -d $MKFILEDIR/miniroot || fail "lofiadm delete"
 364         chkpt compress
 365         ;;
 366 
 367         "compress")
 368         $GZIP_CMD -c -f $MKFILEDIR/miniroot > $WORKDIR/miniroot.gz
 369         rm -f $MKFILEDIR/miniroot
 370         chmod 644 $WORKDIR/miniroot.gz
 371         echo " === Finished ==="
 372         ls -l $WORKDIR/miniroot.gz
  | 
   1 #!/bin/bash
   2 
   3 #
   4 # This file and its contents are supplied under the terms of the
   5 # Common Development and Distribution License ("CDDL"), version 1.0.
   6 # You may only use this file in accordance with the terms of version
   7 # 1.0 of the CDDL.
   8 #
   9 # A full copy of the text of the CDDL should have accompanied this
  10 # source.  A copy of the CDDL is also available via the Internet at
  11 # http://www.illumos.org/license/CDDL.
  12 #
  13 
  14 #
  15 # Copyright 2017 OmniTI Computer Consulting, Inc.  All rights reserved.
  16 #
  17 
  18 fail() {
  19         echo "ERROR: $*"
  20         exit 1
  21 }
  22 
  23 # NOTE --> The URL needs to be updated with every release.
  24 # Change "bloody" to whatever release the current branch is.
  25 PUBLISHER=omnios
  26 : ${PKGURL:=http://pkg.omniti.com/omnios/bloody}
  27 : ${GZIP_CMD:=gzip}
  28 SRCDIR=$(dirname $0)
  29 DIDWORK=0
  30 BUILDNUM=${VERSION//r/}
  31 if [[ ${SRCDIR:0:1} != "/" ]]; then
  32   SRCDIR=`pwd`/$SRCDIR
  33 fi
  34 if [[ -z "${1}" ]]; then
  35   echo "$0 <zfs pool> [checkpoint]"
  36   exit 1
  37 else
  38   BASE=${1}
  39   shift
  40   BASEDIR=`zfs get -o value -H mountpoint $BASE`
  41 fi
  42 MKFILEDIR=/tmp
  43 WORKDIR=$BASEDIR
  44 ROOTDIR=$WORKDIR/root
  45 if [[ ! -d $ROOTDIR ]]; then
  46   zfs create -o compression=off $BASE/root || fail "zfs create failed"
  47 fi
  48 SVCCFG_DTD=${ROOTDIR}/usr/share/lib/xml/dtd/service_bundle.dtd.1
  49 SVCCFG_REPOSITORY=${ROOTDIR}/etc/svc/repository.db
  50 if [[ -f ${PREBUILT_ILLUMOS}/usr/src/cmd/svc/svccfg/svccfg-native ]]; then
  51         SVCCFG=${PREBUILT_ILLUMOS}/usr/src/cmd/svc/svccfg/svccfg-native
  52 else
  53         echo "WARNING -- Not using 'native' svccfg, may hang on build."
  54         echo "       We recommend a pre-built illumos's svccfg-native."
  55         echo "       Set PREBUILT_ILLUMOS in your environment to point"
  56         echo "       to a built illumos-omnios repository."
  57         SVCCFG=/usr/sbin/svccfg
  58 fi
  59 export WORKDIR ROOTDIR SVCCFG_DTD SVCCFG_REPOSITORY SVCCFG
  60 
  61 # This was uber-helpful
  62 # http://alexeremin.blogspot.com/2008/12/preparing-small-miniroot-with-zfs-and.html
  63 
  64 PKG=/bin/pkg
  65 
  66 UNNEEDED_MANIFESTS="application/management/net-snmp.xml
  67         application/pkg/pkg-server.xml application/pkg/pkg-mdns.xml
  68         system/rmtmpfiles.xml system/mdmonitor.xml
  69         system/fm/notify-params.xml system/device/allocate.xml
 
  91         network/rpc/meta.xml network/rpc/metamh.xml
  92         network/socket-filter-kssl.xml network/network-netcfg.xml
  93         network/nfs/status.xml network/nfs/cbd.xml
  94         network/nfs/nlockmgr.xml network/nfs/mapid.xml
  95         network/nfs/client.xml network/network-ipqos.xml
  96         network/security/ktkt_warn.xml network/security/krb5kdc.xml
  97         network/security/kadmin.xml network/network-install.xml
  98         network/bridge.xml network/network-initial.xml
  99         network/network-ipmgmt.xml network/routing/legacy-routing.xml
 100         network/network-service.xml network/network-physical.xml
 101         network/network-netmask.xml network/dlmgmt.xml
 102         network/network-location.xml network/ibd-post-upgrade.xml
 103         network/network-routing-setup.xml network/network-loopback.xml
 104         network/dns/client.xml network/dns/install.xml
 105         network/dns/multicast.xml platform/i86pc/acpihpd.xml
 106         system/hostid.xml system/power.xml system/pfexecd.xml
 107         system/consadm.xml system/pools.xml system/console-login.xml
 108         system/stmf.xml system/fmd.xml system/utmp.xml
 109         system/poold.xml system/dumpadm.xml"
 110 
 111 SYSTEM="system/boot/real-mode system/boot/wanboot/internal
 112         system/boot/loader system/boot/wanboot system/data/hardware-registry
 113         system/data/keyboard/keytables system/data/terminfo
 114         system/data/zoneinfo system/extended-system-utilities
 115         system/file-system/autofs system/file-system/nfs
 116         system/file-system/smb system/file-system/udfs
 117         system/file-system/zfs system/flash/fwflash
 118         system/fru-id/platform system/fru-id system/ipc
 119         system/kernel/dynamic-reconfiguration/i86pc
 120         system/kernel/security/gss system/library/math
 121         system/library/platform system/library/policykit
 122         system/library/processor
 123         system/library/storage/fibre-channel/hbaapi
 124         system/library/storage/fibre-channel/libsun_fc
 125         system/library/storage/ima/header-ima
 126         system/library/storage/ima
 127         system/library/storage/libmpapi
 128         system/library/storage/libmpscsi_vhci
 129         system/library/storage/scsi-plugins
 130         system/library system/network
 131         system/prerequisite/gnu system/storage/luxadm
 
 
 137         driver/graphics/agpgart driver/graphics/atiatom driver/graphics/drm
 138         driver/i86pc/fipe driver/i86pc/ioat driver/i86pc/platform
 139         driver/misc/virtio
 140         driver/network/afe driver/network/amd8111s driver/network/atge
 141         driver/network/bfe driver/network/bge driver/network/bnx
 142         driver/network/bnxe driver/network/bpf driver/network/chxge
 143         driver/network/dmfe driver/network/e1000g driver/network/elxl
 144         driver/network/emlxs driver/network/eoib driver/network/fcip
 145         driver/network/fcp driver/network/fcsm driver/network/fp
 146         driver/network/hermon driver/network/hme driver/network/hxge
 147         driver/network/ib driver/network/ibdma driver/network/ibp
 148         driver/network/igb driver/network/iprb driver/network/ixgb
 149         driver/network/ixgbe driver/network/mxfe driver/network/myri10ge
 150         driver/network/nge driver/network/ntxn driver/network/nxge
 151         driver/network/vmxnet3s driver/network/sfxge driver/network/i40e
 152         driver/network/ofk driver/network/pcn driver/network/platform
 153         driver/network/qlc driver/network/rds driver/network/rdsv3
 154         driver/network/rge driver/network/rpcib driver/network/rtls
 155         driver/network/sdp driver/network/sdpib driver/network/sfe
 156         driver/network/tavor driver/network/usbecm driver/network/vr
 157         driver/network/xge driver/network/yge driver/pcmcia
 158         driver/serial/usbftdi driver/serial/usbsacm driver/serial/usbser
 159         driver/serial/usbser_edge driver/serial/usbsksp
 160         driver/serial/usbsksp/usbs49_fw driver/serial/usbsprl
 161         driver/storage/aac driver/storage/adpu320 driver/storage/ahci
 162         driver/storage/amr driver/storage/arcmsr driver/storage/ata
 163         driver/storage/bcm_sata driver/storage/blkdev driver/storage/cpqary3
 164         driver/storage/glm driver/storage/lsimega driver/storage/marvell88sx
 165         driver/storage/mega_sas driver/storage/mpt_sas driver/storage/mr_sas
 166         driver/storage/nv_sata driver/storage/pmcs
 167         driver/storage/sbp2 driver/storage/scsa1394 driver/storage/sdcard
 168         driver/storage/ses driver/storage/si3124 driver/storage/smp
 169         driver/usb driver/usb/ugen driver/xvm/pv driver/storage/vioblk
 170         driver/network/vioif driver/storage/nvme driver/storage/pvscsi"
 171 
 172 PARTS="release/name release/notices service/picl install/beadm SUNWcs SUNWcsd
 173         library/libidn shell/pipe-viewer text/less editor/vim web/curl
 174         developer/linker file/gnu-coreutils openssh openssh-server
 175         diagnostic/diskinfo"
 176 
 177 PKGS="$PARTS $SYSTEM $DRIVERS"
 178 
 179 if [ -n "$DEBUG" ]; then
 180         PKGS="$PKGS $DEBUG_PKGS"
 181         BIGROOT=1
 182 fi
 183 CULL="perl python package/pkg snmp"
 184 RMRF="/var/pkg /usr/share/man /usr/lib/python2.7 /usr/lib/iconv"
 185 
 186 ID=`id -u`
 187 if [[ "$ID" != "0" ]]; then
 188         echo "must run as root"
 189         exit 1
 190 fi
 191 
 192 chkpt() {
 193         SNAP=`zfs list -H -t snapshot $BASE/root@${1} 2> /dev/null`
 
 323         lofidev=`/usr/sbin/lofiadm -a $MKFILEDIR/miniroot`
 324         rlofidev=`echo $lofidev |sed s/lofi/rlofi/`
 325         yes | /usr/sbin/newfs -m 0 $rlofidev 2> /dev/null > /dev/null || fail "newfs"
 326         chkpt mount
 327         ;;
 328 
 329         "mount")
 330         mkdir -p $WORKDIR/mnt
 331         /usr/sbin/mount -o nologging $lofidev $WORKDIR/mnt || fail "mount"
 332         chkpt copy
 333         ;;
 334 
 335         "copy")
 336         pushd $ROOTDIR >/dev/null
 337         /usr/bin/find . | /usr/bin/cpio -pdum $WORKDIR/mnt 2> /dev/null > /dev/null || fail "populate root"
 338         /usr/sbin/devfsadm -r $WORKDIR/mnt > /dev/null
 339         popd >/dev/null
 340         mkdir $WORKDIR/mnt/kayak
 341         cp $SRCDIR/*.sh $WORKDIR/mnt/kayak/
 342         chmod a+x $WORKDIR/mnt/kayak/*.sh
 343 
 344         # So "bootadm update-archive" can work.
 345         cp $SRCDIR/digest $WORKDIR/mnt/usr/bin/digest
 346         chmod 0755 $WORKDIR/mnt/usr/bin/digest
 347 
 348         make_initial_boot $WORKDIR/mnt/.initialboot
 349         if [[ -n "$DEBUG" ]]; then
 350                 cp $SRCDIR/anon.system $WORKDIR/mnt/etc/system
 351                 cp $SRCDIR/anon.dtrace.conf $WORKDIR/mnt/kernel/drv/dtrace.conf
 352         fi
 353         chkpt umount
 354         ;;
 355 
 356         "umount")
 357         /usr/sbin/umount $WORKDIR/mnt || fail "umount"
 358         /usr/sbin/lofiadm -d $MKFILEDIR/miniroot || fail "lofiadm delete"
 359         chkpt compress
 360         ;;
 361 
 362         "compress")
 363         $GZIP_CMD -c -f $MKFILEDIR/miniroot > $WORKDIR/miniroot.gz
 364         rm -f $MKFILEDIR/miniroot
 365         chmod 644 $WORKDIR/miniroot.gz
 366         echo " === Finished ==="
 367         ls -l $WORKDIR/miniroot.gz
  |