aboutsummaryrefslogtreecommitdiffstats
path: root/BCD/Resign.pm
diff options
context:
space:
mode:
Diffstat (limited to 'BCD/Resign.pm')
-rw-r--r--BCD/Resign.pm63
1 files changed, 63 insertions, 0 deletions
diff --git a/BCD/Resign.pm b/BCD/Resign.pm
new file mode 100644
index 0000000..b6cc001
--- /dev/null
+++ b/BCD/Resign.pm
@@ -0,0 +1,63 @@
+package BCD::Resign;
+
+use strict;
+use Parallel::ForkManager;
+use File::Glob ':glob';
+use File::Basename;
+use Expect;
+
+use BCD::Common qw(:DEFAULT $isoconf $NB_FORK $rpmrc $pwd_file $builddir);
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(resign_media);
+
+my $verbose;
+my $LOG="MEDIA -";
+my $color = "yellow";
+
+my $password;
+if (defined $pwd_file) {
+ -f $pwd_file and $password = `cat $pwd_file`;
+}
+
+sub print_info {
+ map { if (!-f $pwd_file) { print_color("$LOG I cant find $_ file, i cant sign packages...", $color); } } $rpmrc, $pwd_file;
+ print_color("$LOG i will resign using info in those files: $rpmrc $pwd_file", $color);
+}
+
+sub resign_media {
+ print_info();
+ my $pm = new Parallel::ForkManager($NB_FORK);
+ my @list_path; my @checked; my $already_done;
+ foreach my $media (@{$isoconf->{media}{list}}) {
+ foreach (@checked) { $_ or next ; $media->{destmedia} =~ /^$_$/ and $already_done = 1; };
+ $already_done and next;
+ push @checked, $media->{destmedia};
+ push @list_path, $media->{destmedia};
+ print_color("$LOG resigning packages from $media->{destmedia} media", $color);
+ }
+ foreach (@list_path) {
+ my @list_pkg = glob("$builddir/media/$_/*.rpm");
+ my $count = @list_pkg;
+ print_color("$count transactions to do ... be patient !!!!", $color);
+ my $status = "0";
+ foreach my $pkg (@list_pkg) {
+ $pkg or next;
+ my $basename_pkg = basename($pkg);
+ $status++;
+ my $pid = $pm->start and next;
+ print("$basename_pkg ($status/$count)\n");
+ my $command = Expect->spawn("LC_ALL=C rpm --rcfile=$rpmrc --resign $pkg") or die "Couldn't start rpm: $!\n";
+ $command->log_stdout($verbose);
+ $command->expect(20, -re, 'Enter pass phrase:' => sub { print $command $password; });
+ $command->expect(undef);
+ $command->soft_close();
+ $pm->finish;
+ }
+ print_color("Waiting for the end of some signature...", $color);
+ $pm->wait_all_children;
+ print_color("all signature are done...", $color);
+ }
+}
+
+1;