From 4b8bad6a2302f764ae180e1b946cb148bc0ae051 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 7 Jul 2010 17:51:58 +0000 Subject: [PATCH] checking in RPM build system --- rpm/build/build-freeside | 169 ++++++++++++++++++++++++++++++++++++++ rpm/build/cvs-check-and-build | 41 +++++++++ rpm/build/enrpm | 187 ++++++++++++++++++++++++++++++++++++++++++ rpm/build/expect-addsign | 7 ++ rpm/build/expect-signrepo | 9 ++ rpm/build/ovid2flute | 139 +++++++++++++++++++++++++++++++ rpm/build/refresh-repo | 156 +++++++++++++++++++++++++++++++++++ 7 files changed, 708 insertions(+) create mode 100755 rpm/build/build-freeside create mode 100755 rpm/build/cvs-check-and-build create mode 100755 rpm/build/enrpm create mode 100755 rpm/build/expect-addsign create mode 100755 rpm/build/expect-signrepo create mode 100755 rpm/build/ovid2flute create mode 100755 rpm/build/refresh-repo diff --git a/rpm/build/build-freeside b/rpm/build/build-freeside new file mode 100755 index 000000000..f17210ee6 --- /dev/null +++ b/rpm/build/build-freeside @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright 2008, Elirion, Inc. All rights reserved. +# This software is licensed under the same terms as Freeside itself. +# +# This script rebuilds SRPMs of Freeside builds or the required Perl modules on all the target +# distributions and versions using mock. After a successful build, it signs the resulting RPMs +# and scp's them to the server where the yum repositories are hosted. +# (Of course, koji is supposed to do all this, including updating the repo.) + +VERSIONS='1.7 1.9' +REPO=testing +BRANCH= +DISTROS='centos sles' +CENTOSVERS='4 5' +SLESVERS=10 +WHICHVERS= +ARCHS='i386 x86_64' +MOCKARGS='--autocache' + +BUILDSYSDIR=`dirname $0` + +if [ -f $HOME/buildsysrc ]; then + . $HOME/buildsysrc +fi + +usage() { + echo "build-freeside: build RPMs for all target distros and architectures using mock" + echo "where:" + echo " -a : change architectures (currently: $ARCHS)" + echo " -b : change branch (currently: $BRANCH)" + echo " -d : change distributions (currently: $DISTROS)" + echo " -m : change arguments passed to 'mock' (currently: $MOCKARGS)" + echo " -r : change repositories (currently: $REPO)" + echo " -s : build these SRPMs instead of new ones in staging area" + echo " -v : change versions (currently: $VERSIONS)" + echo " -w : change distro version (currently: $WHICHVERS)" + exit 0 +} + +while getopts "a:b:d:hm:r:s:v:w:" flag +do + case $flag in + a) + echo "Changing architectures from $ARCHS to $OPTARG" + ARCHS=$OPTARG;; + b) + echo "Changing branch from $BRANCH to $OPTARG" + BRANCH=$OPTARG;; + d) + echo "Changing distros from $DISTROS to $OPTARG" + DISTROS=$OPTARG;; + m) + echo "Changing mock arguments from $MOCKARGS to $OPTARG" + MOCKARGS=$OPTARG;; + r) + echo "Changing repository from $REPO to $OPTARG" + REPO=$OPTARG;; + s) + echo "Changing SRPMS from $SRPMS to $OPTARG" + SRPMS=$OPTARG;; + v) + echo "Changing versions from $VERSIONS to $OPTARG" + VERSIONS=$OPTARG;; + w) + echo "Changing which distro versions from $WHICHVERS to $OPTARG" + WHICHVERS=$OPTARG;; + *) + usage;; + esac +done + +if [ "${SRCFOLDER}x" = "x" ]; then + echo "No source folder defined!" + exit +fi + +if [ "${REFFOLDER}x" = "x" ]; then + echo "No reference folder defined!" + exit +fi + +if [ "${SRPMS}x" = "x" ]; then + # Work out the new SRPMs on grosbeak + SRPMS=`/usr/bin/rsync -Cavz --dry-run $SRCFOLDER/ $REFFOLDER | grep .src.rpm | grep -v safecat | tr '\n' ' '` + + # Go and get the SRPMs + /usr/bin/rsync -Cavz $SRCFOLDER/ $REFFOLDER +fi + +# Make sure the SRPMs are there +for srpm in ${SRPMS} +do + if [ ! -f $REFFOLDER/${srpm} ] + then + echo "No such file: $REFFOLDER/${srpm}" + exit + fi +done + +# Build all the SRPMs +for srpm in ${SRPMS} +do + for distro in $DISTROS + do + if [ "${WHICHVERS}x" = "x" ]; then + if [ "$distro" = "centos" ]; then + DISTVERS=$CENTOSVERS + fi + if [ "$distro" = "sles" ]; then + DISTVERS=$SLESVERS + fi + else + DISTVERS=$WHICHVERS + fi + for distver in $DISTVERS + do + os=${distro}-${distver} + for arch in $ARCHS + do + echo "$os - $arch: $srpm" + time mock $MOCKARGS -r ${os}-${arch} $REFFOLDER/${srpm} + if [ -f /var/lib/mock/${os}-${arch}/state/status ] && grep done /var/lib/mock/${os}-${arch}/state/status + then + for VERSION in $VERSIONS + do + DEST=$VERSION + if [ "${BRANCH}x" != "x" ] + then + DEST=$BRANCH + fi + # Copy freeside RPMs for this version only + FILES=`ls -1 /var/lib/mock/${os}-${arch}/result/freeside*-${VERSION}-*.rpm | grep -v .src.rpm | tr '\n' ' '` + echo $FILES + if [ "${FILES}x" != "x" ] + then + for FILE in $FILES + do + $BUILDSYSDIR/expect-addsign $FILE + done + if [ "${REPOMACHINE}x" != "x" ] + then + scp -p $FILES $REPOUSER@$REPOMACHINE:$REPOFOLDER/repo/${distro}/${distver}/freeside-${DEST}/${REPO}/${arch} + else + cp -p $FILES $REPOFOLDER/repo/${distro}/${distver}/freeside-${DEST}/${REPO}/${arch} + fi + fi + # Copy non-freeside RPMs to all versions + FILES=`ls -1 /var/lib/mock/${os}-${arch}/result/*.rpm | grep -v freeside | grep -v .src.rpm | tr '\n' ' '` + echo $FILES + if [ "${FILES}x" != "x" ] + then + for FILE in $FILES + do + $BUILDSYSDIR/expect-addsign $FILE + done + if [ "${REPOMACHINE}x" != "x" ] + then + scp -p $FILES $REPOUSER@$REPOMACHINE:$REPOFOLDER/repo/${distro}/${distver}/freeside-${DEST}/${REPO}/${arch} + else + cp -p $FILES $REPOFOLDER/repo/${distro}/${distver}/freeside-${DEST}/${REPO}/${arch} + fi + fi + done + fi + done + done + done +done diff --git a/rpm/build/cvs-check-and-build b/rpm/build/cvs-check-and-build new file mode 100755 index 000000000..b5e94b78b --- /dev/null +++ b/rpm/build/cvs-check-and-build @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Copyright 2009, Elirion, Inc. All rights reserved. +# This software is licensed under the same terms as Freeside itself. +# +# This script wraps other scripts in the build system. It does a CVS comparison on the vserver +# to determine if the CVS contents have changed. If so, an SRPM is built. The script then invokes +# the local build script which pulls down this SRPM and uses mock to build binary RPMs for the +# default targets. Finally, the repository is updated. +# +# There's currently no testing for failure. + +FORCE_FLAG= +QUIET_FLAG= + +usage() { + echo "cvs-check-and-build: check Freeside CVS and build RPMs if changed" + echo "where:" + echo " -f: force SRPM rebuild even if CVS contents have not changed" + echo " -h: print this help message" + echo " -q: run yum-arch and createrepo in quiet mode" + exit 0 +} + +while getopts "fhq" flag +do + case $flag in + f) + echo "Force mode" + FORCE_FLAG=-f;; + q) + echo "Quiet mode" + QUIET_FLAG=-q;; + *) + usage;; + esac +done + +ssh 10.5.4.5 /home/rsiddall/build-from-cvs $FORCE_FLAG +cd /home/rsiddall/buildsys; ./build-freeside; ./refresh-repo $QUIET_FLAG + diff --git a/rpm/build/enrpm b/rpm/build/enrpm new file mode 100755 index 000000000..11f69ba56 --- /dev/null +++ b/rpm/build/enrpm @@ -0,0 +1,187 @@ +#!/usr/bin/perl -w +# +# Attempt to build RPMs for Freeside from a tarball or module +# +# Contains portions of "cpanspec" http://cpanspec.sourceforge.net/ + +=head1 NAME + +enrpm - Attempt to build RPMs for Freeside from a tarball or a module + +=head1 SYNOPSIS + +enrpm [options] [tarball|module-name [...]] + + Options: + --help -h Help message + +=head1 DESCRIPTION + +B will generate a spec file to build a rpm from a CPAN-style +Perl module distribution, then try to build RPMs from that spec file +under mock, and update the repositories if successful. + +B uses the file extension of the tarball or module-name specified +on the command line to determine if the argument is a tarball or a module name. + +Modules are downloaded from the CPAN. You must have initialized CPAN on the machine +for B to be able to do this. + +For tarballs B attempts to build a usable .spec file using cpanflute2, and then builds +an SRPM from the .spec file and the tarball. + +Once an SRPM has been built, B uses an external script to build binary RPMs under "mock". +It then uses a second script to update the repositories. + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +Print a brief help message and exit. + +=item B<--packager> + +Specify the name and e-mail address of the packager. This winds up in auto-generated .spec files. + +=item B<--server> + +Specify the host name or IP address of the server on which the SRPM will be built. This server must be +set up for SRPM building, which means it must have both B and B installed on it. + +=item B<--dry-run> + +Just print out commands, don't actually run them. + +=back + +=head1 BUGS + +Currently has little in the way of error detection and diagnostics. + +The back-end should be replaced with an existing build system such as koji. + +=head1 AUTHOR + +Richard Siddall + +=head1 SEE ALSO + +L, L, L + +=cut + +use strict; +use Getopt::Long; +use Cwd qw/getcwd abs_path/; +use File::Basename; +use Sys::Hostname; # False laziness to get around a real config file... + +my %opts; + +GetOptions(\%opts, 'packager=s', 'release=s', 'server=s', 'dryrun'); + +$ENV{PATH} = "/bin:/usr/bin"; + +sub usage { + print STDERR "usage: enrpm --packager > [--release=] --server [--dryrun] tarball|module-name\n"; + print STDERR "where:\n\t--packager is the name and e-mail address of the packager for the .spec file\n\t--release is the rpm release number for the .spec file\n\t--server is the server to build the SRPM on\n\t--dryrun means do not actually run the commands\n\n"; + print STDERR "\ttarball is the name of a tarball containing the Perl module to be packaged\n"; + print STDERR "\tmodule-name is the name of a CPAN Perl module to be packaged\n"; + exit; +} + +# Feeble excuse for not having a real configuration file +my $user = 'rsiddall'; +my $buildsys = '/home/rsiddall/work'; +my $rembuild = '/home/rsiddall/work/cvs'; +my $remdeps = '/home/rsiddall'; +my $rpmtopdir = '/home/rsiddall/work/redhat'; +my $packager = 'Richard Siddall '; +my $server = 'grosbeak'; + +if (hostname =~ /wavetail/i) { + $buildsys = '/home/rsiddall/buildsys'; + $rembuild = '/home/rsiddall/buildsys/ref'; + $remdeps = '/home/rsiddall'; + $rpmtopdir = '/home/rsiddall/redhat'; + $packager = 'Ivan Kohler '; + $server = '10.5.4.5'; +} + +$server = $opts{server} if defined($opts{server}); +$user = $1 if $server =~ /(\w+)\@[\w\d\.]+/; + +$packager = $opts{packager} if defined($opts{packager}); + +# Go ahead and build an SRPM... + +my $ovidignore = '--ignore ' . join ('--ignore ', qw/libwww/); + + +for my $file (@ARGV) { + my ($name,$version,$type); + + if ($file =~ /^(?:.*\/)?(.*)-(?:v\.?)?([^-]+)\.(tar)\.(?:gz|bz2)$/) { + $name = $1; + $version = $2; + $type = $3; + } elsif ($file =~ /^(?:.*\/)?(.*)-(?:v\.?)?([^-]+)\.tgz$/) { + $name = $1; + $version = $2; + $type = 'tar'; + } elsif ($file =~ /^(?:.*\/)?(.*)-(?:v\.?)?([^-]+)\.(zip)$/) { + $name = $1; + $version = $2; + $type = $3; + } else { + # keep things happy if we get "Foo-Bar" instead of "Foo::Bar" + $file =~ s/-/::/g; + $name = $file; + $version = undef; + $type = 'module'; + } + + if ($type eq 'module') { + my $fluteopts = ''; + $fluteopts .= "--packager='$packager' " if defined($packager); + $fluteopts .= "--release='$opts{release}' " if defined($opts{release}); + do_cmd("ssh $user\@$server \"ovid --deps $ovidignore $name | tail -1 | $remdeps/ovid2flute $fluteopts | /bin/sh\""); + } else { + my $absfile = abs_path($file); + my $fname = basename($file); + die "Packager name and e-mail required" if !defined($packager); + die "RPM release string required" if !defined($opts{release}); + do_cmd("scp $absfile $user\@$server:/home/$user/$fname"); +# do_cmd("ssh $user\@$server 'cpanflute2 --just-spec --noperlreqs --email=\\\"$packager\\\" --release=$opts{release} /home/$user/$fname > /home/$user/work/redhat/SPECS/$name.spec;'"); +# do_cmd("ssh $user\@$server 'perl -pi -e \\\"s/perl\(perl\)/perl/g\\\" /home/$user/work/redhat/SPECS/$name.spec;'"); +# do_cmd("ssh $user\@$server 'rpmbuild -bs --nodeps --define \\\"_sourcedir /home/$user/\\\" --define \\\"_srcrpmdir /home/$user/work/redhat/SRPMS\\\" /home/$user/work/redhat/SPECS/$name.spec'"); + open SCRIPT, ">/home/$user/makesrpm" or die "Can't create SRPM construction script: ", $!; + print SCRIPT "#!/bin/sh\n\n"; + print SCRIPT "cpanflute2 --just-spec --noperlreqs --email='$packager' --release=$opts{release} /home/$user/$fname > $rpmtopdir/SPECS/$name.spec;\n"; + print SCRIPT "perl -pi -e 's/perl(perl)/perl/g' $rpmtopdir/SPECS/$name.spec\n"; + print SCRIPT "rpmbuild -bs --nodeps --define '_sourcedir /home/$user/' --define '_srcrpmdir $rpmtopdir/SRPMS' $rpmtopdir/SPECS/$name.spec\n"; + close SCRIPT or die "Can't close SRPM construction script: ", $!; + chmod(0711, "/home/$user/makesrpm"); + do_cmd("scp /home/$user/makesrpm $user\@$server:/home/$user/makesrpm"); + do_cmd("ssh $user\@$server /home/$user/makesrpm"); + } + my $olddir = getcwd(); + do_cmd("$buildsys/build-freeside"); + if (-x "$buildsys/refresh-repo") { + do_cmd("$buildsys/refresh-repo"); + } else { + do_cmd("ssh $user\@$server $rembuild/refresh-repo"); + } +} + +sub do_cmd { + my $cmd = shift; + + print "$cmd\n"; + `$cmd` if !exists($opts{dryrun}); +} + +1; + diff --git a/rpm/build/expect-addsign b/rpm/build/expect-addsign new file mode 100755 index 000000000..ad5e4f600 --- /dev/null +++ b/rpm/build/expect-addsign @@ -0,0 +1,7 @@ +#!/usr/bin/expect +set p "not our actual passphrase" +set f [lindex $argv 0] +spawn /bin/rpm --resign $f +expect "Enter pass phrase:" +send -- "$p\r" +expect eof diff --git a/rpm/build/expect-signrepo b/rpm/build/expect-signrepo new file mode 100755 index 000000000..81035f9f2 --- /dev/null +++ b/rpm/build/expect-signrepo @@ -0,0 +1,9 @@ +#!/usr/bin/expect +set password "not our actual passphrase" +set key [lindex $argv 0] +set output [lindex $argv 1] +set input [lindex $argv 2] +spawn gpg -sab --yes -u "$key" -o $output $input +expect "Enter passphrase:" +send -- "$password\r" +expect eof diff --git a/rpm/build/ovid2flute b/rpm/build/ovid2flute new file mode 100755 index 000000000..403b1d93f --- /dev/null +++ b/rpm/build/ovid2flute @@ -0,0 +1,139 @@ +#!/usr/bin/perl -w +# +# Convert the output from ovid --deps into a list of modules to run through cpanflute2 to get +# better .spec files, and generate SRPMs from these. + +use strict; +use Getopt::Long; + +# Need to fix up modules where Ovid parses the name incorrectly +my %badparse=( + 'Crypt-PasswdMD-5' => 'Crypt-PasswdMD5', + 'IPC-Run-3' => 'IPC-Run3', + 'Digest-SHA-1' => 'Digest-SHA1', + 'Digest-MD-4' => 'Digest-MD4', +); + +my %extra_buildreqs=( + 'File-Rsync' => [ qw/rsync/ ], + 'MIMETools' => [ qw/perl(Mail::Header) perl(Mail::Internet) perl(Mail::Field) perl(IO::Stringy) perl(File::Temp)/ ], + 'HTML::Scrubber' => [ qw/perl(HTML::Parser) perl(HTML::Tagset)/ ], +# 'Time::Duration' => [ qw/perl(Test::Pod) perl(Test::Pod::Coverage)/ ], +); + +my %extra_reqs=( + 'File-Rsync' => [ qw/rsync/ ], +); + +my %opts; + +GetOptions(\%opts, 'packager=s', 'release=s'); + +$opts{packager} = 'Richard Siddall ' if !defined($opts{packager}); + +# Need to process modules that cause Ovid to crash +#my @extramods= qw/Text::CSV_XS Pod::Simple Crypt::SSLeay/; +#my @extramods= qw/Crypt::SSLeay/; +my @extramods= qw/IPC::ShareLite/; + +my $specfiledir="/home/rsiddall/work/redhat/SPECS"; +my $srpmdir="/home/rsiddall/work/redhat/SRPMS"; + +foreach (reverse ) { + next if !defined($_); + #print $_; + last if $_ !~ /^([-\w:]+) perl-([-\w\.]+)(-\d+[\w\.]+?)$/; + #print "$1 = $2\n" + my ($name, $rpm, $ver) = ($1, $2, $3); + print "# $name ($rpm - $ver)\n"; + foreach my $cand (keys %badparse) { + if ($rpm =~ /^$cand/) { + $rpm =~ s/^$cand/$badparse{$cand}/; + print "# Fixed up $rpm\n"; + last; + } + } + printcmds($name, "$rpm$ver"); + #print "cpanspec -v --packager 'Unknown ' $name\n"; + #print "echo $rpm\n"; + #print "repoquery perl-$rpm\n"; + #touchsrpms($name, "$rpm$ver"); +} + +exit; + +foreach my $name (@extramods) { + my $rpm = $name; + $rpm =~ s/::/-/g; + my $tarball = `find ~/.cpan/sources -name '$rpm-*' -print | tail -1`; + #print "$name (Extra!)\n" + if ($tarball =~ /\/($rpm-.*?)(\.tar\.gz|\.tgz)\s*$/) { + $rpm = $1; + printcmds($name, $rpm); + } else { + die "Can't find full rpm name for $name in \"$tarball\"\n"; + } +} + +sub touchsrpms { + my ($name, $rpm) = @_; + my $repofolder ="/var/www/html/repo/sles/10/freeside-1.9/stable/x86_64"; + my $srpmfolder ="/home/rsiddall/work/redhat/SRPMS"; + my @files = glob "$repofolder/perl-$rpm-*.rpm"; + if (! scalar(@files)) { + print "Can't find $rpm in $repofolder\n"; + @files = glob "$srpmfolder/perl-$rpm-*.src.rpm\n"; + if (scalar(@files)) { + my $file = pop @files; + print "touch $file\n"; + } else { + print STDERR "No corresponding SRPM: $srpmfolder/perl-$rpm-*.src.rpm\n"; + printcmds($name, $rpm); + } + } +} + +sub printcmds { + my ($name, $rpm) = @_; + + my $tarball = `find ~/.cpan -name '$rpm.tar.gz' -print`; + $tarball = `find ~/.cpan -name '$rpm.tgz' -print` if ! $tarball; + chomp($tarball); +# my $specfile = "$specfiledir/$name.spec"; + my $rpmname = $rpm; + $rpmname = $1 if $rpm =~ /^(?:.*\/)?(.*)-(?:v\.?)?([^-]+)$/; + my $specfile = "$specfiledir/perl-$rpmname.spec"; + $specfile =~ s/::/-/g; + # Work out which version of the SRPM we're going to generate. + my $rel; + if (!defined($opts{release})) { + for ($rel = 1; ; $rel++) { + my $srpm = "$srpmdir/perl-$rpm-$rel.src.rpm"; + last if ! -e $srpm; + print "# File exists: $srpm\n"; + } + } else { + $rel = $opts{release}; + } + my $fluteopts = ""; + foreach my $cand (keys %extra_buildreqs) { + if ($rpm =~ /^$cand/) { + $fluteopts .= join "", map { "--buildrequires $_ " } @{$extra_buildreqs{$cand}}; + last; + } + } + foreach my $cand (keys %extra_reqs) { + if ($rpm =~ /^$cand/) { + $fluteopts .= join "", map { "--requires $_ " } @{$extra_reqs{$cand}}; + last; + } + } + print "cpanflute2 --just-spec --noperlreqs --email='$opts{packager}' --release=$rel $fluteopts $tarball > $specfile;\n"; + # Should fix up the .spec file + print "perl -pi -e 's/perl\\(perl\\)/perl/g' $specfile;\n"; + my $tarballdir = `dirname $tarball` or die "Can't find tarball for $name: $tarball\n"; + chomp($tarballdir); + print "rpmbuild -bs --nodeps --define '_sourcedir $tarballdir' --define '_srcrpmdir $srpmdir' $specfile\n"; + print "# Generates: $srpmdir/perl-$rpm-$rel.src.rpm\n"; +} + diff --git a/rpm/build/refresh-repo b/rpm/build/refresh-repo new file mode 100755 index 000000000..40f62cdeb --- /dev/null +++ b/rpm/build/refresh-repo @@ -0,0 +1,156 @@ +#!/bin/sh +# +# Copyright 2008, Elirion, Inc. All rights reserved. +# This software is licensed under the same terms as Freeside itself. +# +# This script iterates through all the specified Freeside repositories, running +# both yum-arch and createrepo to update the yum repository meta-data. +# The script should be run after the repository contents are changed. +# +# TBD: Run yum-arch, createrepo, or both, as appropriate for the distro and version +# the repository is targetted for. +# +DISTROS='centos sles' +CENTOSVERS='4 5' +SLESVERS=10 +WHICHVERS= +VERSIONS='1.7 1.9' +ARCHS='i386 x86_64' +REPOS='testing stable prerelease' +RPMS= +KEYID=rsiddall +SAVEDIR=$HOME + +REPOBASEFOLDER=/var/www/html + +QUIET_FLAG= + +BUILDSYSDIR=`dirname $0` + +if [ -f $HOME/buildsysrc ]; then + . $HOME/buildsysrc +fi + +usage() { + echo "refresh-repo: refresh yum metadata for all yum repositories" + echo "where:" + echo " -a : change architectures (currently: $ARCHS)" + echo " -d : change distributions (currently: $DISTROS)" + echo " -r : change repositories (currently: $REPOS)" + echo " -v : change versions (currently: $VERSIONS)" + echo " -w : change distro version (currently: $WHICHVERS)" + exit 0 +} + +while getopts "a:d:hqr:v:w:" flag +do + case $flag in + a) + echo "Changing architectures from $ARCHS to $OPTARG" + ARCHS=$OPTARG;; + d) + echo "Changing distros from $DISTROS to $OPTARG" + DISTROS=$OPTARG;; + q) + echo "Quiet mode" + QUIET_FLAG=-q;; + r) + echo "Changing repository from $REPOS to $OPTARG" + REPOS=$OPTARG;; + v) + echo "Changing versions from $VERSIONS to $OPTARG" + VERSIONS=$OPTARG;; + w) + echo "Changing which distro versions from $WHICHVERS to $OPTARG" + WHICHVERS=$OPTARG;; + *) + usage;; + esac +done + +#for DISTRO in ${DISTROS}; do +# for VERSION in ${VERSIONS}; do +# for REPO in ${REPOS}; do +# for ARCH in ${ARCHS}; do +# # Determine which RPMs need to be signed +# NEWRPMS=`rpm --checksig $REPOBASEFOLDER/repo/$DISTROS/$DISTVERS/freeside-${VERSION}/${REPO}/${ARCH}/*.rpm | grep -v ' gpg ' | cut -d ':' -f 1 | tr '\n' ' '` +# RPMS=`echo "$RPMS $NEWRPMS"` +# done +# done +# done +#done +##rpm --addsign $RPMS +#for RPM in $RPMS; do +# ./expect-addsign $RPM +#done +for DISTRO in ${DISTROS}; do + for VERSION in ${VERSIONS}; do + for REPO in ${REPOS}; do + for ARCH in ${ARCHS}; do + if [ "${WHICHVERS}x" = "x" ]; then + if [ "$DISTRO" = "centos" ]; then + DISTVERS=$CENTOSVERS + fi + if [ "$DISTRO" = "sles" ]; then + DISTVERS=$SLESVERS + fi + else + DISTVERS=$WHICHVERS + fi + for distver in $DISTVERS + do + # Update the repo information + echo "${DISTRO}-${distver}: $VERSION - $REPO - $ARCH" + DIR=$REPOBASEFOLDER/repo/$DISTRO/$distver/freeside-${VERSION}/${REPO}/${ARCH} + if [ -d $DIR ] + then + # SLES requires signed repodata. Save any existing files so we don't regenerate + for ext in asc key + do + if [ -e $DIR/repodata/repomd.xml.${ext} ] + then + mv $DIR/repodata/repomd.xml.${ext} $SAVEDIR + fi + done + if [ "$DISTRO" = "sles" ] + then + for file in $DIR/freeside-mysql-*.rpm + do + mv $file $file.old + done + for file in $DIR/freeside-selfservice-*.rpm + do + mv $file $DIR/../self-service/$ARCH + done + fi + if [ "$DISTRO-$distver" = "centos-4" ] + then + yum-arch $QUIET_FLAG $DIR/ + fi +# createrepo $QUIET_FLAG --checkts $DIR/ + createrepo $QUIET_FLAG $DIR/ + if [ "$DISTRO" = "sles" ] + then + # SLES requires signed repodata... + if [ -e $SAVEDIR/repomd.xml.asc ] + then + mv $SAVEDIR/repomd.xml.asc $DIR/repodata + fi + +# gpg -sab --yes -u "$KEYID" -o $DIR/repodata/repomd.xml.asc $DIR/repodata/repomd.xml + ./expect-signrepo $KEYID $DIR/repodata/repomd.xml.asc $DIR/repodata/repomd.xml + if [ -e $SAVEDIR/repomd.xml.key ] + then + mv $SAVEDIR/repomd.xml.key $DIR/repodata + else + gpg -a --yes -u "$KEYID" --export -o $DIR/repodata/repomd.xml.key + fi + fi + else + echo "No such folder $DIR - skipping" + fi + done + done + done + done +done -- 2.11.0