| #!/bin/sh |
| # |
| # Fake Root Solaris/SVR4/SVR5 Build System - Prototype |
| # |
| # The following code has been provide under Public Domain License. I really |
| # don't care what you use it for. Just as long as you don't complain to me |
| # nor my employer if you break it. - Ben Lindstrom (mouring@eviladmin.org) |
| # |
| umask 022 |
| # |
| # Options for building the package |
| # You can create a openssh-config.local with your customized options |
| # |
| REMOVE_FAKE_ROOT_WHEN_DONE=yes |
| # |
| # uncommenting TEST_DIR and using |
| # configure --prefix=/var/tmp --with-privsep-path=/var/tmp/empty |
| # and |
| # PKGNAME=tOpenSSH should allow testing a package without interfering |
| # with a real OpenSSH package on a system. This is not needed on systems |
| # that support the -R option to pkgadd. |
| #TEST_DIR=/var/tmp # leave commented out for production build |
| PKGNAME=OpenSSH |
| # revisions within the same version (REV=a) |
| #REV= |
| SYSVINIT_NAME=opensshd |
| AWK=${AWK:="nawk"} |
| MAKE=${MAKE:="make"} |
| SSHDUID=67 # Default privsep uid |
| SSHDGID=67 # Default privsep gid |
| # uncomment these next three as needed |
| #PERMIT_ROOT_LOGIN=no |
| #X11_FORWARDING=yes |
| #USR_LOCAL_IS_SYMLINK=yes |
| # System V init run levels |
| SYSVINITSTART=S98 |
| SYSVINITSTOPT=K30 |
| # We will source these if they exist |
| POST_MAKE_INSTALL_FIXES=./pkg-post-make-install-fixes.sh |
| POST_PROTOTYPE_EDITS=./pkg-post-prototype-edit.sh |
| # We'll be one level deeper looking for these |
| PKG_PREINSTALL_LOCAL=../pkg-preinstall.local |
| PKG_POSTINSTALL_LOCAL=../pkg-postinstall.local |
| PKG_PREREMOVE_LOCAL=../pkg-preremove.local |
| PKG_POSTREMOVE_LOCAL=../pkg-postremove.local |
| PKG_REQUEST_LOCAL=../pkg-request.local |
| # end of sourced files |
| # |
| OPENSSHD=opensshd.init |
| OPENSSH_MANIFEST=openssh.xml |
| OPENSSH_FMRI=svc:/site/${SYSVINIT_NAME}:default |
| SMF_METHOD_DIR=/lib/svc/method/site |
| SMF_MANIFEST_DIR=/var/svc/manifest/site |
| |
| PATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@ |
| PATH_USERADD_PROG=@PATH_USERADD_PROG@ |
| PATH_PASSWD_PROG=@PATH_PASSWD_PROG@ |
| # |
| # list of system directories we do NOT want to change owner/group/perms |
| # when installing our package |
| SYSTEM_DIR="/etc \ |
| /etc/init.d \ |
| /etc/rcS.d \ |
| /etc/rc0.d \ |
| /etc/rc1.d \ |
| /etc/rc2.d \ |
| /etc/opt \ |
| /lib \ |
| /lib/svc \ |
| /lib/svc/method \ |
| /lib/svc/method/site \ |
| /opt \ |
| /opt/bin \ |
| /usr \ |
| /usr/bin \ |
| /usr/lib \ |
| /usr/sbin \ |
| /usr/share \ |
| /usr/share/man \ |
| /usr/share/man/man1 \ |
| /usr/share/man/man8 \ |
| /usr/local \ |
| /usr/local/bin \ |
| /usr/local/etc \ |
| /usr/local/libexec \ |
| /usr/local/man \ |
| /usr/local/man/man1 \ |
| /usr/local/man/man8 \ |
| /usr/local/sbin \ |
| /usr/local/share \ |
| /var \ |
| /var/opt \ |
| /var/run \ |
| /var/svc \ |
| /var/svc/manifest \ |
| /var/svc/manifest/site \ |
| /var/tmp \ |
| /tmp" |
| |
| # We may need to build as root so we make sure PATH is set up |
| # only set the path if it's not set already |
| [ -d /opt/bin ] && { |
| echo $PATH | grep ":/opt/bin" > /dev/null 2>&1 |
| [ $? -ne 0 ] && PATH=$PATH:/opt/bin |
| } |
| [ -d /usr/local/bin ] && { |
| echo $PATH | grep ":/usr/local/bin" > /dev/null 2>&1 |
| [ $? -ne 0 ] && PATH=$PATH:/usr/local/bin |
| } |
| [ -d /usr/ccs/bin ] && { |
| echo $PATH | grep ":/usr/ccs/bin" > /dev/null 2>&1 |
| [ $? -ne 0 ] && PATH=$PATH:/usr/ccs/bin |
| } |
| export PATH |
| # |
| |
| [ -f Makefile ] || { |
| echo "Please run this script from your build directory" |
| exit 1 |
| } |
| |
| # we will look for openssh-config.local to override the above options |
| [ -s ./openssh-config.local ] && . ./openssh-config.local |
| |
| START=`pwd` |
| FAKE_ROOT=$START/pkg |
| |
| ## Fill in some details, like prefix and sysconfdir |
| for confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir sysconfdir piddir srcdir |
| do |
| eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2` |
| done |
| |
| ## Are we using Solaris' SMF? |
| DO_SMF=0 |
| if egrep "^#define USE_SOLARIS_PROCESS_CONTRACTS" config.h > /dev/null 2>&1 |
| then |
| DO_SMF=1 |
| fi |
| |
| ## Collect value of privsep user |
| for confvar in SSH_PRIVSEP_USER |
| do |
| eval $confvar=`awk '/#define[ \t]'$confvar'/{print $3}' config.h` |
| done |
| |
| ## Set privsep defaults if not defined |
| if [ -z "$SSH_PRIVSEP_USER" ] |
| then |
| SSH_PRIVSEP_USER=sshd |
| fi |
| |
| ## Extract common info requires for the 'info' part of the package. |
| VERSION=`./ssh -V 2>&1 | sed -e 's/,.*//'` |
| |
| ARCH=`uname -m` |
| DEF_MSG="\n" |
| OS_VER=`uname -v` |
| SCRIPT_SHELL=/sbin/sh |
| UNAME_R=`uname -r` |
| UNAME_S=`uname -s` |
| case ${UNAME_S} in |
| SunOS) UNAME_S=Solaris |
| OS_VER=${UNAME_R} |
| ARCH=`uname -p` |
| RCS_D=yes |
| DEF_MSG="(default: n)" |
| ;; |
| SCO_SV) case ${UNAME_R} in |
| 3.2) UNAME_S=OpenServer5 |
| OS_VER=`uname -X | grep Release | sed -e 's/^Rel.*3.2v//'` |
| ;; |
| 5) UNAME_S=OpenServer6 |
| ;; |
| esac |
| SCRIPT_SHELL=/bin/sh |
| RC1_D=no |
| DEF_MSG="(default: n)" |
| ;; |
| esac |
| |
| case `basename $0` in |
| buildpkg.sh) |
| ## Start by faking root install |
| echo "Faking root install..." |
| [ -d $FAKE_ROOT ] && rm -fr $FAKE_ROOT |
| mkdir $FAKE_ROOT |
| ${MAKE} install-nokeys DESTDIR=$FAKE_ROOT |
| if [ $? -gt 0 ] |
| then |
| echo "Fake root install failed, stopping." |
| exit 1 |
| fi |
| |
| ## Setup our run level stuff while we are at it. |
| if [ $DO_SMF -eq 1 ] |
| then |
| # For Solaris' SMF, /lib/svc/method/site is the preferred place |
| # for start/stop scripts that aren't supplied with the OS, and |
| # similarly /var/svc/manifest/site for manifests. |
| mkdir -p $FAKE_ROOT${TEST_DIR}${SMF_METHOD_DIR} |
| mkdir -p $FAKE_ROOT${TEST_DIR}${SMF_MANIFEST_DIR} |
| |
| cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}${SMF_METHOD_DIR}/${SYSVINIT_NAME} |
| chmod 744 $FAKE_ROOT${TEST_DIR}${SMF_METHOD_DIR}/${SYSVINIT_NAME} |
| |
| cat ${OPENSSH_MANIFEST} | \ |
| sed -e "s|__SYSVINIT_NAME__|${SYSVINIT_NAME}|" \ |
| -e "s|__SMF_METHOD_DIR__|${SMF_METHOD_DIR}|" \ |
| > $FAKE_ROOT${TEST_DIR}${SMF_MANIFEST_DIR}/${SYSVINIT_NAME}.xml |
| chmod 644 $FAKE_ROOT${TEST_DIR}${SMF_MANIFEST_DIR}/${SYSVINIT_NAME}.xml |
| else |
| mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d |
| |
| cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} |
| chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} |
| fi |
| |
| [ "${PERMIT_ROOT_LOGIN}" = no ] && \ |
| perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \ |
| $FAKE_ROOT${sysconfdir}/sshd_config |
| [ "${X11_FORWARDING}" = yes ] && \ |
| perl -p -i -e "s/#X11Forwarding no/X11Forwarding yes/" \ |
| $FAKE_ROOT${sysconfdir}/sshd_config |
| # fix PrintMotd |
| perl -p -i -e "s/#PrintMotd yes/PrintMotd no/" \ |
| $FAKE_ROOT${sysconfdir}/sshd_config |
| |
| # We don't want to overwrite config files on multiple installs |
| mv $FAKE_ROOT${sysconfdir}/ssh_config $FAKE_ROOT${sysconfdir}/ssh_config.default |
| mv $FAKE_ROOT${sysconfdir}/sshd_config $FAKE_ROOT${sysconfdir}/sshd_config.default |
| |
| # local tweeks here |
| [ -s "${POST_MAKE_INSTALL_FIXES}" ] && . ${POST_MAKE_INSTALL_FIXES} |
| |
| cd $FAKE_ROOT |
| |
| ## Ok, this is outright wrong, but it will work. I'm tired of pkgmk |
| ## whining. |
| for i in *; do |
| PROTO_ARGS="$PROTO_ARGS $i=/$i"; |
| done |
| |
| ## Build info file |
| echo "Building pkginfo file..." |
| cat > pkginfo << _EOF |
| PKG=$PKGNAME |
| NAME="OpenSSH Portable for ${UNAME_S}" |
| DESC="Secure Shell remote access utility; replaces telnet and rlogin/rsh." |
| VENDOR="OpenSSH Portable Team - http://www.openssh.com/portable.html" |
| ARCH=$ARCH |
| VERSION=$VERSION$REV |
| CATEGORY="Security,application" |
| BASEDIR=/ |
| CLASSES="none" |
| PSTAMP="${UNAME_S} ${OS_VER} ${ARCH} `date '+%d%b%Y %H:%M'`" |
| _EOF |
| |
| ## Build empty depend file that may get updated by $POST_PROTOTYPE_EDITS |
| echo "Building depend file..." |
| touch depend |
| |
| ## Build space file |
| echo "Building space file..." |
| if [ $DO_SMF -eq 1 ] |
| then |
| # XXX Is this necessary? If not, remove space line from mk-proto.awk. |
| touch space |
| else |
| cat > space << _EOF |
| # extra space required by start/stop links added by installf |
| # in postinstall |
| $TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1 |
| $TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME} 0 1 |
| _EOF |
| [ "$RC1_D" = no ] || \ |
| echo "$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space |
| [ "$RCS_D" = yes ] && \ |
| echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space |
| fi |
| |
| ## Build preinstall file |
| echo "Building preinstall file..." |
| cat > preinstall << _EOF |
| #! ${SCRIPT_SHELL} |
| # |
| _EOF |
| |
| # local preinstall changes here |
| [ -s "${PKG_PREINSTALL_LOCAL}" ] && . ${PKG_PREINSTALL_LOCAL} |
| |
| cat >> preinstall << _EOF |
| # |
| if [ "\${PRE_INS_STOP}" = "yes" ] |
| then |
| if [ $DO_SMF -eq 1 ] |
| then |
| svcadm disable $OPENSSH_FMRI |
| else |
| ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop |
| fi |
| fi |
| |
| exit 0 |
| _EOF |
| |
| ## Build postinstall file |
| echo "Building postinstall file..." |
| cat > postinstall << _EOF |
| #! ${SCRIPT_SHELL} |
| # |
| [ -f \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config ] || \\ |
| cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config.default \\ |
| \${PKG_INSTALL_ROOT}${sysconfdir}/ssh_config |
| [ -f \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config ] || \\ |
| cp -p \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config.default \\ |
| \${PKG_INSTALL_ROOT}${sysconfdir}/sshd_config |
| |
| # make rc?.d dirs only if we are doing a test install |
| [ -n "${TEST_DIR}" ] && [ $DO_SMF -ne 1 ] && { |
| [ "$RCS_D" = yes ] && mkdir -p ${TEST_DIR}/etc/rcS.d |
| mkdir -p ${TEST_DIR}/etc/rc0.d |
| [ "$RC1_D" = no ] || mkdir -p ${TEST_DIR}/etc/rc1.d |
| mkdir -p ${TEST_DIR}/etc/rc2.d |
| } |
| |
| if [ $DO_SMF -eq 1 ] |
| then |
| # Delete the existing service, if it exists, then import the |
| # new one. |
| if svcs $OPENSSH_FMRI > /dev/null 2>&1 |
| then |
| svccfg delete -f $OPENSSH_FMRI |
| fi |
| # NOTE, The manifest disables sshd by default. |
| svccfg import ${TEST_DIR}${SMF_MANIFEST_DIR}/${SYSVINIT_NAME}.xml |
| else |
| if [ "\${USE_SYM_LINKS}" = yes ] |
| then |
| [ "$RCS_D" = yes ] && \ |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s |
| [ "$RC1_D" = no ] || \ |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s |
| else |
| [ "$RCS_D" = yes ] && \ |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l |
| [ "$RC1_D" = no ] || \ |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l |
| installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l |
| fi |
| fi |
| |
| # If piddir doesn't exist we add it. (Ie. --with-pid-dir=/var/opt/ssh) |
| [ -d $piddir ] || installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR$piddir d 0755 root sys |
| |
| _EOF |
| |
| # local postinstall changes here |
| [ -s "${PKG_POSTINSTALL_LOCAL}" ] && . ${PKG_POSTINSTALL_LOCAL} |
| |
| cat >> postinstall << _EOF |
| installf -f ${PKGNAME} |
| |
| # Use chroot to handle PKG_INSTALL_ROOT |
| if [ ! -z "\${PKG_INSTALL_ROOT}" ] |
| then |
| chroot="chroot \${PKG_INSTALL_ROOT}" |
| fi |
| # If this is a test build, we will skip the groupadd/useradd/passwd commands |
| if [ ! -z "${TEST_DIR}" ] |
| then |
| chroot=echo |
| fi |
| |
| echo "PrivilegeSeparation user always required." |
| if cut -f1 -d: \${PKG_INSTALL_ROOT}/etc/passwd | egrep '^'$SSH_PRIVSEP_USER'\$' >/dev/null |
| then |
| echo "PrivSep user $SSH_PRIVSEP_USER already exists." |
| SSH_PRIVSEP_GROUP=\`grep "^$SSH_PRIVSEP_USER:" \${PKG_INSTALL_ROOT}/etc/passwd | awk -F: '{print \$4}'\` |
| SSH_PRIVSEP_GROUP=\`grep ":\$SSH_PRIVSEP_GROUP:" \${PKG_INSTALL_ROOT}/etc/group | awk -F: '{print \$1}'\` |
| else |
| DO_PASSWD=yes |
| fi |
| [ -z "\$SSH_PRIVSEP_GROUP" ] && SSH_PRIVSEP_GROUP=$SSH_PRIVSEP_USER |
| |
| # group required? |
| if cut -f1 -d: \${PKG_INSTALL_ROOT}/etc/group | egrep '^'\$SSH_PRIVSEP_GROUP'\$' >/dev/null |
| then |
| echo "PrivSep group \$SSH_PRIVSEP_GROUP already exists." |
| else |
| DO_GROUP=yes |
| fi |
| |
| # create group if required |
| [ "\$DO_GROUP" = yes ] && { |
| # Use gid of 67 if possible |
| if cut -f3 -d: \${PKG_INSTALL_ROOT}/etc/group | egrep '^'$SSHDGID'\$' >/dev/null |
| then |
| : |
| else |
| sshdgid="-g $SSHDGID" |
| fi |
| echo "Creating PrivSep group \$SSH_PRIVSEP_GROUP." |
| \$chroot ${PATH_GROUPADD_PROG} \$sshdgid \$SSH_PRIVSEP_GROUP |
| } |
| |
| # Create user if required |
| [ "\$DO_PASSWD" = yes ] && { |
| # Use uid of 67 if possible |
| if cut -f3 -d: \${PKG_INSTALL_ROOT}/etc/passwd | egrep '^'$SSHDUID'\$' >/dev/null |
| then |
| : |
| else |
| sshduid="-u $SSHDUID" |
| fi |
| echo "Creating PrivSep user $SSH_PRIVSEP_USER." |
| \$chroot ${PATH_USERADD_PROG} -c 'SSHD PrivSep User' -s /bin/false -g $SSH_PRIVSEP_USER \$sshduid $SSH_PRIVSEP_USER |
| \$chroot ${PATH_PASSWD_PROG} -l $SSH_PRIVSEP_USER |
| } |
| |
| if [ "\${POST_INS_START}" = "yes" ] |
| then |
| if [ $DO_SMF -eq 1 ] |
| then |
| svcadm enable $OPENSSH_FMRI |
| else |
| ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} start |
| fi |
| fi |
| exit 0 |
| _EOF |
| |
| ## Build preremove file |
| echo "Building preremove file..." |
| cat > preremove << _EOF |
| #! ${SCRIPT_SHELL} |
| # |
| if [ $DO_SMF -eq 1 ] |
| then |
| svcadm disable $OPENSSH_FMRI |
| else |
| ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop |
| fi |
| _EOF |
| |
| # local preremove changes here |
| [ -s "${PKG_PREREMOVE_LOCAL}" ] && . ${PKG_PREREMOVE_LOCAL} |
| |
| cat >> preremove << _EOF |
| exit 0 |
| _EOF |
| |
| ## Build postremove file |
| echo "Building postremove file..." |
| cat > postremove << _EOF |
| #! ${SCRIPT_SHELL} |
| # |
| if [ $DO_SMF -eq 1 ] |
| then |
| if svcs $OPENSSH_FMRI > /dev/null 2>&1 |
| then |
| svccfg delete -f $OPENSSH_FMRI |
| fi |
| fi |
| _EOF |
| |
| # local postremove changes here |
| [ -s "${PKG_POSTREMOVE_LOCAL}" ] && . ${PKG_POSTREMOVE_LOCAL} |
| |
| cat >> postremove << _EOF |
| exit 0 |
| _EOF |
| |
| ## Build request file |
| echo "Building request file..." |
| cat > request << _EOF |
| trap 'exit 3' 15 |
| |
| _EOF |
| |
| [ -x /usr/bin/ckyorn ] || cat >> request << _EOF |
| |
| ckyorn() { |
| # for some strange reason OpenServer5 has no ckyorn |
| # We build a striped down version here |
| |
| DEFAULT=n |
| PROMPT="Yes or No [yes,no,?,quit]" |
| HELP_PROMPT=" Enter y or yes if your answer is yes; n or no if your answer is no." |
| USAGE="usage: ckyorn [options] |
| where options may include: |
| -d default |
| -h help |
| -p prompt |
| " |
| |
| if [ \$# != 0 ] |
| then |
| while getopts d:p:h: c |
| do |
| case \$c in |
| h) HELP_PROMPT="\$OPTARG" ;; |
| d) DEFAULT=\$OPTARG ;; |
| p) PROMPT=\$OPTARG ;; |
| \\?) echo "\$USAGE" 1>&2 |
| exit 1 ;; |
| esac |
| done |
| shift \`expr \$OPTIND - 1\` |
| fi |
| |
| while true |
| do |
| echo "\${PROMPT}\\c " 1>&2 |
| read key |
| [ -z "\$key" ] && key=\$DEFAULT |
| case \$key in |
| [n,N]|[n,N][o,O]|[y,Y]|[y,Y][e,E][s,S]) echo "\${key}\\c" |
| exit 0 ;; |
| \\?) echo \$HELP_PROMPT 1>&2 ;; |
| q|quit) echo "q\\c" 1>&2 |
| exit 3 ;; |
| esac |
| done |
| |
| } |
| |
| _EOF |
| |
| if [ $DO_SMF -eq 1 ] |
| then |
| # This could get hairy, as the running sshd may not be under SMF. |
| # We'll assume an earlier version of OpenSSH started via SMF. |
| cat >> request << _EOF |
| PRE_INS_STOP=no |
| POST_INS_START=no |
| # determine if should restart the daemon |
| if [ -s ${piddir}/sshd.pid ] && \ |
| /usr/bin/svcs -H $OPENSSH_FMRI 2>&1 | egrep "^online" > /dev/null 2>&1 |
| then |
| ans=\`ckyorn -d n \ |
| -p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$? |
| case \$ans in |
| [y,Y]*) PRE_INS_STOP=yes |
| POST_INS_START=yes |
| ;; |
| esac |
| |
| else |
| |
| # determine if we should start sshd |
| ans=\`ckyorn -d n \ |
| -p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$? |
| case \$ans in |
| [y,Y]*) POST_INS_START=yes ;; |
| esac |
| fi |
| |
| # make parameters available to installation service, |
| # and so to any other packaging scripts |
| cat >\$1 <<! |
| PRE_INS_STOP='\$PRE_INS_STOP' |
| POST_INS_START='\$POST_INS_START' |
| ! |
| |
| _EOF |
| else |
| cat >> request << _EOF |
| USE_SYM_LINKS=no |
| PRE_INS_STOP=no |
| POST_INS_START=no |
| # Use symbolic links? |
| ans=\`ckyorn -d n \ |
| -p "Do you want symbolic links for the start/stop scripts? ${DEF_MSG}"\` || exit \$? |
| case \$ans in |
| [y,Y]*) USE_SYM_LINKS=yes ;; |
| esac |
| |
| # determine if should restart the daemon |
| if [ -s ${piddir}/sshd.pid -a -f ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} ] |
| then |
| ans=\`ckyorn -d n \ |
| -p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$? |
| case \$ans in |
| [y,Y]*) PRE_INS_STOP=yes |
| POST_INS_START=yes |
| ;; |
| esac |
| |
| else |
| |
| # determine if we should start sshd |
| ans=\`ckyorn -d n \ |
| -p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$? |
| case \$ans in |
| [y,Y]*) POST_INS_START=yes ;; |
| esac |
| fi |
| |
| # make parameters available to installation service, |
| # and so to any other packaging scripts |
| cat >\$1 <<! |
| USE_SYM_LINKS='\$USE_SYM_LINKS' |
| PRE_INS_STOP='\$PRE_INS_STOP' |
| POST_INS_START='\$POST_INS_START' |
| ! |
| |
| _EOF |
| fi |
| |
| # local request changes here |
| [ -s "${PKG_REQUEST_LOCAL}" ] && . ${PKG_REQUEST_LOCAL} |
| |
| cat >> request << _EOF |
| exit 0 |
| |
| _EOF |
| |
| ## Next Build our prototype |
| echo "Building prototype file..." |
| cat >mk-proto.awk << _EOF |
| BEGIN { print "i pkginfo"; print "i depend"; \\ |
| print "i preinstall"; print "i postinstall"; \\ |
| print "i preremove"; print "i postremove"; \\ |
| print "i request"; print "i space"; \\ |
| split("$SYSTEM_DIR",sys_files); } |
| { |
| for (dir in sys_files) { if ( \$3 != sys_files[dir] ) |
| { if ( \$1 == "s" ) |
| { \$5=""; \$6=""; } |
| else |
| { \$5="root"; \$6="sys"; } |
| } |
| else |
| { \$4="?"; \$5="?"; \$6="?"; break;} |
| } } |
| { print; } |
| _EOF |
| |
| find . | egrep -v "prototype|pkginfo|mk-proto.awk" | sort | \ |
| pkgproto $PROTO_ARGS | ${AWK} -f mk-proto.awk > prototype |
| |
| # /usr/local is a symlink on some systems |
| [ "${USR_LOCAL_IS_SYMLINK}" = yes ] && { |
| grep -v "^d none /usr/local ? ? ?$" prototype > prototype.new |
| mv prototype.new prototype |
| } |
| |
| ## Step back a directory and now build the package. |
| cd .. |
| # local prototype tweeks here |
| [ -s "${POST_PROTOTYPE_EDITS}" ] && . ${POST_PROTOTYPE_EDITS} |
| |
| echo "Building package.." |
| pkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -o |
| echo | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$VERSION$REV-$UNAME_S-$ARCH.pkg |
| ;; |
| |
| justpkg.sh) |
| rm -fr ${FAKE_ROOT}/${PKGNAME} |
| grep -v "^PSTAMP=" $FAKE_ROOT/pkginfo > $$tmp |
| mv $$tmp $FAKE_ROOT/pkginfo |
| cat >> $FAKE_ROOT/pkginfo << _EOF |
| PSTAMP="${UNAME_S} ${OS_VER} ${ARCH} `date '+%d%b%Y %H:%M'`" |
| _EOF |
| pkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -o |
| echo | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$VERSION$REV-$UNAME_S-$ARCH.pkg |
| ;; |
| |
| esac |
| |
| [ "${REMOVE_FAKE_ROOT_WHEN_DONE}" = yes ] && rm -rf $FAKE_ROOT |
| exit 0 |
| |