]> andersk Git - openssh.git/blob - contrib/solaris/build-pkg
- (djm) Add Solaris package support from Rip Loomis <loomisg@cist.saic.com>
[openssh.git] / contrib / solaris / build-pkg
1 #!/bin/sh
2
3 # OpenSSH solaris build script and supporting data files
4 # Copyright (c) 2000 Rip Loomis and
5 #   Science Applications International Corporation (SAIC)
6 #   (http://www.cist-east.saic.com).  All rights reserved.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions
10 # are met:
11 # 1. Redistributions of source code must retain the above copyright
12 #    notice, this list of conditions and the following disclaimer.
13 # 2. Redistributions in binary form must reproduce the above copyright
14 #    notice, this list of conditions and the following disclaimer in the
15 #    documentation and/or other materials provided with the distribution.
16 # 3. The name of the author may not be used to endorse or promote products
17 #    derived from this software without specific prior written permission.
18 #
19 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30 # Obviously, without all the hard work of the OpenBSD OpenSSH developers
31 # and the OpenSSH Portability Team, these scripts would be pointless...
32 # so thanks again folks!
33 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
34
35 #### Known issues
36 # These methods are generally based on a "default" compilation of
37 # OpenSSH on Solaris--so the more things that you change from the default,
38 # the greater the chance that something in the script won't be able to
39 # handle the changes.  In general, though, most things should be determined
40 # from your compile environment--the architecture, SSH version, and
41 # other related data should all get picked up by this script.  The script
42 # and data files were last updated to match OpenSSH 2.1.1p4.
43 #
44 # All building and packaging is done under a temporary directory that is
45 # itself created under the contrib/solaris directory--so there shouldn't
46 # be any special security issues (or need for root access during the
47 # packaging process).  The temporary directory is defined below as
48 # ${BUILDDIR}.
49 #
50 # The permissions on the installed files are based on how we prefer to
51 # do things here--so nothing is installed SetUID to root.
52 #
53 # The post-install script makes a good-faith attempt to install a
54 # functional configuration on your system.  I would be interested in hearing
55 # of any failure modes that are found, as I tried to compensate for all
56 # the ones that showed up here when we started replacing all the
57 # different installed versions of SSH.
58
59 #### Body of the script (finally!)
60 # We expect to be building the solaris package under the contrib/solaris
61 # directory--but the build-package script might be run with a relative
62 # path by a user in the main SSH directory...so we try to handle this
63 # case.  Note that this is still a quick and dirty solution, not robust.
64
65 if [ -f sshd.c ]; then
66    cd contrib/solaris >/dev/null
67 fi
68
69 # Locations of standard binaries
70 UNAME=/usr/bin/uname
71 SED=/usr/bin/sed
72 PWD=/usr/bin/pwd
73 CUT=/usr/bin/cut
74 STRIP=/usr/ccs/bin/strip
75 PKGMK=/usr/bin/pkgmk
76 PKGTRANS=/usr/bin/pkgtrans
77 GREP=/usr/bin/grep
78 DATE=/usr/bin/date
79
80 CURRDIR=`${PWD}`
81 BUILDDIR=${CURRDIR}/build-SSH-package
82 # If you really want to name the package "ssh" then go ahead, but the
83 # Sun convention is that the first 2-4 characters are supposed to be
84 # uppercase representing the company or organization that produced the
85 # software, and the next 3-5 characters are supposed to be lowercase
86 # identifying the specific software.  The best package names I could
87 # come up with were "OBSDssh" or "OPENssh", given those constraints.
88 PKGNAME="OPENssh"
89 # PSTAMP is a standard setting in the 'pkginfo' file that helps to identify
90 # the time and location that the packaging was done.
91 PSTAMP="`${UNAME} -n`-`${DATE} +%Y-%m-%d-%H%M`"
92 # The several lines below are designed to pull the relevant information
93 # out of the Makefile.  It may be simpler to hard-code this if you have
94 # made changes and these lines don't find them. 
95 prefix=`${GREP} "^prefix=" ../../Makefile | ${CUT} -d = -f 2`
96 execprefix=`${GREP} "^execprefix=" ../../Makefile | ${CUT} -d = -f 2`
97 INSTROOT=${prefix:=/usr/local}
98 ETCDIR=`${GREP} "^ETCDIR=" ../../Makefile | ${CUT} -d = -f 2`
99 PIDDIR=`${GREP} "^piddir=" ../../Makefile | ${CUT} -d = -f 2`
100
101 if [ ! -f ../../sshd ]; then
102    echo "Unable to locate sshd binary where I expected, and can't continue."
103    echo "Verify that the SSH configure/make has been completed, and that"
104    echo "  this script is being run from within the SSH source tree."
105    exit 1
106 fi
107
108
109 VERSION=`${GREP} "SSH_VERSION" ../../version.h | ${CUT} -f 2 | sed -e 's/"//g' -e 's/OpenSSH_//g'`
110 # Extra shenanigans to compensate for Sun marketeer tricks with Solaris
111 # version numbering...
112 OSMINOR=`${UNAME} -r | ${CUT} -f 2 -d .`
113 if [ $OSMINOR -gt 6 ]; then
114     OSVERSION=$OSMINOR
115 else
116     OSVERSION=`${UNAME} -r | ${SED} 's/5/2/'`
117 fi
118 ARCH=`$UNAME -p`
119 SHORTINSTROOT=""
120 if [ "$INSTROOT" = "/usr/local" ]; then
121   SHORTINSTROOT="-local"
122 else
123   if [ "$INSTROOT" = "/opt" ]; then
124     SHORTINSTROOT="-opt"
125   fi
126 fi
127
128 DESTFILE="${PKGNAME}-${VERSION}-sol${OSVERSION}-${ARCH}${SHORTINSTROOT}"
129
130 echo "Building Solaris package of OpenSSH ${VERSION} in\n\t${BUILDDIR}."
131 echo "Binaries were compiled for Solaris ${OSVERSION} (${ARCH})"
132 echo "The installable package will be named ${DESTFILE}."
133 echo "When installed, the package will be located under ${INSTROOT}."
134 echo ""
135
136 echo "Cleaning up old build files..."
137 rm -rf $BUILDDIR
138 mkdir $BUILDDIR
139 cd $BUILDDIR
140
141 echo "Setting up build directories..."
142 mkdir -p ${BUILDDIR}/man/man1
143 # Need manpages for sshd_config(5) and ssh_config(5), but we don't yet have.
144 #mkdir -p ${BUILDDIR}/man/man5
145 mkdir -p ${BUILDDIR}/man/man8
146 mkdir -p ${BUILDDIR}/etc
147 mkdir -p ${BUILDDIR}/bin
148 mkdir -p ${BUILDDIR}/sbin
149
150 echo "Populating build directories..."
151 cp -p ../../../sshd sbin
152 cp -p ../../../ssh-keygen bin
153 cp -p ../../../ssh bin
154 cp -p ../../../ssh-add bin
155 cp -p ../../../ssh-agent bin
156 cp -p ../../../scp bin
157 cp -p ../../../scp.1 man/man1/scp.1
158 cp -p ../../../ssh-add.1 man/man1/ssh-add.1
159 cp -p ../../../ssh-agent.1 man/man1/ssh-agent.1
160 cp -p ../../../ssh-keygen.1 man/man1/ssh-keygen.1
161 cp -p ../../../ssh.1 man/man1/ssh.1
162 cp -p ../../../sshd.8 man/man8/sshd.8
163 cp -p ../../../sshd_config.out etc/sshd_config.default 
164 cp -p ../../../ssh_config.out etc/ssh_config.default
165 cp -p ../../../ssh_prng_cmds etc/ssh_prng_cmds.default
166
167 # One of the annoying things about the Solaris packaging process is that
168 # there's no simple way to prototype on the fly--so make sure you edit
169 # the prototype file if you add/subtract files from the mix.
170 cp -p ../prototype .
171 cp -p ../preremove .
172
173 echo "Creating compile-dependent files from their prototypes"
174 $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
175 $SED -e "s/%%PKGNAME%%/${PKGNAME}/g" -e "s/%%OSMINOR%%/${OSMINOR}/g" -e "s/%%OSVERSION%%/${OSVERSION}/g" <../checkinstall.in >./checkinstall
176 $SED -e "s|%%PIDDIR%%|${PIDDIR}|g" <../postinstall.in >./postinstall
177 $SED -e "s|%%PIDDIR%%|${PIDDIR}|g" <../sshd-initscript.in > etc/sshd-initscript
178
179 echo "Stripping binaries"
180 ${STRIP} bin/ssh
181 ${STRIP} bin/ssh-add
182 ${STRIP} bin/ssh-agent
183 ${STRIP} bin/ssh-keygen
184 ${STRIP} sbin/sshd
185 ${STRIP} bin/scp
186
187 echo ""
188 echo "Building Package"
189
190 cd ${BUILDDIR}
191 $PKGMK -o -r . -p ${PSTAMP} -d ${BUILDDIR}
192
193 if [ $? -gt 0 ]; then
194    echo "Error performing pkgmk--cannot continue."
195    exit 1
196 fi
197
198 echo ""
199 echo "Translating Package Tree into Installable Image"
200 $PKGTRANS -s ${BUILDDIR} ${BUILDDIR}/${DESTFILE} OPENssh
201
202 if [ $? -gt 0 ]; then
203    echo "Error performing pkgtrans--cannot continue."
204    exit 1
205 fi
206
207 echo "Done.  Package is in ${BUILDDIR}/${DESTFILE} !"
This page took 0.148499 seconds and 5 git commands to generate.