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
|