diff options
author | unknown <lenz@mysql.com> | 2005-01-20 12:07:44 +0100 |
---|---|---|
committer | unknown <lenz@mysql.com> | 2005-01-20 12:07:44 +0100 |
commit | 89a24f933537f550844862d936ed57b44ec16069 (patch) | |
tree | 46b56365f852602a4ca028a9e81f42e3e14441a2 /Build-tools | |
parent | 803774958cb576e04213fd9ab14e78d1b588f8fd (diff) | |
download | mariadb-git-89a24f933537f550844862d936ed57b44ec16069.tar.gz |
- Improved Do-rpm to perform RPM builds inside of a chrooted build
environment (using "build" on SUSE Linux)
Build-tools/Do-rpm:
- added functionality to perform RPM builds inside of a chrooted build
environment (using "build" on SUSE Linux) - see "--help" for more details
Diffstat (limited to 'Build-tools')
-rwxr-xr-x | Build-tools/Do-rpm | 244 |
1 files changed, 159 insertions, 85 deletions
diff --git a/Build-tools/Do-rpm b/Build-tools/Do-rpm index da06e1f58e4..23602debfb1 100755 --- a/Build-tools/Do-rpm +++ b/Build-tools/Do-rpm @@ -22,7 +22,6 @@ use Getopt::Long; Getopt::Long::Configure ("bundling"); use Sys::Hostname; -$opt_nobuild = undef; $opt_cc= undef; $opt_cflags= undef; $opt_clean= undef; @@ -33,6 +32,9 @@ $opt_help= undef; $opt_log= undef; $opt_mail= ""; $opt_verbose= undef; +$opt_susebuild= undef; +$opt_susebuildroot= undef; +$opt_suserpms= undef; # Set a dummy version until we know the correct one $VERSION= "x.y.z"; @@ -49,7 +51,9 @@ GetOptions( "help|h", "log|l:s", "mail|m=s", - "nobuild", + "susebuild|s", + "susebuildroot|r=s", + "suserpms=s", "verbose|v", ) || &print_help; @@ -57,6 +61,20 @@ GetOptions( defined($SPECFILE=$ARGV[0]) || print_help("Please provide the spec file name!"); +&print_help("Please define the location of the RPM repository!") if $opt_susebuild && !($opt_suserpms || $ENV{BUILD_RPMS}); + +unless ($opt_susebuildroot) +{ + if ($ENV{BUILD_ROOT}) + { + $opt_susebuildroot= $ENV{BUILD_ROOT}; + } + else + { + $opt_susebuildroot="/var/tmp/build-root"; + } +} + # Include helper functions $PWD= cwd(); $LOGGER= "$PWD/logger.pm"; @@ -72,7 +90,7 @@ else $subject= "RPM build for $SPECFILE failed" if $opt_mail; # Open the spec file and extract the version number -open(SPEC, $SPECFILE) or &abort("Unable to open \"$ARGV[0]\": $!"); +open(SPEC, $SPECFILE) or die "Unable to open \"$ARGV[0]\": $!"; @spec= <SPEC>; close SPEC; @@ -94,7 +112,7 @@ $HOST= hostname(); $HOST=~ /^([^.-]*)/; $HOST= $1; $LOGFILE= "$PWD/Logs/Do-rpm-$HOST-$MAJOR.$MINOR.log"; -&logger("Using spec file for version: $VERSION"); +&logger("Logging to $LOGFILE"); # # Override predefined Log file name @@ -114,103 +132,149 @@ if (defined $opt_log) } } -# -# Newer RPM versions ship with a separate tool "rpmbuild" to build RPMs -# -if (-x "/usr/bin/rpmbuild") +&logger("Using spec file for version: $VERSION"); + +if ($opt_susebuild) { - $RPM= "/usr/bin/rpmbuild"; - $RMSOURCE= "--rmsource --rmspec"; + &susebuild; } else -{ - $RPM= "/bin/rpm"; - $RMSOURCE= "--rmspec"; +{ + &rpmbuild; } -if ($RPM) -{ - &logger("Found rpm binary: $RPM"); -} -else +&logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run); +exit 0; + +# +# Build using SUSE's "build" script +# +sub susebuild { - &abort("Unable to find RPM binary!"); + $BUILD= "/usr/bin/build"; + ( -x $BUILD) ? &logger("$BUILD found, proceeding.") : &abort("$BUILD could not be found!"); + $command= "sudo $BUILD --clean"; + $command.= " --root=$opt_susebuildroot"; + $command.= " --rpms=$opt_suserpms" if $opt_suserpms; + $command.= " $SPECFILE"; + &logger("Building RPMs using SUSE build."); + &run_command($command, "Error while running the SUSE RPM build!"); + + # + # Move the resulting RPMs into the pwd - we can use broad globs here + # as the build root has been cleaned up before so there should not be + # any residuals from previous build runs + # + $command= "cp"; + $command.= " -v " if ($opt_verbose); + $command.= " $opt_susebuildroot/usr/src/packages/SRPMS/MySQL*.src.rpm $PWD"; + &logger("Copying source RPM to current dir."); + &run_command($command, "Error moving source RPM!"); + + $command= "cp"; + $command.= " -v " if ($opt_verbose); + $command.= " $opt_susebuildroot/usr/src/packages/RPMS/*/MySQL*.rpm $PWD"; + &logger("Copying binary RPMs to current dir."); + &run_command($command, "Error moving binary RPMs!"); } # -# determine some RPM settings for this host +# Build using "plain" RPM # -chomp($RPMARCH= `$RPM --eval "%{_arch}" 2> /dev/null`); -chomp($RPMDIR= `$RPM --eval "%{_rpmdir}" 2> /dev/null`); -chomp($SOURCEDIR= `$RPM --eval "%{_sourcedir}" 2> /dev/null`); -chomp($SPECDIR= `$RPM --eval "%{_specdir}" 2> /dev/null`); -chomp($SRCRPMDIR= `$RPM --eval "%{_srcrpmdir}" 2> /dev/null`); - -$SOURCEFILE= glob "mysql*-$VERSION.tar.gz"; +sub rpmbuild +{ -unless($opt_nobuild) { + # + # Newer RPM versions ship with a separate tool "rpmbuild" to build RPMs + # + if (-x "/usr/bin/rpmbuild") + { + $RPM= "/usr/bin/rpmbuild"; + $RMSOURCE= "--rmsource --rmspec"; + } + else + { + $RPM= "/bin/rpm"; + $RMSOURCE= "--rmspec"; + } - &logger("Starting RPM build of MySQL-$VERSION on $HOST"); + if ($RPM) + { + &logger("Found rpm binary: $RPM"); + } + else + { + &abort("Unable to find RPM binary!"); + } - foreach $file ($SOURCEFILE, $SPECFILE) - { - &abort("Unable to find $file!") unless (-f "$file"); - } + # + # determine some RPM settings for this host + # + chomp($RPMARCH= `$RPM --eval "%{_arch}" 2> /dev/null`); + chomp($RPMDIR= `$RPM --eval "%{_rpmdir}" 2> /dev/null`); + chomp($SOURCEDIR= `$RPM --eval "%{_sourcedir}" 2> /dev/null`); + chomp($SPECDIR= `$RPM --eval "%{_specdir}" 2> /dev/null`); + chomp($SRCRPMDIR= `$RPM --eval "%{_srcrpmdir}" 2> /dev/null`); -# -# Install source and spec file -# - &logger("Copying SOURCE and SPEC file to build directories."); - unless ($opt_dry_run) - { - copy($SOURCEFILE, $SOURCEDIR) - or &abort("Unable to copy $SOURCEFILE to $SOURCEDIR!"); - copy($SPECFILE, $SPECDIR) - or &abort("Unable to copy $SPECFILE to $SPECDIR!"); - } + $SOURCEFILE= glob "mysql*-$VERSION.tar.gz"; -# -# Set environment variables - these are being used in the -# official MySQL RPM spec file -# - &logger("Setting special build environment variables") - if ($opt_cc) or ($opt_cflags) or ($opt_cxxflags) or ($opt_cxx); - $ENV{MYSQL_BUILD_CC}=$opt_cc if ($opt_cc); - $ENV{MYSQL_BUILD_CFLAGS}=$opt_cflags if ($opt_cflags); - $ENV{MYSQL_BUILD_CXXFLAGS}=$opt_cxxflags if ($opt_cxxflags); - $ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx); + &logger("Starting RPM build of MySQL-$VERSION on $HOST"); -# -# Build the RPMs -# - $command= "$RPM"; - $command.= " -v" if ($opt_verbose); - $command.= " -ba"; - $command.= " --clean $RMSOURCE" if $opt_clean; - $command.= " $SPECDIR/"; - $command.= basename($SPECFILE); - &logger("Building RPM."); - &run_command($command, "Error while building the RPMs!"); -} + foreach $file ($SOURCEFILE, $SPECFILE) + { + &abort("Unable to find $file!") unless (-f "$file"); + } -# -# Move the resulting RPMs into the pwd -# -$command= "mv"; -$command.= " -v " if ($opt_verbose); -$command.= " $SRCRPMDIR/MySQL*$VERSION_SRPM*.src.rpm $PWD"; -&logger("Moving source RPM to current dir."); -&run_command($command, "Error moving source RPM!"); - -$command= "mv"; -$command.= " -v " if ($opt_verbose); -# $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION*.$RPMARCH.rpm $PWD"; -$command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION_SRPM*.$RPMARCH.rpm $PWD"; -&logger("Moving binary RPMs to current dir."); -&run_command($command, "Error moving binary RPMs!"); + # + # Install source and spec file + # + &logger("Copying SOURCE and SPEC file to build directories."); + unless ($opt_dry_run) + { + copy($SOURCEFILE, $SOURCEDIR) + or &abort("Unable to copy $SOURCEFILE to $SOURCEDIR!"); + copy($SPECFILE, $SPECDIR) + or &abort("Unable to copy $SPECFILE to $SPECDIR!"); + } -&logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run); -exit 0; + # + # Set environment variables - these are being used in the + # official MySQL RPM spec file + # + &logger("Setting special build environment variables") + if ($opt_cc) or ($opt_cflags) or ($opt_cxxflags) or ($opt_cxx); + $ENV{MYSQL_BUILD_CC}=$opt_cc if ($opt_cc); + $ENV{MYSQL_BUILD_CFLAGS}=$opt_cflags if ($opt_cflags); + $ENV{MYSQL_BUILD_CXXFLAGS}=$opt_cxxflags if ($opt_cxxflags); + $ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx); + + # + # Build the RPMs + # + $command= "$RPM"; + $command.= " -v" if ($opt_verbose); + $command.= " -ba"; + $command.= " --clean $RMSOURCE" if $opt_clean; + $command.= " $SPECDIR/"; + $command.= basename($SPECFILE); + &logger("Building RPM."); + &run_command($command, "Error while building the RPMs!"); + + # + # Move the resulting RPMs into the pwd + # + $command= "mv"; + $command.= " -v " if ($opt_verbose); + $command.= " $SRCRPMDIR/MySQL*$VERSION_SRPM*.src.rpm $PWD"; + &logger("Moving source RPM to current dir."); + &run_command($command, "Error moving source RPM!"); + + $command= "mv"; + $command.= " -v " if ($opt_verbose); + $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION_SRPM*.$RPMARCH.rpm $PWD"; + &logger("Moving binary RPMs to current dir."); + &run_command($command, "Error moving binary RPMs!"); +} sub print_help { @@ -218,7 +282,7 @@ sub print_help if ($message ne "") { print "\n"; - print "ERROR: $message\n\n}"; + print "ERROR: $message\n\n"; } print <<EOF; @@ -241,12 +305,22 @@ Options: -t, --dry-run Dry run without executing -h, --help Print this help -l, --log[=<filename>] Write a log file [to <filename>] - (default is "$LOGFILE") -m, --mail=<address> Mail a failure report to the given address (and include a log file snippet, if logging is enabled) Note that the \@-Sign needs to be quoted! Example: --mail=user\\\@domain.com +-s, --susebuild Use the SUSE "build" script instead of RPM + directly (requires sudo privileges to run the + /usr/bin/build command) +-r, --susebuildroot=<root> Use <root> as the build root directory for the + SUSE "build" (default is /var/tmp/build-root + or defined by the BUILD_ROOT environment + variable) +--suserpms=<path> Path to the SUSE RPM repository to build up + the build root (mandatory option when using + --susebuild and the BUILD_RPMS environment + variable is not set.) -v, --verbose Verbose execution Example: |