source: trunk/technical/common/build/build.sh@ 681

Last change on this file since 681 was 681, checked in by joergs, on Aug 13, 2004 at 2:45:48 PM

changed build behaviour to not require a Makefile to create the source
tar file. Instead the file "SOURCES" is used by the build.sh skript, to
generate the tar on the fly.
Both methods are currently supported. build.sh checks if the file
"SOURCES" exist, otherwise it uses the makefile method.
The spec file must have the following setting:
Source: %{name}-%{version}.tar.bz2
%setup -c %{name}-%{version}
(instead of setup -n)

  • Property svn:executable set to *
  • Property svn:keywords set to Id LastChangedDate LastChangedRevision
File size: 5.8 KB
Line 
1#!/bin/bash
2# Remote build script (iboernig@suse.de)
3# $Id: build.sh 681 2004-08-13 12:45:48Z joergs $
4#
5# Kurze Featuritis:
6# - build.sh sollte im Pfad liegen.
7# Ein Link von ~/bin/build.sh ist eine gute Wahl ;)
8# - ohne Parameter aufgerufen,
9# erzeugt build.sh mit Hilfe des Makefiles in aktuellen Verzeichnis
10# ein tar-Archiv, bertr�t dieses nach Oldwotan und baut es dort
11# - mit Parameter geht das Skript davon aus,
12# dass der Parameter ein SRPM Paket ist.
13# Dieses wird nach oldwotan kopiert, dort entpackt und dann gebaut.
14# - Dazu muss ein ssh-pubkey in oldwotans /root/.ssh/authorized_keys gelegt
15# werden (build.sh verwendet ssh)
16# Wichtige Einstellungen:
17# - Standardm�ig baut build.sh mit --clean, wenns schnell gehen soll, die
18# Umgebungsvariable BUILD_MODE="--no-init" exportieren
19# - BUILD_DIST ist standard sles7-i386, kann auch durch entsprechenden Export
20# berschrieben werden.
21# - die fertigen Pakete werden nach DEST_DIR (kann durch env gesetzt werden)
22# in die vorgegebene Hierarchie (src, i386/sles/7) auf den lokalen Rechner
23# kopiert. Vorgabe ist /tmp/smartclient_build
24
25CONFIG_FILE=/usr/local/etc/build
26BUILD_CMD=build
27#SSH_VERSION="1"
28#BUILDHOST="oldwotan"
29#FQBUILDHOST="$BUILDHOST.suse.de"
30#BUILDTEMP=abuildtmp
31BUILDUSER=$USER
32BUILDTEMP=/tmp/abuildtmp/$BUILDUSER
33
34BUILDSCRIPT=$BUILDTEMP/buildscript.$$
35
36[ -z "$BUILD_MODE" ] && BUILD_MODE="--verify"
37[ -z "$BUILD_DIST" ] && BUILD_DIST="sles8-i386+update"
38[ -z "$BUILD_ROOT" ] && BUILD_ROOT="/var/tmp/buildsystem.$USER.$BUILD_DIST"
39[ -z "$BUILD_PREPARE_SPEC" ] && BUILD_PREPARE_SPEC="no"
40
41[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
42
43if [ -r $CONFIG_FILE ]; then
44 source $CONFIG_FILE
45 MOD_BUILD_DIST=`echo $BUILD_DIST | sed "s/[-+.]/_/g"`
46 #echo MOD_BUILD_DIST: $MOD_BUILD_DIST
47 #RPMS_PATHS=$[BUILD_RPMS_$MOD_BUILD_DIST]
48 #echo RPMS_PATHS: $RPM_PATHS
49 #if [ -n "$[BUILD_RPMS_$MOD_BUILD_DIST]" ]; then
50 # BUILD_RPMS=$[BUILD_RPMS_$MOD_BUILD_DIST]
51 #fi
52 #echo OUTPUT: $[BUILD_RPMS_$MOD_BUILD_DIST]
53 #:$BUILD_RPMS
54 case "$BUILD_DIST" in
55 "9.0-i386")
56 BUILD_RPMS_TEST=$BUILD_RPMS_9_0_i386 ;;
57 "sles8-i386")
58 BUILD_RPMS_TEST=$BUILD_RPMS_sles8_i386 ;;
59 "sles8-i386+update")
60 BUILD_RPMS_TEST=$BUILD_RPMS_sles8_i386_update ;;
61 "9.1-i386")
62 BUILD_RPMS_TEST=$BUILD_RPMS_9_1_i386 ;;
63 "sles9-i386")
64 BUILD_RPMS_TEST=$BUILD_RPMS_sles9_i386 ;;
65 esac
66 if [ "$BUILD_RPMS_TEST" ]; then
67 if [ "$BUILD_RPMS" ]; then
68 BUILD_RPMS=$BUILD_RPMS:$BUILD_RPMS_TEST
69 else
70 BUILD_RPMS=$BUILD_RPMS_TEST
71 fi
72 fi
73fi
74
75echo BUILD_RPMS: $BUILD_RPMS
76
77ERROR=0
78
79# Hier gehts los:
80
81if [ -z "$1" ]; then
82 # without parameter, we are in source directory
83 SPECFILE=$(ls *.spec | awk '{print $1}')
84 PACKAGE=$(awk '/^Name:/ {print $2}' <$SPECFILE)
85 VERSION=$(awk '/^Version:/ {print $2}' <$SPECFILE)
86
87 # if config file exist, source it.
88 # after this, the variable SOURCES should be set
89 if [ -r SOURCES ]; then
90 . SOURCES
91 # create a tar file from the sources
92 CREATE_TAR="yes"
93 else
94 # legacy method:
95 # call the existing makefile to generate a tar file
96 test -e Makefile && make
97 TARFILE=$(ls *.tar.[gb]z*| awk '{print $1}')
98 fi
99 SRC_FILES="$SPECFILE $TARFILE"
100else
101 # parameter is src.rpm file
102 PACKAGE=`echo $1 | sed 's/-[0-9]*\..*.src.rpm//'`
103 VERSION=`echo $1 | sed 's/.*-\([0-9]*\..*\)-.*.src.rpm/\1/'`
104 SRC_FILES="$1"
105fi
106
107echo $PACKAGE $VERSION $BUILD_DIST $BUILD_MODE
108
109# Cleaning up and install tempdir
110#ssh -${SSH_VERSION} ${FQBUILDHOST} "\
111 rm -rf ${BUILDTEMP}/src/${PACKAGE}; \
112 mkdir -p ${BUILDTEMP}/src/${PACKAGE} ${BUILDTEMP}/${BUILD_DIST};
113
114#scp -oProtocol=$SSH_VERSION $SRC_FILES ${FQBUILDHOST}:${BUILDTEMP}/src/${PACKAGE}
115cp -a $SRC_FILES ${BUILDTEMP}/src/${PACKAGE}
116
117if [ "$CREATE_TAR" = "yes" ]; then
118 tar cvjf ${BUILDTEMP}/src/${PACKAGE}/$PACKAGE-$VERSION.tar.bz2 --files-from SOURCES
119fi
120
121if [ "$1" ]; then
122 # extract RPM in a tempoary directory
123 #ssh -${SSH_VERSION} ${FQBUILDHOST} "\
124 cd ${BUILDTEMP}/src/${PACKAGE}; rpm2cpio $1 | cpio -i
125fi
126
127# create buildscript
128cat > $BUILDSCRIPT <<EOF
129#!/bin/bash
130# local buildscript
131#. /work/src/bin/.profile
132export BUILD_ROOT=$BUILD_ROOT
133export BUILD_DIST=$BUILD_DIST
134export BUILD_RPMS=${BUILDTEMP}/${BUILD_DIST}:$BUILD_RPMS
135export BUILD_PREPARE_SPEC=$BUILD_PREPARE_SPEC
136
137cd ${BUILDTEMP}/src/${PACKAGE}
138#build $BUILD_MODE --prefer-rpms ${BUILDTEMP}/${BUILD_DIST}
139#build $BUILD_MODE
140$BUILD_CMD $BUILD_MODE
141EOF
142
143chmod a+x $BUILDSCRIPT
144
145#cat /tmp/tmpscript.$$
146
147#scp -oProtocol=$SSH_VERSION /tmp/tmpscript.$$ ${FQBUILDHOST}:${BUILDTEMP}/src/${PACKAGE}/buildscript
148#rm /tmp/tmpscript.$$
149
150# build and file rpms
151#ssh -oProtocol=$SSH_VERSION root@${FQBUILDHOST} \
152# . ~$BUILDUSER/${BUILDTEMP}/src/${PACKAGE}/buildscript
153
154sudo su -c $BUILDSCRIPT
155rm -f $BUILDSCRIPT
156
157#ssh -oProtocol=$SSH_VERSION ${FQBUILDHOST} \
158 rm -f ${BUILDTEMP}/${BUILD_DIST}/${PACKAGE}-*.*.rpm
159 cp -a ${BUILD_ROOT}/usr/src/packages/RPMS/*/${PACKAGE}-${VERSION}-*.*.rpm ${BUILDTEMP}/${BUILD_DIST}
160
161mkdir -p ${DEST_DIR}/src
162# delete all old versions of this package
163rm -f ${DEST_DIR}/src/${PACKAGE}-*.src.rpm
164#if !(scp -oProtocol=$SSH_VERSION root@${FQBUILDHOST}:${BUILD_ROOT}/usr/src/packages/SRPMS/${PACKAGE}-${VERSION}-*.src.rpm ${DEST_DIR}/src ); then
165 #ERROR=1
166#fi
167if !(cp -a ${BUILD_ROOT}/usr/src/packages/SRPMS/${PACKAGE}-${VERSION}-*.src.rpm ${DEST_DIR}/src 2> /dev/null); then
168 ERROR=1
169fi
170
171mkdir -p ${DEST_DIR}/${BUILD_DIST}
172# delete all old versions of this package
173rm -f ${DEST_DIR}/${BUILD_DIST}/${PACKAGE}-*.rpm
174#if !(scp -oProtocol=$SSH_VERSION #root@${FQBUILDHOST}:${BUILD_ROOT}/usr/src/packages/RPMS/*/${PACKAGE}-${VERSION}-*.*.rpm ${DEST_DIR}/${BUILD_DIST} ); then
175# ERROR=2
176#fi
177if !(cp -a ${BUILD_ROOT}/usr/src/packages/RPMS/*/${PACKAGE}-${VERSION}-*.*.rpm ${DEST_DIR}/${BUILD_DIST} ); then
178 ERROR=2
179fi
180
181if [ $ERROR -ne 0 ]; then
182 echo "ERROR while building packet $PACKAGE";
183 for i in `seq 5`; do
184 echo -n "";
185 done
186else
187 echo "Build of ${PACKAGE} completed!"
188 echo "Packages can be found in ${DEST_DIR}"
189fi
190
191exit $ERROR
Note: See TracBrowser for help on using the repository browser.