]> andersk Git - gssapi-openssh.git/blame - openssh/contrib/aix/buildbff.sh
Import of OpenSSH 3.5p1
[gssapi-openssh.git] / openssh / contrib / aix / buildbff.sh
CommitLineData
e9a17296 1#!/bin/sh
2#
3# buildbff.sh: Create AIX SMIT-installable OpenSSH packages
4#
5# Author: Darren Tucker (dtucker at zip dot com dot au)
6# This file is placed in the public domain and comes with absolutely
7# no warranty.
8#
9# Based originally on Ben Lindstrom's buildpkg.sh for Solaris
10#
11
680cee3b 12#
13# Tunable configuration settings
14# create a "config.local" in your build directory to override these.
15#
16PERMIT_ROOT_LOGIN=no
17X11_FORWARDING=no
18
e9a17296 19umask 022
680cee3b 20
41b2f314 21startdir=`pwd`
22
23# Path to inventory.sh: same place as buildbff.sh
24if echo $0 | egrep '^/'
25then
26 inventory=`dirname $0`/inventory.sh # absolute path
27else
28 inventory=`pwd`/`dirname $0`/inventory.sh # relative path
29fi
30
680cee3b 31#
32# We still support running from contrib/aix, but this is depreciated
33#
34if pwd | egrep 'contrib/aix$'
35then
36 echo "Changing directory to `pwd`/../.."
37 echo "Please run buildbff.sh from your build directory in future."
38 cd ../..
39 contribaix=1
40fi
41
42if [ ! -f Makefile ]
43then
44 echo "Makefile not found (did you run configure?)"
45 exit 1
46fi
47
48#
49# Directories used during build:
50# current dir = $objdir directory you ran ./configure in.
51# $objdir/$PKGDIR/ directory package files are constructed in
52# $objdir/$PKGDIR/root/ package root ($FAKE_ROOT)
53#
54objdir=`pwd`
e9a17296 55PKGNAME=openssh
700318f3 56PKGDIR=package
e9a17296 57
680cee3b 58#
59# Collect local configuration settings to override defaults
60#
61if [ -s ./config.local ]
62then
63 echo Reading local settings from config.local
64 . ./config.local
65fi
66
67#
68# Fill in some details from Makefile, like prefix and sysconfdir
69# the eval also expands variables like sysconfdir=${prefix}/etc
70# provided they are eval'ed in the correct order
71#
72for confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir mansubdir sysconfdir piddir srcdir
73do
74 eval $confvar=`grep "^$confvar=" $objdir/Makefile | cut -d = -f 2`
75done
76
77#
78# Collect values of privsep user and privsep path
79# currently only found in config.h
80#
81for confvar in SSH_PRIVSEP_USER PRIVSEP_PATH
82do
83 eval $confvar=`awk '/#define[ \t]'$confvar'/{print $3}' $objdir/config.h`
84done
e9a17296 85
680cee3b 86# Set privsep defaults if not defined
87if [ -z "$SSH_PRIVSEP_USER" ]
e9a17296 88then
680cee3b 89 SSH_PRIVSEP_USER=sshd
90fi
91if [ -z "$PRIVSEP_PATH" ]
92then
93 PRIVSEP_PATH=/var/empty
e9a17296 94fi
95
680cee3b 96# Clean package build directory
97rm -rf $objdir/$PKGDIR
98FAKE_ROOT=$objdir/$PKGDIR/root
99mkdir -p $FAKE_ROOT
100
101# Start by faking root install
e9a17296 102echo "Faking root install..."
680cee3b 103cd $objdir
e9a17296 104make install-nokeys DESTDIR=$FAKE_ROOT
105
700318f3 106if [ $? -gt 0 ]
107then
108 echo "Fake root install failed, stopping."
109 exit 1
110fi
111
680cee3b 112#
113# Copy informational files to include in package
114#
115cp $srcdir/LICENCE $objdir/$PKGDIR/
116cp $srcdir/README* $objdir/$PKGDIR/
117
700318f3 118#
119# Extract common info requires for the 'info' part of the package.
120# AIX requires 4-part version numbers
121#
122VERSION=`./ssh -V 2>&1 | sed -e 's/,.*//' | cut -f 2 -d _`
123MAJOR=`echo $VERSION | cut -f 1 -d p | cut -f 1 -d .`
124MINOR=`echo $VERSION | cut -f 1 -d p | cut -f 2 -d .`
125PATCH=`echo $VERSION | cut -f 1 -d p | cut -f 3 -d .`
680cee3b 126PORTABLE=`echo $VERSION | awk 'BEGIN{FS="p"}{print $2}'`
127[ "$PATCH" = "" ] && PATCH=0
128[ "$PORTABLE" = "" ] && PORTABLE=0
700318f3 129BFFVERSION=`printf "%d.%d.%d.%d" $MAJOR $MINOR $PATCH $PORTABLE`
130
131echo "Building BFF for $PKGNAME $VERSION (package version $BFFVERSION)"
132
e9a17296 133#
680cee3b 134# Set ssh and sshd parameters as per config.local
e9a17296 135#
680cee3b 136if [ "${PERMIT_ROOT_LOGIN}" = no ]
137then
138 perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \
139 $FAKE_ROOT/${sysconfdir}/sshd_config
140fi
141if [ "${X11_FORWARDING}" = yes ]
142then
143 perl -p -i -e "s/#X11Forwarding no/X11Forwarding yes/" \
144 $FAKE_ROOT/${sysconfdir}/sshd_config
145fi
146
e9a17296 147
148# Rename config files; postinstall script will copy them if necessary
149for cfgfile in ssh_config sshd_config ssh_prng_cmds
150do
151 mv $FAKE_ROOT/$sysconfdir/$cfgfile $FAKE_ROOT/$sysconfdir/$cfgfile.default
152done
153
154#
155# Generate lpp control files.
680cee3b 156# working dir is $FAKE_ROOT but files are generated in dir above
e9a17296 157# and moved into place just before creation of .bff
158#
159cd $FAKE_ROOT
160echo Generating LPP control files
161find . ! -name . -print >../openssh.al
680cee3b 162$inventory >../openssh.inventory
163
164cat <<EOD >../openssh.copyright
165This software is distributed under a BSD-style license.
166For the full text of the license, see /usr/lpp/openssh/LICENCE
167EOD
e9a17296 168
169#
170# Create postinstall script
171#
172cat <<EOF >>../openssh.post_i
173#!/bin/sh
174
680cee3b 175echo Creating configs from defaults if necessary.
e9a17296 176for cfgfile in ssh_config sshd_config ssh_prng_cmds
177do
178 if [ ! -f $sysconfdir/\$cfgfile ]
179 then
180 echo "Creating \$cfgfile from default"
181 cp $sysconfdir/\$cfgfile.default $sysconfdir/\$cfgfile
182 else
183 echo "\$cfgfile already exists."
184 fi
185done
680cee3b 186echo
187
188# Create PrivSep user if PrivSep not disabled in config
189echo Creating PrivSep prereqs if required.
190if egrep '^[ \t]*UsePrivilegeSeparation[ \t]+no' $sysconfdir/sshd_config >/dev/null
191then
192 echo "UsePrivilegeSeparation disabled in config, not creating PrivSep user,"
193 echo "group or chroot directory."
194else
195 echo "UsePrivilegeSeparation enabled in config (or defaulting to on)."
196
197 # create group if required
198 if cut -f1 -d: /etc/group | egrep '^'$SSH_PRIVSEP_USER'\$' >/dev/null
199 then
200 echo "PrivSep group $SSH_PRIVSEP_USER already exists."
201 else
202 echo "Creating PrivSep group $SSH_PRIVSEP_USER."
203 mkgroup -A $SSH_PRIVSEP_USER
204 fi
205
206 # Create user if required
207 if cut -f1 -d: /etc/passwd | egrep '^'$SSH_PRIVSEP_USER'\$' >/dev/null
208 then
209 echo "PrivSep user $SSH_PRIVSEP_USER already exists."
210 else
211 echo "Creating PrivSep user $SSH_PRIVSEP_USER."
212 mkuser gecos='SSHD PrivSep User' login=false rlogin=false account_locked=true pgrp=$SSH_PRIVSEP_USER $SSH_PRIVSEP_USER
213 fi
214
215 # create chroot directory if required
216 if [ -d $PRIVSEP_PATH ]
217 then
218 echo "PrivSep chroot directory $PRIVSEP_PATH already exists."
219 else
220 echo "Creating PrivSep chroot directory $PRIVSEP_PATH."
221 mkdir $PRIVSEP_PATH
222 chown 0 $PRIVSEP_PATH
223 chgrp 0 $PRIVSEP_PATH
224 chmod 755 $PRIVSEP_PATH
225 fi
226fi
227echo
e9a17296 228
229# Generate keys unless they already exist
680cee3b 230echo Creating host keys if required.
e9a17296 231if [ -f "$sysconfdir/ssh_host_key" ] ; then
232 echo "$sysconfdir/ssh_host_key already exists, skipping."
233else
234 $bindir/ssh-keygen -t rsa1 -f $sysconfdir/ssh_host_key -N ""
235fi
236if [ -f $sysconfdir/ssh_host_dsa_key ] ; then
237 echo "$sysconfdir/ssh_host_dsa_key already exists, skipping."
238else
239 $bindir/ssh-keygen -t dsa -f $sysconfdir/ssh_host_dsa_key -N ""
240fi
241if [ -f $sysconfdir/ssh_host_rsa_key ] ; then
242 echo "$sysconfdir/ssh_host_rsa_key already exists, skipping."
243else
244 $bindir/ssh-keygen -t rsa -f $sysconfdir/ssh_host_rsa_key -N ""
245fi
680cee3b 246echo
e9a17296 247
248# Add to system startup if required
249if grep $sbindir/sshd /etc/rc.tcpip >/dev/null
250then
251 echo "sshd found in rc.tcpip, not adding."
252else
253 echo >>/etc/rc.tcpip
254 echo "echo Starting sshd" >>/etc/rc.tcpip
255 echo "$sbindir/sshd" >>/etc/rc.tcpip
256fi
257EOF
258
259#
260# Create liblpp.a and move control files into it
261#
262echo Creating liblpp.a
263(
264 cd ..
680cee3b 265 for i in openssh.al openssh.copyright openssh.inventory openssh.post_i LICENCE README*
e9a17296 266 do
680cee3b 267 ar -r liblpp.a $i
268 rm $i
e9a17296 269 done
270)
271
272#
273# Create lpp_name
274#
275# This will end up looking something like:
276# 4 R I OpenSSH {
277# OpenSSH 3.0.2.1 1 N U en_US OpenSSH 3.0.2p1 Portable for AIX
278# [
279# %
280# /usr/local/bin 8073
281# /usr/local/etc 189
282# /usr/local/libexec 185
283# /usr/local/man/man1 145
284# /usr/local/man/man8 83
285# /usr/local/sbin 2105
286# /usr/local/share 3
287# %
288# ]
680cee3b 289# }
290
e9a17296 291echo Creating lpp_name
292cat <<EOF >../lpp_name
2934 R I $PKGNAME {
294$PKGNAME $BFFVERSION 1 N U en_US OpenSSH $VERSION Portable for AIX
295[
296%
297EOF
298
680cee3b 299for i in $bindir $sysconfdir $libexecdir $mandir/${mansubdir}1 $mandir/${mansubdir}8 $sbindir $datadir /usr/lpp/openssh
e9a17296 300do
301 # get size in 512 byte blocks
680cee3b 302 if [ -d $FAKE_ROOT/$i ]
303 then
304 size=`du $FAKE_ROOT/$i | awk '{print $1}'`
305 echo "$i $size" >>../lpp_name
306 fi
e9a17296 307done
308
309echo '%' >>../lpp_name
310echo ']' >>../lpp_name
311echo '}' >>../lpp_name
312
313#
314# Move pieces into place
315#
316mkdir -p usr/lpp/openssh
317mv ../liblpp.a usr/lpp/openssh
318mv ../lpp_name .
319
320#
321# Now invoke backup to create .bff file
680cee3b 322# note: lpp_name needs to be the first file so we generate the
e9a17296 323# file list on the fly and feed it to backup using -i
324#
325echo Creating $PKGNAME-$VERSION.bff with backup...
700318f3 326rm -f $PKGNAME-$VERSION.bff
e9a17296 327(
328 echo "./lpp_name"
329 find . ! -name lpp_name -a ! -name . -print
330) | backup -i -q -f ../$PKGNAME-$VERSION.bff $filelist
331
680cee3b 332#
41b2f314 333# Move package into final location and clean up
680cee3b 334#
41b2f314 335mv ../$PKGNAME-$VERSION.bff $startdir
336cd $startdir
680cee3b 337rm -rf $objdir/$PKGDIR
e9a17296 338
e9a17296 339echo $0: done.
340
This page took 0.135243 seconds and 5 git commands to generate.