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
RevLine 
[585]1#!/bin/bash
2# Remote build script (iboernig@suse.de)
[675]3# $Id: build.sh 681 2004-08-13 12:45:48Z joergs $
[585]4#
5# Kurze Featuritis:
[621]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
[679]10# ein tar-Archiv, bertr�t dieses nach Oldwotan und baut es dort
[621]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.
[585]14# - Dazu muss ein ssh-pubkey in oldwotans /root/.ssh/authorized_keys gelegt
15# werden (build.sh verwendet ssh)
16# Wichtige Einstellungen:
[679]17# - Standardm�ig baut build.sh mit --clean, wenns schnell gehen soll, die
[585]18# Umgebungsvariable BUILD_MODE="--no-init" exportieren
19# - BUILD_DIST ist standard sles7-i386, kann auch durch entsprechenden Export
[679]20# berschrieben werden.
[585]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
[668]25CONFIG_FILE=/usr/local/etc/build
[677]26BUILD_CMD=build
[668]27#SSH_VERSION="1"
28#BUILDHOST="oldwotan"
29#FQBUILDHOST="$BUILDHOST.suse.de"
30#BUILDTEMP=abuildtmp
[585]31BUILDUSER=$USER
[668]32BUILDTEMP=/tmp/abuildtmp/$BUILDUSER
[585]33
[668]34BUILDSCRIPT=$BUILDTEMP/buildscript.$$
35
[619]36[ -z "$BUILD_MODE" ] && BUILD_MODE="--verify"
[668]37[ -z "$BUILD_DIST" ] && BUILD_DIST="sles8-i386+update"
38[ -z "$BUILD_ROOT" ] && BUILD_ROOT="/var/tmp/buildsystem.$USER.$BUILD_DIST"
[586]39[ -z "$BUILD_PREPARE_SPEC" ] && BUILD_PREPARE_SPEC="no"
[585]40
[668]41[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
[585]42
[668]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 ;;
[679]61 "9.1-i386")
62 BUILD_RPMS_TEST=$BUILD_RPMS_9_1_i386 ;;
[681]63 "sles9-i386")
64 BUILD_RPMS_TEST=$BUILD_RPMS_sles9_i386 ;;
[668]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
[619]77ERROR=0
[585]78
[621]79# Hier gehts los:
[620]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)
[681]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
[620]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
[622]107echo $PACKAGE $VERSION $BUILD_DIST $BUILD_MODE
[585]108
109# Cleaning up and install tempdir
[668]110#ssh -${SSH_VERSION} ${FQBUILDHOST} "\
111 rm -rf ${BUILDTEMP}/src/${PACKAGE}; \
112 mkdir -p ${BUILDTEMP}/src/${PACKAGE} ${BUILDTEMP}/${BUILD_DIST};
[585]113
[668]114#scp -oProtocol=$SSH_VERSION $SRC_FILES ${FQBUILDHOST}:${BUILDTEMP}/src/${PACKAGE}
115cp -a $SRC_FILES ${BUILDTEMP}/src/${PACKAGE}
[585]116
[681]117if [ "$CREATE_TAR" = "yes" ]; then
118 tar cvjf ${BUILDTEMP}/src/${PACKAGE}/$PACKAGE-$VERSION.tar.bz2 --files-from SOURCES
119fi
120
[620]121if [ "$1" ]; then
[668]122 # extract RPM in a tempoary directory
123 #ssh -${SSH_VERSION} ${FQBUILDHOST} "\
124 cd ${BUILDTEMP}/src/${PACKAGE}; rpm2cpio $1 | cpio -i
[620]125fi
126
[585]127# create buildscript
[668]128cat > $BUILDSCRIPT <<EOF
[585]129#!/bin/bash
130# local buildscript
[668]131#. /work/src/bin/.profile
[585]132export BUILD_ROOT=$BUILD_ROOT
133export BUILD_DIST=$BUILD_DIST
[668]134export BUILD_RPMS=${BUILDTEMP}/${BUILD_DIST}:$BUILD_RPMS
[586]135export BUILD_PREPARE_SPEC=$BUILD_PREPARE_SPEC
136
[668]137cd ${BUILDTEMP}/src/${PACKAGE}
138#build $BUILD_MODE --prefer-rpms ${BUILDTEMP}/${BUILD_DIST}
[677]139#build $BUILD_MODE
140$BUILD_CMD $BUILD_MODE
[585]141EOF
[681]142
[668]143chmod a+x $BUILDSCRIPT
[585]144
[621]145#cat /tmp/tmpscript.$$
[585]146
[668]147#scp -oProtocol=$SSH_VERSION /tmp/tmpscript.$$ ${FQBUILDHOST}:${BUILDTEMP}/src/${PACKAGE}/buildscript
148#rm /tmp/tmpscript.$$
[585]149
150# build and file rpms
[668]151#ssh -oProtocol=$SSH_VERSION root@${FQBUILDHOST} \
152# . ~$BUILDUSER/${BUILDTEMP}/src/${PACKAGE}/buildscript
[585]153
[668]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
[585]161mkdir -p ${DEST_DIR}/src
[620]162# delete all old versions of this package
163rm -f ${DEST_DIR}/src/${PACKAGE}-*.src.rpm
[668]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
[619]168 ERROR=1
169fi
[585]170
[619]171mkdir -p ${DEST_DIR}/${BUILD_DIST}
[620]172# delete all old versions of this package
173rm -f ${DEST_DIR}/${BUILD_DIST}/${PACKAGE}-*.rpm
[668]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
[619]178 ERROR=2
[591]179fi
180
[619]181if [ $ERROR -ne 0 ]; then
[591]182 echo "ERROR while building packet $PACKAGE";
[619]183 for i in `seq 5`; do
[625]184 echo -n "";
[619]185 done
186else
187 echo "Build of ${PACKAGE} completed!"
188 echo "Packages can be found in ${DEST_DIR}"
[591]189fi
[585]190
[619]191exit $ERROR
Note: See TracBrowser for help on using the repository browser.