mirror of
git://anongit.mindrot.org/openssh.git
synced 2024-12-19 00:24:35 +00:00
0986b55a60
packaging files
209 lines
8.2 KiB
Bash
Executable File
209 lines
8.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# OpenSSH solaris build script and supporting data files
|
|
# Copyright (c) 2000 Rip Loomis and
|
|
# Science Applications International Corporation (SAIC)
|
|
# (http://www.cist-east.saic.com). 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. The name of the author may not be used to endorse or promote products
|
|
# derived from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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.
|
|
|
|
# Obviously, without all the hard work of the OpenBSD OpenSSH developers
|
|
# and the OpenSSH Portability Team, these scripts would be pointless...
|
|
# so thanks again folks!
|
|
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
|
|
#### Known issues
|
|
# These methods are generally based on a "default" compilation of
|
|
# OpenSSH on Solaris--so the more things that you change from the default,
|
|
# the greater the chance that something in the script won't be able to
|
|
# handle the changes. In general, though, most things should be determined
|
|
# from your compile environment--the architecture, SSH version, and
|
|
# other related data should all get picked up by this script. The script
|
|
# and data files were last updated to match OpenSSH 2.1.1p4.
|
|
#
|
|
# All building and packaging is done under a temporary directory that is
|
|
# itself created under the contrib/solaris directory--so there shouldn't
|
|
# be any special security issues (or need for root access during the
|
|
# packaging process). The temporary directory is defined below as
|
|
# ${BUILDDIR}.
|
|
#
|
|
# The permissions on the installed files are based on how we prefer to
|
|
# do things here--so nothing is installed SetUID to root.
|
|
#
|
|
# The post-install script makes a good-faith attempt to install a
|
|
# functional configuration on your system. I would be interested in hearing
|
|
# of any failure modes that are found, as I tried to compensate for all
|
|
# the ones that showed up here when we started replacing all the
|
|
# different installed versions of SSH.
|
|
|
|
#### Body of the script (finally!)
|
|
# We expect to be building the solaris package under the contrib/solaris
|
|
# directory--but the build-package script might be run with a relative
|
|
# path by a user in the main SSH directory...so we try to handle this
|
|
# case. Note that this is still a quick and dirty solution, not robust.
|
|
|
|
if [ -f sshd.c ]; then
|
|
cd contrib/solaris >/dev/null
|
|
fi
|
|
|
|
# Locations of standard binaries
|
|
UNAME=/usr/bin/uname
|
|
SED=/usr/bin/sed
|
|
PWD=/usr/bin/pwd
|
|
CUT=/usr/bin/cut
|
|
STRIP=/usr/ccs/bin/strip
|
|
PKGMK=/usr/bin/pkgmk
|
|
PKGTRANS=/usr/bin/pkgtrans
|
|
GREP=/usr/bin/grep
|
|
DATE=/usr/bin/date
|
|
|
|
CURRDIR=`${PWD}`
|
|
BUILDDIR=${CURRDIR}/build-SSH-package
|
|
# If you really want to name the package "ssh" then go ahead, but the
|
|
# Sun convention is that the first 2-4 characters are supposed to be
|
|
# uppercase representing the company or organization that produced the
|
|
# software, and the next 3-5 characters are supposed to be lowercase
|
|
# identifying the specific software. The best package names I could
|
|
# come up with were "OBSDssh" or "OPENssh", given those constraints.
|
|
PKGNAME="OPENssh"
|
|
# PSTAMP is a standard setting in the 'pkginfo' file that helps to identify
|
|
# the time and location that the packaging was done.
|
|
PSTAMP="`${UNAME} -n`-`${DATE} +%Y-%m-%d-%H%M`"
|
|
# The several lines below are designed to pull the relevant information
|
|
# out of the Makefile. It may be simpler to hard-code this if you have
|
|
# made changes and these lines don't find them.
|
|
prefix=`${GREP} "^prefix=" ../../Makefile | ${CUT} -d = -f 2`
|
|
execprefix=`${GREP} "^execprefix=" ../../Makefile | ${CUT} -d = -f 2`
|
|
INSTROOT=${prefix:=/usr/local}
|
|
ETCDIR=`${GREP} "^ETCDIR=" ../../Makefile | ${CUT} -d = -f 2`
|
|
PIDDIR=`${GREP} "^piddir=" ../../Makefile | ${CUT} -d = -f 2`
|
|
|
|
if [ ! -f ../../sshd ]; then
|
|
echo "Unable to locate sshd binary where I expected, and can't continue."
|
|
echo "Verify that the SSH configure/make has been completed, and that"
|
|
echo " this script is being run from within the SSH source tree."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
VERSION=`${GREP} "SSH_VERSION" ../../version.h | ${CUT} -f 2 | sed -e 's/"//g' -e 's/OpenSSH_//g'`
|
|
# Extra shenanigans to compensate for Sun marketeer tricks with Solaris
|
|
# version numbering...
|
|
OSMINOR=`${UNAME} -r | ${CUT} -f 2 -d .`
|
|
if [ $OSMINOR -gt 6 ]; then
|
|
OSVERSION=$OSMINOR
|
|
else
|
|
OSVERSION=`${UNAME} -r | ${SED} 's/5/2/'`
|
|
fi
|
|
ARCH=`$UNAME -p`
|
|
SHORTINSTROOT=""
|
|
if [ "$INSTROOT" = "/usr/local" ]; then
|
|
SHORTINSTROOT="-local"
|
|
else
|
|
if [ "$INSTROOT" = "/opt" ]; then
|
|
SHORTINSTROOT="-opt"
|
|
fi
|
|
fi
|
|
|
|
DESTFILE="${PKGNAME}-${VERSION}-sol${OSVERSION}-${ARCH}${SHORTINSTROOT}"
|
|
|
|
echo "Building Solaris package of OpenSSH ${VERSION} in\n\t${BUILDDIR}."
|
|
echo "Binaries were compiled for Solaris ${OSVERSION} (${ARCH})"
|
|
echo "The installable package will be named ${DESTFILE}."
|
|
echo "When installed, the package will be located under ${INSTROOT}."
|
|
echo ""
|
|
|
|
echo "Cleaning up old build files..."
|
|
rm -rf $BUILDDIR
|
|
mkdir $BUILDDIR
|
|
cd $BUILDDIR
|
|
|
|
echo "Setting up build directories..."
|
|
mkdir -p ${BUILDDIR}/man/man1
|
|
# Need manpages for sshd_config(5) and ssh_config(5), but we don't yet have.
|
|
#mkdir -p ${BUILDDIR}/man/man5
|
|
mkdir -p ${BUILDDIR}/man/man8
|
|
mkdir -p ${BUILDDIR}/etc
|
|
mkdir -p ${BUILDDIR}/bin
|
|
mkdir -p ${BUILDDIR}/sbin
|
|
|
|
echo "Populating build directories..."
|
|
cp -p ../../../sshd sbin
|
|
cp -p ../../../ssh-keygen bin
|
|
cp -p ../../../ssh bin
|
|
cp -p ../../../ssh-add bin
|
|
cp -p ../../../ssh-agent bin
|
|
cp -p ../../../scp bin
|
|
cp -p ../../../scp.1 man/man1/scp.1
|
|
cp -p ../../../ssh-add.1 man/man1/ssh-add.1
|
|
cp -p ../../../ssh-agent.1 man/man1/ssh-agent.1
|
|
cp -p ../../../ssh-keygen.1 man/man1/ssh-keygen.1
|
|
cp -p ../../../ssh.1 man/man1/ssh.1
|
|
cp -p ../../../sshd.8 man/man8/sshd.8
|
|
cp -p ../../../sshd_config.out etc/sshd_config.default
|
|
cp -p ../../../ssh_config.out etc/ssh_config.default
|
|
cp -p ../../../ssh_prng_cmds etc/ssh_prng_cmds.default
|
|
cp -p ../../../primes etc/primes.default
|
|
|
|
# One of the annoying things about the Solaris packaging process is that
|
|
# there's no simple way to prototype on the fly--so make sure you edit
|
|
# the prototype file if you add/subtract files from the mix.
|
|
cp -p ../prototype .
|
|
cp -p ../preremove .
|
|
|
|
echo "Creating compile-dependent files from their prototypes"
|
|
$SED -e "s/%%PKGNAME%%/${PKGNAME}/g" -e "s|%%BASEDIR%%|${INSTROOT}|g" -e "s/%%VERSION%%/${VERSION}/g" -e "s/%%ARCH%%/${ARCH}/g" -e "s/%%OSVERSION%%/${OSVERSION}/g" <../pkginfo.in >./pkginfo
|
|
$SED -e "s/%%PKGNAME%%/${PKGNAME}/g" -e "s/%%OSMINOR%%/${OSMINOR}/g" -e "s/%%OSVERSION%%/${OSVERSION}/g" <../checkinstall.in >./checkinstall
|
|
$SED -e "s|%%PIDDIR%%|${PIDDIR}|g" <../postinstall.in >./postinstall
|
|
$SED -e "s|%%PIDDIR%%|${PIDDIR}|g" <../sshd-initscript.in > etc/sshd-initscript
|
|
|
|
echo "Stripping binaries"
|
|
${STRIP} bin/ssh
|
|
${STRIP} bin/ssh-add
|
|
${STRIP} bin/ssh-agent
|
|
${STRIP} bin/ssh-keygen
|
|
${STRIP} sbin/sshd
|
|
${STRIP} bin/scp
|
|
|
|
echo ""
|
|
echo "Building Package"
|
|
|
|
cd ${BUILDDIR}
|
|
$PKGMK -o -r . -p ${PSTAMP} -d ${BUILDDIR}
|
|
|
|
if [ $? -gt 0 ]; then
|
|
echo "Error performing pkgmk--cannot continue."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Translating Package Tree into Installable Image"
|
|
$PKGTRANS -s ${BUILDDIR} ${BUILDDIR}/${DESTFILE} OPENssh
|
|
|
|
if [ $? -gt 0 ]; then
|
|
echo "Error performing pkgtrans--cannot continue."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Done. Package is in ${BUILDDIR}/${DESTFILE} !"
|