b.log_line("checking BuildConflict-ing packages")
packagename = b.spec[:-5]
tmpdir = os.environ.get('HOME') + "/rpm/BUILD/%s/tmp" % packagename
- f = chroot.popen("set -ex; TMPDIR=%(tmpdir)s rpmbuild -bp --nobuild --short-circuit --define 'prep exit 0' %(rpmdefs)s rpm/packages/%(package)s/%(spec)s 2>&1" % {
+ f = chroot.popen("set -e; TMPDIR=%(tmpdir)s rpmbuild -bp --nobuild --short-circuit --define 'prep exit 0' %(rpmdefs)s rpm/packages/%(package)s/%(spec)s 2>&1" % {
'tmpdir': tmpdir,
'rpmdefs' : b.rpmbuild_opts(),
'package' : packagename,
packagename = b.spec[:-5]
tmpdir = os.environ.get('HOME') + "/rpm/BUILD/%s/tmp" % packagename
chroot.run("install -m 700 -d %s" % tmpdir)
- cmd = "set -ex; TMPDIR=%(tmpdir)s rpmbuild --nobuild %(rpmdefs)s rpm/packages/%(package)s/%(spec)s 2>&1" % {
+ cmd = "set -e; TMPDIR=%(tmpdir)s rpmbuild --nobuild %(rpmdefs)s rpm/packages/%(package)s/%(spec)s 2>&1" % {
'tmpdir': tmpdir,
'rpmdefs' : b.rpmbuild_opts(),
'package' : packagename,
f = urllib2.urlopen(req)
good = True
except urllib2.HTTPError, error:
- return False
+ return False
except urllib2.URLError, error:
# see errno.h
- if error.errno in [-3, 60, 61, 110, 111]:
+ try:
+ errno = error.errno
+ except AttributeError:
+ # python 2.4
+ errno = error.reason[0]
+
+ if errno in [-3, 60, 61, 110, 111]:
b.log_line("unable to connect... trying again")
continue
else:
return False
except urllib2.URLError, error:
# see errno.h
- if error.errno in [-3, 60, 61, 110, 111]:
+ try:
+ errno = error.errno
+ except AttributeError:
+ # python 2.4
+ errno = error.reason[0]
+
+ if errno in [-3, 60, 61, 110, 111]:
b.log_line("unable to connect to %s... trying again" % (src_url))
continue
else:
test ! -c /dev/urandom && rm -f /dev/urandom && mknod -m 644 /dev/urandom c 1 9
test ! -c /dev/zero && rm -f /dev/zero && mknod -m 666 /dev/zero c 1 5
+ # need entry for "/" in mtab, for diskspace() to work in rpm
+ [ -z $(awk '$2 == "/" {print $1}' /etc/mtab) ] && mount -f -t rootfs rootfs /
+
# make neccessary files readable for builder user
# TODO: see if they really aren't readable for builder
for db in Packages Name Basenames Providename Pubkeys; do
command_flags=
gpg_opts=
default_branch='HEAD'
-distro=
+dist=
url=
no_depend=no
verbose=no
+autotag=no
if [ -x /usr/bin/python ]; then
send_mode="python"
url="$url"
mailer="/usr/sbin/sendmail -t"
gpg_opts=""
-distro=th
+dist=th
url="http://src.th.pld-linux.org:1234/"
# defaults:
if [ -f "$USER_CFG" ]; then
. $USER_CFG
+ # legacy fallback
+ if [ "${distro:+set}" = "set" ]; then
+ dist=$distro
+ fi
fi
# internal options, not to be overriden
done
}
+# autotag from rpm-build-macros
+# displays latest used tag for a specfile
+autotag() {
+ local out s
+ for s in "$@"; do
+ # strip branches
+ s=${s%:*}
+ # ensure package ends with .spec
+ s=${s%.spec}.spec
+ out=$(cvs status -v $s | awk "!/Sticky/&&/auto-$dist-/{if (!a++) print \$1}")
+ echo "$s:$out"
+ done
+}
+
+# get autotag for specs
+# WARNING: This may checkout some files from CVS
+get_autotag() {
+ local pkg spec rpmdir
+
+ rpmdir=$(rpm -E %_topdir)
+ cd $rpmdir
+ for pkg in "$@"; do
+ # strip branches
+ pkg=${pkg%:*}
+ # strip .spec extension
+ pkg=${pkg%.spec}
+ # checkout only if missing
+ if [ ! -e $pkg/$pkg.spec ]; then
+ $rpmdir/builder -g $pkg -ns -r HEAD 1>&2
+ fi
+ if [ ! -e $pkg/$pkg.spec ]; then
+ # just print it out, to fallback to base pkg name
+ echo "$pkg"
+ else
+ autotag $pkg/$pkg.spec
+ fi
+ done
+}
+
usage() {
cat <<EOF
Usage: make-request.sh [OPTION] ... [SPECFILE] ....
--config-file /path/to/config/file
Source additional config file (after $USER_CFG), useful when
when sending build requests to Ac/Th from the same account
+ -a
+ Try to use latest auto-tag for the spec when building
+ WARNING: This will checkout new files to your packages dir
-b 'BUILDER BUILDER ...', --builder='BUILDER BUILDER ...'
- Sends request to given builders (in 'version-arch' format)
+ Sends request to given builders (in 'version-arch' format)
--with VALUE, --without VALUE
Build package with(out) a given bcond
--kernel VALUE
-j, --jobs
Number of parallel jobs for single build
-f, --flag
- -d, --distro DISTRO
- Specify value for \$distro
+ -d, --dist DISTRIBUTION_ID
+ Specify value for \$dist
-df, --distfiles-fetch[-request] PACKAGE
Send distfiles request to fetch sources for PACKAGE
-cf, --command-flag
exit 0
}
-# validate distro, set $distro
-set_distro() {
+# validate distro, set $dist
+set_dist() {
case "$1" in
ac)
;;
aidath)
;;
*)
- die "distro \`$1' not known"
+ die "dist \`$1' not known"
;;
esac
- distro=$1
+ dist=$1
}
while [ $# -gt 0 ] ; do
case "$1" in
- --distro | -d)
- set_distro $2
+ -d | --dist | --distro)
+ set_dist $2
shift
;;
shift
;;
+ -a)
+ autotag=yes
+ ;;
+
--with)
with="$with $(echo "$2" | tr ',' ' ')"
shift
shift
done
-case "$distro" in
+case "$dist" in
ac)
builder_email="builder-ac@pld-linux.org"
default_builders="ac-*"
url="http://ep09.pld-linux.org:1289/"
control_url="http://ep09.pld-linux.org/~buildsrc"
;;
-ac-java) # fake "distro" for java available ac architectures
+ac-java) # fake "dist" for java available ac architectures
builder_email="builder-ac@pld-linux.org"
default_builders="ac-i586 ac-i686 ac-athlon ac-amd64"
default_branch="AC-branch"
url="http://ep09.pld-linux.org:1289/"
;;
-ac-xen) # fake "distro" for xen-enabled architectures
+ac-xen) # fake "dist" for xen-enabled architectures
builder_email="builder-ac@pld-linux.org"
default_builders="ac-i686 ac-athlon ac-amd64"
default_branch="AC-branch"
url="http://src.th.pld-linux.org:1234/"
control_url="http://src.th.pld-linux.org"
;;
-th-java) # fake "distro" for java available th architectures
+th-java) # fake "dist" for java available th architectures
builder_email="builderth@pld-linux.org"
default_builders="th-x86_64 th-athlon th-i686"
url="http://src.th.pld-linux.org:1234/"
default_builders="aidath-*"
;;
*)
- die "distro \`$distro' not known"
+ die "dist \`$dist' not known"
;;
esac
-# need to do this after distro selection
+# need to do this after dist selection
if [ "$skip" ]; then
skip=$(skip="$skip" control_url="$control_url" python -c '
import urllib2
priority=-1
command="skip:$skip"
command_flags="no-chroot"
- builders="$distro-src"
+ builders="$dist-src"
fi
branch=${branch:-$default_branch}
specs=`for s in $specs; do
case "$s" in
^)
- # skip marker
+ # skip marker - pass it along
echo $s
;;
*.spec:*) # spec with branch
esac
done`
+if [ "$autotag" = "yes" ]; then
+ msg "Auto autotag build enabled"
+ specs=$(get_autotag $specs)
+fi
+
if [ "$df_fetch" = "yes" ]; then
df_fetch $specs
exit 0
if [ "$upgrade_macros" = "yes" ]; then
command="poldek --up; poldek -uv rpm-build-macros"
- builders="$distro-src"
+ builders="$dist-src"
f_upgrade=no
build_mode=test
fi
msg "Using jobs $jobs"
echo " <maxjobs>$jobs</maxjobs>"
fi
- msg "Build mode: $build_mode"
if [ -z "$url" ]; then
msg "Using email $builder_email"
else
msg "Using URL $url"
fi
+
+ if [ "$build_mode" = "ready" ]; then
+ msg "Build mode: $(tput setaf 2)$build_mode$c_norm"
+ else
+ msg "Build mode: $(tput setaf 3)$build_mode$c_norm"
+ fi
+
msg "Queue-ID: $id"
echo
gen_email () {
# make request first, so the STDERR/STDOUT streams won't be mixed
- local req=$(gen_req)
+ local tmp req
+ tmp=$(mktemp)
+ gen_req > $tmp
if [ "$verbose" = "yes" ]; then
- echo >&2 -E "$req"
+ cat $tmp >&2
fi
-cat <<EOF
-From: $requester
-To: $builder_email
-Subject: build request
-Message-Id: <$id@$(hostname)>
-X-New-PLD-Builder: request
-X-Requester-Version: \$Id$
-
-$(echo -E "$req" | gpg --clearsign --default-key $default_key $gpg_opts)
-EOF
+
+ cat <<-EOF
+ From: $requester
+ To: $builder_email
+ Subject: build request
+ Message-Id: <$id@$(hostname)>
+ X-New-PLD-Builder: request
+ X-Requester-Version: \$Id$
+
+ EOF
+
+ gpg --clearsign --default-key $default_key $gpg_opts --output=- $tmp
+ rm -f $tmp
}
gen_email | send_request
#!/bin/sh
+set -e
dir=$(cd "$(dirname "$0")"; pwd)
rpmdir=$(rpm -E %_topdir)
pkgs_head="
dahdi-linux
- ipset
- iscsitarget
- lirc
- madwifi-ng
- open-vm-tools
- r8168
- VirtualBox
- xorg-driver-video-nvidia
- xorg-driver-video-nvidia-legacy3
- xtables-addons
- xorg-driver-video-fglrx
+ e1000e
+ igb
+ ipset
+ ixgbe
+ linuxrdac
+ lirc
+ madwifi-ng
+ open-vm-tools
+ r8168
+ VirtualBox
+ xorg-driver-video-fglrx
+ xorg-driver-video-fglrx-legacy-12.x
+ xorg-driver-video-nvidia
+ xtables-addons
"
pkgs_longterm="
- $pkgs_head
+ iscsitarget
openvswitch
-"
-pkgs_longterm_only="
- e1000e
- igb
+ xorg-driver-video-nvidia-legacy3
"
# autotag from rpm-build-macros
# displays latest used tag for a specfile
autotag() {
- local out s
- for s in "$@"; do
+ local out spec pkg
+ for spec in "$@"; do
# strip branches
- s=${s%:*}
+ pkg=${spec%:*}
# ensure package ends with .spec
- s=${s%.spec}.spec
- out=$(cvs status -v $s | awk "!/Sticky/&&/auto-$dist-/{if (!a++) print \$1}")
- echo "$s:$out"
+ spec=${pkg%.spec}.spec
+ # and pkg without subdir
+ pkg=${pkg#*/}
+ # or .ext
+ pkg=${pkg%%.spec}
+ out=$(cvs status -v $spec | awk "!/Sticky/&&/auto-$dist-$pkg-$alt_kernel/{if (!a++) print \$1}")
+ echo "$spec:$out"
done
}
echo "$pkg"
else
spec=$(autotag $pkg/$pkg.spec)
+ spec=${spec#*/}
echo >&2 "... $spec"
echo $spec
fi
cd $rpmdir
case "$1" in
head)
+ kernel=$(get_last_tags kernel)
+ kernel=$(echo ${kernel#*auto-??-} | tr _ .)
+ specs=""
for pkg in $pkgs_head; do
+ echo >&2 "Rebuilding $pkg..."
$rpmdir/builder -g $pkg -ns
- echo ./relup.sh -ui $a/$a.spec && make-request.sh -d th $a.spec
+ $rpmdir/relup.sh -m "rebuild for $kernel" -ui $pkg/$pkg.spec
+ specs="$specs $pkg.spec"
done
+ $dir/make-request.sh -nd -r -d $dist $specs
;;
longterm)
- cd $rpmdir
- specs=$(get_last_tags $pkgs_longterm)
- $dir/make-request.sh -r -d $dist --kernel longterm --without userspace $specs
+ kernel=$(alt_kernel=longterm get_last_tags kernel)
+ kernel=$(echo ${kernel#*auto-??-} | tr _ .)
+ specs=""
+ for pkg in $pkgs_longterm; do
+ echo >&2 "Rebuilding $pkg..."
+ $rpmdir/builder -g $pkg -ns
+ $rpmdir/relup.sh -m "rebuild for $kernel" -ui $pkg/$pkg.spec
+ specs="$specs $pkg.spec"
+ done
+ # first build with main pkg (userspace), later build from tag
+ $dir/make-request.sh -nd -r -d $dist --without kernel $specs
- specs=$pkgs_longterm_only
- $dir/make-request.sh -r -d $dist --kernel longterm $specs
+ specs=$(get_last_tags $pkgs_head $pkgs_longterm)
+ $dir/make-request.sh -nd -r -d $dist --kernel longterm --without userspace $specs
;;
*)
# try to parse all args, filling them with last autotag
shift
done
specs=$(get_last_tags $specs)
- $dir/make-request.sh -r -d $dist $args $specs
+ $dir/make-request.sh -nd -r -d $dist $args $specs
;;
esac
#!/bin/sh
-arg="$@"
+set -e
-specs=""
-opt=""
+dist=th
-for i in $arg; do
- case "$i" in
- *.spec)
- specs="$specs $1"
- shift
- ;;
- *)
- opt="$opt $i"
- shift
- ;;
- esac
-done
-
-for i in $specs; do
- dir=$(dirname $i)
- pkg=$(basename $i)
- cd $dir || exit 1
- specfile="$pkg"
- tag=$(cvs status -v $specfile |grep "th-" | head -n 1 | awk ' { print $1 } ')
- if [ -z "$tag" ]; then
- echo "Th tag not found for $specfile."
- continue
- fi
- echo "Rebuilding $i from tag $tag..."
- set -x
- make-request.sh -d th $opt $pkg:$tag
- set +x
-done
+dir=$(dirname $0)
+$dir/make-request.sh -d $dist -r -a "$@"
local ret
for CHROOT in $CHROOTS; do
show "chroot: %s mount /proc" "$CHROOT"
- ret=$(chroot $CHROOT mount /proc > /dev/null 2>&1; echo $?)
- [ $ret -eq 0 ] && ok || fail
+ mount -t proc -o gid=17 none $CHROOT/proc
+ ret=$?
+ if [ $ret -eq 0 ]; then
+ ok
+ else
+ fail
+ RETVAL=$ret
+ fi
done
}
local ret
for CHROOT in $CHROOTS; do
show "chroot: %s umount /proc" "$CHROOT"
- ret=$(chroot $CHROOT umount /proc > /dev/null 2>&1; echo $?)
- [ $ret -eq 0 ] && ok || fail
+ umount $CHROOT/proc
+ [ $? -eq 0 ] && ok || fail
done
}
local ret
for CHROOT in $CHROOTS; do
show "chroot: %s is /proc mounted?" "$CHROOT"
- ret=$(chroot $CHROOT mount 2> /dev/null | grep -q 'none.*/proc'; echo $?)
- [ $ret -eq 0 ] && ok || fail
+ test -f $CHROOT/proc/mounts
+ ret=$?
+ if [ $ret -eq 0 ]; then
+ ok
+ else
+ fail
+ RETVAL=$ret
+ fi
done
}