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

Reply via email to