buildpkg.sh.in revision 162852
1137015Sdes#!/bin/sh
2137015Sdes#
3137015Sdes# Fake Root Solaris/SVR4/SVR5 Build System - Prototype
4137015Sdes#
5137015Sdes# The following code has been provide under Public Domain License.  I really
6137015Sdes# don't care what you use it for.  Just as long as you don't complain to me
7137015Sdes# nor my employer if you break it. - Ben Lindstrom (mouring@eviladmin.org)
8137015Sdes#
9137015Sdesumask 022
10137015Sdes#
11137015Sdes# Options for building the package
12137015Sdes# You can create a openssh-config.local with your customized options
13137015Sdes#
14137015SdesREMOVE_FAKE_ROOT_WHEN_DONE=yes
15137015Sdes#
16137015Sdes# uncommenting TEST_DIR and using
17137015Sdes# configure --prefix=/var/tmp --with-privsep-path=/var/tmp/empty
18137015Sdes# and
19137015Sdes# PKGNAME=tOpenSSH should allow testing a package without interfering
20137015Sdes# with a real OpenSSH package on a system. This is not needed on systems
21137015Sdes# that support the -R option to pkgadd.
22137015Sdes#TEST_DIR=/var/tmp	# leave commented out for production build
23137015SdesPKGNAME=OpenSSH
24137015Sdes# revisions within the same version (REV=a)
25137015Sdes#REV=
26137015SdesSYSVINIT_NAME=opensshd
27137015SdesMAKE=${MAKE:="make"}
28137015SdesSSHDUID=67	# Default privsep uid
29137015SdesSSHDGID=67	# Default privsep gid
30137015Sdes# uncomment these next three as needed
31137015Sdes#PERMIT_ROOT_LOGIN=no
32137015Sdes#X11_FORWARDING=yes
33137015Sdes#USR_LOCAL_IS_SYMLINK=yes
34137015Sdes# System V init run levels
35137015SdesSYSVINITSTART=S98
36137015SdesSYSVINITSTOPT=K30
37137015Sdes# We will source these if they exist
38162852SdesPOST_MAKE_INSTALL_FIXES=./pkg-post-make-install-fixes.sh
39137015SdesPOST_PROTOTYPE_EDITS=./pkg-post-prototype-edit.sh
40137015Sdes# We'll be one level deeper looking for these
41137015SdesPKG_PREINSTALL_LOCAL=../pkg-preinstall.local
42137015SdesPKG_POSTINSTALL_LOCAL=../pkg-postinstall.local
43137015SdesPKG_PREREMOVE_LOCAL=../pkg-preremove.local
44137015SdesPKG_POSTREMOVE_LOCAL=../pkg-postremove.local
45137015SdesPKG_REQUEST_LOCAL=../pkg-request.local
46137015Sdes# end of sourced files
47137015Sdes#
48137015SdesOPENSSHD=opensshd.init
49162852SdesOPENSSH_MANIFEST=openssh.xml
50162852SdesOPENSSH_FMRI=svc:/site/openssh:default
51137015Sdes
52137015SdesPATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@
53137015SdesPATH_USERADD_PROG=@PATH_USERADD_PROG@
54137015SdesPATH_PASSWD_PROG=@PATH_PASSWD_PROG@
55137015Sdes#
56137015Sdes# list of system directories we do NOT want to change owner/group/perms
57137015Sdes# when installing our package
58137015SdesSYSTEM_DIR="/etc	\
59137015Sdes/etc/init.d		\
60137015Sdes/etc/rcS.d		\
61137015Sdes/etc/rc0.d		\
62137015Sdes/etc/rc1.d		\
63137015Sdes/etc/rc2.d		\
64137015Sdes/etc/opt		\
65162852Sdes/lib			\
66162852Sdes/lib/svc		\
67162852Sdes/lib/svc/method		\
68162852Sdes/lib/svc/method/site	\
69137015Sdes/opt			\
70137015Sdes/opt/bin		\
71137015Sdes/usr			\
72137015Sdes/usr/bin		\
73137015Sdes/usr/lib		\
74137015Sdes/usr/sbin		\
75137015Sdes/usr/share		\
76137015Sdes/usr/share/man		\
77137015Sdes/usr/share/man/man1	\
78137015Sdes/usr/share/man/man8	\
79137015Sdes/usr/local		\
80137015Sdes/usr/local/bin		\
81137015Sdes/usr/local/etc		\
82137015Sdes/usr/local/libexec	\
83137015Sdes/usr/local/man		\
84137015Sdes/usr/local/man/man1	\
85137015Sdes/usr/local/man/man8	\
86137015Sdes/usr/local/sbin		\
87137015Sdes/usr/local/share	\
88137015Sdes/var			\
89137015Sdes/var/opt		\
90137015Sdes/var/run		\
91162852Sdes/var/svc		\
92162852Sdes/var/svc/manifest	\
93162852Sdes/var/svc/manifest/site  \
94137015Sdes/var/tmp		\
95137015Sdes/tmp"
96137015Sdes
97137015Sdes# We may need to build as root so we make sure PATH is set up
98137015Sdes# only set the path if it's not set already
99137015Sdes[ -d /opt/bin ]  &&  {
100137015Sdes	echo $PATH | grep ":/opt/bin"  > /dev/null 2>&1
101137015Sdes	[ $? -ne 0 ] && PATH=$PATH:/opt/bin
102137015Sdes}
103137015Sdes[ -d /usr/local/bin ]  &&  {
104137015Sdes	echo $PATH | grep ":/usr/local/bin"  > /dev/null 2>&1
105137015Sdes	[ $? -ne 0 ] && PATH=$PATH:/usr/local/bin
106137015Sdes}
107137015Sdes[ -d /usr/ccs/bin ]  &&  {
108137015Sdes	echo $PATH | grep ":/usr/ccs/bin"  > /dev/null 2>&1
109137015Sdes	[ $? -ne 0 ] && PATH=$PATH:/usr/ccs/bin
110137015Sdes}
111137015Sdesexport PATH
112137015Sdes#
113137015Sdes
114137015Sdes[ -f Makefile ]  ||  {
115137015Sdes	echo "Please run this script from your build directory"
116137015Sdes	exit 1
117137015Sdes}
118137015Sdes
119137015Sdes# we will look for openssh-config.local to override the above options
120137015Sdes[ -s ./openssh-config.local ]  &&  . ./openssh-config.local
121137015Sdes
122137015SdesSTART=`pwd`
123137015SdesFAKE_ROOT=$START/pkg
124137015Sdes
125137015Sdes## Fill in some details, like prefix and sysconfdir
126137015Sdesfor confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir sysconfdir piddir srcdir
127137015Sdesdo
128137015Sdes	eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2`
129137015Sdesdone
130137015Sdes
131162852Sdes## Are we using Solaris' SMF?
132162852SdesDO_SMF=0
133162852Sdesif egrep "^#define USE_SOLARIS_PROCESS_CONTRACTS" config.h > /dev/null 2>&1
134162852Sdesthen
135162852Sdes	DO_SMF=1
136162852Sdesfi
137137015Sdes
138137015Sdes## Collect value of privsep user
139137015Sdesfor confvar in SSH_PRIVSEP_USER
140137015Sdesdo
141137015Sdes	eval $confvar=`awk '/#define[ \t]'$confvar'/{print $3}' config.h`
142137015Sdesdone
143137015Sdes
144137015Sdes## Set privsep defaults if not defined
145137015Sdesif [ -z "$SSH_PRIVSEP_USER" ]
146137015Sdesthen
147137015Sdes	SSH_PRIVSEP_USER=sshd
148137015Sdesfi
149137015Sdes
150137015Sdes## Extract common info requires for the 'info' part of the package.
151137015SdesVERSION=`./ssh -V 2>&1 | sed -e 's/,.*//'`
152137015Sdes
153137015SdesARCH=`uname -m`
154137015SdesDEF_MSG="\n"
155137015SdesOS_VER=`uname -v`
156137015SdesSCRIPT_SHELL=/sbin/sh
157137015SdesUNAME_S=`uname -s`
158137015Sdescase ${UNAME_S} in
159137015Sdes	SunOS)	UNAME_S=Solaris
160137015Sdes		ARCH=`uname -p`
161137015Sdes		RCS_D=yes
162137015Sdes		DEF_MSG="(default: n)"
163137015Sdes		;;
164137015Sdes	SCO_SV)	UNAME_S=OpenServer
165137015Sdes		OS_VER=`uname -X | grep Release | sed -e 's/^Rel.*3.2v//'`
166137015Sdes		SCRIPT_SHELL=/bin/sh
167137015Sdes		RC1_D=no
168137015Sdes		DEF_MSG="(default: n)"
169137015Sdes		;;
170137015Sdesesac
171137015Sdes
172137015Sdescase `basename $0` in
173137015Sdes	buildpkg.sh)
174137015Sdes## Start by faking root install
175137015Sdesecho "Faking root install..."
176137015Sdes[ -d $FAKE_ROOT ]  &&  rm -fr $FAKE_ROOT
177137015Sdesmkdir $FAKE_ROOT
178137015Sdes${MAKE} install-nokeys DESTDIR=$FAKE_ROOT
179137015Sdesif [ $? -gt 0 ]
180137015Sdesthen
181137015Sdes	echo "Fake root install failed, stopping."
182137015Sdes	exit 1
183137015Sdesfi
184137015Sdes
185137015Sdes## Setup our run level stuff while we are at it.
186162852Sdesif [ $DO_SMF -eq 1 ]
187162852Sdesthen
188162852Sdes	# For Solaris' SMF, /lib/svc/method/site is the preferred place
189162852Sdes	# for start/stop scripts that aren't supplied with the OS, and
190162852Sdes	# similarly /var/svc/manifest/site for manifests.
191162852Sdes	mkdir -p $FAKE_ROOT${TEST_DIR}/lib/svc/method/site
192162852Sdes	mkdir -p $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site
193137015Sdes
194162852Sdes	cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/lib/svc/method/site/${SYSVINIT_NAME}
195162852Sdes	chmod 744 $FAKE_ROOT${TEST_DIR}/lib/svc/method/site/${SYSVINIT_NAME}
196137015Sdes
197162852Sdes	cp ${OPENSSH_MANIFEST} $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site
198162852Sdes	chmod 644 $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site/${OPENSSH_MANIFEST}
199162852Sdeselse
200162852Sdes	mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d
201162852Sdes
202162852Sdes	cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME}
203162852Sdes	chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME}
204162852Sdesfi
205162852Sdes
206137015Sdes[ "${PERMIT_ROOT_LOGIN}" = no ]  &&  \
207137015Sdes	perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \
208137015Sdes		$FAKE_ROOT/${sysconfdir}/sshd_config
209137015Sdes[ "${X11_FORWARDING}" = yes ]  &&  \
210137015Sdes	perl -p -i -e "s/#X11Forwarding no/X11Forwarding yes/" \
211137015Sdes		$FAKE_ROOT/${sysconfdir}/sshd_config
212137015Sdes# fix PrintMotd
213137015Sdesperl -p -i -e "s/#PrintMotd yes/PrintMotd no/" \
214137015Sdes	$FAKE_ROOT/${sysconfdir}/sshd_config
215137015Sdes
216137015Sdes# We don't want to overwrite config files on multiple installs
217137015Sdesmv $FAKE_ROOT/${sysconfdir}/ssh_config $FAKE_ROOT/${sysconfdir}/ssh_config.default
218137015Sdesmv $FAKE_ROOT/${sysconfdir}/sshd_config $FAKE_ROOT/${sysconfdir}/sshd_config.default
219137015Sdes[ -f $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds ]  &&  \
220137015Sdesmv $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds.default
221137015Sdes
222137015Sdes# local tweeks here
223137015Sdes[ -s "${POST_MAKE_INSTALL_FIXES}" ]  &&  . ${POST_MAKE_INSTALL_FIXES}
224137015Sdes
225137015Sdescd $FAKE_ROOT
226137015Sdes
227137015Sdes## Ok, this is outright wrong, but it will work.  I'm tired of pkgmk
228137015Sdes## whining.
229137015Sdesfor i in *; do
230137015Sdes  PROTO_ARGS="$PROTO_ARGS $i=/$i";
231137015Sdesdone
232137015Sdes
233137015Sdes## Build info file
234137015Sdesecho "Building pkginfo file..."
235137015Sdescat > pkginfo << _EOF
236137015SdesPKG=$PKGNAME
237137015SdesNAME="OpenSSH Portable for ${UNAME_S}"
238137015SdesDESC="Secure Shell remote access utility; replaces telnet and rlogin/rsh."
239137015SdesVENDOR="OpenSSH Portable Team - http://www.openssh.com/portable.html"
240137015SdesARCH=$ARCH
241137015SdesVERSION=$VERSION$REV
242137015SdesCATEGORY="Security,application"
243137015SdesBASEDIR=/
244137015SdesCLASSES="none"
245137015SdesPSTAMP="${UNAME_S} ${OS_VER} ${ARCH} `date '+%d%b%Y %H:%M'`"
246137015Sdes_EOF
247137015Sdes
248137015Sdes## Build empty depend file that may get updated by $POST_PROTOTYPE_EDITS
249137015Sdesecho "Building depend file..."
250137015Sdestouch depend
251137015Sdes
252137015Sdes## Build space file
253137015Sdesecho "Building space file..."
254162852Sdesif [ $DO_SMF -eq 1 ]
255162852Sdesthen
256162852Sdes	# XXX Is this necessary?  If not, remove space line from mk-proto.awk.
257162852Sdes	touch space
258162852Sdeselse
259162852Sdes	cat > space << _EOF
260162852Sdes# extra space required by start/stop links added by installf 
261162852Sdes# in postinstall
262137015Sdes$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1
263137015Sdes$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME} 0 1
264137015Sdes_EOF
265162852Sdes	[ "$RC1_D" = no ]  ||  \
266162852Sdes	echo "$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space
267162852Sdes	[ "$RCS_D" = yes ]  &&  \
268162852Sdes	echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space
269162852Sdesfi
270137015Sdes
271137015Sdes## Build preinstall file
272137015Sdesecho "Building preinstall file..."
273137015Sdescat > preinstall << _EOF
274137015Sdes#! ${SCRIPT_SHELL}
275137015Sdes#
276137015Sdes_EOF
277137015Sdes
278137015Sdes# local preinstall changes here
279137015Sdes[ -s "${PKG_PREINSTALL_LOCAL}" ]  &&  . ${PKG_PREINSTALL_LOCAL}
280137015Sdes
281137015Sdescat >> preinstall << _EOF
282137015Sdes#
283162852Sdesif [ "\${PRE_INS_STOP}" = "yes" ]
284162852Sdesthen
285162852Sdes	if [ $DO_SMF -eq 1 ] 
286162852Sdes	then
287162852Sdes		svcadm disable $OPENSSH_FMRI
288162852Sdes	else
289162852Sdes		${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop
290162852Sdes	fi
291162852Sdesfi
292162852Sdes
293137015Sdesexit 0
294137015Sdes_EOF
295137015Sdes
296137015Sdes## Build postinstall file
297137015Sdesecho "Building postinstall file..."
298137015Sdescat > postinstall << _EOF
299137015Sdes#! ${SCRIPT_SHELL}
300137015Sdes#
301137015Sdes[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config ]  ||  \\
302137015Sdes	cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config.default \\
303137015Sdes		\${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config
304137015Sdes[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config ]  ||  \\
305137015Sdes	cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config.default \\
306137015Sdes		\${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config
307137015Sdes[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds.default ]  &&  {
308137015Sdes	[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds ]  ||  \\
309137015Sdes	cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds.default \\
310137015Sdes		\${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds
311137015Sdes}
312137015Sdes
313137015Sdes# make rc?.d dirs only if we are doing a test install
314162852Sdes[ -n "${TEST_DIR}" ]  &&  [ $DO_SMF -ne 1 ] && {
315137015Sdes	[ "$RCS_D" = yes ]  &&  mkdir -p ${TEST_DIR}/etc/rcS.d
316137015Sdes	mkdir -p ${TEST_DIR}/etc/rc0.d
317137015Sdes	[ "$RC1_D" = no ]  ||  mkdir -p ${TEST_DIR}/etc/rc1.d
318137015Sdes	mkdir -p ${TEST_DIR}/etc/rc2.d
319137015Sdes}
320137015Sdes
321162852Sdesif [ $DO_SMF -eq 1 ]
322137015Sdesthen
323162852Sdes	# Delete the existing service, if it exists, then import the 
324162852Sdes	# new one.
325162852Sdes	if svcs $OPENSSH_FMRI > /dev/null 2>&1
326162852Sdes	then
327162852Sdes		svccfg delete -f $OPENSSH_FMRI
328162852Sdes	fi
329162852Sdes	# NOTE, if manifest enables sshd by default, this will actually
330162852Sdes	# start the daemon, which may not be what the user wants.
331162852Sdes	svccfg import ${TEST_DIR}/var/svc/manifest/site/$OPENSSH_MANIFEST
332137015Sdeselse
333162852Sdes	if [ "\${USE_SYM_LINKS}" = yes ]
334162852Sdes	then
335162852Sdes		[ "$RCS_D" = yes ]  &&  \
336162852Sdes	installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s
337162852Sdes		installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s
338162852Sdes		[ "$RC1_D" = no ]  ||  \
339162852Sdes		installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s
340162852Sdes		installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s
341162852Sdes	else
342162852Sdes		[ "$RCS_D" = yes ]  &&  \
343162852Sdes	installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l
344162852Sdes		installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l
345162852Sdes		[ "$RC1_D" = no ]  ||  \
346162852Sdes		installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l
347162852Sdes		installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l
348162852Sdes	fi
349137015Sdesfi
350137015Sdes
351137015Sdes# If piddir doesn't exist we add it. (Ie. --with-pid-dir=/var/opt/ssh)
352137015Sdes[ -d $piddir ]  ||  installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR$piddir d 0755 root sys
353137015Sdes
354137015Sdes_EOF
355137015Sdes
356137015Sdes# local postinstall changes here
357137015Sdes[ -s "${PKG_POSTINSTALL_LOCAL}" ]  &&  . ${PKG_POSTINSTALL_LOCAL}
358137015Sdes
359137015Sdescat >> postinstall << _EOF
360137015Sdesinstallf -f ${PKGNAME}
361137015Sdes
362137015Sdes# Use chroot to handle PKG_INSTALL_ROOT
363137015Sdesif [ ! -z "\${PKG_INSTALL_ROOT}" ]
364137015Sdesthen
365137015Sdes	chroot="chroot \${PKG_INSTALL_ROOT}"
366137015Sdesfi
367137015Sdes# If this is a test build, we will skip the groupadd/useradd/passwd commands
368137015Sdesif [ ! -z "${TEST_DIR}" ]
369137015Sdesthen
370137015Sdes	chroot=echo
371137015Sdesfi
372137015Sdes
373162852Sdes	echo "PrivilegeSeparation user always required."
374137015Sdes	if cut -f1 -d: \${PKG_INSTALL_ROOT}/etc/passwd | egrep '^'$SSH_PRIVSEP_USER'\$' >/dev/null
375137015Sdes	then
376137015Sdes		echo "PrivSep user $SSH_PRIVSEP_USER already exists."
377137015Sdes		SSH_PRIVSEP_GROUP=\`grep "^$SSH_PRIVSEP_USER:" \${PKG_INSTALL_ROOT}/etc/passwd | awk -F: '{print \$4}'\`
378137015Sdes		SSH_PRIVSEP_GROUP=\`grep ":\$SSH_PRIVSEP_GROUP:" \${PKG_INSTALL_ROOT}/etc/group | awk -F: '{print \$1}'\`
379137015Sdes	else
380137015Sdes		DO_PASSWD=yes
381137015Sdes	fi
382137015Sdes	[ -z "\$SSH_PRIVSEP_GROUP" ]  &&  SSH_PRIVSEP_GROUP=$SSH_PRIVSEP_USER
383137015Sdes
384137015Sdes	# group required?
385137015Sdes	if cut -f1 -d: \${PKG_INSTALL_ROOT}/etc/group | egrep '^'\$SSH_PRIVSEP_GROUP'\$' >/dev/null
386137015Sdes	then
387137015Sdes		echo "PrivSep group \$SSH_PRIVSEP_GROUP already exists."
388137015Sdes	else
389137015Sdes		DO_GROUP=yes
390137015Sdes	fi
391137015Sdes
392137015Sdes	# create group if required
393137015Sdes	[ "\$DO_GROUP" = yes ]  &&  {
394137015Sdes		# Use gid of 67 if possible
395137015Sdes		if cut -f3 -d: \${PKG_INSTALL_ROOT}/etc/group | egrep '^'$SSHDGID'\$' >/dev/null
396137015Sdes		then
397137015Sdes			:
398137015Sdes		else
399137015Sdes			sshdgid="-g $SSHDGID"
400137015Sdes		fi
401137015Sdes		echo "Creating PrivSep group \$SSH_PRIVSEP_GROUP."
402137015Sdes		\$chroot ${PATH_GROUPADD_PROG} \$sshdgid \$SSH_PRIVSEP_GROUP
403137015Sdes	}
404137015Sdes
405137015Sdes	# Create user if required
406137015Sdes	[ "\$DO_PASSWD" = yes ]  &&  {
407137015Sdes		# Use uid of 67 if possible
408157016Sdes		if cut -f3 -d: \${PKG_INSTALL_ROOT}/etc/passwd | egrep '^'$SSHDUID'\$' >/dev/null
409137015Sdes		then
410137015Sdes			:
411137015Sdes		else
412137015Sdes			sshduid="-u $SSHDUID"
413137015Sdes		fi
414137015Sdes		echo "Creating PrivSep user $SSH_PRIVSEP_USER."
415137015Sdes		\$chroot ${PATH_USERADD_PROG} -c 'SSHD PrivSep User' -s /bin/false -g $SSH_PRIVSEP_USER \$sshduid $SSH_PRIVSEP_USER
416137015Sdes		\$chroot ${PATH_PASSWD_PROG} -l $SSH_PRIVSEP_USER
417137015Sdes	}
418162852Sdes
419162852Sdesif [ "\${POST_INS_START}" = "yes" ]
420162852Sdesthen
421162852Sdes	if [ $DO_SMF -eq 1 ]
422162852Sdes	then
423162852Sdes		# See svccfg import note above.  The service may already
424162852Sdes		# be started.
425162852Sdes		svcadm enable $OPENSSH_FMRI
426162852Sdes	else
427162852Sdes		${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} start
428162852Sdes	fi
429137015Sdesfi
430137015Sdesexit 0
431137015Sdes_EOF
432137015Sdes
433137015Sdes## Build preremove file
434137015Sdesecho "Building preremove file..."
435137015Sdescat > preremove << _EOF
436137015Sdes#! ${SCRIPT_SHELL}
437137015Sdes#
438162852Sdesif [ $DO_SMF -eq 1 ] 
439162852Sdesthen
440162852Sdes	svcadm disable $OPENSSH_FMRI
441162852Sdeselse
442162852Sdes	${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop
443162852Sdesfi
444137015Sdes_EOF
445137015Sdes
446137015Sdes# local preremove changes here
447137015Sdes[ -s "${PKG_PREREMOVE_LOCAL}" ]  &&  . ${PKG_PREREMOVE_LOCAL}
448137015Sdes
449137015Sdescat >> preremove << _EOF
450137015Sdesexit 0
451137015Sdes_EOF
452137015Sdes
453137015Sdes## Build postremove file
454137015Sdesecho "Building postremove file..."
455137015Sdescat > postremove << _EOF
456137015Sdes#! ${SCRIPT_SHELL}
457137015Sdes#
458162852Sdesif [ $DO_SMF -eq 1 ]
459162852Sdesthen
460162852Sdes	if svcs $OPENSSH_FMRI > /dev/null 2>&1
461162852Sdes	then
462162852Sdes		svccfg delete -f $OPENSSH_FMRI
463162852Sdes	fi
464162852Sdesfi
465137015Sdes_EOF
466137015Sdes
467137015Sdes# local postremove changes here
468137015Sdes[ -s "${PKG_POSTREMOVE_LOCAL}" ]  &&  . ${PKG_POSTREMOVE_LOCAL}
469137015Sdes
470137015Sdescat >> postremove << _EOF
471137015Sdesexit 0
472137015Sdes_EOF
473137015Sdes
474137015Sdes## Build request file
475137015Sdesecho "Building request file..."
476137015Sdescat > request << _EOF
477137015Sdestrap 'exit 3' 15
478137015Sdes
479137015Sdes_EOF
480137015Sdes
481137015Sdes[ -x /usr/bin/ckyorn ]  ||  cat >> request << _EOF
482137015Sdes
483137015Sdesckyorn() {
484137015Sdes# for some strange reason OpenServer has no ckyorn
485137015Sdes# We build a striped down version here
486137015Sdes
487137015SdesDEFAULT=n
488137015SdesPROMPT="Yes or No [yes,no,?,quit]"
489137015SdesHELP_PROMPT="        Enter y or yes if your answer is yes; n or no if your answer is no."
490137015SdesUSAGE="usage: ckyorn [options]
491137015Sdeswhere options may include:
492137015Sdes        -d default
493137015Sdes        -h help
494137015Sdes        -p prompt
495137015Sdes"
496137015Sdes
497137015Sdesif [ \$# != 0 ]
498137015Sdesthen
499137015Sdes	while getopts d:p:h: c
500137015Sdes	do
501137015Sdes		case \$c in
502137015Sdes			h)	HELP_PROMPT="\$OPTARG" ;;
503137015Sdes			d)	DEFAULT=\$OPTARG ;;
504137015Sdes			p)	PROMPT=\$OPTARG ;;
505137015Sdes			\\?)	echo "\$USAGE" 1>&2
506137015Sdes				exit 1 ;;
507137015Sdes		esac
508137015Sdes	done
509137015Sdes	shift \`expr \$OPTIND - 1\`
510137015Sdesfi
511137015Sdes
512137015Sdeswhile true
513137015Sdesdo
514137015Sdes	echo "\${PROMPT}\\c " 1>&2
515137015Sdes	read key
516137015Sdes	[ -z "\$key" ]  &&  key=\$DEFAULT
517137015Sdes	case \$key in
518137015Sdes		[n,N]|[n,N][o,O]|[y,Y]|[y,Y][e,E][s,S])	echo "\${key}\\c"
519137015Sdes			exit 0 ;;
520137015Sdes		\\?)	echo \$HELP_PROMPT 1>&2 ;;
521137015Sdes		q|quit)	echo "q\\c" 1>&2
522137015Sdes			exit 3 ;;
523137015Sdes	esac
524137015Sdesdone
525137015Sdes
526137015Sdes}
527137015Sdes
528137015Sdes_EOF
529137015Sdes
530162852Sdesif [ $DO_SMF -eq 1 ]
531162852Sdesthen
532162852Sdes	# This could get hairy, as the running sshd may not be under SMF.
533162852Sdes	# We'll assume an earlier version of OpenSSH started via SMF.
534162852Sdes	cat >> request << _EOF
535162852SdesPRE_INS_STOP=no
536162852SdesPOST_INS_START=no
537162852Sdes# determine if should restart the daemon
538162852Sdesif [ -s ${piddir}/sshd.pid  ] && \
539162852Sdes    /usr/bin/svcs $OPENSSH_FMRI 2>&1 | egrep "^online" > /dev/null 2>&1
540162852Sdesthen
541162852Sdes	ans=\`ckyorn -d n \
542162852Sdes-p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$?
543162852Sdes	case \$ans in
544162852Sdes		[y,Y]*)	PRE_INS_STOP=yes
545162852Sdes			POST_INS_START=yes
546162852Sdes			;;
547162852Sdes	esac
548162852Sdes
549162852Sdeselse
550162852Sdes
551162852Sdes# determine if we should start sshd
552162852Sdes	ans=\`ckyorn -d n \
553162852Sdes-p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$?
554162852Sdes	case \$ans in
555162852Sdes		[y,Y]*)	POST_INS_START=yes ;;
556162852Sdes	esac
557162852Sdesfi
558162852Sdes
559162852Sdes# make parameters available to installation service,
560162852Sdes# and so to any other packaging scripts
561162852Sdescat >\$1 <<!
562162852SdesPRE_INS_STOP='\$PRE_INS_STOP'
563162852SdesPOST_INS_START='\$POST_INS_START'
564162852Sdes!
565162852Sdes
566162852Sdes_EOF
567162852Sdeselse
568162852Sdes	cat >> request << _EOF
569137015SdesUSE_SYM_LINKS=no
570137015SdesPRE_INS_STOP=no
571137015SdesPOST_INS_START=no
572137015Sdes# Use symbolic links?
573137015Sdesans=\`ckyorn -d n \
574137015Sdes-p "Do you want symbolic links for the start/stop scripts? ${DEF_MSG}"\` || exit \$?
575137015Sdescase \$ans in
576137015Sdes	[y,Y]*)	USE_SYM_LINKS=yes ;;
577137015Sdesesac
578137015Sdes
579137015Sdes# determine if should restart the daemon
580137015Sdesif [ -s ${piddir}/sshd.pid  -a  -f ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} ]
581137015Sdesthen
582137015Sdes	ans=\`ckyorn -d n \
583137015Sdes-p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$?
584137015Sdes	case \$ans in
585137015Sdes		[y,Y]*)	PRE_INS_STOP=yes
586137015Sdes			POST_INS_START=yes
587137015Sdes			;;
588137015Sdes	esac
589137015Sdes
590137015Sdeselse
591137015Sdes
592137015Sdes# determine if we should start sshd
593137015Sdes	ans=\`ckyorn -d n \
594137015Sdes-p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$?
595137015Sdes	case \$ans in
596137015Sdes		[y,Y]*)	POST_INS_START=yes ;;
597137015Sdes	esac
598137015Sdesfi
599137015Sdes
600137015Sdes# make parameters available to installation service,
601137015Sdes# and so to any other packaging scripts
602137015Sdescat >\$1 <<!
603137015SdesUSE_SYM_LINKS='\$USE_SYM_LINKS'
604137015SdesPRE_INS_STOP='\$PRE_INS_STOP'
605137015SdesPOST_INS_START='\$POST_INS_START'
606137015Sdes!
607137015Sdes
608137015Sdes_EOF
609162852Sdesfi
610137015Sdes
611137015Sdes# local request changes here
612137015Sdes[ -s "${PKG_REQUEST_LOCAL}" ]  &&  . ${PKG_REQUEST_LOCAL}
613137015Sdes
614137015Sdescat >> request << _EOF
615137015Sdesexit 0
616137015Sdes
617137015Sdes_EOF
618137015Sdes
619137015Sdes## Next Build our prototype
620137015Sdesecho "Building prototype file..."
621137015Sdescat >mk-proto.awk << _EOF
622137015Sdes	    BEGIN { print "i pkginfo"; print "i depend"; \\
623137015Sdes		    print "i preinstall"; print "i postinstall"; \\
624137015Sdes 		    print "i preremove"; print "i postremove"; \\
625137015Sdes		    print "i request"; print "i space"; \\
626137015Sdes		    split("$SYSTEM_DIR",sys_files); }
627137015Sdes	    {
628137015Sdes	     for (dir in sys_files) { if ( \$3 != sys_files[dir] )
629137015Sdes		     { if ( \$1 == "s" )
630137015Sdes			{ \$5=""; \$6=""; }
631137015Sdes		     else
632137015Sdes			{ \$5="root"; \$6="sys"; }
633137015Sdes		     }
634137015Sdes		else
635137015Sdes		     { \$4="?"; \$5="?"; \$6="?"; break;}
636137015Sdes	    } }
637137015Sdes	    { print; }
638137015Sdes_EOF
639137015Sdes
640137015Sdesfind . | egrep -v "prototype|pkginfo|mk-proto.awk" | sort | \
641137015Sdes	pkgproto $PROTO_ARGS | nawk -f mk-proto.awk > prototype
642137015Sdes
643137015Sdes# /usr/local is a symlink on some systems
644137015Sdes[ "${USR_LOCAL_IS_SYMLINK}" = yes ]  &&  {
645137015Sdes	grep -v "^d none /usr/local ? ? ?$" prototype > prototype.new
646137015Sdes	mv prototype.new prototype
647137015Sdes}
648137015Sdes
649137015Sdes## Step back a directory and now build the package.
650137015Sdescd ..
651137015Sdes# local prototype tweeks here
652137015Sdes[ -s "${POST_PROTOTYPE_EDITS}" ]  &&  . ${POST_PROTOTYPE_EDITS}
653137015Sdes
654137015Sdesecho "Building package.."
655137015Sdespkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -o
656137015Sdesecho | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$VERSION$REV-$UNAME_S-$ARCH.pkg
657137015Sdes	;;
658137015Sdes
659137015Sdes	justpkg.sh)
660137015Sdesrm -fr ${FAKE_ROOT}/${PKGNAME}
661137015Sdesgrep -v "^PSTAMP=" $FAKE_ROOT/pkginfo > $$tmp
662137015Sdesmv $$tmp $FAKE_ROOT/pkginfo
663137015Sdescat >> $FAKE_ROOT/pkginfo << _EOF
664137015SdesPSTAMP="${UNAME_S} ${OS_VER} ${ARCH} `date '+%d%b%Y %H:%M'`"
665137015Sdes_EOF
666137015Sdespkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -o
667137015Sdesecho | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$VERSION$REV-$UNAME_S-$ARCH.pkg
668137015Sdes	;;
669137015Sdes
670137015Sdesesac
671137015Sdes
672137015Sdes[ "${REMOVE_FAKE_ROOT_WHEN_DONE}" = yes ]  &&  rm -rf $FAKE_ROOT
673137015Sdesexit 0
674137015Sdes
675