Spencer <[EMAIL PROTECTED]> writes:
> Everything is in root
in /root, and you are doing it as root, hum, could you
test the last version and say what happens ?
#!/usr/bin/perl
#
#
#
my $version = "0.1.7";
use strict;
# use rpmtools;
my ($rep,$iso) = @ARGV;
$iso or usage();
$::rep = $rep;
$ENV{PATH} = "$rep/misc;$ENV{PATH}";
require "$rep/misc/rpmtools.pm";
my $pwd = `pwd`;
chop $pwd;
$iso =~ s/^([^\/])/$pwd\/$1/;
# $iso =~ s/^\.\./$pwd\/\../;
my $tmpdir = $ENV{TMPDIR} || "/tmp";
-d $tmpdir or die "$tmpdir does not exist\n";
my $work_dir = "$tmpdir/.build_hdlist";
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 @rpms;
my %name;
my $dir = "$rep/Mandrake/RPMS";
opendir DIR, $dir or die "unable to opendir $dir: !$\n";
foreach (readdir DIR) {
my ($key, $name) = /(([^\/]*)-[^-]*-[^-]*\.[^\/\.]*)\.rpm$/ or next;
$name{$name} and next;
my $n = $list{$name};
push @{$rpms[$n]}, "$rep/Mandrake/RPMS/$_";
$name{$name} = 1;
}
#my @list;
#my $dir = "$rep/Mandrake/RPMS";
#opendir DIR, $dir or die "unable to opendir $dir: !$\n";
#foreach (readdir DIR) {
# my ($key, $name) = /(([^\/]*)-[^-]*-[^-]*\.[^\/\.]*)\.rpm$/ or next;
# system("rpm2header '$dir/$_' > '$work_dir/$key'") unless -e "$work_dir/$key";
# $? == 0 or unlink("$work_dir/$key"), die "bad rpm $_\n";
# -s "$work_dir/$key" or unlink("$work_dir/$key"), die "bad rpm $_\n";
# my $n = $list{$name};
# push @{$rpms[$n]}, $_;
# push @{$list[$n]{$name} ||= []}, $key;
#}
#
#open C, ">$work_dir/hdlists";
#my @hdlist;
#foreach my $n (@cd){
# print C "hdlist$n.cz Mandrake/RPMS$n CD $n Cooker\n";
# my $hdlist = "$work_dir/hdlist$n.cz";
# push @hdlist, $hdlist;
# open B, "| packdrake -b9ds '$hdlist' '$work_dir' 400000";
# foreach (values %{$list[$n]}) {
# print B "$_\n" foreach @$_;
# }
# close B or die "packdrake failed\n";
#}
#close C;
open C, ">$work_dir/hdlists" or die "Could not open $work_dir/hdlists for writing: $!";
my $params = new rpmtools();
my @hdlist;
foreach my $n (@cd){
print C "hdlist$n.cz Mandrake/RPMS$n CD $n Cooker\n";
my $hdlist = "$work_dir/hdlist$n.cz";
$hdlist[$n] = $hdlist;
$params->build_hdlist(1,$work_dir,"$work_dir/hdlist$n.cz",@{$rpms[$n]})
}
close C;
foreach my $n (@cd){
$params->read_hdlists($hdlist[$n]);
$params->compute_depslist();
}
my @unresolved = $params->get_unresolved_provides_files();
if (@unresolved > 0) {
$params->clean();
foreach my $n (@cd){
$params->read_hdlists($hdlist[$n]);
}
$params->keep_only_cleaned_provides_files();
foreach my $n (@cd){
$params->read_hdlists($hdlist[$n]);
$params->compute_depslist();
}
}
print "writing $work_dir/depslits.ordered\n";
open F, ">$work_dir/depslist.ordered" or die "unable to write depslist file
$work_dir/depslist.ordered\n";
$params->write_depslist(\*F);
close F;
print "writing $work_dir/provides\n";
open F, ">$work_dir/provides" or die "unable to write provides file
$work_dir/provides\n";
$params->write_provides(\*F);
close F;
print "writing $work_dir/compss\n";
open F, ">$work_dir/compss" or die "unable to write compss file $work_dir/compss";
$params->write_compss(\*F);
close F;
foreach my $n (@cd){
$params->build_hdlist(1,$work_dir,"$work_dir/hdlist$n.cz",@{$rpms[$n]})
}
#foreach my $n (@cd){
# open B, "| packdrake -b9ds '$work_dir/hdlist$n.cz' '$work_dir' 400000";
# foreach (@{$params->{depslist}}) {
# if (my $keys = delete $list[$n]{$_->{name}}) {
# print B "$_\n" foreach @$keys;
# }
# }
# foreach (values %{$list[$n]}) {
# print B "$_\n" foreach @$_;
# }
# close B or die "packdrake failed\n";
#}
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 (@{$rpms[1]}){
$mkiso .= "\\\n Mandrake/RPMS1/=$_"
}
#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 (@{$rpms[$n]}){
$mkiso .= "\\\n Mandrake/RPMS$n/=$_"
}
# print "$mkiso\n";
system $mkiso;
}
# system("rm -rf $work_dir");
foreach (@{$rpms[0]}){
print "WARNING: $_ not in lists\n"
}
exit;
sub usage{
print "mkcd.pl version $version
usage:
$0 <repository dir> <iso creation dir>\n";
exit
}
--
Warly