tags 472350 + fixed-upstream pending thanks Timothy G Abbott <[EMAIL PROTECTED]> writes:
> I would find it useful to have an option in sbuild that automatically > runs "apt-get update" in the build chroot immediately prior to > building, which ensures the build gets the newest dependencies, even > if one has not done an apt update in the source chroot recently. > > I've attached a patch to implement this feature. Many thanks. I have applied the patch with a couple of minor modifications (error handling and config file update). What I have applied follows below, and is also here: http://git.debian.org/?p=buildd-tools/sbuild.git;a=commitdiff;h=d2582f13ea7e376d875d736cbbb350e92453e33b Regards, Roger diff --git a/AUTHORS b/AUTHORS index 2daf8c3..de90446 100644 --- a/AUTHORS +++ b/AUTHORS @@ -16,3 +16,7 @@ Roger Leigh <[EMAIL PROTECTED]> Ryan Murray <[EMAIL PROTECTED]> modifications for security building maintenance + +Timothy G Abbott <[EMAIL PROTECTED]> + support for running "apt-get update" in chroots prior to + fetching sources and building \ No newline at end of file diff --git a/bin/sbuild b/bin/sbuild index 83ef805..22f09fb 100755 --- a/bin/sbuild +++ b/bin/sbuild @@ -3,7 +3,8 @@ # sbuild: build packages, obeying source dependencies # Copyright © 1998-2000 Roman Hodek <[EMAIL PROTECTED]> # Copyright © 2005 Ryan Murray <[EMAIL PROTECTED]> -# Copyright © 2005-2007 Roger Leigh <[EMAIL PROTECTED]> +# Copyright © 2005-2008 Roger Leigh <[EMAIL PROTECTED] +# Copyright © 2008 Timothy G Abbott <[EMAIL PROTECTED]> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -191,6 +192,7 @@ exit 1 if !GetOptions ("arch=s" => \$main::user_arch, "binNMU=i" => \$main::binNMUver, "database=s" => \$main::database, "D|debug+" => \$conf::debug, + "apt-update" => \$conf::apt_update, "d|dist=s" => sub { $main::distribution = $_[1]; $main::distribution = "oldstable" @@ -337,6 +339,22 @@ foreach $dscfile (@ARGV) { $main::arch = chroot_arch(); + # Update APT cache. + if ($conf::apt_update) { + if (!open(PIPE, Sbuild::Chroot::get_apt_command("$conf::apt_get", "-q update", "root", 1) . " 2>&1 |")) { + print PLOG "Can't open pipe to apt-get: $!\n"; + return 0; + } + while(<PIPE>) { + print PLOG $_; + } + close(PIPE); + if ($?) { + print PLOG "apt-get update failed\n" ; + $main::pkg_status = "skipped"; + goto cleanup_close; + } + } $main::pkg_fail_stage = "fetch-src"; my @files_to_rm = fetch_source_files( \$dscfile, @@ -433,7 +451,7 @@ sub fetch_source_files ($$$$$) { } } else { my %entries = (); - my $retried = 0; + my $retried = $conf::apt_update; retry: print PLOG "Checking available source versions...\n"; my $command = get_apt_command("$conf::apt_cache", "-q showsrc $pkg", $main::username, 0); diff --git a/etc/sbuild.conf b/etc/sbuild.conf index 46e9d9d..1cea5b5 100644 --- a/etc/sbuild.conf +++ b/etc/sbuild.conf @@ -85,6 +85,10 @@ # cost. #$apt_policy = 1; +# APT update. 1 to enable running "apt-get update" at the start of +# each build, or 0 to disable. +#$apt_update = 0; + # Check watched packages to discover missing build dependencies. This # can be disabled to increase the speed of builds #$check_watches = 1; diff --git a/lib/Sbuild/Conf.pm b/lib/Sbuild/Conf.pm index f13cf91..cc36717 100644 --- a/lib/Sbuild/Conf.pm +++ b/lib/Sbuild/Conf.pm @@ -33,19 +33,20 @@ BEGIN { @ISA = qw(Exporter); - @EXPORT = qw($HOME %alternatives $apt_policy $check_watches $cwd - $username $verbose $nolog $mailprog $dpkg $su - $schroot $schroot_options $fakeroot $apt_get - $apt_cache $dpkg_source $md5sum $avg_time_db - $avg_space_db $package_checklist $build_env_cmnd - $pgp_options $log_dir $mailto $mailfrom - @no_auto_upgrade $check_depends_algorithm + @EXPORT = qw($HOME %alternatives $apt_policy $apt_update + $check_watches $cwd $username $verbose $nolog + $mailprog $dpkg $su $schroot $schroot_options + $fakeroot $apt_get $apt_cache $dpkg_source $md5sum + $avg_time_db $avg_space_db $package_checklist + $build_env_cmnd $pgp_options $log_dir $mailto + $mailfrom @no_auto_upgrade $check_depends_algorithm $purge_build_directory @toolchain_regex $stalled_pkg_timeout $srcdep_lock_dir $srcdep_lock_wait @ignore_watches_no_build_deps $build_dir $sbuild_mode $debug $force_orig_source %individual_stalled_pkg_timeout $path - $maintainer_name $uploader_name %watches $key_id); } + $maintainer_name $uploader_name %watches $key_id); +} # Originally from the main namespace. (our $HOME = $ENV{'HOME'}) @@ -100,6 +101,7 @@ our $path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X our $maintainer_name; our $uploader_name; our $key_id; +our $apt_update = 0; our %alternatives = ("info-browser" => "info", "httpd" => "apache", "postscript-viewer" => "ghostview", diff --git a/man/sbuild.1.in b/man/sbuild.1.in index 9ad7818..41d5607 100644 --- a/man/sbuild.1.in +++ b/man/sbuild.1.in @@ -111,6 +111,9 @@ is a line of source dependencies in the same format as in .IR \-D , "\-\-debug" Enable debug output. .TP +.IR "\-\-apt\-update" +Run apt-get update in the chroot before executing the build. +.TP .IR \-m , "\-\-maintainer=<maintainer>" Passed to dpkg\-genchanges and is used to set the Maintainer: field in the .changes file(s). -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
pgpVFe3cyduFw.pgp
Description: PGP signature