diff options
author | Pascal Terjan <pterjan@mageia.org> | 2012-12-10 09:38:14 +0000 |
---|---|---|
committer | Pascal Terjan <pterjan@mageia.org> | 2012-12-10 09:38:14 +0000 |
commit | b1cd4fbff3d5c841daaab0447c4cd312e2f7913b (patch) | |
tree | 53271180e63299e8a099610c266d462805c261db | |
parent | 60979c8038010f5b5b7f32e9c3b387230a7ffeb7 (diff) | |
download | iurt-b1cd4fbff3d5c841daaab0447c4cd312e2f7913b.tar iurt-b1cd4fbff3d5c841daaab0447c4cd312e2f7913b.tar.gz iurt-b1cd4fbff3d5c841daaab0447c4cd312e2f7913b.tar.bz2 iurt-b1cd4fbff3d5c841daaab0447c4cd312e2f7913b.tar.xz iurt-b1cd4fbff3d5c841daaab0447c4cd312e2f7913b.zip |
Re-indent
-rwxr-xr-x | iurt | 448 |
1 files changed, 224 insertions, 224 deletions
@@ -817,241 +817,241 @@ my $_s = sub { $run{main} = 1; sub rebuild_one { - my ($dir, $srpm, $status) = @_; - # CM: Set argv[0] (in the C sense) to something we can easily spot and - # understand in process list - $0 = "Iurt: $run{distro_tag} $run{my_arch} $run{media} $srpm"; - - $status or return; - $done{$srpm} and return; - $done{$srpm} = 1; - check_version(\%run, $srpm, \%srpm_version) or return; - if ($run{debug}) { $run{debug}++ == 2 and exit() } - $done++; - plog('NOTIFY', "Build package $srpm [$done/$to_compile]"); - # When rebuilding all the media, src.rpm can be removed from mirror before we work on them - unless (-f "$dir/$srpm") { - $cache->{failure}{$srpm} = 1; - $run{status}{$srpm} = 'missing'; - dump_cache_par(\%run); - dump_status($local_spool, \%run); - return; - } - # FIXME unfortunately urpmi stalls quite often - my $retry = 0; - - # current rpm is sometime segfaulting, and iurt is them blocked - # and cannot - # - # $cache->{failure}{$srpm} = 1; - # dump_cache(\%run); + my ($dir, $srpm, $status) = @_; + # CM: Set argv[0] (in the C sense) to something we can easily spot and + # understand in process list + $0 = "Iurt: $run{distro_tag} $run{my_arch} $run{media} $srpm"; + + $status or return; + $done{$srpm} and return; + $done{$srpm} = 1; + check_version(\%run, $srpm, \%srpm_version) or return; + if ($run{debug}) { $run{debug}++ == 2 and exit() } + $done++; + plog('NOTIFY', "Build package $srpm [$done/$to_compile]"); + # When rebuilding all the media, src.rpm can be removed from mirror before we work on them + unless (-f "$dir/$srpm") { + $cache->{failure}{$srpm} = 1; + $run{status}{$srpm} = 'missing'; + dump_cache_par(\%run); + dump_status($local_spool, \%run); + return; + } + # FIXME unfortunately urpmi stalls quite often + my $retry = 0; + + # current rpm is sometime segfaulting, and iurt is them blocked + # and cannot + # + # $cache->{failure}{$srpm} = 1; + # dump_cache(\%run); retry: - $urpmi->clean_urpmi_process; + $urpmi->clean_urpmi_process; - if (!$run{use_old_chroot}) { - $chroot_tmp = create_temp_chroot(\%run, $config, - $chroot_tmp, $chroot_ref) or return; - } + if (!$run{use_old_chroot}) { + $chroot_tmp = create_temp_chroot(\%run, $config, + $chroot_tmp, $chroot_ref) or return; + } - if (!$urpmi->urpmi_command($chroot_tmp)) { - plog('DEBUG', "Creating chroot failed.\nCommand was: $chroot_tmp"); - return; + if (!$urpmi->urpmi_command($chroot_tmp)) { + plog('DEBUG', "Creating chroot failed.\nCommand was: $chroot_tmp"); + return; + } + $srpm =~ /(.*)-[^-]+-[^-]+\.src\.rpm$/ or return; + my ($maintainer, $cc); + if (!$run{warn}) { + ($maintainer) = get_maint(\%run, $srpm); + $cc = $maint{$srpm};#, maintainers\@mandriva.com"; + chomp $maintainer; + if (!$maintainer || $maintainer eq 'NOT_FOUND') { + $maintainer = $cc; + #$cc = 'maintainers@mandriva.com' } - $srpm =~ /(.*)-[^-]+-[^-]+\.src\.rpm$/ or return; - my ($maintainer, $cc); - if (!$run{warn}) { - ($maintainer) = get_maint(\%run, $srpm); - $cc = $maint{$srpm};#, maintainers\@mandriva.com"; - chomp $maintainer; - if (!$maintainer || $maintainer eq 'NOT_FOUND') { - $maintainer = $cc; - #$cc = 'maintainers@mandriva.com' - } + } + #($maintainer, $cc) = ($config->{admin},''); + + plog('DEBUG', "creating user $luser in chroot"); + add_local_user($chroot_tmp, \%run, $config, $luser, $run{uid}) or return; + + my $old_srpm = $srpm; + my ($ret, $spec); + ($ret, $srpm, $spec) = $urpmi->recreate_srpm(\%run, $config, + $chroot_tmp, $dir, $srpm, $luser, $retry); + if ($ret == -1) { + if (create_build_chroot($run{chroot_path}, $run{chroot_ref}, \%run, $config)) { + $retry = 1; + goto retry; + } else { + $ret = 0; } - #($maintainer, $cc) = ($config->{admin},''); - - plog('DEBUG', "creating user $luser in chroot"); - add_local_user($chroot_tmp, \%run, $config, $luser, $run{uid}) or return; - - my $old_srpm = $srpm; - my ($ret, $spec); - ($ret, $srpm, $spec) = $urpmi->recreate_srpm(\%run, $config, - $chroot_tmp, $dir, $srpm, $luser, $retry); - if ($ret == -1) { - if (create_build_chroot($run{chroot_path}, $run{chroot_ref}, \%run, $config)) { - $retry = 1; - goto retry; - } else { - $ret = 0; - } - } - if (!$ret) { - # CM: experimental: fail if we can't regenerate the srpm - # This should eliminate bouncers that block the input queue - # - $srpm = $old_srpm; - $cache->{failure}{$srpm} = 1; - $run{status}{$srpm} = 'recreate_srpm_failure'; - dump_cache_par(\%run); - dump_status($local_spool, \%run); - return; - } - - (my $log_dirname = $srpm) =~ s/.*:(.*)\.src.rpm/$1/; - my $log_dir = "$local_spool/log/$log_dirname/"; - - # only create the log dir for the new srpm - mkdir $log_dir; - -d $log_dir or die "FATAL: could not create $log_dir (check permissions and group ownerships)"; + } + if (!$ret) { + # CM: experimental: fail if we can't regenerate the srpm + # This should eliminate bouncers that block the input queue + # + $srpm = $old_srpm; + $cache->{failure}{$srpm} = 1; + $run{status}{$srpm} = 'recreate_srpm_failure'; + dump_cache_par(\%run); + dump_status($local_spool, \%run); + return; + } + + (my $log_dirname = $srpm) =~ s/.*:(.*)\.src.rpm/$1/; + my $log_dir = "$local_spool/log/$log_dirname/"; + + # only create the log dir for the new srpm + mkdir $log_dir; + -d $log_dir or die "FATAL: could not create $log_dir (check permissions and group ownerships)"; - plog('INFO', "Install build dependencies"); - my $path_srpm = "$chroot_tmp/home/$luser/rpmbuild/SRPMS/"; + plog('INFO', "Install build dependencies"); + my $path_srpm = "$chroot_tmp/home/$luser/rpmbuild/SRPMS/"; - # on x86_64 the rpm database is getting corrupted and sometimes - # rpm do not found anymore installed packages, retrying several - # time to be sure something is really broken - - my $ok = $urpmi->install_packages($srpm, $chroot_tmp, $local_spool, \%pack_provide, 'install_deps', "[REBUILD] install of build dependencies of $srpm failed on $run{my_arch}", { maintainer => $maintainer }, "$path_srpm/$srpm"); - if (!$ok) { - $run{status}{$srpm} ||= 'install_deps_failure'; - return; - } - - # try to workarround the rpm -qa db4 error(2) from dbcursor->c_get: - # No such file or directory - # system("sudo chroot $chroot_tmp rm -rf /var/lib/rpm/__db* &> /dev/null"); - # system("$sudo chroot $chroot_tmp rpm --rebuilddb &> /dev/null"); - - perform_command("rpm --root $chroot_tmp -qa | sort", - \%run, $config, $cache, - logname => "rpm_qa", - hash => "rpm_qa_$srpm", - timeout => 60, - debug_mail => $run{debug}, - log => $log_dir); # or next; As this failed quite often, do not stop - plog('NOTIFY', "Building $srpm"); - my $command = "rpmbuild --rebuild $run{with_flags} /home/$luser/rpmbuild/SRPMS/$srpm"; - if ($run{stop}) { - $urpmi->install_packages('chroot', $chroot_tmp, $local_spool, \%pack_provide, 'configure', "[ADMIN] installation of urpmi and sudo failed in the chroot $run{my_arch}", { check => 1, maintainer => $config->{admin} }, 'urpmi', 'sudo'); - add_sudoers($chroot_tmp, $luser); - $command = "rpmbuild -b$run{stop} /home/$luser/rpmbuild/SPECS/$spec"; - } - - my ($srpm_name) = $srpm =~ /(?:.*:)?(.*)-[^-]+-[^-]+\.src\.rpm$/; - my $icecream; - if ($run{icecream}) { - $icecream = "RPM_BUILD_NCPUS=$run{icecream}"; - } - - if (!perform_command(qq(chroot $chroot_tmp /bin/su - $luser -c "TMP=/home/$luser/tmp/ $icecream $command"), - \%run, $config, $cache, - use_iurt_root_command => 1, - mail => $maintainer, - error => "[REBUILD] $srpm from $run{distro_tag} does not build correctly on $run{my_arch}", - logname => "build", - hash => "build_$srpm", - timeout => $config->{build_timeout}{$srpm_name} || $config->{build_timeout}{default}, - stalled_timeout => $config->{build_stalled_timeout}{$srpm_name} || $config->{build_stalled_timeout}{default}, - srpm => $srpm, - debug_mail => $run{debug}, - cc => $cc, - log => $log_dir, - callback => sub { - my ($opt, $output) = @_; - if ($run{stop}) { - plog("dumping to a chrooted shell into $chroot_tmp (pid $$)"); - # exec does not work because it seems stdin and out are shared between children - system($sudo, $config->{iurt_root_command}, '--chroot', $chroot_tmp, '/bin/su', '-', $luser, '-c', "$config->{prompt} bash"); - exit(); - } - plog('DEBUG', "calling callback for $opt->{hash}"); - if ($output =~ m!/bin/ld: cannot find -l(\S*)|configure.*[^W]error.* (?:-l(\S+)|(\S+) includes)!) { - my $missing = $1; - my @rpm = find_provides(\%pack_provide, $missing); - plog(5, "likely @rpm ($missing-devel) needed to rebuilt $srpm is not in build_requires"); - if ($maintainer ne 'NOT_FOUND') { - $opt->{mail} = $maintainer; - #$opt->{mail} .= ", other_maint"; - } - if (!$opt->{mail}) { - $opt->{mail} = "Maintainer not found <$config->{admin}>"; - } - if (@rpm > 1) { - $opt->{error} = "[MISSING_BUILD_REQUIRES_TAG] one of @rpm ($missing-devel), needed to build $srpm, is not in buildrequires"; - } elsif (@rpm == 1) { - $opt->{error} = "[MISSING_BUILD_REQUIRES_TAG] @rpm ($missing-devel), needed to build $srpm, is not in buildrequires"; - } else { - $opt->{error} = "[MISSING_BUILD_REQUIRES_TAG] $missing-devel, needed to build $srpm, is not in buildrequires"; - } - $cache->{buildrequires}{$srpm}{$missing} = \@rpm; - return; - } - 1; - }, - freq => 1)) { - - $cache->{failure}{$srpm} = 1; - $run{status}{$srpm} = 'build_failure'; - # 20060615 - dump_cache_par(\%run); - dump_status($local_spool, \%run); - return; - } - - # do some cleaning if the compilation is successful - delete $cache->{needed}{$srpm} if defined $cache->{needed}{$srpm}; - delete $cache->{buildrequires}{$srpm} if defined $cache->{buildrequires}{$srpm}; - # FIXME It seems the glob is not correctly expanded any more, so listing the directory content to do so - opendir my $binfh, "$chroot_tmp/home/$luser/rpmbuild/RPMS/"; - my @packages; - foreach my $bindir (readdir $binfh) { - -d "$chroot_tmp/home/$luser/rpmbuild/RPMS/$bindir" or return; - opendir my $rpmfh, "$chroot_tmp/home/$luser/rpmbuild/RPMS/$bindir"; - push @packages, map { "$chroot_tmp/home/$luser/rpmbuild/RPMS/$bindir/$_" } grep { !/src\.rpm$/ && /\.rpm$/ } readdir $rpmfh; - } - - # 20060810 warly We should fail here, but rpm is currently - # segfaulting when trying to install packages + # on x86_64 the rpm database is getting corrupted and sometimes + # rpm do not found anymore installed packages, retrying several + # time to be sure something is really broken + + my $ok = $urpmi->install_packages($srpm, $chroot_tmp, $local_spool, \%pack_provide, 'install_deps', "[REBUILD] install of build dependencies of $srpm failed on $run{my_arch}", { maintainer => $maintainer }, "$path_srpm/$srpm"); + if (!$ok) { + $run{status}{$srpm} ||= 'install_deps_failure'; + return; + } - if ($config->{check_binary_file}) { - $urpmi->install_packages($srpm, $chroot_tmp, $local_spool, \%pack_provide, 'binary_test', "[REBUILD] binaries packages generated from $srpm do not install correctly", { maintainer => $maintainer } ,@packages) or return; - } else { - my $successfile = "$local_spool/log/$srpm/binary_test_$srpm-1.log"; - open my $f, ">$successfile"; - print $f "$srpm build ok"; + # try to workarround the rpm -qa db4 error(2) from dbcursor->c_get: + # No such file or directory + # system("sudo chroot $chroot_tmp rm -rf /var/lib/rpm/__db* &> /dev/null"); + # system("$sudo chroot $chroot_tmp rpm --rebuilddb &> /dev/null"); + + perform_command("rpm --root $chroot_tmp -qa | sort", + \%run, $config, $cache, + logname => "rpm_qa", + hash => "rpm_qa_$srpm", + timeout => 60, + debug_mail => $run{debug}, + log => $log_dir); # or next; As this failed quite often, do not stop + plog('NOTIFY', "Building $srpm"); + my $command = "rpmbuild --rebuild $run{with_flags} /home/$luser/rpmbuild/SRPMS/$srpm"; + if ($run{stop}) { + $urpmi->install_packages('chroot', $chroot_tmp, $local_spool, \%pack_provide, 'configure', "[ADMIN] installation of urpmi and sudo failed in the chroot $run{my_arch}", { check => 1, maintainer => $config->{admin} }, 'urpmi', 'sudo'); + add_sudoers($chroot_tmp, $luser); + $command = "rpmbuild -b$run{stop} /home/$luser/rpmbuild/SPECS/$spec"; + } + + my ($srpm_name) = $srpm =~ /(?:.*:)?(.*)-[^-]+-[^-]+\.src\.rpm$/; + my $icecream; + if ($run{icecream}) { + $icecream = "RPM_BUILD_NCPUS=$run{icecream}"; + } + + if (!perform_command(qq(chroot $chroot_tmp /bin/su - $luser -c "TMP=/home/$luser/tmp/ $icecream $command"), + \%run, $config, $cache, + use_iurt_root_command => 1, + mail => $maintainer, + error => "[REBUILD] $srpm from $run{distro_tag} does not build correctly on $run{my_arch}", + logname => "build", + hash => "build_$srpm", + timeout => $config->{build_timeout}{$srpm_name} || $config->{build_timeout}{default}, + stalled_timeout => $config->{build_stalled_timeout}{$srpm_name} || $config->{build_stalled_timeout}{default}, + srpm => $srpm, + debug_mail => $run{debug}, + cc => $cc, + log => $log_dir, + callback => sub { + my ($opt, $output) = @_; + if ($run{stop}) { + plog("dumping to a chrooted shell into $chroot_tmp (pid $$)"); + # exec does not work because it seems stdin and out are shared between children + system($sudo, $config->{iurt_root_command}, '--chroot', $chroot_tmp, '/bin/su', '-', $luser, '-c', "$config->{prompt} bash"); + exit(); + } + plog('DEBUG', "calling callback for $opt->{hash}"); + if ($output =~ m!/bin/ld: cannot find -l(\S*)|configure.*[^W]error.* (?:-l(\S+)|(\S+) includes)!) { + my $missing = $1; + my @rpm = find_provides(\%pack_provide, $missing); + plog(5, "likely @rpm ($missing-devel) needed to rebuilt $srpm is not in build_requires"); + if ($maintainer ne 'NOT_FOUND') { + $opt->{mail} = $maintainer; + #$opt->{mail} .= ", other_maint"; + } + if (!$opt->{mail}) { + $opt->{mail} = "Maintainer not found <$config->{admin}>"; + } + if (@rpm > 1) { + $opt->{error} = "[MISSING_BUILD_REQUIRES_TAG] one of @rpm ($missing-devel), needed to build $srpm, is not in buildrequires"; + } elsif (@rpm == 1) { + $opt->{error} = "[MISSING_BUILD_REQUIRES_TAG] @rpm ($missing-devel), needed to build $srpm, is not in buildrequires"; + } else { + $opt->{error} = "[MISSING_BUILD_REQUIRES_TAG] $missing-devel, needed to build $srpm, is not in buildrequires"; + } + $cache->{buildrequires}{$srpm}{$missing} = \@rpm; + return; + } + 1; + }, + freq => 1)) { + + $cache->{failure}{$srpm} = 1; + $run{status}{$srpm} = 'build_failure'; + # 20060615 + dump_cache_par(\%run); + dump_status($local_spool, \%run); + return; + } + + # do some cleaning if the compilation is successful + delete $cache->{needed}{$srpm} if defined $cache->{needed}{$srpm}; + delete $cache->{buildrequires}{$srpm} if defined $cache->{buildrequires}{$srpm}; + # FIXME It seems the glob is not correctly expanded any more, so listing the directory content to do so + opendir my $binfh, "$chroot_tmp/home/$luser/rpmbuild/RPMS/"; + my @packages; + foreach my $bindir (readdir $binfh) { + -d "$chroot_tmp/home/$luser/rpmbuild/RPMS/$bindir" or return; + opendir my $rpmfh, "$chroot_tmp/home/$luser/rpmbuild/RPMS/$bindir"; + push @packages, map { "$chroot_tmp/home/$luser/rpmbuild/RPMS/$bindir/$_" } grep { !/src\.rpm$/ && /\.rpm$/ } readdir $rpmfh; + } + + # 20060810 warly We should fail here, but rpm is currently + # segfaulting when trying to install packages + + if ($config->{check_binary_file}) { + $urpmi->install_packages($srpm, $chroot_tmp, $local_spool, \%pack_provide, 'binary_test', "[REBUILD] binaries packages generated from $srpm do not install correctly", { maintainer => $maintainer } ,@packages) or return; + } else { + my $successfile = "$local_spool/log/$srpm/binary_test_$srpm-1.log"; + open my $f, ">$successfile"; + print $f "$srpm build ok"; + } + + $run{status}{$srpm} = 'ok'; + delete $cache->{failure}{$srpm} if defined $cache->{failure}{$srpm}; + if ($run{debug}) { + plog("debug mode, skip other packages"); + exit(); + } elsif ($run{group}) { + # we should not move the package until they are all compiled + plog("group mode, keep packages for local media ($srpm is done $done)"); + $run{done}{$srpm} = $done; + $urpmi->add_to_local_media($chroot_tmp, $srpm, $luser); + } else { + # drop packages and logs if we only want failure logs + if ($run{delete_on_success}) { + system("rm -rf $local_spool/log/$srpm/"); + } else { + plog('OK', "build successful, copying packages to $local_spool."); + + system("cp $chroot_tmp/home/$luser/rpmbuild/RPMS/*/*.rpm $local_spool &>/dev/null") and plog('ERROR', "ERROR: could not copy rpm files from $chroot_tmp/home/$luser/rpmbuild/RPMS/ to $local_spool ($!)"); } - $run{status}{$srpm} = 'ok'; - delete $cache->{failure}{$srpm} if defined $cache->{failure}{$srpm}; - if ($run{debug}) { - plog("debug mode, skip other packages"); - exit(); - } elsif ($run{group}) { - # we should not move the package until they are all compiled - plog("group mode, keep packages for local media ($srpm is done $done)"); - $run{done}{$srpm} = $done; - $urpmi->add_to_local_media($chroot_tmp, $srpm, $luser); - } else { - # drop packages and logs if we only want failure logs - if ($run{delete_on_success}) { - system("rm -rf $local_spool/log/$srpm/"); - } else { - plog('OK', "build successful, copying packages to $local_spool."); - - system("cp $chroot_tmp/home/$luser/rpmbuild/RPMS/*/*.rpm $local_spool &>/dev/null") and plog('ERROR', "ERROR: could not copy rpm files from $chroot_tmp/home/$luser/rpmbuild/RPMS/ to $local_spool ($!)"); - } - - if ($run{copy_srpm}) { - # replace the old srpm - unlink "$local_spool/$old_srpm"; - - system("cp $chroot_tmp/home/$luser/rpmbuild/SRPMS/$srpm $local_spool &>/dev/null") and plog('ERROR', "ERROR: could not copy $srpm from $chroot_tmp/home/$luser/rpmbuild/SRPMS/ to $local_spool ($!)"); - } - process_queue($config, \%run, \@wrong_rpm, 1); + if ($run{copy_srpm}) { + # replace the old srpm + unlink "$local_spool/$old_srpm"; + + system("cp $chroot_tmp/home/$luser/rpmbuild/SRPMS/$srpm $local_spool &>/dev/null") and plog('ERROR', "ERROR: could not copy $srpm from $chroot_tmp/home/$luser/rpmbuild/SRPMS/ to $local_spool ($!)"); } - dump_status($local_spool, \%run); - # dump_cache each time so that concurrent process can get updated - dump_cache_par(\%run) if $run{concurrent_run}; + process_queue($config, \%run, \@wrong_rpm, 1); + } + dump_status($local_spool, \%run); + # dump_cache each time so that concurrent process can get updated + dump_cache_par(\%run) if $run{concurrent_run}; return 1; } |