buildpkg.sh.in revision 164146
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 27164146SdesAWK=${AWK:="nawk"} 28137015SdesMAKE=${MAKE:="make"} 29137015SdesSSHDUID=67 # Default privsep uid 30137015SdesSSHDGID=67 # Default privsep gid 31137015Sdes# uncomment these next three as needed 32137015Sdes#PERMIT_ROOT_LOGIN=no 33137015Sdes#X11_FORWARDING=yes 34137015Sdes#USR_LOCAL_IS_SYMLINK=yes 35137015Sdes# System V init run levels 36137015SdesSYSVINITSTART=S98 37137015SdesSYSVINITSTOPT=K30 38137015Sdes# We will source these if they exist 39162852SdesPOST_MAKE_INSTALL_FIXES=./pkg-post-make-install-fixes.sh 40137015SdesPOST_PROTOTYPE_EDITS=./pkg-post-prototype-edit.sh 41137015Sdes# We'll be one level deeper looking for these 42137015SdesPKG_PREINSTALL_LOCAL=../pkg-preinstall.local 43137015SdesPKG_POSTINSTALL_LOCAL=../pkg-postinstall.local 44137015SdesPKG_PREREMOVE_LOCAL=../pkg-preremove.local 45137015SdesPKG_POSTREMOVE_LOCAL=../pkg-postremove.local 46137015SdesPKG_REQUEST_LOCAL=../pkg-request.local 47137015Sdes# end of sourced files 48137015Sdes# 49137015SdesOPENSSHD=opensshd.init 50162852SdesOPENSSH_MANIFEST=openssh.xml 51162852SdesOPENSSH_FMRI=svc:/site/openssh:default 52137015Sdes 53137015SdesPATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@ 54137015SdesPATH_USERADD_PROG=@PATH_USERADD_PROG@ 55137015SdesPATH_PASSWD_PROG=@PATH_PASSWD_PROG@ 56137015Sdes# 57137015Sdes# list of system directories we do NOT want to change owner/group/perms 58137015Sdes# when installing our package 59137015SdesSYSTEM_DIR="/etc \ 60137015Sdes/etc/init.d \ 61137015Sdes/etc/rcS.d \ 62137015Sdes/etc/rc0.d \ 63137015Sdes/etc/rc1.d \ 64137015Sdes/etc/rc2.d \ 65137015Sdes/etc/opt \ 66162852Sdes/lib \ 67162852Sdes/lib/svc \ 68162852Sdes/lib/svc/method \ 69162852Sdes/lib/svc/method/site \ 70137015Sdes/opt \ 71137015Sdes/opt/bin \ 72137015Sdes/usr \ 73137015Sdes/usr/bin \ 74137015Sdes/usr/lib \ 75137015Sdes/usr/sbin \ 76137015Sdes/usr/share \ 77137015Sdes/usr/share/man \ 78137015Sdes/usr/share/man/man1 \ 79137015Sdes/usr/share/man/man8 \ 80137015Sdes/usr/local \ 81137015Sdes/usr/local/bin \ 82137015Sdes/usr/local/etc \ 83137015Sdes/usr/local/libexec \ 84137015Sdes/usr/local/man \ 85137015Sdes/usr/local/man/man1 \ 86137015Sdes/usr/local/man/man8 \ 87137015Sdes/usr/local/sbin \ 88137015Sdes/usr/local/share \ 89137015Sdes/var \ 90137015Sdes/var/opt \ 91137015Sdes/var/run \ 92162852Sdes/var/svc \ 93162852Sdes/var/svc/manifest \ 94162852Sdes/var/svc/manifest/site \ 95137015Sdes/var/tmp \ 96137015Sdes/tmp" 97137015Sdes 98137015Sdes# We may need to build as root so we make sure PATH is set up 99137015Sdes# only set the path if it's not set already 100137015Sdes[ -d /opt/bin ] && { 101137015Sdes echo $PATH | grep ":/opt/bin" > /dev/null 2>&1 102137015Sdes [ $? -ne 0 ] && PATH=$PATH:/opt/bin 103137015Sdes} 104137015Sdes[ -d /usr/local/bin ] && { 105137015Sdes echo $PATH | grep ":/usr/local/bin" > /dev/null 2>&1 106137015Sdes [ $? -ne 0 ] && PATH=$PATH:/usr/local/bin 107137015Sdes} 108137015Sdes[ -d /usr/ccs/bin ] && { 109137015Sdes echo $PATH | grep ":/usr/ccs/bin" > /dev/null 2>&1 110137015Sdes [ $? -ne 0 ] && PATH=$PATH:/usr/ccs/bin 111137015Sdes} 112137015Sdesexport PATH 113137015Sdes# 114137015Sdes 115137015Sdes[ -f Makefile ] || { 116137015Sdes echo "Please run this script from your build directory" 117137015Sdes exit 1 118137015Sdes} 119137015Sdes 120137015Sdes# we will look for openssh-config.local to override the above options 121137015Sdes[ -s ./openssh-config.local ] && . ./openssh-config.local 122137015Sdes 123137015SdesSTART=`pwd` 124137015SdesFAKE_ROOT=$START/pkg 125137015Sdes 126137015Sdes## Fill in some details, like prefix and sysconfdir 127137015Sdesfor confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir sysconfdir piddir srcdir 128137015Sdesdo 129137015Sdes eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2` 130137015Sdesdone 131137015Sdes 132162852Sdes## Are we using Solaris' SMF? 133162852SdesDO_SMF=0 134162852Sdesif egrep "^#define USE_SOLARIS_PROCESS_CONTRACTS" config.h > /dev/null 2>&1 135162852Sdesthen 136162852Sdes DO_SMF=1 137162852Sdesfi 138137015Sdes 139137015Sdes## Collect value of privsep user 140137015Sdesfor confvar in SSH_PRIVSEP_USER 141137015Sdesdo 142137015Sdes eval $confvar=`awk '/#define[ \t]'$confvar'/{print $3}' config.h` 143137015Sdesdone 144137015Sdes 145137015Sdes## Set privsep defaults if not defined 146137015Sdesif [ -z "$SSH_PRIVSEP_USER" ] 147137015Sdesthen 148137015Sdes SSH_PRIVSEP_USER=sshd 149137015Sdesfi 150137015Sdes 151137015Sdes## Extract common info requires for the 'info' part of the package. 152137015SdesVERSION=`./ssh -V 2>&1 | sed -e 's/,.*//'` 153137015Sdes 154137015SdesARCH=`uname -m` 155137015SdesDEF_MSG="\n" 156137015SdesOS_VER=`uname -v` 157137015SdesSCRIPT_SHELL=/sbin/sh 158164146SdesUNAME_R=`uname -r` 159137015SdesUNAME_S=`uname -s` 160137015Sdescase ${UNAME_S} in 161137015Sdes SunOS) UNAME_S=Solaris 162164146Sdes OS_VER=${UNAME_R} 163137015Sdes ARCH=`uname -p` 164137015Sdes RCS_D=yes 165137015Sdes DEF_MSG="(default: n)" 166137015Sdes ;; 167164146Sdes SCO_SV) case ${UNAME_R} in 168164146Sdes 3.2) UNAME_S=OpenServer5 169137015Sdes OS_VER=`uname -X | grep Release | sed -e 's/^Rel.*3.2v//'` 170164146Sdes ;; 171164146Sdes 5) UNAME_S=OpenServer6 172164146Sdes ;; 173164146Sdes esac 174137015Sdes SCRIPT_SHELL=/bin/sh 175137015Sdes RC1_D=no 176137015Sdes DEF_MSG="(default: n)" 177137015Sdes ;; 178137015Sdesesac 179137015Sdes 180137015Sdescase `basename $0` in 181137015Sdes buildpkg.sh) 182137015Sdes## Start by faking root install 183137015Sdesecho "Faking root install..." 184137015Sdes[ -d $FAKE_ROOT ] && rm -fr $FAKE_ROOT 185137015Sdesmkdir $FAKE_ROOT 186137015Sdes${MAKE} install-nokeys DESTDIR=$FAKE_ROOT 187137015Sdesif [ $? -gt 0 ] 188137015Sdesthen 189137015Sdes echo "Fake root install failed, stopping." 190137015Sdes exit 1 191137015Sdesfi 192137015Sdes 193137015Sdes## Setup our run level stuff while we are at it. 194162852Sdesif [ $DO_SMF -eq 1 ] 195162852Sdesthen 196162852Sdes # For Solaris' SMF, /lib/svc/method/site is the preferred place 197162852Sdes # for start/stop scripts that aren't supplied with the OS, and 198162852Sdes # similarly /var/svc/manifest/site for manifests. 199162852Sdes mkdir -p $FAKE_ROOT${TEST_DIR}/lib/svc/method/site 200162852Sdes mkdir -p $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site 201137015Sdes 202162852Sdes cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/lib/svc/method/site/${SYSVINIT_NAME} 203162852Sdes chmod 744 $FAKE_ROOT${TEST_DIR}/lib/svc/method/site/${SYSVINIT_NAME} 204137015Sdes 205162852Sdes cp ${OPENSSH_MANIFEST} $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site 206162852Sdes chmod 644 $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site/${OPENSSH_MANIFEST} 207162852Sdeselse 208162852Sdes mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d 209162852Sdes 210162852Sdes cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} 211162852Sdes chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} 212162852Sdesfi 213162852Sdes 214137015Sdes[ "${PERMIT_ROOT_LOGIN}" = no ] && \ 215137015Sdes perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \ 216137015Sdes $FAKE_ROOT/${sysconfdir}/sshd_config 217137015Sdes[ "${X11_FORWARDING}" = yes ] && \ 218137015Sdes perl -p -i -e "s/#X11Forwarding no/X11Forwarding yes/" \ 219137015Sdes $FAKE_ROOT/${sysconfdir}/sshd_config 220137015Sdes# fix PrintMotd 221137015Sdesperl -p -i -e "s/#PrintMotd yes/PrintMotd no/" \ 222137015Sdes $FAKE_ROOT/${sysconfdir}/sshd_config 223137015Sdes 224137015Sdes# We don't want to overwrite config files on multiple installs 225137015Sdesmv $FAKE_ROOT/${sysconfdir}/ssh_config $FAKE_ROOT/${sysconfdir}/ssh_config.default 226137015Sdesmv $FAKE_ROOT/${sysconfdir}/sshd_config $FAKE_ROOT/${sysconfdir}/sshd_config.default 227137015Sdes[ -f $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds ] && \ 228137015Sdesmv $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds.default 229137015Sdes 230137015Sdes# local tweeks here 231137015Sdes[ -s "${POST_MAKE_INSTALL_FIXES}" ] && . ${POST_MAKE_INSTALL_FIXES} 232137015Sdes 233137015Sdescd $FAKE_ROOT 234137015Sdes 235137015Sdes## Ok, this is outright wrong, but it will work. I'm tired of pkgmk 236137015Sdes## whining. 237137015Sdesfor i in *; do 238137015Sdes PROTO_ARGS="$PROTO_ARGS $i=/$i"; 239137015Sdesdone 240137015Sdes 241137015Sdes## Build info file 242137015Sdesecho "Building pkginfo file..." 243137015Sdescat > pkginfo << _EOF 244137015SdesPKG=$PKGNAME 245137015SdesNAME="OpenSSH Portable for ${UNAME_S}" 246137015SdesDESC="Secure Shell remote access utility; replaces telnet and rlogin/rsh." 247137015SdesVENDOR="OpenSSH Portable Team - http://www.openssh.com/portable.html" 248137015SdesARCH=$ARCH 249137015SdesVERSION=$VERSION$REV 250137015SdesCATEGORY="Security,application" 251137015SdesBASEDIR=/ 252137015SdesCLASSES="none" 253137015SdesPSTAMP="${UNAME_S} ${OS_VER} ${ARCH} `date '+%d%b%Y %H:%M'`" 254137015Sdes_EOF 255137015Sdes 256137015Sdes## Build empty depend file that may get updated by $POST_PROTOTYPE_EDITS 257137015Sdesecho "Building depend file..." 258137015Sdestouch depend 259137015Sdes 260137015Sdes## Build space file 261137015Sdesecho "Building space file..." 262162852Sdesif [ $DO_SMF -eq 1 ] 263162852Sdesthen 264162852Sdes # XXX Is this necessary? If not, remove space line from mk-proto.awk. 265162852Sdes touch space 266162852Sdeselse 267162852Sdes cat > space << _EOF 268162852Sdes# extra space required by start/stop links added by installf 269162852Sdes# in postinstall 270137015Sdes$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1 271137015Sdes$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME} 0 1 272137015Sdes_EOF 273162852Sdes [ "$RC1_D" = no ] || \ 274162852Sdes echo "$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space 275162852Sdes [ "$RCS_D" = yes ] && \ 276162852Sdes echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space 277162852Sdesfi 278137015Sdes 279137015Sdes## Build preinstall file 280137015Sdesecho "Building preinstall file..." 281137015Sdescat > preinstall << _EOF 282137015Sdes#! ${SCRIPT_SHELL} 283137015Sdes# 284137015Sdes_EOF 285137015Sdes 286137015Sdes# local preinstall changes here 287137015Sdes[ -s "${PKG_PREINSTALL_LOCAL}" ] && . ${PKG_PREINSTALL_LOCAL} 288137015Sdes 289137015Sdescat >> preinstall << _EOF 290137015Sdes# 291162852Sdesif [ "\${PRE_INS_STOP}" = "yes" ] 292162852Sdesthen 293162852Sdes if [ $DO_SMF -eq 1 ] 294162852Sdes then 295162852Sdes svcadm disable $OPENSSH_FMRI 296162852Sdes else 297162852Sdes ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop 298162852Sdes fi 299162852Sdesfi 300162852Sdes 301137015Sdesexit 0 302137015Sdes_EOF 303137015Sdes 304137015Sdes## Build postinstall file 305137015Sdesecho "Building postinstall file..." 306137015Sdescat > postinstall << _EOF 307137015Sdes#! ${SCRIPT_SHELL} 308137015Sdes# 309137015Sdes[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config ] || \\ 310137015Sdes cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config.default \\ 311137015Sdes \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config 312137015Sdes[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config ] || \\ 313137015Sdes cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config.default \\ 314137015Sdes \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config 315137015Sdes[ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds.default ] && { 316137015Sdes [ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds ] || \\ 317137015Sdes cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds.default \\ 318137015Sdes \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_prng_cmds 319137015Sdes} 320137015Sdes 321137015Sdes# make rc?.d dirs only if we are doing a test install 322162852Sdes[ -n "${TEST_DIR}" ] && [ $DO_SMF -ne 1 ] && { 323137015Sdes [ "$RCS_D" = yes ] && mkdir -p ${TEST_DIR}/etc/rcS.d 324137015Sdes mkdir -p ${TEST_DIR}/etc/rc0.d 325137015Sdes [ "$RC1_D" = no ] || mkdir -p ${TEST_DIR}/etc/rc1.d 326137015Sdes mkdir -p ${TEST_DIR}/etc/rc2.d 327137015Sdes} 328137015Sdes 329162852Sdesif [ $DO_SMF -eq 1 ] 330137015Sdesthen 331162852Sdes # Delete the existing service, if it exists, then import the 332162852Sdes # new one. 333162852Sdes if svcs $OPENSSH_FMRI > /dev/null 2>&1 334162852Sdes then 335162852Sdes svccfg delete -f $OPENSSH_FMRI 336162852Sdes fi 337162852Sdes # NOTE, if manifest enables sshd by default, this will actually 338162852Sdes # start the daemon, which may not be what the user wants. 339162852Sdes svccfg import ${TEST_DIR}/var/svc/manifest/site/$OPENSSH_MANIFEST 340137015Sdeselse 341162852Sdes if [ "\${USE_SYM_LINKS}" = yes ] 342162852Sdes then 343162852Sdes [ "$RCS_D" = yes ] && \ 344162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s 345162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s 346162852Sdes [ "$RC1_D" = no ] || \ 347162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s 348162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s 349162852Sdes else 350162852Sdes [ "$RCS_D" = yes ] && \ 351162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l 352162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l 353162852Sdes [ "$RC1_D" = no ] || \ 354162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l 355162852Sdes installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l 356162852Sdes fi 357137015Sdesfi 358137015Sdes 359137015Sdes# If piddir doesn't exist we add it. (Ie. --with-pid-dir=/var/opt/ssh) 360137015Sdes[ -d $piddir ] || installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR$piddir d 0755 root sys 361137015Sdes 362137015Sdes_EOF 363137015Sdes 364137015Sdes# local postinstall changes here 365137015Sdes[ -s "${PKG_POSTINSTALL_LOCAL}" ] && . ${PKG_POSTINSTALL_LOCAL} 366137015Sdes 367137015Sdescat >> postinstall << _EOF 368137015Sdesinstallf -f ${PKGNAME} 369137015Sdes 370137015Sdes# Use chroot to handle PKG_INSTALL_ROOT 371137015Sdesif [ ! -z "\${PKG_INSTALL_ROOT}" ] 372137015Sdesthen 373137015Sdes chroot="chroot \${PKG_INSTALL_ROOT}" 374137015Sdesfi 375137015Sdes# If this is a test build, we will skip the groupadd/useradd/passwd commands 376137015Sdesif [ ! -z "${TEST_DIR}" ] 377137015Sdesthen 378137015Sdes chroot=echo 379137015Sdesfi 380137015Sdes 381162852Sdes echo "PrivilegeSeparation user always required." 382137015Sdes if cut -f1 -d: \${PKG_INSTALL_ROOT}/etc/passwd | egrep '^'$SSH_PRIVSEP_USER'\$' >/dev/null 383137015Sdes then 384137015Sdes echo "PrivSep user $SSH_PRIVSEP_USER already exists." 385137015Sdes SSH_PRIVSEP_GROUP=\`grep "^$SSH_PRIVSEP_USER:" \${PKG_INSTALL_ROOT}/etc/passwd | awk -F: '{print \$4}'\` 386137015Sdes SSH_PRIVSEP_GROUP=\`grep ":\$SSH_PRIVSEP_GROUP:" \${PKG_INSTALL_ROOT}/etc/group | awk -F: '{print \$1}'\` 387137015Sdes else 388137015Sdes DO_PASSWD=yes 389137015Sdes fi 390137015Sdes [ -z "\$SSH_PRIVSEP_GROUP" ] && SSH_PRIVSEP_GROUP=$SSH_PRIVSEP_USER 391137015Sdes 392137015Sdes # group required? 393137015Sdes if cut -f1 -d: \${PKG_INSTALL_ROOT}/etc/group | egrep '^'\$SSH_PRIVSEP_GROUP'\$' >/dev/null 394137015Sdes then 395137015Sdes echo "PrivSep group \$SSH_PRIVSEP_GROUP already exists." 396137015Sdes else 397137015Sdes DO_GROUP=yes 398137015Sdes fi 399137015Sdes 400137015Sdes # create group if required 401137015Sdes [ "\$DO_GROUP" = yes ] && { 402137015Sdes # Use gid of 67 if possible 403137015Sdes if cut -f3 -d: \${PKG_INSTALL_ROOT}/etc/group | egrep '^'$SSHDGID'\$' >/dev/null 404137015Sdes then 405137015Sdes : 406137015Sdes else 407137015Sdes sshdgid="-g $SSHDGID" 408137015Sdes fi 409137015Sdes echo "Creating PrivSep group \$SSH_PRIVSEP_GROUP." 410137015Sdes \$chroot ${PATH_GROUPADD_PROG} \$sshdgid \$SSH_PRIVSEP_GROUP 411137015Sdes } 412137015Sdes 413137015Sdes # Create user if required 414137015Sdes [ "\$DO_PASSWD" = yes ] && { 415137015Sdes # Use uid of 67 if possible 416157016Sdes if cut -f3 -d: \${PKG_INSTALL_ROOT}/etc/passwd | egrep '^'$SSHDUID'\$' >/dev/null 417137015Sdes then 418137015Sdes : 419137015Sdes else 420137015Sdes sshduid="-u $SSHDUID" 421137015Sdes fi 422137015Sdes echo "Creating PrivSep user $SSH_PRIVSEP_USER." 423137015Sdes \$chroot ${PATH_USERADD_PROG} -c 'SSHD PrivSep User' -s /bin/false -g $SSH_PRIVSEP_USER \$sshduid $SSH_PRIVSEP_USER 424137015Sdes \$chroot ${PATH_PASSWD_PROG} -l $SSH_PRIVSEP_USER 425137015Sdes } 426162852Sdes 427162852Sdesif [ "\${POST_INS_START}" = "yes" ] 428162852Sdesthen 429162852Sdes if [ $DO_SMF -eq 1 ] 430162852Sdes then 431162852Sdes # See svccfg import note above. The service may already 432162852Sdes # be started. 433162852Sdes svcadm enable $OPENSSH_FMRI 434162852Sdes else 435162852Sdes ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} start 436162852Sdes fi 437137015Sdesfi 438137015Sdesexit 0 439137015Sdes_EOF 440137015Sdes 441137015Sdes## Build preremove file 442137015Sdesecho "Building preremove file..." 443137015Sdescat > preremove << _EOF 444137015Sdes#! ${SCRIPT_SHELL} 445137015Sdes# 446162852Sdesif [ $DO_SMF -eq 1 ] 447162852Sdesthen 448162852Sdes svcadm disable $OPENSSH_FMRI 449162852Sdeselse 450162852Sdes ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop 451162852Sdesfi 452137015Sdes_EOF 453137015Sdes 454137015Sdes# local preremove changes here 455137015Sdes[ -s "${PKG_PREREMOVE_LOCAL}" ] && . ${PKG_PREREMOVE_LOCAL} 456137015Sdes 457137015Sdescat >> preremove << _EOF 458137015Sdesexit 0 459137015Sdes_EOF 460137015Sdes 461137015Sdes## Build postremove file 462137015Sdesecho "Building postremove file..." 463137015Sdescat > postremove << _EOF 464137015Sdes#! ${SCRIPT_SHELL} 465137015Sdes# 466162852Sdesif [ $DO_SMF -eq 1 ] 467162852Sdesthen 468162852Sdes if svcs $OPENSSH_FMRI > /dev/null 2>&1 469162852Sdes then 470162852Sdes svccfg delete -f $OPENSSH_FMRI 471162852Sdes fi 472162852Sdesfi 473137015Sdes_EOF 474137015Sdes 475137015Sdes# local postremove changes here 476137015Sdes[ -s "${PKG_POSTREMOVE_LOCAL}" ] && . ${PKG_POSTREMOVE_LOCAL} 477137015Sdes 478137015Sdescat >> postremove << _EOF 479137015Sdesexit 0 480137015Sdes_EOF 481137015Sdes 482137015Sdes## Build request file 483137015Sdesecho "Building request file..." 484137015Sdescat > request << _EOF 485137015Sdestrap 'exit 3' 15 486137015Sdes 487137015Sdes_EOF 488137015Sdes 489137015Sdes[ -x /usr/bin/ckyorn ] || cat >> request << _EOF 490137015Sdes 491137015Sdesckyorn() { 492164146Sdes# for some strange reason OpenServer5 has no ckyorn 493137015Sdes# We build a striped down version here 494137015Sdes 495137015SdesDEFAULT=n 496137015SdesPROMPT="Yes or No [yes,no,?,quit]" 497137015SdesHELP_PROMPT=" Enter y or yes if your answer is yes; n or no if your answer is no." 498137015SdesUSAGE="usage: ckyorn [options] 499137015Sdeswhere options may include: 500137015Sdes -d default 501137015Sdes -h help 502137015Sdes -p prompt 503137015Sdes" 504137015Sdes 505137015Sdesif [ \$# != 0 ] 506137015Sdesthen 507137015Sdes while getopts d:p:h: c 508137015Sdes do 509137015Sdes case \$c in 510137015Sdes h) HELP_PROMPT="\$OPTARG" ;; 511137015Sdes d) DEFAULT=\$OPTARG ;; 512137015Sdes p) PROMPT=\$OPTARG ;; 513137015Sdes \\?) echo "\$USAGE" 1>&2 514137015Sdes exit 1 ;; 515137015Sdes esac 516137015Sdes done 517137015Sdes shift \`expr \$OPTIND - 1\` 518137015Sdesfi 519137015Sdes 520137015Sdeswhile true 521137015Sdesdo 522137015Sdes echo "\${PROMPT}\\c " 1>&2 523137015Sdes read key 524137015Sdes [ -z "\$key" ] && key=\$DEFAULT 525137015Sdes case \$key in 526137015Sdes [n,N]|[n,N][o,O]|[y,Y]|[y,Y][e,E][s,S]) echo "\${key}\\c" 527137015Sdes exit 0 ;; 528137015Sdes \\?) echo \$HELP_PROMPT 1>&2 ;; 529137015Sdes q|quit) echo "q\\c" 1>&2 530137015Sdes exit 3 ;; 531137015Sdes esac 532137015Sdesdone 533137015Sdes 534137015Sdes} 535137015Sdes 536137015Sdes_EOF 537137015Sdes 538162852Sdesif [ $DO_SMF -eq 1 ] 539162852Sdesthen 540162852Sdes # This could get hairy, as the running sshd may not be under SMF. 541162852Sdes # We'll assume an earlier version of OpenSSH started via SMF. 542162852Sdes cat >> request << _EOF 543162852SdesPRE_INS_STOP=no 544162852SdesPOST_INS_START=no 545162852Sdes# determine if should restart the daemon 546162852Sdesif [ -s ${piddir}/sshd.pid ] && \ 547162852Sdes /usr/bin/svcs $OPENSSH_FMRI 2>&1 | egrep "^online" > /dev/null 2>&1 548162852Sdesthen 549162852Sdes ans=\`ckyorn -d n \ 550162852Sdes-p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$? 551162852Sdes case \$ans in 552162852Sdes [y,Y]*) PRE_INS_STOP=yes 553162852Sdes POST_INS_START=yes 554162852Sdes ;; 555162852Sdes esac 556162852Sdes 557162852Sdeselse 558162852Sdes 559162852Sdes# determine if we should start sshd 560162852Sdes ans=\`ckyorn -d n \ 561162852Sdes-p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$? 562162852Sdes case \$ans in 563162852Sdes [y,Y]*) POST_INS_START=yes ;; 564162852Sdes esac 565162852Sdesfi 566162852Sdes 567162852Sdes# make parameters available to installation service, 568162852Sdes# and so to any other packaging scripts 569162852Sdescat >\$1 <<! 570162852SdesPRE_INS_STOP='\$PRE_INS_STOP' 571162852SdesPOST_INS_START='\$POST_INS_START' 572162852Sdes! 573162852Sdes 574162852Sdes_EOF 575162852Sdeselse 576162852Sdes cat >> request << _EOF 577137015SdesUSE_SYM_LINKS=no 578137015SdesPRE_INS_STOP=no 579137015SdesPOST_INS_START=no 580137015Sdes# Use symbolic links? 581137015Sdesans=\`ckyorn -d n \ 582137015Sdes-p "Do you want symbolic links for the start/stop scripts? ${DEF_MSG}"\` || exit \$? 583137015Sdescase \$ans in 584137015Sdes [y,Y]*) USE_SYM_LINKS=yes ;; 585137015Sdesesac 586137015Sdes 587137015Sdes# determine if should restart the daemon 588137015Sdesif [ -s ${piddir}/sshd.pid -a -f ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} ] 589137015Sdesthen 590137015Sdes ans=\`ckyorn -d n \ 591137015Sdes-p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$? 592137015Sdes case \$ans in 593137015Sdes [y,Y]*) PRE_INS_STOP=yes 594137015Sdes POST_INS_START=yes 595137015Sdes ;; 596137015Sdes esac 597137015Sdes 598137015Sdeselse 599137015Sdes 600137015Sdes# determine if we should start sshd 601137015Sdes ans=\`ckyorn -d n \ 602137015Sdes-p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$? 603137015Sdes case \$ans in 604137015Sdes [y,Y]*) POST_INS_START=yes ;; 605137015Sdes esac 606137015Sdesfi 607137015Sdes 608137015Sdes# make parameters available to installation service, 609137015Sdes# and so to any other packaging scripts 610137015Sdescat >\$1 <<! 611137015SdesUSE_SYM_LINKS='\$USE_SYM_LINKS' 612137015SdesPRE_INS_STOP='\$PRE_INS_STOP' 613137015SdesPOST_INS_START='\$POST_INS_START' 614137015Sdes! 615137015Sdes 616137015Sdes_EOF 617162852Sdesfi 618137015Sdes 619137015Sdes# local request changes here 620137015Sdes[ -s "${PKG_REQUEST_LOCAL}" ] && . ${PKG_REQUEST_LOCAL} 621137015Sdes 622137015Sdescat >> request << _EOF 623137015Sdesexit 0 624137015Sdes 625137015Sdes_EOF 626137015Sdes 627137015Sdes## Next Build our prototype 628137015Sdesecho "Building prototype file..." 629137015Sdescat >mk-proto.awk << _EOF 630137015Sdes BEGIN { print "i pkginfo"; print "i depend"; \\ 631137015Sdes print "i preinstall"; print "i postinstall"; \\ 632137015Sdes print "i preremove"; print "i postremove"; \\ 633137015Sdes print "i request"; print "i space"; \\ 634137015Sdes split("$SYSTEM_DIR",sys_files); } 635137015Sdes { 636137015Sdes for (dir in sys_files) { if ( \$3 != sys_files[dir] ) 637137015Sdes { if ( \$1 == "s" ) 638137015Sdes { \$5=""; \$6=""; } 639137015Sdes else 640137015Sdes { \$5="root"; \$6="sys"; } 641137015Sdes } 642137015Sdes else 643137015Sdes { \$4="?"; \$5="?"; \$6="?"; break;} 644137015Sdes } } 645137015Sdes { print; } 646137015Sdes_EOF 647137015Sdes 648137015Sdesfind . | egrep -v "prototype|pkginfo|mk-proto.awk" | sort | \ 649164146Sdes pkgproto $PROTO_ARGS | ${AWK} -f mk-proto.awk > prototype 650137015Sdes 651137015Sdes# /usr/local is a symlink on some systems 652137015Sdes[ "${USR_LOCAL_IS_SYMLINK}" = yes ] && { 653137015Sdes grep -v "^d none /usr/local ? ? ?$" prototype > prototype.new 654137015Sdes mv prototype.new prototype 655137015Sdes} 656137015Sdes 657137015Sdes## Step back a directory and now build the package. 658137015Sdescd .. 659137015Sdes# local prototype tweeks here 660137015Sdes[ -s "${POST_PROTOTYPE_EDITS}" ] && . ${POST_PROTOTYPE_EDITS} 661137015Sdes 662137015Sdesecho "Building package.." 663137015Sdespkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -o 664137015Sdesecho | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$VERSION$REV-$UNAME_S-$ARCH.pkg 665137015Sdes ;; 666137015Sdes 667137015Sdes justpkg.sh) 668137015Sdesrm -fr ${FAKE_ROOT}/${PKGNAME} 669137015Sdesgrep -v "^PSTAMP=" $FAKE_ROOT/pkginfo > $$tmp 670137015Sdesmv $$tmp $FAKE_ROOT/pkginfo 671137015Sdescat >> $FAKE_ROOT/pkginfo << _EOF 672137015SdesPSTAMP="${UNAME_S} ${OS_VER} ${ARCH} `date '+%d%b%Y %H:%M'`" 673137015Sdes_EOF 674137015Sdespkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -o 675137015Sdesecho | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$VERSION$REV-$UNAME_S-$ARCH.pkg 676137015Sdes ;; 677137015Sdes 678137015Sdesesac 679137015Sdes 680137015Sdes[ "${REMOVE_FAKE_ROOT_WHEN_DONE}" = yes ] && rm -rf $FAKE_ROOT 681137015Sdesexit 0 682137015Sdes 683