blob: 6c7aaf4547d4c55f0f744f84dd2cb96212d9271e [file] [log] [blame]
Ben Lindstrom01e7fa12002-03-05 03:38:35 +00001#!/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
12umask 022
13PKGNAME=openssh
14
15PATH=$PATH:`pwd` # set path for external tools
16export PATH
17
18## Extract common info requires for the 'info' part of the package.
19VERSION=`tail -1 ../../version.h | sed -e 's/.*_\([0-9]\)/\1/g' | sed 's/\"$//'`
20BFFVERSION=`echo $VERSION | sed 's/p/./g'`
21
22echo "Building BFF for $PKGNAME $VERSION (package version $BFFVERSION)"
23PKGDIR=package
24
25# Clean build directory and package file
26rm -rf $PKGDIR
27mkdir $PKGDIR
28rm -f $PKGNAME-$VERSION.bff
29
30if [ ! -f ../../Makefile ]
31then
32 echo "Top-level Makefile not found (did you run ./configure?)"
33 exit 1
34fi
35
36## Start by faking root install
37echo "Faking root install..."
38START=`pwd`
39FAKE_ROOT=$START/$PKGDIR
40cd ../..
41make install-nokeys DESTDIR=$FAKE_ROOT
42
43#
44# Fill in some details, like prefix and sysconfdir
45# the eval also expands variables like sysconfdir=${prefix}/etc
46# provided they are eval'ed in the correct order
47#
48for confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir mansubdir sysconfdir piddir
49do
50 eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2`
51done
52
53# Rename config files; postinstall script will copy them if necessary
54for cfgfile in ssh_config sshd_config ssh_prng_cmds
55do
56 mv $FAKE_ROOT/$sysconfdir/$cfgfile $FAKE_ROOT/$sysconfdir/$cfgfile.default
57done
58
59#
60# Generate lpp control files.
61# working dir is $FAKE_ROOT but files are generated in contrib/aix
62# and moved into place just before creation of .bff
63#
64cd $FAKE_ROOT
65echo Generating LPP control files
66find . ! -name . -print >../openssh.al
67inventory.sh >../openssh.inventory
68cp ../../../LICENCE ../openssh.copyright
69
70#
71# Create postinstall script
72#
73cat <<EOF >>../openssh.post_i
74#!/bin/sh
75
76# Create configs from defaults if necessary
77for cfgfile in ssh_config sshd_config ssh_prng_cmds
78do
79 if [ ! -f $sysconfdir/\$cfgfile ]
80 then
81 echo "Creating \$cfgfile from default"
82 cp $sysconfdir/\$cfgfile.default $sysconfdir/\$cfgfile
83 else
84 echo "\$cfgfile already exists."
85 fi
86done
87
88# Generate keys unless they already exist
89if [ -f "$sysconfdir/ssh_host_key" ] ; then
90 echo "$sysconfdir/ssh_host_key already exists, skipping."
91else
92 $bindir/ssh-keygen -t rsa1 -f $sysconfdir/ssh_host_key -N ""
93fi
94if [ -f $sysconfdir/ssh_host_dsa_key ] ; then
95 echo "$sysconfdir/ssh_host_dsa_key already exists, skipping."
96else
97 $bindir/ssh-keygen -t dsa -f $sysconfdir/ssh_host_dsa_key -N ""
98fi
99if [ -f $sysconfdir/ssh_host_rsa_key ] ; then
100 echo "$sysconfdir/ssh_host_rsa_key already exists, skipping."
101else
102 $bindir/ssh-keygen -t rsa -f $sysconfdir/ssh_host_rsa_key -N ""
103fi
104
105# Add to system startup if required
106if grep $sbindir/sshd /etc/rc.tcpip >/dev/null
107then
108 echo "sshd found in rc.tcpip, not adding."
109else
110 echo >>/etc/rc.tcpip
111 echo "echo Starting sshd" >>/etc/rc.tcpip
112 echo "$sbindir/sshd" >>/etc/rc.tcpip
113fi
114EOF
115
116#
117# Create liblpp.a and move control files into it
118#
119echo Creating liblpp.a
120(
121 cd ..
122 for i in al copyright inventory post_i
123 do
124 ar -r liblpp.a openssh.$i
125 rm openssh.$i
126 done
127)
128
129#
130# Create lpp_name
131#
132# This will end up looking something like:
133# 4 R I OpenSSH {
134# OpenSSH 3.0.2.1 1 N U en_US OpenSSH 3.0.2p1 Portable for AIX
135# [
136# %
137# /usr/local/bin 8073
138# /usr/local/etc 189
139# /usr/local/libexec 185
140# /usr/local/man/man1 145
141# /usr/local/man/man8 83
142# /usr/local/sbin 2105
143# /usr/local/share 3
144# %
145# ]
146echo Creating lpp_name
147cat <<EOF >../lpp_name
1484 R I $PKGNAME {
149$PKGNAME $BFFVERSION 1 N U en_US OpenSSH $VERSION Portable for AIX
150[
151%
152EOF
153
154for i in $bindir $sysconfdir $libexecdir $mandir/man1 $mandir/man8 $sbindir $datadir
155do
156 # get size in 512 byte blocks
157 size=`du $FAKE_ROOT/$i | awk '{print $1}'`
158 echo "$i $size" >>../lpp_name
159done
160
161echo '%' >>../lpp_name
162echo ']' >>../lpp_name
163echo '}' >>../lpp_name
164
165#
166# Move pieces into place
167#
168mkdir -p usr/lpp/openssh
169mv ../liblpp.a usr/lpp/openssh
170mv ../lpp_name .
171
172#
173# Now invoke backup to create .bff file
174# note: lpp_name needs to be the first file do we generate the
175# file list on the fly and feed it to backup using -i
176#
177echo Creating $PKGNAME-$VERSION.bff with backup...
178(
179 echo "./lpp_name"
180 find . ! -name lpp_name -a ! -name . -print
181) | backup -i -q -f ../$PKGNAME-$VERSION.bff $filelist
182
183cd ..
184
185rm -rf $PKGDIR
186echo $0: done.
187