source: dassbuild/trunk/usr/bin/dassbuild.sh@ 808

Last change on this file since 808 was 808, checked in by joergs, on Dec 14, 2009 at 2:45:37 PM

after successful build, copy all RPMs from build environment to target directory. Disadvantages: it may copy outdated/not relevant RPMs to target. Advantage: all resulting RPMs are copied to target. Some source RPMs generate multiple RPMs

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 4.7 KB
RevLine 
[690]1#!/bin/bash
[694]2# build script
3#
[675]4# $Id: dassbuild.sh 808 2009-12-14 13:45:37Z joergs $
[585]5#
[694]6# builds RPM in an clean chroot build environment.
7# uses the Suse build script.
[682]8#
[694]9# without parameter, it checks the directory for the files
10# SOURCES or SPECSOURCES.
11# The files definied in there are copied to the
12# build system.
13#
14# when used with parameter,
15# this parameter is expected to be a source rpm
16#
17# config file:
[750]18# /etc/dassbuild.conf
[694]19# lists the sources for the different distributions
20#
21# the rest is controlled by environment variables
22#
[750]23# dassbuild.sh uses sudo. /etc/sudoers needs a line like:
24# %users ALL=(ALL) NOPASSWD: /usr/bin/dassbuild_wrapper.sh
[733]25# for automatic building (create a symlink or copy the file,
26# see also the Variable BUILDSCRIPT and content of this script)
[695]27#
28# return codes:
29# 0: success
30# 1: skipped (current RPM already in dest dir)
31# >1: error
[696]32#
33# RPM releases are set
34# to the svn version number of the project directory.
35# Modifiers are:
36# m: release + local modifications
37# p: release + submited modifications. svn update project directory is needed
[585]38
[695]39
[733]40# set LANG to default (english)
41# required for SVN
42export LC_ALL=C
[696]43
[755]44CONFIG_FILE=/etc/dassbuild/dassbuild.conf
[750]45BUILDSCRIPT=/usr/bin/dassbuild_wrapper.sh
[735]46BUILD_CMD=/usr/bin/build
[744]47
48#
49# setting build variables
50#
[585]51BUILDUSER=$USER
[744]52[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
53BUILDTEMP=$DEST_DIR/buildsrc/
[585]54
[744]55[ -z "$BUILD_USES_SVN" ] && BUILD_USES_SVN="yes"
[714]56[ -z "$BUILD_MODE" ] && BUILD_MODE="--clean"
[744]57[ -z "$BUILD_DIST" ] && export BUILD_DIST="sles9-i386"
58[ -z "$BUILD_ROOT" ] && BUILD_ROOT="/var/tmp/buildsystem.$BUILDUSER.$BUILD_DIST"
[586]59[ -z "$BUILD_PREPARE_SPEC" ] && BUILD_PREPARE_SPEC="no"
[585]60
[733]61BUILDVARS=$BUILDTEMP/build.vars
[585]62
[744]63#
64# create source archive file
65#
[750]66dassbuild_prepare.sh $*
[744]67RT=$?
68if [ $RT -eq 1 ]; then
69 echo "nothing more to do"
70 exit 0
71elif [ $RT -gt 1 ]; then
72 echo "error: failed to prepare sources"
73 exit 1
74fi
[682]75
76
77
[668]78if [ -r $CONFIG_FILE ]; then
79 source $CONFIG_FILE
[718]80 MOD_BUILD_DIST=`sed "s/[-+.]/_/g" <<< $BUILD_DIST`
81 echo MOD_BUILD_DIST: $MOD_BUILD_DIST
82 eval BUILD_RPMS_TEST=\$BUILD_RPMS_$MOD_BUILD_DIST
83
[668]84 if [ "$BUILD_RPMS_TEST" ]; then
85 if [ "$BUILD_RPMS" ]; then
86 BUILD_RPMS=$BUILD_RPMS:$BUILD_RPMS_TEST
87 else
88 BUILD_RPMS=$BUILD_RPMS_TEST
89 fi
90 fi
91fi
92
93echo BUILD_RPMS: $BUILD_RPMS
94
[619]95ERROR=0
[585]96
[621]97# Hier gehts los:
[620]98
99if [ -z "$1" ]; then
[744]100 # without parameter, we are in source directory
101 SPECFILE=$(ls *.spec | awk '{print $1}')
102 PACKAGE=$(sed -n -e 's/^Name:\W*//pi' <$SPECFILE)
103 # use Version from BUILDSRC,
104 # because it has been modified by svn_build_prepare
105 BUILDSRC_DIR=${BUILDTEMP}/src/${PACKAGE}
106 VERSION=$(sed -n -e 's/^Version:\W*//pi' <$BUILDSRC_DIR/$SPECFILE)
[715]107elif [ -r "$1" ]; then
[744]108 # parameter is src.rpm file
109 PACKAGE=`rpm -qp --qf "%{NAME}" $1`
110 VERSION=`rpm -qp --qf "%{VERSION}" $1`
[620]111fi
112
[622]113echo $PACKAGE $VERSION $BUILD_DIST $BUILD_MODE
[585]114
[715]115if [ -z "$PACKAGE" ]; then
116 echo "nothing to build found!"
117 exit 1
118fi
119
120
121
[733]122# create file for buildvars (see $BUILDSCRIPT)
123cat > $BUILDVARS <<EOF
124# Variables for build-Prozess (export is needed in buildscript)
125BUILD_ROOT=$BUILD_ROOT
126BUILD_DIST=$BUILD_DIST
127BUILD_RPMS=${DEST_DIR}/${BUILD_DIST}:$BUILD_RPMS
128
129# Variables for execute the build-proggy
130BUILD_MODE="$BUILD_MODE"
131BUILD_PLACE=${BUILDTEMP}/src/${PACKAGE}
132EXTRA_RPMS="$EXTRA_RPMS"
[585]133EOF
[681]134
[734]135# starting Suse build (as root)
[733]136sudo $BUILDSCRIPT $BUILDVARS
137#rm -f $BUILDVARS
[668]138
[733]139
140
[585]141mkdir -p ${DEST_DIR}/src
[620]142# delete all old versions of this package
[695]143for i in ${DEST_DIR}/src/${PACKAGE}-*.src.rpm; do
144 if [ -f $i -a ${PACKAGE} = "`rpm -qp --qf "%{NAME}\n" $i`" ]; then
145 rm $i
146 fi
147done
[682]148
[668]149if !(cp -a ${BUILD_ROOT}/usr/src/packages/SRPMS/${PACKAGE}-${VERSION}-*.src.rpm ${DEST_DIR}/src 2> /dev/null); then
[695]150 ERROR=4
[619]151fi
[585]152
[619]153mkdir -p ${DEST_DIR}/${BUILD_DIST}
[682]154
[808]155# if !(cp -a ${BUILD_ROOT}/usr/src/packages/RPMS/*/${PACKAGE}*${VERSION}-*.*.rpm ${DEST_DIR}/${BUILD_DIST} ); then
156# ERROR=8
157# fi
158
159# check, if RPM with correct name and version is generated
160if [ -z "`find ${BUILD_ROOT}/usr/src/packages/RPMS/ -name \"${PACKAGE}*${VERSION}-*.rpm\" 2>/dev/null`" ]; then
161 ERROR=8
162else
163 # delete all old versions of this package
164 for i in ${DEST_DIR}/${BUILD_DIST}/${PACKAGE}-*.rpm; do
165 if [ -f $i -a ${PACKAGE} = "`rpm -qp --qf "%{NAME}\n" $i`" ]; then
166 rm $i
167 fi
168 done
169
170 # copy ALL RPMs,
171 # not only the one, that includes the target name.
172 # this is done,
173 # because some source RPMs results the multiple RPMs
174 find ${BUILD_ROOT}/usr/src/packages/RPMS/ -name "*.rpm" -exec cp -a {} ${DEST_DIR}/${BUILD_DIST} \;
[591]175fi
176
[694]177echo
[619]178if [ $ERROR -ne 0 ]; then
[694]179
180 echo "ERROR while building packet $PACKAGE";
[619]181else
[694]182 echo "Build of \"${PACKAGE}\" completed!"
[619]183 echo "Packages can be found in ${DEST_DIR}"
[591]184fi
[694]185echo
[585]186
[619]187exit $ERROR
Note: See TracBrowser for help on using the repository browser.