A new version of the mkcd.pl script is available for the last cooker version.
It will be available soon on the website.
Here it is:
#!/usr/bin/perl
use strict;
my ($rep,$iso) = @ARGV;
$iso or usage();
my @cd;
open A, "$rep/Mandrake/base/rpmslist";
my ($num,@a);
my %list;
while(<A>){
/<\/CD>/ and $num = 0;
/<CD num=(\d+)>/ and do { $num = $1; push @cd, $num};
# s/\+/\\\+/g;
/(?:<.*>)*([^<]*)\n/;
$1 and do {
@a = split ' ', $1;
@list{@a} = map $num,@a;
}
}
my $depslist = "$rep/Mandrake/base/depslist.ordered";
my $hdlist = "$rep/Mandrake/base/hdlist.cz2";
my $dir = "$rep/Mandrake/RPMS";
$ENV{PATH} = "$ENV{PATH}:$rep/misc";
my $tmpdir = $ENV{TMPDIR} || "/tmp";
my $work_dir = "$tmpdir/.build_hdlist";
-e $work_dir && !-d $work_dir and unlink($work_dir) || die "cannot use $work_dir as a
working directory";
chmod 0755, $work_dir or system("rm -rf $work_dir");
-d $work_dir or mkdir $work_dir, 0755 or die "cannot create working directory
$work_dir\n";
chdir $work_dir;
# build the hdlists
my (@list, %keys, @keys);
opendir DIR, $dir or die "unable to opendir $dir: $!\n";
while ($_ = readdir DIR) {
my ($key, $arch) = /(.*)\.(.*)\.rpm$/ or next;
system("$rep/misc/rpm2header $dir/$_ > $_") unless -e $_;
$? == 0 or unlink($_), die "bad rpm $dir/$_\n";
-s $_ or unlink($_), die "bad rpm $dir/$_\n";
my ($name, $tail) = $key =~ /(.*)(-[^-]*-[^-]*)/;
my $n = $list{$name};
push @{$list[$n]}, $_;
if ($keys{$n}{$key}) {
$keys{$n}{"$name($keys{$key})$tail"} = $keys{$n}{$key}; unlink
"$name($keys{$n}{$key})$tail"; link "$key.$keys{$n}{$key}.rpm",
"$name($keys{$n}{$key})$tail";
$keys{$n}{"$name($arch)$tail"} = $arch; unlink "$name($arch)$tail"; link $_,
"$name($arch)$tail";
delete $keys{$n}{$key};
} else {
$keys{$n}{$key} = $arch; unlink $key; link $_, $key;
}
}
my @dkeys;
if (-e "$rep/Mandrake/base/depslist.ordered") {
open F, $depslist;
@dkeys = map { (split)[0] } <F>;
}
open C, ">$work_dir/hdlists";
my $cmddep = "$rep/misc/genbasefiles $work_dir/";
foreach my $n (@cd){
my @keys = grep { delete $keys{$n}{$_} } @dkeys;
open B, "| $rep/misc/packdrake -b9s $work_dir/hdlist$n.cz 400000";
foreach (@keys, keys %{$keys{$n}}) { print B "$_\n" }
close B or die "packdrake failed\n";
print C "hdlist$n.cz Mandrake/RPMS$n CD $n Cooker\n";
$cmddep .= " $work_dir/hdlist$n.cz"
}
close C;
system $cmddep;
my $mkiso = qq{mkisofs -r -J -graft-points -nobak -V "Cooker_CD_1" -b images/cdrom.img
-c images/boot.cat -o "$iso/1-Cooker-i586.iso" \\
images/=$rep/images \\
COPYING=$rep/COPYING \\
LICENSE-APPS.txt=$rep/LICENSE-APPS.txt \\
RPM-GPG-KEYS=$rep/RPM-GPG-KEYS \\
autorun.inf=$rep/autorun.inf \\
doc/=$rep/doc \\
install.htm=$rep/install.htm \\
lnx4win/=$rep/lnx4win \\
tutorial/=$rep/tutorial \\
INSTALL.txt=$rep/INSTALL.txt \\
LICENSE.txt=$rep/LICENSE.txt \\
README.txt=$rep/README.txt \\
VERSION=$rep/VERSION \\
boot/=$rep/boot \\
dosutils/=$rep/dosutils \\
index.htm=$rep/index.htm \\
live_update=$rep/live_update \\
misc/=$rep/misc \\
Mandrake/mdkinst/=$rep/Mandrake/mdkinst \\
Mandrake/base/=$rep/Mandrake/base/compssUsers \\
Mandrake/base/=$rep/Mandrake/base/mdkinst_stage2.bz2 \\
Mandrake/base/=$rep/Mandrake/base/rescue_stage2.bz2 \\
Mandrake/base/=$rep/Mandrake/base/rpmslist \\
Mandrake/base/=$rep/Mandrake/base/rpmsrate \\
Mandrake/base/=$work_dir/compss \\
Mandrake/base/=$work_dir/depslist.ordered \\
Mandrake/base/=$work_dir/provides \\
Mandrake/base/=$work_dir/hdlists};
foreach (@cd) {
$mkiso .= "\\\n Mandrake/base/=$work_dir/hdlist$_.cz"
}
foreach (@{$list[1]}){
$mkiso .= "\\\n Mandrake/RPMS1/=$rep/Mandrake/RPMS/$_"
}
#print "$mkiso\n";
#exit;
system $mkiso;
foreach my $n (@cd){
$n == 1 and next;
$mkiso = qq{mkisofs -r -J -graft-points -nobak -V "Cooker_CD_$n" -o
"$iso/$n-Cooker-i586.iso"};
foreach (@{$list[$n]}){
$mkiso .= "\\\n Mandrake/RPMS$n/=$rep/Mandrake/RPMS/$_"
}
# print "$mkiso\n";
system $mkiso;
}
# system("rm -rf $work_dir");
exit;
sub usage{
print "usage:
$0 <repository dir> <iso creation dir>\n";
exit
}
--
Warly