summaryrefslogtreecommitdiff
path: root/contrib/aix/buildbff.sh
blob: 6c7aaf4547d4c55f0f744f84dd2cb96212d9271e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/bin/sh
#
# buildbff.sh: Create AIX SMIT-installable OpenSSH packages
#
# Author: Darren Tucker (dtucker at zip dot com dot au)
# This file is placed in the public domain and comes with absolutely
# no warranty.
# 
# Based originally on Ben Lindstrom's buildpkg.sh for Solaris
#

umask 022
PKGNAME=openssh

PATH=$PATH:`pwd`		# set path for external tools
export PATH

## Extract common info requires for the 'info' part of the package.
VERSION=`tail -1 ../../version.h | sed -e 's/.*_\([0-9]\)/\1/g' | sed 's/\"$//'`
BFFVERSION=`echo $VERSION | sed 's/p/./g'`

echo "Building BFF for $PKGNAME $VERSION (package version $BFFVERSION)"
PKGDIR=package

# Clean build directory and package file
rm -rf $PKGDIR
mkdir $PKGDIR
rm -f $PKGNAME-$VERSION.bff

if [ ! -f ../../Makefile ]
then
	echo "Top-level Makefile not found (did you run ./configure?)"
	exit 1
fi

## Start by faking root install 
echo "Faking root install..."
START=`pwd`
FAKE_ROOT=$START/$PKGDIR
cd ../.. 
make install-nokeys DESTDIR=$FAKE_ROOT

#
# Fill in some details, like prefix and sysconfdir
#	the eval also expands variables like sysconfdir=${prefix}/etc
#	provided they are eval'ed in the correct order
#
for confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir mansubdir sysconfdir piddir
do
	eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2`
done

# Rename config files; postinstall script will copy them if necessary
for cfgfile in ssh_config sshd_config ssh_prng_cmds
do
	mv $FAKE_ROOT/$sysconfdir/$cfgfile $FAKE_ROOT/$sysconfdir/$cfgfile.default
done

#
# Generate lpp control files.
#	working dir is $FAKE_ROOT but files are generated in contrib/aix
#	and moved into place just before creation of .bff
#
cd $FAKE_ROOT
echo Generating LPP control files
find . ! -name . -print >../openssh.al
inventory.sh >../openssh.inventory
cp ../../../LICENCE ../openssh.copyright

#
# Create postinstall script
#
cat <<EOF >>../openssh.post_i
#!/bin/sh

# Create configs from defaults if necessary
for cfgfile in ssh_config sshd_config ssh_prng_cmds
do
        if [ ! -f $sysconfdir/\$cfgfile ]
        then
                echo "Creating \$cfgfile from default"
                cp $sysconfdir/\$cfgfile.default $sysconfdir/\$cfgfile
        else
                echo "\$cfgfile already exists."
        fi
done

# Generate keys unless they already exist
if [ -f "$sysconfdir/ssh_host_key" ] ; then
        echo "$sysconfdir/ssh_host_key already exists, skipping."
else
        $bindir/ssh-keygen -t rsa1 -f $sysconfdir/ssh_host_key -N ""
fi
if [ -f $sysconfdir/ssh_host_dsa_key ] ; then
        echo "$sysconfdir/ssh_host_dsa_key already exists, skipping."
else
        $bindir/ssh-keygen -t dsa -f $sysconfdir/ssh_host_dsa_key -N ""
fi
if [ -f $sysconfdir/ssh_host_rsa_key ] ; then
        echo "$sysconfdir/ssh_host_rsa_key already exists, skipping."
else 
        $bindir/ssh-keygen -t rsa -f $sysconfdir/ssh_host_rsa_key -N ""
fi

# Add to system startup if required
if grep $sbindir/sshd /etc/rc.tcpip >/dev/null
then
        echo "sshd found in rc.tcpip, not adding."
else
        echo >>/etc/rc.tcpip
        echo "echo Starting sshd" >>/etc/rc.tcpip
        echo "$sbindir/sshd" >>/etc/rc.tcpip
fi
EOF

#
# Create liblpp.a and move control files into it
#
echo Creating liblpp.a
(
	cd ..
	for i in al copyright inventory post_i
	do
		ar -r liblpp.a openssh.$i
		rm openssh.$i
	done
)

#
# Create lpp_name
#
# This will end up looking something like:
# 4 R I OpenSSH {
# OpenSSH 3.0.2.1 1 N U en_US OpenSSH 3.0.2p1 Portable for AIX
# [
# %
# /usr/local/bin 8073
# /usr/local/etc 189
# /usr/local/libexec 185
# /usr/local/man/man1 145
# /usr/local/man/man8 83
# /usr/local/sbin 2105
# /usr/local/share 3
# %
# ]
echo Creating lpp_name
cat <<EOF >../lpp_name
4 R I $PKGNAME {
$PKGNAME $BFFVERSION 1 N U en_US OpenSSH $VERSION Portable for AIX
[
%
EOF

for i in $bindir $sysconfdir $libexecdir $mandir/man1 $mandir/man8 $sbindir $datadir
do
	# get size in 512 byte blocks
	size=`du $FAKE_ROOT/$i | awk '{print $1}'`
	echo "$i $size" >>../lpp_name
done

echo '%' >>../lpp_name
echo ']' >>../lpp_name
echo '}' >>../lpp_name

#
# Move pieces into place
#
mkdir -p usr/lpp/openssh
mv ../liblpp.a usr/lpp/openssh
mv ../lpp_name .

#
# Now invoke backup to create .bff file
#	note: lpp_name needs to be the first file do we generate the
#	file list on the fly and feed it to backup using -i
#
echo Creating $PKGNAME-$VERSION.bff with backup...
(
	echo "./lpp_name"
	find . ! -name lpp_name -a ! -name . -print 
) | backup  -i -q -f ../$PKGNAME-$VERSION.bff $filelist

cd ..

rm -rf $PKGDIR
echo $0: done.