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