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
Line 
1#!/bin/bash
2# build script
3#
4# $Id: dassbuild.sh 808 2009-12-14 13:45:37Z joergs $
5#
6# builds RPM in an clean chroot build environment.
7# uses the Suse build script.
8#
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:
18# /etc/dassbuild.conf
19# lists the sources for the different distributions
20#
21# the rest is controlled by environment variables
22#
23# dassbuild.sh uses sudo. /etc/sudoers needs a line like:
24# %users ALL=(ALL) NOPASSWD: /usr/bin/dassbuild_wrapper.sh
25# for automatic building (create a symlink or copy the file,
26# see also the Variable BUILDSCRIPT and content of this script)
27#
28# return codes:
29# 0: success
30# 1: skipped (current RPM already in dest dir)
31# >1: error
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
38
39
40# set LANG to default (english)
41# required for SVN
42export LC_ALL=C
43
44CONFIG_FILE=/etc/dassbuild/dassbuild.conf
45BUILDSCRIPT=/usr/bin/dassbuild_wrapper.sh
46BUILD_CMD=/usr/bin/build
47
48#
49# setting build variables
50#
51BUILDUSER=$USER
52[ -z $DEST_DIR ] && DEST_DIR="/tmp/build.$BUILDUSER"
53BUILDTEMP=$DEST_DIR/buildsrc/
54
55[ -z "$BUILD_USES_SVN" ] && BUILD_USES_SVN="yes"
56[ -z "$BUILD_MODE" ] && BUILD_MODE="--clean"
57[ -z "$BUILD_DIST" ] && export BUILD_DIST="sles9-i386"
58[ -z "$BUILD_ROOT" ] && BUILD_ROOT="/var/tmp/buildsystem.$BUILDUSER.$BUILD_DIST"
59[ -z "$BUILD_PREPARE_SPEC" ] && BUILD_PREPARE_SPEC="no"
60
61BUILDVARS=$BUILDTEMP/build.vars
62
63#
64# create source archive file
65#
66dassbuild_prepare.sh $*
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
75
76
77
78if [ -r $CONFIG_FILE ]; then
79 source $CONFIG_FILE
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
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
95ERROR=0
96
97# Hier gehts los:
98
99if [ -z "$1" ]; then
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)
107elif [ -r "$1" ]; then
108 # parameter is src.rpm file
109 PACKAGE=`rpm -qp --qf "%{NAME}" $1`
110 VERSION=`rpm -qp --qf "%{VERSION}" $1`
111fi
112
113echo $PACKAGE $VERSION $BUILD_DIST $BUILD_MODE
114
115if [ -z "$PACKAGE" ]; then
116 echo "nothing to build found!"
117 exit 1
118fi
119
120
121
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"
133EOF
134
135# starting Suse build (as root)
136sudo $BUILDSCRIPT $BUILDVARS
137#rm -f $BUILDVARS
138
139
140
141mkdir -p ${DEST_DIR}/src
142# delete all old versions of this package
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
148
149if !(cp -a ${BUILD_ROOT}/usr/src/packages/SRPMS/${PACKAGE}-${VERSION}-*.src.rpm ${DEST_DIR}/src 2> /dev/null); then
150 ERROR=4
151fi
152
153mkdir -p ${DEST_DIR}/${BUILD_DIST}
154
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} \;
175fi
176
177echo
178if [ $ERROR -ne 0 ]; then
179
180 echo "ERROR while building packet $PACKAGE";
181else
182 echo "Build of \"${PACKAGE}\" completed!"
183 echo "Packages can be found in ${DEST_DIR}"
184fi
185echo
186
187exit $ERROR
Note: See TracBrowser for help on using the repository browser.