# # Makefile for building a Solaris package of OpenSSH # $Id: openssh.Makefile,v 1.11 2002/06/28 15:20:37 dgregor Exp $ # # Copyright (c) 1998-2002 Daniel J. Gregor, Jr., All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Daniel J. Gregor, Jr. # 4. The name of Daniel J. Gregor, Jr. may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY DANIEL J. GREGOR, JR. ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL DANIEL J. GREGOR, JR. BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # # The homepage for OpenSSH is at # http://www.openssh.com/ # TOPDIR:sh = pwd BUILDDIR = openssh-3.4p1 BUILDREV:sh = echo '$$Revision: 1.11 $$' | sed 's/.*\.//;s/ .*//' PKGNAME = openssh DESTDIR = ${TOPDIR}/pkg BASEDIR = /opt/${PKGNAME} ETCDIR = /etc/opt/${PKGNAME} BASEDIREXISTS = /opt /etc/opt /etc/init.d /etc/rc0.d /etc/rc1.d /etc/rc2.d \ /etc/rc3.d CONFOPTS = OPENSSL_DIR = /opt/OpenSSL ZLIB_DIR = /usr/lib #OPENSSL_DIR = ${TOPDIR}/../openssl/openssl-0.9.6b #ZLIB_DIR = ${TOPDIR}/../zlib/zlib-1.1.3 PIDDIR = /var/run PRNGD_SOCKET = /var/opt/LJprngd/prngd-socket PRIVSEP_USER = sshd PRIVSEP_PATH = ${BASEDIR}/empty PRIVSEP_UID = 27 PRIVSEP_GID = 27 NAME = openssh DESC = OpenSSH - an encrypted remote login and file transfer application ARCH:sh = uname -p FULLVER = echo ${BUILDDIR} | sed 's/.*-//' CATEGORY = application VENDOR = OpenBSD EMAIL = dj@gregor.com CLASSES = none PSTAMP:sh = date "+`hostname`%Y%m%d%H%M%S" CONFIGFILES = ssh_config sshd_config # ssh_prng_cmds INITSCRIPT = ssh INITLINKS = ${DESTDIR}/etc/rc2.d/S82${INITSCRIPT} \ ${DESTDIR}/etc/rc0.d/K10${INITSCRIPT} \ ${DESTDIR}/etc/rc1.d/K10${INITSCRIPT} PKGPROTO = /usr/bin/pkgproto PKGMK = /usr/bin/pkgmk PKGTRANS = /usr/bin/pkgtrans INSTUSER = root INSTGROUP = root INSTALLFILES= install/pkginfo \ install/depend \ install/postinstall \ install/postremove \ install/preremove # XXX need to add: install/copyright SPOOLDIR = /var/spool/pkg all: pkg build: .configured.${BUILDDIR} cd ${BUILDDIR} ; ${MAKE} clean: cd ${BUILDDIR} ; ${MAKE} clean install: cd ${BUILDDIR} ; ${MAKE} install pkg: ${BUILDDIR}-${BUILDREV}.pkg ${DESTDIR}: mkdir ${DESTDIR} mkdir -p ${DESTDIR}/${BASEDIR} mkdir -p ${DESTDIR}/${ETCDIR} .untarred.${BUILDDIR}: ${BUILDDIR}.tar.gz gzip -cd ${BUILDDIR}.tar.gz | tar xvf - touch $@ clean.${DESTDIR}: rm -rf ${DESTDIR} install-pkg: build clean.${DESTDIR} ${DESTDIR} cd ${BUILDDIR} ; ${MAKE} DESTDIR=${DESTDIR} \ INSTALL=/usr/ucb/install install-nokeys -strip ${DESTDIR}${BASEDIR}/bin/* -strip ${DESTDIR}${BASEDIR}/sbin/* for a in ${CONFIGFILES}; do \ mv ${DESTDIR}${ETCDIR}/$$a ${DESTDIR}${ETCDIR}/$$a.default; \ done .patched.${BUILDDIR}: .untarred.${BUILDDIR} ${APPLYPATCHES} touch $@ .configured.${BUILDDIR}: .patched.${BUILDDIR} ${MAKE} configure touch $@ configure: cd ${BUILDDIR} ; ./configure \ --prefix=${BASEDIR} \ --libexecdir=${BASEDIR}/sbin \ --sysconfdir=${ETCDIR} \ --with-pam \ --with-ssl-dir=${OPENSSL_DIR} \ --with-zlib=${ZLIB_DIR} \ --with-prngd-socket=${PRNGD_SOCKET} \ --with-pid-dir=${PIDDIR} \ --with-privsep-user=${PRIVSEP_USER} \ --with-privsep-path=${PRIVSEP_PATH} \ ${CONFOPTS} veryclean: rm -rf ${BUILDDIR} ${DESTDIR} .configured.${BUILDDIR} \ .untarred.${BUILDDIR} .patched.${BUILDDIR} ${BUILDDIR}-${BUILDREV}.pkg: ${DESTDIR}/prototype ( cd ${DESTDIR} ; ${PKGMK} -d ${SPOOLDIR} -or . ) ( cd ${SPOOLDIR}/${PKGNAME}/reloc ; find . -depth -print | \ grep -v '^\.$$' | cpio -odm | compress > ../reloc.cpio.Z ) rm -rf ${SPOOLDIR}/${PKGNAME}/reloc $(PKGTRANS) ${SPOOLDIR} ${TOPDIR}/$@ ${PKGNAME} ${DESTDIR}/prototype: install-pkg ${DESTDIR}/install/pkginfo \ ${DESTDIR}/install/depend \ ${DESTDIR}/install/postinstall \ ${DESTDIR}/install/postremove \ ${DESTDIR}/install/preremove \ ${DESTDIR}/etc/init.d/${INITSCRIPT} \ ${INITLINKS} ( cd ${DESTDIR} ; \ find . -print | \ $(PKGPROTO) | \ nawk -v instuser="${INSTUSER}" \ -v instgroup="${INSTGROUP}" \ -v basedirexists="${BASEDIREXISTS}" \ 'BEGIN { \ b = split(basedirexists, basedirs); \ } \ { \ if ( match($$3, "^prototype$$") ) { \ next; \ } \ if ( match($$3, "^install$$") ) { \ next; \ } \ if ( match($$3, "^install/") ) { \ base = $$3; \ sub("^.*/", "", base); \ print "i", base "=" $$3; \ next; \ } \ for ( i = 1; i <= b; i++ ) { \ checkbasedir = basedirs[i]; \ sub("^/", "", checkbasedir); \ while ( checkbasedir != "" ) { \ if ( match($$3, "^"checkbasedir"$$") ) { \ sub("[^/]*$$", "", checkbasedir); \ sub("/$$", "", checkbasedir); \ print $$1, $$2, $$3, "?", "?", "?"; \ next; \ } \ sub("[^/]*$$", "", checkbasedir); \ sub("/$$", "", checkbasedir); \ } \ } \ \ print $$1, $$2, $$3, $$4, instuser, instgroup; \ }' \ ) > $@ ${DESTDIR}/install/pkginfo: ${DESTDIR}/install rm -f $@ @echo "PKG=\"${PKGNAME}\"" >> $@ @echo "NAME=\"${NAME}\"" >> $@ @echo "ARCH=\"${ARCH}\"" >> $@ @echo "VERSION=\"${FULLVER:sh},REV=${BUILDREV}\" (`uname -s`-`uname -r`)" >> $@ @echo "CATEGORY=\"${CATEGORY}\"" >> $@ @echo "VENDOR=\"${VENDOR}\"" >> $@ @echo "EMAIL=\"${EMAIL}\"" >> $@ @echo "BASEDIR=\"/\"" >> $@ @echo "CLASSES=\"${CLASSES}\"" >> $@ @echo "PSTAMP=\"${PSTAMP}\"" >> $@ ${DESTDIR}/install/depend: ${DESTDIR}/install rm -f $@ @echo "P LJprngd Lutz Jaenicke's Random Number Generator" >> $@ ${DESTDIR}/install/postinstall: ${DESTDIR}/install rm -f $@ @echo "#!/bin/sh" >> $@ @echo "" >> $@ @echo "basedir=${BASEDIR}" >> $@ @echo "etcdir=${ETCDIR}" >> $@ @echo "" >> $@ @echo "for a in ${CONFIGFILES}; do" >> $@ @echo ' test -f $${PKG_INSTALL_ROOT}$${etcdir}/$$a || \' >> $@ @echo ' cp $${PKG_INSTALL_ROOT}$${etcdir}/$$a.default \' >> $@ @echo ' $${etcdir}/$$a' >> $@ @echo "done" >> $@ @echo "" >> $@ @echo "if [ \"x\$${PKG_INSTALL_ROOT}\" = \"x\" ]" >> $@ @echo "then" >> $@ @echo " getent group ${PRIVSEP_USER} > /dev/null || \\" >> $@ @echo " groupadd -g ${PRIVSEP_GID} ${PRIVSEP_USER} || \\" >> $@ @echo " groupadd ${PRIVSEP_USER}" >> $@ @echo "" >> $@ @echo " getent passwd ${PRIVSEP_USER} > /dev/null || \\" >> $@ @echo " useradd -c 'sshd privsep' -d '${PRIVSEP_PATH}' \\" >> $@ @echo " -g '${PRIVSEP_USER}' -u ${PRIVSEP_UID} \\" >> $@ @echo " ${PRIVSEP_USER} || \\" >> $@ @echo " useradd -c 'sshd privsep' -d '${PRIVSEP_PATH}' \\" >> $@ @echo " -g '${PRIVSEP_USER}' \\" >> $@ @echo " ${PRIVSEP_USER}" >> $@ @echo "else" >> $@ @echo " echo \"You will need to create a ${PRIVSEP_USER} group\"" >> $@ @echo " echo \"and create a ${PRIVSEP_USER} user that is a member\"" >> $@ @echo " echo \"of the ${PRIVSEP_USER} group.\"" >> $@ @echo "fi" >> $@ @echo "" >> $@ @echo 'test -f $${PKG_INSTALL_ROOT}$${etcdir}/ssh_host_key || \' >> $@ @echo ' $${PKG_INSTALL_ROOT}$${basedir}/bin/ssh-keygen -t rsa1 \' >> $@ @echo ' -f $${PKG_INSTALL_ROOT}$${etcdir}/ssh_host_key \' >> $@ @echo ' -N ""' >> $@ @echo 'test -f $${PKG_INSTALL_ROOT}$${etcdir}/ssh_host_dsa_key || \' >> $@ @echo ' $${PKG_INSTALL_ROOT}$${basedir}/bin/ssh-keygen -t dsa \' >> $@ @echo ' -f $${PKG_INSTALL_ROOT}$${etcdir}/ssh_host_dsa_key \' >> $@ @echo ' -N ""' >> $@ @echo 'test -f $${PKG_INSTALL_ROOT}$${etcdir}/ssh_host_rsa_key || \' >> $@ @echo ' $${PKG_INSTALL_ROOT}$${basedir}/bin/ssh-keygen -t rsa \' >> $@ @echo ' -f $${PKG_INSTALL_ROOT}$${etcdir}/ssh_host_rsa_key \' >> $@ @echo ' -N ""' >> $@ @echo "" >> $@ @echo "if [ \"x\$${PKG_INSTALL_ROOT}\" = \"x\" ]" >> $@ @echo "then" >> $@ @echo " /etc/init.d/${INITSCRIPT} start" >> $@ @echo "else" >> $@ @echo " echo \"SSH will start next time you reboot the machine\"" >> $@ @echo "fi" >> $@ chmod 755 $@ ${DESTDIR}/install/preremove: ${DESTDIR}/install rm -f $@ @echo "#!/bin/sh" >> $@ @echo "" >> $@ @echo "etcdir=${ETCDIR}" >> $@ @echo "" >> $@ @echo "if [ \"x\$${PKG_INSTALL_ROOT}\" = \"x\" ]" >> $@ @echo "then" >> $@ @echo " /etc/init.d/${INITSCRIPT} stop" >> $@ @echo "fi" >> $@ @echo "" >> $@ @echo "for a in ${CONFIGFILES}; do" >> $@ @echo ' if test -f $${PKG_INSTALL_ROOT}$${etcdir}/$$a && \' >> $@ @echo ' cmp -s $${PKG_INSTALL_ROOT}$${etcdir}/$$a \' >> $@ @echo ' $${PKG_INSTALL_ROOT}$${etcdir}/$$a.default' >> $@ @echo " then" >> $@ @echo ' rm $${PKG_INSTALL_ROOT}$${etcdir}/$$a' >> $@ @echo " fi" >> $@ @echo "done" >> $@ chmod 755 $@ ${DESTDIR}/install/postremove: ${DESTDIR}/install rm -f $@ @echo "echo \"Run \\\"rm -rf \$${PKG_INSTALL_ROOT}${ETCDIR}\\\" to remove ${NAME} configuration files\"" >> $@ @echo "echo \"and \\\"userdel ${PRIVSEP_USER} ; groupdel ${PRIVSEP_USER}\\\" to remove the privsep user and group\"" >> $@ chmod 755 $@ ${DESTDIR}/etc/init.d: ${DESTDIR} mkdir -p $@ ${DESTDIR}/etc/init.d/${INITSCRIPT}: ${DESTDIR}/etc/init.d rm -f $@ @echo "#!/bin/sh" >> $@ @echo "" >> $@ @echo "PATH=/sbin:/usr/bin:/usr/sbin" >> $@ @echo "export PATH" >> $@ @echo "" >> $@ @echo "SSHD=${BASEDIR}/sbin/sshd" >> $@ @echo "PIDFILE=${PIDDIR}/sshd.pid" >> $@ @echo "" >> $@ @echo 'case "$$1" in' >> $@ @echo " 'start')" >> $@ @echo " # Start sshd" >> $@ @echo ' $${SSHD}' >> $@ @echo ' if [ $$? -ne 0 ]; then' >> $@ @echo " echo \"error starting sshd\" >&2" >> $@ @echo " exit 1" >> $@ @echo " fi" >> $@ @echo " ;; " >> $@ @echo "" >> $@ @echo " 'stop')" >> $@ @echo " # Stop sshd" >> $@ @echo ' if [ -f $$PIDFILE ]; then' >> $@ @echo ' if ps -p `cat $$PIDFILE` > /dev/null 2>&1; then' >> $@ @echo ' kill `cat $$PIDFILE`' >> $@ @echo " fi" >> $@ @echo " fi" >> $@ @echo " ;; " >> $@ @echo "" >> $@ @echo "" >> $@ @echo " *) # usage" >> $@ @echo ' echo "usage: $$0 start|stop" >&2' >> $@ @echo " exit 1" >> $@ @echo " ;;" >> $@ @echo "" >> $@ @echo "esac " >> $@ chmod 755 $@ ${INITLINKS}: ${DESTDIR}/etc/init.d/${INITSCRIPT} mkdir `echo "$@" | sed 's/\\/[^\\/]*$$//'` ln $? $@ ${DESTDIR}/install: ${DESTDIR} mkdir -p $@