aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--BCD/Common.pm43
-rw-r--r--BCD/Media.pm170
2 files changed, 69 insertions, 144 deletions
diff --git a/BCD/Common.pm b/BCD/Common.pm
index ac91081..9804eed 100644
--- a/BCD/Common.pm
+++ b/BCD/Common.pm
@@ -7,21 +7,21 @@ use MDK::Common;
use Term::ANSIColor;
use File::Copy::Recursive qw(dircopy pathrm);
use File::Glob ':glob';
-use File::basename
use BCD::Bcd qw(:DEFAULT);
our @ISA = qw(Exporter);
-our @EXPORT = qw(create_needed_dir check_dir clean_all print_color);
+our @EXPORT = qw(create_needed_dir check_dir clean_all print_color check_based_on);
# export all needed var
-our @EXPORT_OK = qw($isoconf $wd $name $arch $file $based_on $version $repo $isodir $builddir $distrib_path $error_color $DISTRIB $THEME $tmp_rpmsrate $NB_FORK $dir_deps @list_of_removed $rpmrc $pwd_file $conf_file $date $urpmqlogs $support);
+our @EXPORT_OK = qw($isoconf $wd $name $arch $file $based_on $version $repo $isodir $builddir $distrib_path $error_color $DISTRIB $THEME $tmp_rpmsrate $NB_FORK $dir_deps @list_of_removed $rpmrc $pwd_file $conf_file $date $urpmqlogs $rpmcheck_list_pkg $file_rpmcheck_log $smartcheck_list_pkg $smartcheck_dir $file_smartcheck_log $chroot_path $support);
my $LOG="COMMON -";
my $color = "red";
+
our @list_of_removed;
-my ($sec,$min,$hour,$mday,$mon,$year,undef,undef,undef)= localtime(time);
+my ($sec, $min, $hour, $mday, $mon, $year, undef, undef, undef) = localtime(time());
$year = $year + 1900; $mon = $mon + 1;
our $date = $year . '_' . $mon . '_' . $mday . '-' . $hour . 'h' . $min . '-' . $sec;
@@ -38,11 +38,11 @@ if (!$ARGV[0]) {
}
our $conf_file = $ARGV[0];
-our $isoconf = undef;
+our $isoconf;
if ($conf_file =~ /\.xml$/i) {
$isoconf = XMLin($conf_file, keyattr => ['']);
-} elsif ($file =~ /\.yaml$/i) {
+} elsif ($conf_file =~ /\.yaml$/i) {
$isoconf = YAML::LoadFile($conf_file);
} else {
print_color("You must provide an XML or YAML config file", $color) and exit 1;
@@ -57,7 +57,6 @@ our $arch = $isoconf->{arch};
our $version = $isoconf->{mediainfo}{version};
our $repo = $isoconf->{repo}{path};
our $based_on = $isoconf->{based_on};
-our $support = $isoconf->{support};
$DISTRIB or print_color("You must define the <theme><name> tag",$color) and exit 1;
$THEME or print_color("You must define the <theme><theme> tag",$color) and exit 1;
@@ -71,6 +70,22 @@ $based_on or print_color("You must define the <based_on> tag",$color) and exit 1
$isoconf->{chroot_media} or print_color("Now you must define <chroot_media> in the conf.xml file",$color) and exit 1;
$isoconf->{chroot_media_exclude} or print_color("Now you must define <chroot_media_exclude> in the conf.xml file",$color) and exit 1;
+our $chroot_path = "/tmp/$isoconf->{nameid}-$version-$isoconf->{arch}";
+
+our $rpmcheck_list_pkg = "/tmp/rpmcheck_list_pkg_to_add_$isoconf->{nameid}-$version-$isoconf->{arch}";
+our $file_rpmcheck_log = "/tmp/rpmcheck_failure_$isoconf->{nameid}-$version-$isoconf->{arch}";
+our $smartcheck_list_pkg = "/tmp/smartcheck_list_pkg_to_add_$isoconf->{nameid}-$version-$isoconf->{arch}";
+our $file_smartcheck_log = "/tmp/smartcheck_failure_$isoconf->{nameid}-$version-$isoconf->{arch}";
+our $smartcheck_dir = "/tmp/smartcheck_dir_$isoconf->{nameid}-$version-$isoconf->{arch}";
+
+if (!defined($isoconf->{media}{first_media})) {
+ print_color("$LOG Please in the media list inform about the first_media name (<first_media>Main</first_media>)", $color);
+ whereisthedoc;
+}
+if (!defined($isoconf->{media}{update_prefix})) {
+ print_color("$LOG Please in the media list inform about the prefix use to define a media as an update, ie: 'Updates' (<update_prefix>Updates</update_prefix>)", $color);
+ whereisthedoc;
+}
# password file
#"/home/plop/.signature.gpg";
@@ -117,6 +132,20 @@ sub check_dir {
create_needed_dir("/tmp/$isoconf->{nameid}-$version-$isoconf->{arch}");
}
+sub check_based_on {
+ if ($isoconf->{based_on} eq "1" || $isoconf->{based_on} =~ "gauldron") {
+ # dedicated line for MGA
+ print_color("Mageia distribution", $color);
+ return 1;
+ } elsif ($isoconf->{based_on} gt "2009.1" || $isoconf->{based_on} ne "mes5") {
+ print_color("distribution > 2009.1 or not a MES5", $color);
+ return 1;
+ } else {
+ print_color("distribution < 2009.1 or MES5", $color);
+ return 0;
+ }
+}
+
sub clean_all {
my @l = glob("/tmp/$isoconf->{nameid}-$version-$isoconf->{arch}/$distrib_path/*");
foreach (@l) {
diff --git a/BCD/Media.pm b/BCD/Media.pm
index 4b0a951..b1b3937 100644
--- a/BCD/Media.pm
+++ b/BCD/Media.pm
@@ -5,17 +5,16 @@ use strict;
use URPM;
use File::Copy;
use File::stat;
-use Data::Dumper;
use MDK::Common;
use File::Glob ':glob';
use Parallel::ForkManager;
use Data::Dumper;
-use BCD::Common qw(:DEFAULT $isoconf $wd $name $arch $version $based_on $repo $builddir $distrib_path $error_color $DISTRIB $THEME $tmp_rpmsrate $NB_FORK $dir_deps @list_of_removed);
+use BCD::Common qw(:DEFAULT $isoconf $wd $name $arch $version $based_on $repo $builddir $distrib_path $error_color $DISTRIB $THEME $tmp_rpmsrate $NB_FORK $dir_deps @list_of_removed $chroot_path);
our @ISA = qw(Exporter);
-our @EXPORT = qw(main_media list_media use_gendistrib list_medias_available check_repo_hdlist rpmcheck_launch solve_doble_issue clean_urpmq_log get_srpms_list find_all_kernel, create_mediacfg parse_synthesis smartcheck_launch);
-our @EXPORT_OK = qw($rpmcheck_list_pkg $file_rpmcheck_log $smartcheck_list_pkg $smartcheck_dir);
+our @EXPORT = qw(main_media list_media use_gendistrib list_medias_available solve_doble_issue clean_urpmq_log get_srpms_list find_all_kernel create_mediacfg parse_synthesis drop_media do_fork);
+use BCD::CheckMedia;
my $verbose;
my $LOG="MEDIA -";
@@ -32,13 +31,6 @@ if (defined($isoconf->{mediainfo}{fullpath})) {
$mediainfo_sourcedir = "$repo/$based_on/$arch/$isoconf->{mediainfo}{mediainfo_dir}";
}
-my $chroot_path = "/tmp/$isoconf->{nameid}-$version-$isoconf->{arch}";
-our $rpmcheck_list_pkg = "/tmp/rpmcheck_list_pkg_to_add_$isoconf->{nameid}-$version-$isoconf->{arch}";
-our $file_rpmcheck_log = "/tmp/rpmcheck_failure_$isoconf->{nameid}-$version-$isoconf->{arch}";
-our $smartcheck_list_pkg = "/tmp/smartcheck_list_pkg_to_add_$isoconf->{nameid}-$version-$isoconf->{arch}";
-our $file_smartcheck_log = "/tmp/smartcheck_failure_$isoconf->{nameid}-$version-$isoconf->{arch}";
-our $smartcheck_dir = "/tmp/smartcheck_dir_$isoconf->{nameid}-$version-$isoconf->{arch}";
-
sub create_media {
print_color("$LOG Create the media dir in $builddir", $color);
foreach my $media (@{$isoconf->{media}{list}}) {
@@ -52,6 +44,7 @@ sub show_size {
}
sub list_media {
+ check_based_on;
print_color("$LOG all media are listed there:", $color);
foreach my $media (@{$isoconf->{media}{list}}) {
$media->{name} or next;
@@ -103,12 +96,12 @@ sub use_gendistrib {
print_color("$LOG gendistrib --mediacfg $builddir/$isoconf->{iso}{mediacfg} $builddir", $color);
my $cmd = "gendistrib --mediacfg $builddir/$isoconf->{iso}{mediacfg} $builddir";
system($cmd) == 0 or die "$LOG system $cmd failed: $?\n";
- if ($isoconf->{based_on} lt "2009.1" || $isoconf->{based_on} eq "mes5") {
+ if (check_based_on eq "0") {
foreach my $media (@{$isoconf->{media}{list}}) {
$media->{name} or next;
if ($destmedia eq $media->{destmedia}) { next }
$destmedia = $media->{destmedia};
- print_color("$LOG < 2009.1 or mes5 detected", $color);
+ print_color("$LOG < 2009.1 or mes5 detected or not Mageia", $color);
print_color("$LOG move hdlists and synthesys from $builddir/media/$destmedia/media_info to $builddir/media/media_info/", $color);
system("rm -vf $builddir/media/media_info/*_$media->{name}.cz");
# system("rm -vf $builddir/media/media_info/*_main.cz");
@@ -136,8 +129,7 @@ sub create_mediacfg {
print $MEDIACFG "\n";
print $MEDIACFG "[media_info]\n";
print $MEDIACFG "version=$version\n";
- if ($isoconf->{based_on} gt "2009.1" && $isoconf->{based_on} ne "mes5") {
- print_color("$LOG > 2009.1 or not a mes5 product", $color);
+ if (check_based_on eq "1") {
print $MEDIACFG "mediacfg_version=2\n";
}
print $MEDIACFG "branch=$isoconf->{iso}{branch}\n";
@@ -158,15 +150,14 @@ sub create_mediacfg {
$media->{name} or next;
if ($destmedia eq $media->{destmedia}) { next }
$destmedia = $media->{destmedia};
- if ($isoconf->{based_on} =~ "mes5" || $isoconf->{based_on} lt "2009.1") {
- print_color("$LOG < 2009.1 or mes5 detected", $color);
+ if (check_based_on eq "0") {
print $MEDIACFG "
[$media->{destmedia}]
hdlist=hdlist_$media->{name}.cz
pubkey=pubkey_$media->{name}
-name=$isoconf->{iso}{header}{volumesetid}
-desc=$isoconf->{iso}{header}{volumesetid}
+name=$media->{name}
+desc=$media->{desc}
\n";
} else {
print $MEDIACFG "
@@ -197,6 +188,7 @@ sub parse_synthesis {
# based on a similar functions in pkgs.pm
sub get_list_from_CAT {
+ #4 META_CLASS"desktop" mandriva-xfce-config-One
my ($file, $cat, $poids) = @_;
my (%rates, @need_to_copy);
my (@l);
@@ -257,7 +249,8 @@ sub mini_chroot {
# install all those file to be able to use urpmi.XXXXXX
system("LC_ALL=C $cmd --prefer $DISTRIB,$THEME urpmi rootfiles rpm-helper mageia-release-common");
system("sudo chroot $chroot_path mkdir -p $distrib_path");
- system("sudo mount -o bind $repo/$based_on/$arch $chroot_path/$distrib_path -o ro");
+ system("sudo mount -o bind $repo/$based_on/$arch $chroot_path/$distrib_path");
+ system("sudo mount -o remount,ro $chroot_path/$distrib_path");
push @to_umount, $distrib_path;
print_color("$LOG Add a profile info", $color);
my $INFOFILE = "$chroot_path/etc/profile.d/99info.sh";
@@ -368,40 +361,6 @@ sub generate_list_of_rpm_2_copy {
}
}
-sub rpmcheck_list {
- my @toget = cat_($rpmcheck_list_pkg);
- my $todo = @toget;
- if ($todo ne "0") {
- print_color("$LOG calculate deps from the auto-generated rpmcheck list file", $error_color);
- my $list_filename = "$isoconf->{tocopy_file}_todo_rpmcheck";
- my $list = "$chroot_path/urpmq/$list_filename";
- my $urpmq_options = "--requires-recursive -c --sources $isoconf->{mediainfo}{urpmi_option}";
- my $pkgs;
- foreach (@toget) { $_ or next ; chomp($_); $pkgs = "$_ " . $pkgs; }
- my $cmd_do_it = "LC_ALL=C sudo -P chroot $chroot_path urpmq --prefer $DISTRIB,$THEME $urpmq_options --no-suggests";
- do_fork($pkgs, $list_filename, $list, $cmd_do_it);
- } else {
- print_color("$LOG No rpmcheck error", $error_color);
- }
-}
-
-sub smartcheck_list {
- my @toget = cat_($smartcheck_list_pkg);
- my $todo = @toget;
- if ($todo ne "0") {
- print_color("$LOG calculate deps from the auto-generated smart list file", $error_color);
- my $list_filename = "$isoconf->{tocopy_file}_todo_smartcheck";
- my $list = "$chroot_path/urpmq/$list_filename";
- my $urpmq_options = "--requires-recursive -c --sources $isoconf->{mediainfo}{urpmi_option}";
- my $pkgs;
- foreach (@toget) { $_ or next ; chomp($_); $pkgs = "$_ " . $pkgs; }
- my $cmd_do_it = "LC_ALL=C sudo -P chroot $chroot_path urpmq --prefer $DISTRIB,$THEME $urpmq_options --no-suggests";
- do_fork($pkgs, $list_filename, $list, $cmd_do_it);
- } else {
- print_color("$LOG No smart check error", $error_color);
- }
-}
-
sub remove_notpresent {
my ($urpmi_error, $wanted) = @_;
my @toremove;
@@ -877,72 +836,9 @@ sub use_genhdlist2 {
system("cd $builddir/media/media_info/ && md5sum *.cz > MD5SUM");
}
-sub rpmcheck_launch {
- my $options = "-explain -failures";
- my $destmedia = "0";
- print_color("$LOG launch rpmcheck to check hdlists", $color);
- foreach my $media (@{$isoconf->{media}{list}}) {
- $media->{name} or next;
- $media->{drop} =~ /yes/ and drop_media("$media->{name}-release");
- if ($destmedia eq $media->{destmedia}) { next }
- $destmedia = $media->{destmedia};
- system("cp $builddir/media/$destmedia/media_info/hdlist.cz $builddir/media/media_info/hdlist_$media->{name}.cz");
- }
- my $cmd = "zcat $builddir/media/media_info/hdlist*.cz | rpmcheck $options";
- print_color("$LOG $cmd", $color);
- system("$cmd 2> /dev/null > $file_rpmcheck_log") == 0 or die "$LOG system $cmd failed: $?\n";
- open my $LIST_FAILURE, ">$rpmcheck_list_pkg.tmp";
- my @list_failure = cat_($file_rpmcheck_log);
- foreach my $package (@list_failure) {
- print "$package";
- my ($package2) = $package =~ /^\s+(\S*)\s.*/;
- $package2 and print $LIST_FAILURE "$package2\n";
- }
- close $LIST_FAILURE;
- system("cat $rpmcheck_list_pkg.tmp | sort | uniq > $rpmcheck_list_pkg");
- print_color("$LOG check this file $file_rpmcheck_log", $color);
- print_color("$LOG check this file $rpmcheck_list_pkg", $color);
-}
-
-sub smartcheck_launch {
- my $options = "-o sync-urpmi-medialist=no --data-dir $smartcheck_dir";
- system("rm -rf $smartcheck_dir $smartcheck_list_pkg");
- my $destmedia = "0";
- my $MEDIAS; my $MEDIASWITHCOMMA;
- print_color("$LOG launch smart to check synthesys", $color);
- foreach my $media (@{$isoconf->{media}{list}}) {
- $media->{name} or next;
- $media->{drop} =~ /yes/ and drop_media("$media->{name}-release");
- if ($destmedia eq $media->{destmedia}) { next }
- $destmedia = $media->{destmedia};
- $MEDIAS = $MEDIAS . " " . $media->{name};
- $MEDIASWITHCOMMA = $media->{name} . "," . $MEDIASWITHCOMMA;
- my $cmd = "smart channel --yes $options --add $media->{name} type=urpmi baseurl=$builddir/media/$media->{destmedia}/ hdlurl=media_info/synthesis.hdlist.cz";
- system($cmd);
- }
- system("smart update $options $MEDIAS");
- chop($MEDIASWITHCOMMA);
- my $cmd = "smart check $options --channels=$MEDIASWITHCOMMA 2>&1 | egrep -v '(Loading cache|Updating cache)' | awk -F 'requires' '{print \$2}' | sort | uniq >> $smartcheck_list_pkg";
- system ("du $smartcheck_list_pkg");
- print_color("$LOG $cmd", $color);
- system("$cmd > $file_smartcheck_log") == 0 or die "$LOG system $cmd failed: $?\n";
- open my $LIST_FAILURE, ">$smartcheck_list_pkg.tmp";
- my @list_failure = cat_($file_smartcheck_log);
- foreach my $package (@list_failure) {
- print "$package";
- my ($package2) = $package =~ /^\s+(\S*)\s.*/;
- $package2 and print $LIST_FAILURE "$package2\n";
- }
- close $LIST_FAILURE;
- system("cat $smartcheck_list_pkg.tmp | sort | uniq > $smartcheck_list_pkg");
- print_color("$LOG check this file $file_smartcheck_log", $color);
- print_color("$LOG check this file $smartcheck_list_pkg", $color);
-}
-
-
sub remove_hdlist {
my $destmedia;
- if ($isoconf->{based_on} gt "2009.1" or $isoconf->{based_on} != "mes5") {
+ if (check_based_on eq "1") {
print_color("$LOG remove hdlists*.cz from $builddir/media/media_info", $color);
system("rm -vf $builddir/media/media_info/hdlist*.cz");
foreach my $media (@{$isoconf->{media}{list}}) {
@@ -964,8 +860,13 @@ sub copy_all_pubkey {
copy_pubkey($media->{file_pubkey}, "$media->{destmedia}");
} else {
# media/ dir will be added in the copy_pubkey functions
- print_color("$LOG $repo/$based_on/$arch/media/$media->{mediadir}/$media->{pubkey}, $media->{destmedia}", $color);
- copy_pubkey("$repo/$based_on/$arch/media/$media->{mediadir}/$media->{pubkey}", "$media->{destmedia}");
+ if ($media->{external}{fullpath_mediadir}) {
+ print_color("$LOG $media->{external}{fullpath_mediadir}/$media->{pubkey}, $media->{destmedia}", $color);
+ copy_pubkey("$media->{external}{fullpath_mediadir}/$media->{pubkey}", "$media->{destmedia}");
+ } else {
+ print_color("$LOG $repo/$based_on/$arch/media/$media->{mediadir}/$media->{pubkey}, $media->{destmedia}", $color);
+ copy_pubkey("$repo/$based_on/$arch/media/$media->{mediadir}/$media->{pubkey}", "$media->{destmedia}");
+ }
}
next;
}
@@ -982,12 +883,6 @@ sub list_medias_available {
}
}
-sub check_repo_hdlist {
- my $options = "-explain -failures";
- print_color("$LOG check media repositery hdlists in $repo/$version/$arch", $color);
- system("zcat $repo/$version/$arch/media/media_info/hdlist*ain.cz | rpmcheck $options");
-}
-
sub umount_all_mountloop {
print "$LOG umount all mounted loop dir\n";
foreach (@to_umount) {
@@ -1178,14 +1073,14 @@ sub process_list_link {
my ($option) = @_;
concatenate_files;
# link or copy
- if ($option =~ /copy/) {
+ if ($option =~ /\scopy/) {
parse_copy_link("copy");
} else {
parse_copy_link("link");
}
# remove packages listed in exclude list
remove_all_excluded;
- if ($option =~ /nodoble/) { print_color("$LOG skipping doble\n", $color); } else { solve_doble_issue; }
+ if ($option =~ /\snodoble/) { print_color("$LOG skipping doble\n", $color); } else { solve_doble_issue; }
find_all_kernel;
copy_filedeps;
copy_rpmsrate;
@@ -1196,7 +1091,7 @@ sub process_list_link {
sub clean_urpmq_log {
my ($option) = @_;
- if ($option =~ /clean/) {
+ if ($option =~ /\sclean/) {
print_color("$LOG i will remove all previous urpmq log", $color);
system("rm -rf $dir_deps");
}
@@ -1204,7 +1099,7 @@ sub clean_urpmq_log {
sub main_media {
my ($option) = @_;
- if ($option =~ /verbose/) { $verbose = "1"; }
+ if ($option =~ /\sverbose/) { $verbose = "1"; }
list_media;
create_media;
create_mediacfg;
@@ -1217,15 +1112,16 @@ sub main_media {
generate_list_of_rpm_2_copy;
process_list_link($option);
# target_size;
- # first rpmcheck launch
- rpmcheck_launch;
- rpmcheck_list;
-# smartcheck_launch;
-# smartcheck_list;
+ # first check launch
+ check_launch;
+# smartcheck_launch;
+# smartcheck_list;
+# rpmcheck_launch;
+# rpmcheck_list;
process_list_link($option);
# second launch of rpmcheck/smartcheck (should have fix a lot of missing deps)
- rpmcheck_launch;
-# smartcheck_launch;
+# rpmcheck_launch;
+ check_launch;
umount_all_mountloop;
#remove_hdlist;
show_size;