Changeset 1177


Ignore:
Timestamp:
02/07/11 14:24:17 (2 years ago)
Author:
bruno
Message:

r4161@eelzbach2: bruno | 2011-02-06 21:07:30 +0100

  • Introduction of a new hash $pbos to manage all os related info through a single data structure. All functions reviewed accordingly. Externally transparent, hopefully, but much cleaner code as a consequence. VM/VE/RM remains to be tested.
Location:
devel
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • devel/pb-modules/bin/pbdistrocheck

    r1156 r1177  
    118118 
    119119my $dist = shift @ARGV || undef ; 
    120 my @param = undef; 
    121 @param = split(/-/,$dist) if (defined $dist); 
    122  
    123 my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init(@param); 
     120my $pbos = pb_distro_get_context($dist); 
    124121my $sep = "\n"; 
    125122if (defined $opts{'l'}) { 
     
    137134    $sep = "," if (defined $opts{'s'}); 
    138135    if (not defined $opts{'s'}) { 
    139         $dos = "OS:\t$dos"; 
    140         $ddir = "Name:\t$ddir"; 
    141         $dver = "Ver:\t$dver"; 
    142         $dfam = "Family:\t$dfam"; 
    143         $dtype = "Type:\t$dtype"; 
    144         $pbsuf = "Suffix:\t$pbsuf"; 
    145         $pbupd = "Update:\t$pbupd"; 
    146         $pbins = "Install:\t$pbins"; 
    147         $arch = "Arch:\t$arch"; 
     136        $pbos->{'os'} = "OS:\t$pbos->{'os'}"; 
     137        $pbos->{'name'} = "Name:\t$pbos->{'name'}"; 
     138        $pbos->{'version'} = "Ver:\t$pbos->{'version'}"; 
     139        $pbos->{'family'} = "Family:\t$pbos->{'family'}"; 
     140        $pbos->{'type'} = "Type:\t$pbos->{'type'}"; 
     141        $pbos->{'suffix'} = "Suffix:\t$pbos->{'suffix'}"; 
     142        $pbos->{'update'} = "Update:\t$pbos->{'update'}"; 
     143        $pbos->{'install'} = "Install:\t$pbos->{'install'}"; 
     144        $pbos->{'arch'} = "Arch:\t$pbos->{'arch'}"; 
    148145        print "Project-Builder tuple:\n"; 
    149146    } 
    150     print join($sep,($dos, $ddir, $dver, $arch, $dtype, $dfam, $pbsuf, $pbupd, $pbins))."\n"; 
     147    print join($sep,($pbos->{'os'}, $pbos->{'name'}, $pbos->{'version'}, $pbos->{'arch'}, $pbos->{'type'}, $pbos->{'family'}, $pbos->{'suffix'}, $pbos->{'update'}, $pbos->{'install'}))."\n"; 
    151148} 
  • devel/pb-modules/etc/pb.conf

    r1176 r1177  
    146146# Ganularity is the following: 
    147147# 
    148 #osname 
    149 # ostype 
    150 #   osfamily 
    151 #     os 
    152 #       os-ver 
    153 #         os-ver-arch 
     148#os (linux) 
     149# ostype (rpm) 
     150#   osfamily (md) 
     151#     osname (mandriva) 
     152#       osname-ver 
     153#         osname-ver-arch 
    154154 
    155155# Group OS by family to handle common actions more easily (filtering, install command, ...) 
     
    176176 
    177177# Group family by build types 
    178 # Key is osfamily, Value is build type 
     178# Key is osfamily, Value is ostype 
    179179ostype du = deb 
    180180ostype slack = tgz 
  • devel/pb-modules/lib/ProjectBuilder/Distribution.pm

    r1167 r1177  
    2626  
    2727our @ISA = qw(Exporter); 
    28 our @EXPORT = qw(pb_distro_conffile pb_distro_init pb_distro_get pb_distro_getlsb pb_distro_installdeps pb_distro_getdeps pb_distro_only_deps_needed pb_distro_setuprepo pb_distro_setuposrepo pb_distro_get_param); 
     28our @EXPORT = qw(pb_distro_conffile pb_distro_get pb_distro_getlsb pb_distro_installdeps pb_distro_getdeps pb_distro_only_deps_needed pb_distro_setuprepo pb_distro_setuposrepo pb_distro_get_param pb_distro_get_context); 
    2929($VERSION,$REVISION) = pb_version_init(); 
    3030 
     
    4646  # Return information on the running distro 
    4747  # 
    48   my ($ddir, $dver, $dfam, $dtype, $pbsuf, $dos, $pbupd, $pbins, $arch) = pb_distro_init(); 
    49   print "distro tuple: ".Dumper($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $arch)."\n"; 
     48  my $pbos = pb_distro_get_context(); 
     49  print "distro tuple: ".Dumper($pbos->name, $pbos->ver, $pbos->fam, $pbos->type, $pbos->pbsuf, $pbos->pbupd, $pbos->pbins, $pbos->arch)."\n"; 
    5050  #  
    5151  # Return information on the requested distro 
    5252  # 
    53   my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init("ubuntu","7.10","x86_64"); 
    54   print "distro tuple: ".Dumper($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $arch)."\n"; 
     53  my $pbos = pb_distro_get_context("ubuntu-7.10-x86_64"); 
     54  print "distro tuple: ".Dumper($pbos->name, $pbos->ver, $pbos->fam, $pbos->type, $pbos->pbsuf, $pbos->pbupd, $pbos->pbins, $pbos->arch)."\n"; 
    5555  #  
    5656  # Return information on the running distro 
    5757  # 
    5858  my ($ddir,$dver) = pb_distro_get(); 
    59   my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init($ddir,$dver); 
    60   print "distro tuple: ".Dumper($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $arch)."\n"; 
    6159 
    6260=head1 USAGE 
     
    7876=item B<pb_distro_init> 
    7977 
    80 This function returns a list of 8 parameters indicating the distribution name, version, family, type of build system, suffix of packages, update command line, installation command line and architecture of the underlying Linux distribution. The value of the 8 fields may be "unknown" in case the function was unable to recognize on which distribution it is running. 
     78This function returns a hash of parameters indicating the distribution name, version, family, type of build system, suffix of packages, update command line, installation command line and architecture of the underlying Linux distribution. The value of the fields may be "unknown" in case the function was unable to recognize on which distribution it is running. 
    8179 
    8280As an example, Ubuntu and Debian are in the same "du" family. As well as RedHat, RHEL, CentOS, fedora are on the same "rh" family. 
    83 Mandriva, Open SuSE and Fedora have all the same "rpm" type of build system. Ubuntu ad Debian have the same "deb" type of build system.  
     81Mandriva, Open SuSE and Fedora have all the same "rpm" type of build system. Ubuntu and Debian have the same "deb" type of build system.  
    8482And "fc" is the extension generated for all Fedora packages (Version will be added by pb). 
    85 All these information are stored in an external configuration file typically at /etc/pb/pb.conf 
     83All this information is stored in an external configuration file typically at /etc/pb/pb.conf 
    8684 
    8785When passing the distribution name and version as parameters, the B<pb_distro_init> function returns the parameter of that distribution instead of the underlying one. 
     
    9593sub pb_distro_init { 
    9694 
    97 my $ddir = shift || undef; 
    98 my $dver = shift || undef; 
    99 my $dfam = "unknown"; 
    100 my $dtype = "unknown"; 
    101 my $dos = "unknown"; 
    102 my $dsuf = "unknown"; 
    103 my $dupd = "unknown"; 
    104 my $dins = "unknown"; 
    105 my $darch = shift || undef; 
    106 my $dnover = "false"; 
    107 my $drmdot = "false"; 
     95my $pbos = { 
     96    'name' => undef, 
     97    'version' => undef, 
     98    'arch' => undef, 
     99    'family' => "unknown", 
     100    'suffix' => "unknown", 
     101    'update' => "unknown", 
     102    'install' => "unknown", 
     103    'type' => "unknown", 
     104    'os' => "unknown", 
     105    'nover' => "false", 
     106    'rmdot' => "false", 
     107    }; 
     108$pbos->{'name'} = shift; 
     109$pbos->{'version'} = shift; 
     110$pbos->{'arch'} = shift; 
    108111 
    109112# Adds conf file for distribution description 
     
    113116 
    114117# If we don't know which distribution we're on, then guess it 
    115 ($ddir,$dver) = pb_distro_get() if ((not defined $ddir) || (not defined $dver)); 
     118($pbos->{'name'},$pbos->{'version'}) = pb_distro_get() if ((not defined $pbos->{'name'}) || (not defined $pbos->{'version'})); 
    116119 
    117120# For some rare cases, typically nover ones 
    118 $ddir = "unknown" if (not defined $ddir); 
    119 $dver = "unknown" if (not defined $dver); 
     121$pbos->{'name'} = "unknown" if (not defined $pbos->{'name'}); 
     122$pbos->{'version'} = "unknown" if (not defined $pbos->{'version'}); 
    120123 
    121124# Initialize arch 
    122 $darch=pb_get_arch() if (not defined $darch); 
    123  
    124 my ($osfamily,$ostype,$osupd,$osins,$ossuffix,$osnover,$osremovedotinver,$os) = pb_conf_get("osfamily","ostype","osupd","osins","ossuffix","osnover","osremovedotinver","os"); 
     125$pbos->{'arch'} = pb_get_arch() if (not defined $pbos->{'arch'}); 
    125126 
    126127# Dig into the tuple to find the best answer 
    127 $dfam = pb_distro_get_param($ddir,$dver,$darch,$osfamily); 
    128 $dtype = pb_distro_get_param($ddir,$dver,$darch,$ostype,$dfam); 
    129 $dos = pb_distro_get_param($ddir,$dver,$darch,$os,$dfam,$dtype); 
    130 $dupd = pb_distro_get_param($ddir,$dver,$darch,$osupd,$dfam,$dtype,$dos); 
    131 $dins = pb_distro_get_param($ddir,$dver,$darch,$osins,$dfam,$dtype,$dos); 
    132 $dsuf = pb_distro_get_param($ddir,$dver,$darch,$ossuffix,$dfam,$dtype,$dos); 
    133 $dnover = pb_distro_get_param($ddir,$dver,$darch,$osnover,$dfam,$dtype,$dos); 
    134 $drmdot = pb_distro_get_param($ddir,$dver,$darch,$osremovedotinver,$dfam,$dtype,$dos); 
     128# Do NOT factorize here, as it won't work as of now for hash creation 
     129$pbos->{'family'} = pb_distro_get_param($pbos,pb_conf_get("osfamily")); 
     130$pbos->{'type'} = pb_distro_get_param($pbos,pb_conf_get("ostype")); 
     131($pbos->{'os'},$pbos->{'install'},$pbos->{'suffix'},$pbos->{'nover'},$pbos->{'rmdot'},$pbos->{'update'}) = pb_distro_get_param($pbos,pb_conf_get("os","osins","ossuffix","osnover","osremovedotinver","osupd")); 
     132#($pbos->{'family'},$pbos->{'type'},$pbos->{'os'},$pbos->{'install'},$pbos->{'suffix'},$pbos->{'nover'},$pbos->{'rmdot'},$pbos->{'update'}) = pb_distro_get_param($pbos,pb_conf_get("osfamily","ostype","os","osins","ossuffix","osnover","osremovedotinver","osupd")); 
    135133 
    136134# Some OS have no interesting version 
    137 $dver = "nover" if ($dnover eq "true"); 
     135$pbos->{'version'} = "nover" if ((defined $pbos->{'nover'}) && ($pbos->{'nover'} eq "true")); 
    138136 
    139137# For some OS remove the . in version name for extension 
    140 my $dver2 = $dver; 
    141 $dver2 =~ s/\.//g if ($drmdot eq "true"); 
    142  
    143 if ((not defined $dsuf) || ($dsuf eq "")) { 
    144     # By default suffix is a concatenation of .ddir and dver 
    145     $dsuf = ".$ddir$dver2"  
     138my $dver2 = $pbos->{'version'}; 
     139$dver2 =~ s/\.//g if ((defined $pbos->{'rmdot'}) && ($pbos->{'rmdot'} eq "true")); 
     140 
     141if ((not defined $pbos->{'suffix'}) || ($pbos->{'suffix'} eq "")) { 
     142    # By default suffix is a concatenation of name and version 
     143    $pbos->{'suffix'} = ".$pbos->{'name'}$dver2"  
    146144} else { 
    147145    # concat just the version to what has been found 
    148     $dsuf = ".$dsuf$dver2"; 
     146    $pbos->{'suffix'} = ".$pbos->{'suffix'}$dver2"; 
    149147} 
    150148 
     
    152150#   $opt="--exclude=*.i?86"; 
    153151#   } 
    154 pb_log(2,"DEBUG: pb_distro_init: $ddir, $dver, $dfam, $dtype, $dsuf, $dupd, $dins, $darch\n"); 
    155  
    156 return($ddir, $dver, $dfam, $dtype, $dos, $dsuf, $dupd, $dins, $darch); 
     152pb_log(2,"DEBUG: pb_distro_init: ".Dumper($pbos)."\n"); 
     153 
     154return($pbos); 
    157155} 
    158156 
     
    276274        $l =~ s/LSB_VERSION=/LSB Version:\t/; 
    277275    } 
    278     $c =~ s/^[A-z ]*:[\t ]*// if (defined $s); 
    279     $r =~ s/^[A-z ]*:[\t ]*// if (defined $s); 
    280     $d =~ s/^[A-z ]*:[\t ]*// if (defined $s); 
    281     $i =~ s/^[A-z ]*:[\t ]*// if (defined $s); 
    282     $l =~ s/^[A-z ]*:[\t ]*// if (defined $s); 
     276    my $regexp = "^[A-z ]*:[\t ]*"; 
     277    $c =~ s/$regexp// if (defined $s); 
     278    $r =~ s/$regexp// if (defined $s); 
     279    $d =~ s/$regexp// if (defined $s); 
     280    $i =~ s/$regexp// if (defined $s); 
     281    $l =~ s/$regexp// if (defined $s); 
    283282    return($l, $i, $d, $r, $c); 
    284283} else { 
     
    290289=item B<pb_distro_installdeps> 
    291290 
    292 This function install the dependencies required to build the package on an RPM based distro 
    293 dependencies can be passed as a parameter in which case they are not computed 
     291This function install the dependencies required to build the package on a distro. 
     292Dependencies can be passed as a parameter in which case they are not computed 
    294293 
    295294=cut 
     
    299298# SPEC file 
    300299my $f = shift || undef; 
    301 my $dtype = shift || undef; 
    302 my $dupd = shift || undef; 
     300my $pbos = shift; 
    303301my $deps = shift || undef; 
    304302 
    305303# Protection 
    306 return if (not defined $dupd); 
    307  
    308 # Get dependecies in the build file if not forced 
    309 $deps = pb_distro_getdeps($f, $dtype) if (not defined $deps); 
     304return if (not defined $pbos->{'update'}); 
     305 
     306# Get dependencies in the build file if not forced 
     307$deps = pb_distro_getdeps($f, $pbos) if (not defined $deps); 
    310308pb_log(2,"deps: $deps\n"); 
    311309return if ((not defined $deps) || ($deps =~ /^\s*$/)); 
    312310if ($deps !~ /^[    ]*$/) { 
    313311    # This may not be // proof. We should test for availability of repo and sleep if not 
    314     pb_system("$dupd $deps","Installing dependencies ($deps)"); 
     312    pb_system("$pbos->{'update'} $deps","Installing dependencies ($deps)"); 
    315313    } 
    316314} 
     
    325323 
    326324my $f = shift || undef; 
    327 my $dtype = shift || undef; 
     325my $pbos = shift; 
    328326 
    329327my $regexp = ""; 
     
    332330 
    333331# Protection 
    334 return("") if (not defined $dtype); 
     332return("") if (not defined $pbos->{'type'}); 
    335333return("") if (not defined $f); 
    336334 
    337 pb_log(3,"entering pb_distro_getdeps: $dtype - $f\n"); 
    338 if ($dtype eq  "rpm") { 
     335pb_log(3,"entering pb_distro_getdeps: $pbos->{'type'} - $f\n"); 
     336if ($pbos->{'type'} eq  "rpm") { 
    339337    # In RPM this could include files, but we do not handle them atm. 
    340338    $regexp = '^BuildRequires:(.*)$'; 
    341 } elsif ($dtype eq "deb") { 
     339} elsif ($pbos->{'type'} eq "deb") { 
    342340    $regexp = '^Build-Depends:(.*)$'; 
    343 } elsif ($dtype eq "ebuild") { 
     341} elsif ($pbos->{'type'} eq "ebuild") { 
    344342    $sep = '"'.$/; 
    345343    $regexp = '^DEPEND="(.*)"\n' 
     
    377375$/ = $oldsep; 
    378376pb_log(2,"now deps: $deps\n"); 
    379 my $deps2 = pb_distro_only_deps_needed($dtype,$deps); 
     377my $deps2 = pb_distro_only_deps_needed($pbos,$deps); 
    380378return($deps2); 
    381379} 
     
    390388sub pb_distro_only_deps_needed { 
    391389 
    392 my $dtype = shift || undef; 
     390my $pbos = shift; 
    393391my $deps = shift || undef; 
    394392 
     
    397395# Avoid to install what is already there 
    398396foreach my $p (split(/ /,$deps)) { 
    399     if ($dtype eq  "rpm") { 
     397    if ($pbos->{'type'} eq  "rpm") { 
    400398        my $res = pb_system("rpm -q --whatprovides --quiet $p","","quiet"); 
    401399        next if ($res eq 0); 
    402     } elsif ($dtype eq "deb") { 
     400    } elsif ($pbos->{'type'} eq "deb") { 
    403401        my $res = pb_system("dpkg -L $p","","quiet"); 
    404402        next if ($res eq 0); 
    405     } elsif ($dtype eq "ebuild") { 
     403    } elsif ($pbos->{'type'} eq "ebuild") { 
    406404    } else { 
    407405        # Not reached 
     
    424422sub pb_distro_setuposrepo { 
    425423 
    426 my $ddir = shift || undef; 
    427 my $dver = shift; 
    428 my $darch = shift; 
    429 my $dtype = shift || undef; 
    430 my $dfam = shift || undef; 
    431 my $dos = shift || undef; 
    432  
    433 pb_distro_setuprepo_gen($ddir,$dver,$darch,$dtype,$dfam,$dos,pb_distro_conffile(),"osrepo"); 
     424my $pbos = shift; 
     425 
     426pb_distro_setuprepo_gen($pbos,pb_distro_conffile(),"osrepo"); 
    434427} 
    435428 
     
    442435sub pb_distro_setuprepo { 
    443436 
    444 my $ddir = shift || undef; 
    445 my $dver = shift; 
    446 my $darch = shift; 
    447 my $dtype = shift || undef; 
    448 my $dfam = shift || undef; 
    449 my $dos = shift || undef; 
    450  
    451 pb_distro_setuprepo_gen($ddir,$dver,$darch,$dtype,$dfam,$dos,"$ENV{'PBDESTDIR'}/pbrc","addrepo"); 
     437my $pbos = shift; 
     438 
     439pb_distro_setuprepo_gen($pbos,"$ENV{'PBDESTDIR'}/pbrc","addrepo"); 
    452440} 
    453441 
     
    460448sub pb_distro_setuprepo_gen { 
    461449 
    462 my $ddir = shift || undef; 
    463 my $dver = shift; 
    464 my $darch = shift; 
    465 my $dtype = shift || undef; 
    466 my $dfam = shift || undef; 
    467 my $dos = shift || undef; 
     450my $pbos = shift; 
    468451my $pbconf = shift || undef; 
    469452my $pbkey = shift || undef; 
     
    474457return if (not defined $addrepo); 
    475458 
    476 my $param = pb_distro_get_param($ddir,$dver,$darch,$addrepo,$dfam,$dtype,$dos); 
     459my $param = pb_distro_get_param($pbos,$addrepo); 
    477460return if ($param eq ""); 
    478461 
     
    491474 
    492475    # The repo file can be a real file or a package 
    493     if ($dtype eq "rpm") { 
     476    if ($pbos->{'type'} eq "rpm") { 
    494477        if ($bn =~ /\.rpm$/) { 
    495478            my $pn = $bn; 
     
    508491            pb_log(0,"Unable to deal with repository file $i on rpm distro ! Please report to dev team\n"); 
    509492        } 
    510     } elsif ($dtype eq "deb") { 
     493    } elsif ($pbos->{'type'} eq "deb") { 
    511494        if (($bn =~ /\.sources.list$/) && (not -f "/etc/apt/sources.list.d/$bn")) { 
    512495            pb_system("sudo mv $ENV{'PBTMP'}/$bn /etc/apt/sources.list.d","Adding apt repository"); 
     
    530513sub pb_distro_get_param { 
    531514 
    532 my $param = ""; 
    533 my $ddir = shift; 
    534 my $dver = shift; 
    535 my $darch = shift; 
    536 my $opt = shift; 
    537 my $dfam = shift || "unknown"; 
    538 my $dtype = shift || "unknown"; 
    539 my $dos = shift || "unknown"; 
    540  
    541 pb_log(2,"DEBUG: pb_distro_get_param on $ddir-$dver-$darch for ".Dumper($opt)."\n"); 
    542 if (defined $opt->{"$ddir-$dver-$darch"}) { 
    543     $param = $opt->{"$ddir-$dver-$darch"}; 
    544 } elsif (defined $opt->{"$ddir-$dver"}) { 
    545     $param = $opt->{"$ddir-$dver"}; 
    546 } elsif (defined $opt->{"$ddir"}) { 
    547     $param = $opt->{"$ddir"}; 
    548 } elsif (defined $opt->{$dfam}) { 
    549     $param = $opt->{$dfam}; 
    550 } elsif (defined $opt->{$dtype}) { 
    551     $param = $opt->{$dtype}; 
    552 } elsif (defined $opt->{$dos}) { 
    553     $param = $opt->{$dos}; 
    554 } elsif (defined $opt->{"default"}) { 
    555     $param = $opt->{"default"}; 
     515my @param; 
     516my $param; 
     517my $pbos = shift; 
     518 
     519pb_log(2,"DEBUG: pb_distro_get_param on $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} for ".Dumper(@_)."\n"); 
     520foreach my $opt (@_) { 
     521    if (defined $opt->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) { 
     522        $param = $opt->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}; 
     523    } elsif (defined $opt->{"$pbos->{'name'}-$pbos->{'version'}"}) { 
     524        $param = $opt->{"$pbos->{'name'}-$pbos->{'version'}"}; 
     525    } elsif (defined $opt->{"$pbos->{'name'}"}) { 
     526        $param = $opt->{"$pbos->{'name'}"}; 
     527    } elsif (defined $opt->{$pbos->{'family'}}) { 
     528        $param = $opt->{$pbos->{'family'}}; 
     529    } elsif (defined $opt->{$pbos->{'type'}}) { 
     530        $param = $opt->{$pbos->{'type'}}; 
     531    } elsif (defined $opt->{$pbos->{'os'}}) { 
     532        $param = $opt->{$pbos->{'os'}}; 
     533    } elsif (defined $opt->{"default"}) { 
     534        $param = $opt->{"default"}; 
     535    } else { 
     536        $param = ""; 
     537    } 
     538 
     539    # Allow replacement of variables inside the parameter such as name, version, arch for rpmbootstrap  
     540    # but not shell variable which are backslashed 
     541    if ($param =~ /[^\\]\$/) { 
     542        pb_log(3,"Expanding variable on $param\n"); 
     543        eval { $param =~ s/(\$\w+)/$1/eeg }; 
     544    } 
     545    push @param,$param; 
     546} 
     547 
     548pb_log(2,"DEBUG: pb_distro_get_param on $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} returns ==".Dumper(@param)."==\n"); 
     549 
     550# Return one param in scalar context, an array if not. 
     551my $nb = @param; 
     552if ($nb eq 1) { 
     553    return($param); 
    556554} else { 
    557     $param = ""; 
    558 } 
    559  
    560 # Allow replacement of variables inside the parameter such as ddir, dver, darch for rpmbootstrap  
    561 # but not shell variable which are backslashed 
    562 if ($param =~ /[^\\]\$/) { 
    563     pb_log(3,"Expanding variable on $param\n"); 
    564     eval { $param =~ s/(\$\w+)/$1/eeg }; 
    565 } 
    566  
    567 pb_log(2,"DEBUG: pb_distro_get_param on $ddir-$dver-$darch returns ==$param==\n"); 
    568 return($param); 
    569  
    570 } 
    571  
     555    return(@param); 
     556} 
     557} 
     558 
     559=item B<pb_distro_get_context> 
     560 
     561This function gets the OS context passed as parameter and return the corresponding distribution hash 
     562 
     563=cut 
     564 
     565 
     566sub pb_distro_get_context { 
     567 
     568my $os = shift; 
     569my $pbos; 
     570 
     571if (defined $os) { 
     572    my ($name,$ver,$darch) = split(/-/,$os); 
     573    pb_log(0,"Bad format for $os") if ((not defined $name) || (not defined $ver) || (not defined $darch)) ; 
     574    chomp($darch); 
     575    $pbos = pb_distro_init($name,$ver,$darch); 
     576} else { 
     577    $pbos = pb_distro_init(); 
     578} 
     579return($pbos); 
     580} 
    572581 
    573582=back  
  • devel/pb/bin/pb

    r1176 r1177  
    842842        # We want to at least build for the underlying distro 
    843843        # except if a target was given, in which case we only build for it 
    844         my ($tdir,$tver,$tarch); 
    845         ($tdir,$tver,$tarch) = split(/-/,$pbtarget) if (defined ($pbtarget)); 
    846  
    847         my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init($tdir,$tver,$tarch); 
    848         my $tmpl = "$ddir-$dver-$arch,"; 
     844        my $pbos = pb_distro_get_context($pbtarget); 
     845        my $tmpl = "$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'},"; 
    849846 
    850847        # Get list of distributions for which we need to generate build files if no target 
     
    869866        $pb{'pkg'} = $pbpkg; 
    870867        $pb{'realpkg'} = $pbpkg; 
     868        $pb{'suf'} = $pbos->{'suffix'}; 
    871869        $pb{'date'} = $pbdate; 
    872870        $pb{'defpkgdir'} = $defpkgdir; 
     
    895893            $pm = new Parallel::ForkManager($pbparallel) if (defined $pbparallel); 
    896894 
    897             foreach my $d (keys %virt) { 
     895            foreach my $v (keys %virt) { 
    898896                $pm->start and next if (defined $pbparallel); 
    899                 my ($name,$ver,$arch) = split(/-/,$d); 
    900                 pb_log(0,"Bad format for $d") if ((not defined $name) || (not defined $ver) || (not defined $arch)) ; 
    901                 chomp($arch); 
    902                 my ($ddir, $dver, $dfam); 
    903                 ($ddir, $dver, $dfam, $pb{'dtype'}, $pb{'os'}, $pb{'suf'}, $pb{'upd'}, $pb{'arch'}) = pb_distro_init($name,$ver,$arch); 
    904                 pb_log(2,"DEBUG: distro tuple: ".Dumper($ddir, $dver, $dfam, $pb{'dtype'}, $pb{'suf'})."\n"); 
     897 
     898                # Distro context 
     899                my $pbos = pb_distro_get_context($v); 
    905900                pb_log(2,"DEBUG Filtering PBDATE => $pbdate, PBTAG => $pbtag, PBVER => $pbver\n"); 
    906901     
    907902                # We need to compute the real name of the package 
    908                 my $pbrealpkg = pb_cms_get_real_pkg($pbpkg,$pb{'dtype'}); 
     903                my $pbrealpkg = pb_cms_get_real_pkg($pbpkg,$pbos->{'type'}); 
    909904                $pb{'realpkg'} = $pbrealpkg; 
    910                 pb_log(1,"Virtual package $pbpkg has a real package name of $pbrealpkg on $ddir-$dver\n") if ($pbrealpkg ne $pbpkg); 
     905                pb_log(1,"Virtual package $pbpkg has a real package name of $pbrealpkg on $pbos->{'name'}-$pbos->{'version'}\n") if ($pbrealpkg ne $pbpkg); 
    911906     
    912907                # Filter build files from the less precise up to the most with overloading 
     
    917912                my %bfiles = (); 
    918913                my %pkgfiles = (); 
    919                 $build{"$ddir-$dver-$arch"} = "yes"; 
     914                $build{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} = "yes"; 
    920915     
    921                 if (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pb{'dtype'}") { 
    922                     pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pb{'dtype'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
    923                 } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$dfam") { 
    924                     pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$dfam",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
    925                 } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$ddir") { 
    926                     pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$ddir",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
    927                 } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$ddir-$dver") { 
    928                     pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$ddir-$dver",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
    929                 } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$ddir-$dver-$arch") { 
    930                     pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$ddir-$dver-$arch",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
     916                if (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'type'}") { 
     917                    pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'type'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
     918                } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'family'}") { 
     919                    pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'family'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
     920                } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}") { 
     921                    pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
     922                } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}") { 
     923                    pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
     924                } elsif (-d "$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") { 
     925                    pb_list_bfiles("$ENV{'PBROOTDIR'}/$pbpkg/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}",$pbpkg,\%bfiles,\%pkgfiles,$supfiles); 
    931926                } else { 
    932                     $build{"$ddir-$dver-$arch"} = "no"; 
     927                    $build{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} = "no"; 
    933928                    next; 
    934929                } 
     
    936931     
    937932                # Get all filters to apply 
    938                 my $ptr = pb_get_filters($pbpkg, $pb{'dtype'}, $dfam, $ddir, $dver); 
     933                my $ptr = pb_get_filters($pbpkg,$pbos); 
    939934     
    940935                # Apply now all the filters on all the files concerned 
     
    942937                if (defined $ptr) { 
    943938                    # For patch support 
    944                     $pb{'tuple'} = "$ddir-$dver-$arch"; 
     939                    $pb{'tuple'} = "$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"; 
    945940                    foreach my $f (values %bfiles,values %pkgfiles) { 
    946                         pb_filter_file("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$ddir-$dver-$arch/".basename($f),\%pb); 
     941                        pb_filter_file("$ENV{'PBROOTDIR'}/$f",$ptr,"$dest/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/".basename($f),\%pb); 
    947942                    } 
    948943                } 
    949                 pb_list_sfiles("$ENV{'PBROOTDIR'}/$pbpkg/pbpatch", \%patches, $pb{'dtype'}, $dfam, $ddir, $dver, $arch, "$ENV{'PBROOTDIR'}/$pbpkg/pbextpatch"); 
    950                 pb_list_sfiles("$ENV{'PBROOTDIR'}/$pbpkg/pbsrc", \%sources, $pb{'dtype'}, $dfam, $ddir, $dver, $arch, "$ENV{'PBROOTDIR'}/$pbpkg/pbextsrc"); 
     944                pb_list_sfiles("$ENV{'PBROOTDIR'}/$pbpkg/pbpatch", \%patches, $pbos, "$ENV{'PBROOTDIR'}/$pbpkg/pbextpatch"); 
     945                pb_list_sfiles("$ENV{'PBROOTDIR'}/$pbpkg/pbsrc", \%sources, $pbos, "$ENV{'PBROOTDIR'}/$pbpkg/pbextsrc"); 
    951946 
    952947                $pm->finish if (defined $pbparallel); 
     
    11021097sub pb_test2pkg { 
    11031098    # Get the running distro to test on 
    1104     my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init(); 
    1105     pb_log(2,"DEBUG: distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $arch))."\n"); 
     1099    my $pbos = pb_distro_get_context(); 
    11061100 
    11071101    # Get list of packages to test 
     
    11111105 
    11121106    # Additional potential repo 
    1113     pb_distro_setuprepo($ddir,$dver,$arch,$dtype,$dfam,$dos); 
     1107    pb_distro_setuprepo($pbos); 
    11141108    foreach my $pbpkg (@pkgs) { 
    11151109        # We need to install the package to test, and deps brought with it 
    1116         pb_distro_installdeps(undef,$dtype,$pbins,$pbpkg); 
     1110        pb_distro_installdeps(undef,$pbos,$pbpkg); 
    11171111        pb_system("$ENV{'PBDESTDIR'}/pbtest","Launching test for $pbpkg","verbose"); 
    11181112    } 
     
    11221116 
    11231117    # Get the running distro to build on 
    1124     my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $arch) = pb_distro_init(); 
    1125     pb_log(2,"DEBUG: distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $arch))."\n"); 
     1118    my $pbos = pb_distro_get_context(); 
    11261119 
    11271120    # If needed we may add repository to the build env 
    1128     pb_distro_setuprepo($ddir,$dver,$arch,$dtype,$dfam,$dos); 
     1121    pb_distro_setuprepo($pbos); 
    11291122 
    11301123    # Get list of packages to build 
     
    11581151 
    11591152        pb_log(2,"Working directory: $ENV{'PBBUILDDIR'}\n"); 
    1160         if ($dtype eq "rpm") { 
     1153        if ($pbos->{'type'} eq "rpm") { 
    11611154            foreach my $d ('RPMS','SRPMS','SPECS','SOURCES','BUILD') { 
    11621155                if (! -d "$ENV{'PBBUILDDIR'}/$d") { 
     
    11691162            symlink "$src","$ENV{'PBBUILDDIR'}/SOURCES/".basename($src) || die "Unable to symlink $src in $ENV{'PBBUILDDIR'}/SOURCES"; 
    11701163            # We need to first extract the spec file 
    1171             my @specfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$ddir-$dver-$arch/","$ENV{'PBBUILDDIR'}/SPECS","spec"); 
     1164            my @specfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/","$ENV{'PBBUILDDIR'}/SPECS","spec"); 
    11721165 
    11731166            # We need to handle potential patches to upstream sources 
    1174             pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$ddir-$dver-$arch/pbpatch/","$ENV{'PBBUILDDIR'}/SOURCES","patch"); 
     1167            pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbpatch/","$ENV{'PBBUILDDIR'}/SOURCES","patch"); 
    11751168 
    11761169            pb_log(2,"specfile: ".Dumper(\@specfile)."\n"); 
     
    11791172            # Older Redhat use _target_platform in %configure incorrectly 
    11801173            my $specialdef = ""; 
    1181             if (($ddir eq "redhat") || (($ddir eq "rhel") && ($dver eq "2.1"))) { 
     1174            if (($pbos->{'name'} eq "redhat") || (($pbos->{'name'} eq "rhel") && ($pbos->{'version'} eq "2.1"))) { 
    11821175                $specialdef = "--define \'_target_platform \"\"\'"; 
    11831176            } 
     
    11861179                if ($f =~ /\.spec$/) { 
    11871180                    # This could cause an issue in // mode 
    1188                     pb_distro_installdeps($f,$dtype,$pbins); 
     1181                    pb_distro_installdeps($f,$pbos); 
    11891182                    pb_system("rpmbuild $specialdef --define \"packager $ENV{'PBPACKAGER'}\" --define \"_topdir $ENV{'PBBUILDDIR'}\" -ba $f","Building package with $f under $ENV{'PBBUILDDIR'}","verbose"); 
    11901183                    last; 
     
    12011194            close(LOG); 
    12021195 
    1203         } elsif ($dtype eq "deb") { 
     1196        } elsif ($pbos->{'type'} eq "deb") { 
    12041197            chdir "$ENV{'PBBUILDDIR'}" || die "Unable to chdir to $ENV{'PBBUILDDIR'}"; 
    12051198            pb_system("tar xfz $src","Extracting sources"); 
     
    12081201            chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver"; 
    12091202            pb_rm_rf("debian"); 
    1210             symlink "pbconf/$ddir-$dver-$arch","debian" || die "Unable to symlink to pbconf/$ddir-$dver-$arch"; 
     1203            symlink "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}","debian" || die "Unable to symlink to pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"; 
    12111204            chmod 0755,"debian/rules"; 
    12121205 
    1213             pb_distro_installdeps("debian/control",$dtype,$pbins); 
     1206            pb_distro_installdeps("debian/control",$pbos); 
    12141207            pb_system("dpkg-buildpackage -us -uc -rfakeroot","Building package","verbose"); 
    12151208            # Get the name of the generated packages 
     
    12231216            } 
    12241217            close(LOG); 
    1225         } elsif ($dtype eq "ebuild") { 
     1218        } elsif ($pbos->{'type'} eq "ebuild") { 
    12261219            my @ebuildfile; 
    12271220            # For gentoo we need to take pb as subsystem name 
     
    12331226 
    12341227            # We need to first extract the ebuild file  
    1235             @ebuildfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$ddir-$dver-$arch/","$tmpd","ebuild"); 
     1228            @ebuildfile = pb_extract_build_files($src2,"$pbpkg-$pbver/pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/","$tmpd","ebuild"); 
    12361229 
    12371230            # Prepare the build env for gentoo 
     
    12641257            foreach my $f (@ebuildfile) { 
    12651258                if ($f =~ /\.ebuild$/) { 
    1266                     pb_distro_installdeps($f,$dtype,$pbins); 
     1259                    pb_distro_installdeps($f,$pbos); 
    12671260                    move($f,"$tmpd/$pbpkg-$pbver.ebuild"); 
    12681261                    pb_system("cd $tmpd ; ebuild $pbpkg-$pbver.ebuild clean ; ebuild $pbpkg-$pbver.ebuild digest ; ebuild $pbpkg-$pbver.ebuild package","verbose"); 
     
    12821275            } 
    12831276 
    1284         } elsif ($dtype eq "tgz") { 
     1277        } elsif ($pbos->{'type'} eq "tgz") { 
    12851278            # Slackware family 
    12861279            $made="$made $pbpkg/$pbpkg-$pbver-*-$pbtag.tgz"; 
     
    12901283            pb_system("tar xfz $src2","Extracting pbconf"); 
    12911284            chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver"; 
    1292             symlink "pbconf/$ddir-$dver-$arch","install" || die "Unable to symlink to pbconf/$ddir-$dver-$arch"; 
     1285            symlink "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}","install" || die "Unable to symlink to pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"; 
    12931286            if (-x "install/pbslack") { 
    1294                 pb_distro_installdeps("./install/pbslack",$dtype,$pbins); 
     1287                pb_distro_installdeps("./install/pbslack",$pbos); 
    12951288                pb_system("./install/pbslack","Building software"); 
    12961289                pb_system("sudo /sbin/makepkg -p -l y -c y $pbpkg","Packaging $pbpkg","verbose"); 
    12971290            } 
    1298         } elsif ($dtype eq "pkg") { 
     1291        } elsif ($pbos->{'type'} eq "pkg") { 
    12991292            # Solaris 
    13001293            $made="$made $pbpkg-$pbver-$pbtag.pkg.gz"; 
     
    13031296            chdir "$ENV{'PBBUILDDIR'}" || die "Unable to chdir to $ENV{'PBBUILDDIR'}"; 
    13041297            # Will host resulting packages 
    1305             pb_mkdir_p("$dtype"); 
     1298            pb_mkdir_p("$pbos->{'type'}"); 
    13061299            pb_mkdir_p("$pkgdestdir/delivery"); 
    13071300            pb_system("tar xfz $src","Extracting sources under $ENV{'PBBUILDDIR'}"); 
    13081301            pb_system("tar xfz $src2","Extracting pbconf under $ENV{'PBBUILDDIR'}"); 
    13091302            chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver"; 
    1310             if (-f "pbconf/$ddir-$dver-$arch/pbbuild") { 
    1311                 chmod 0755,"pbconf/$ddir-$dver-$arch/pbbuild"; 
     1303            if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild") { 
     1304                chmod 0755,"pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild"; 
    13121305                # pkginfo file is mandatory 
    1313                 die "Unable to find pkginfo file in pbconf/$ddir-$dver-$arch" if (! -f "pbconf/$ddir-$dver-$arch/pkginfo"); 
     1306                die "Unable to find pkginfo file in pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}" if (! -f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pkginfo"); 
    13141307                # Build 
    1315                 pb_system("pbconf/$ddir-$dver-$arch/pbbuild $pkgdestdir/delivery","Building software and installing under $pkgdestdir/delivery"); 
     1308                pb_system("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild $pkgdestdir/delivery","Building software and installing under $pkgdestdir/delivery"); 
    13161309                # Copy complementary files 
    1317                 if (-f "pbconf/$ddir-$dver-$arch/prototype") { 
    1318                     copy("pbconf/$ddir-$dver-$arch/prototype", $pkgdestdir)  
     1310                if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/prototype") { 
     1311                    copy("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/prototype", $pkgdestdir)  
    13191312                } else { 
    13201313                    # No prototype provided, calculating it 
    13211314                    open(PROTO,"> $pkgdestdir/prototype") || die "Unable to create prototype file"; 
    13221315                    print PROTO "i pkginfo\n"; 
    1323                     print PROTO "i depend\n" if (-f "pbconf/$ddir-$dver-$arch/depend"); 
     1316                    print PROTO "i depend\n" if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/depend"); 
    13241317                    $ENV{'PBSOLDESTDIR'} = "$pkgdestdir/delivery"; 
    13251318                    find(\&create_solaris_prototype, "$pkgdestdir/delivery"); 
    13261319                } 
    1327                 copy("pbconf/$ddir-$dver-$arch/depend", $pkgdestdir) if (-f "pbconf/$ddir-$dver-$arch/depend"); 
    1328                 copy("pbconf/$ddir-$dver-$arch/pkginfo", $pkgdestdir); 
    1329                 pb_system("cd $pkgdestdir/delivery ; pkgmk -o -f ../prototype -r $pkgdestdir/delivery -d $ENV{'PBBUILDDIR'}/$dtype","Packaging $pbpkg","verbose"); 
    1330                 pb_system("cd $ENV{'PBBUILDDIR'}/$dtype ;  echo \"\" | pkgtrans -o -n -s $ENV{'PBBUILDDIR'}/$dtype $ENV{'PBBUILDDIR'}/$pbpkg-$pbver-$pbtag.pkg all","Transforming $pbpkg","verbose"); 
     1320                copy("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/depend", $pkgdestdir) if (-f "pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/depend"); 
     1321                copy("pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pkginfo", $pkgdestdir); 
     1322                pb_system("cd $pkgdestdir/delivery ; pkgmk -o -f ../prototype -r $pkgdestdir/delivery -d $ENV{'PBBUILDDIR'}/$pbos->{'type'}","Packaging $pbpkg","verbose"); 
     1323                pb_system("cd $ENV{'PBBUILDDIR'}/$pbos->{'type'} ;  echo \"\" | pkgtrans -o -n -s $ENV{'PBBUILDDIR'}/$pbos->{'type'} $ENV{'PBBUILDDIR'}/$pbpkg-$pbver-$pbtag.pkg all","Transforming $pbpkg","verbose"); 
    13311324                pb_system("cd $ENV{'PBBUILDDIR'} ;  gzip -9f $pbpkg-$pbver-$pbtag.pkg","Compressing $pbpkg-$pbver-$pbtag.pkg","verbose"); 
    13321325            } else { 
    1333                 pb_log(0,"No pbconf/$ddir-$dver-$arch/pbbuild file found for $pbpkg-$pbver in \n"); 
     1326                pb_log(0,"No pbconf/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}/pbbuild file found for $pbpkg-$pbver in \n"); 
    13341327            } 
    13351328            chdir ".." || die "Unable to chdir to parent dir"; 
    1336             pb_system("rm -rf $pbpkg-$pbver $ENV{'PBBUILDDIR'}/$dtype $pkgdestdir", "Cleanup"); 
    1337         } elsif ($dtype eq "hpux") { 
     1329            pb_system("rm -rf $pbpkg-$pbver $ENV{'PBBUILDDIR'}/$pbos->{'type'} $pkgdestdir", "Cleanup"); 
     1330        } elsif ($pbos->{'type'} eq "hpux") { 
    13381331            # HP-UX 
    13391332            chdir "$ENV{'PBBUILDDIR'}" || die "Unable to chdir to $ENV{'PBBUILDDIR'}"; 
     
    13571350            pb_system("rm -rf $pbpkg-$pbver", "Cleanup"); 
    13581351        } else { 
    1359             die "Unknown dtype format $dtype"; 
     1352            die "Unknown OS type format $pbos->{'type'}"; 
    13601353        } 
    13611354        if (defined $pbparallel) { 
     
    13751368 
    13761369    # Find the appropriate check cmd/opts 
    1377     my ($oschkcmd,$oschkopt) = pb_conf_get_if("oschkcmd","oschkopt"); 
    1378     my $chkcmd .= pb_distro_get_param($ddir,$dver,$arch,$oschkcmd,$dtype,$dfam,$dos); 
    1379     my $chkopt .= pb_distro_get_param($ddir,$dver,$arch,$oschkopt,$dtype,$dfam,$dos); 
     1370    my ($chkcmd,$chkopt) = pb_distro_get_param($pbos,pb_conf_get_if("oschkcmd","oschkopt")); 
    13801371 
    13811372    # Packages check if needed 
    1382     if ($dtype eq "rpm") { 
    1383         if (-x $chkcmd) { 
    1384             pb_system("$chkcmd $chkopt $made","Checking validity of rpms with $chkcmd","verbose"); 
     1373    if ($pbos->{'type'} eq "rpm") { 
     1374        if ((defined  $chkcmd) && (-x $chkcmd)) { 
     1375            my $cmd = "$chkcmd"; 
     1376            $cmd .= " $chkopt" if (defined $chkopt); 
     1377            $cmd .= " $made"; 
     1378            pb_system("$cmd","Checking validity of rpms with $chkcmd","verbose"); 
    13851379        } 
    13861380        my $rpms =""; 
     
    13921386        pb_log(0,"SRPM packages generated: $srpms\n"); 
    13931387        pb_log(0,"RPM packages generated: $rpms\n"); 
    1394     } elsif ($dtype eq "deb") { 
     1388    } elsif ($pbos->{'type'} eq "deb") { 
    13951389        my $made2 = ""; 
    13961390        foreach my $f (split(/ /,$made)) { 
     
    14031397        } 
    14041398    } else { 
    1405         pb_log(0,"No check done for $dtype yet\n"); 
     1399        pb_log(0,"No check done for $pbos->{'type'} yet\n"); 
    14061400        pb_log(0,"Packages generated: $made\n"); 
    14071401    } 
     
    14901484    my $cmd = ""; 
    14911485    my $src = ""; 
    1492     my ($odir,$over,$oarch) = (undef, undef, undef); 
    1493     my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $darch); 
     1486    my $pbos; 
    14941487 
    14951488    if ($cmt ne "Announce") { 
     
    14991492 
    15001493        # Get the running distro to consider 
    1501         if (defined $v) { 
    1502             ($odir,$over,$oarch) = split(/-/,$v); 
    1503         } 
    1504         ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $darch) = pb_distro_init($odir,$over,$oarch); 
    1505         pb_log(2,"DEBUG: distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $darch))."\n"); 
     1494        $pbos = pb_distro_get_context($v); 
    15061495 
    15071496        # Get list of packages to build 
     
    15711560    if ($cmt =~ /^RM/) { 
    15721561        # In that case our real host is in the rmhost with the OS as key, not project as above 
    1573         $sshmachine = pb_distro_get_param($ddir,$dver,$darch,$sshhost,$dfam,$dtype,$dos); 
     1562        $sshmachine = pb_distro_get_param($pbos,$sshhost); 
    15741563    } 
    15751564    pb_log(2,"ssh: ".Dumper(($sshhost,$sshlogin,$sshdir,$sshport,$vtmout,$vepath,$rbsconf))."\n"); 
     
    16021591        $tdir = "$sshdir->{$ENV{'PBPROJ'}}/$delivery->{$ENV{'PBPROJ'}}"; 
    16031592    } elsif ($cmt eq "Packages") { 
    1604         $tdir = "$sshdir->{$ENV{'PBPROJ'}}/$delivery->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch"; 
     1593        $tdir = "$sshdir->{$ENV{'PBPROJ'}}/$delivery->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"; 
    16051594 
    16061595        my $repodir = $tdir; 
     
    16111600        # Repository management 
    16121601        open(PBS,"> $ENV{'PBBUILDDIR'}/pbscript") || die "Unable to create $ENV{'PBBUILDDIR'}/pbscript"; 
    1613         if ($dtype eq "rpm") { 
     1602        if ($pbos->{'type'} eq "rpm") { 
    16141603            # Also make a pbscript to generate yum/urpmi bases 
    16151604            print PBS << "EOF"; 
     
    16181607cat > $ENV{'PBPROJ'}.repo << EOT 
    16191608[$ENV{'PBPROJ'}] 
    1620 name=$ddir $dver $darch - $ENV{'PBPROJ'} Vanilla Packages 
     1609name=$pbos->{'name'} $pbos->{'version'} $pbos->{'arch'} - $ENV{'PBPROJ'} Vanilla Packages 
    16211610baseurl=$pbrepo->{$ENV{'PBPROJ'}}/$repodir 
    16221611enabled=1 
     
    16341623createrepo . 
    16351624EOF 
    1636             if ($dfam eq "md") { 
     1625            if ($pbos->{'family'} eq "md") { 
    16371626                # For Mandriva add urpmi management 
    16381627                print PBS << "EOF"; 
     
    16521641EOF 
    16531642            } 
    1654             if ($ddir eq "fedora") { 
     1643            if ($pbos->{'name'} eq "fedora") { 
    16551644                # Extract the spec file to please Fedora maintainers :-( 
    16561645                print PBS << "EOF"; 
     
    16631652EOF 
    16641653            } 
    1665             if ($dfam eq "novell") { 
     1654            if ($pbos->{'family'} eq "novell") { 
    16661655                # Add ymp scripts for one-click install on SuSE 
    16671656                print PBS << "EOF"; 
     
    17121701EOF 
    17131702            } 
    1714         } elsif ($dtype eq "deb") { 
     1703        } elsif ($pbos->{'type'} eq "deb") { 
    17151704            # Also make a pbscript to generate apt bases 
    17161705            # Cf: http://www.debian.org/doc/manuals/repository-howto/repository-howto.fr.html 
     
    17231712# Prepare a script to ease apt setup 
    17241713cat > $ENV{'PBPROJ'}.sources.list << EOT 
    1725 deb $rpd $dver contrib 
    1726 deb-src $rpd $dver contrib 
     1714deb $rpd $pbos->{'version'} contrib 
     1715deb-src $rpd $pbos->{'version'} contrib 
    17271716EOT 
    17281717chmod 644 $ENV{'PBPROJ'}.sources.list 
     
    17301719# Up two levels to deal with the dist dir cross versions 
    17311720cd ../.. 
    1732 mkdir -p dists/$dver/contrib/binary-$darch dists/$dver/contrib/source 
     1721mkdir -p dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'} dists/$pbos->{'version'}/contrib/source 
    17331722 
    17341723# Prepare a script to create apt info file 
     
    17421731EOT 
    17431732 
    1744 echo "Creating Packages metadata ($darch)" 
    1745 dpkg-scanpackages -a$darch $dver/$darch /dev/null | gzip -c9 > dists/$dver/contrib/binary-$darch/Packages.gz 
    1746 dpkg-scanpackages -a$darch $dver/$darch /dev/null | bzip2 -c9 > dists/$dver/contrib/binary-$darch/Packages.bz2 
    1747 echo "Creating Contents metadata ($darch)" 
    1748 apt-ftparchive contents $dver | gzip -c9 > dists/$dver/Contents-$darch.gz 
    1749 echo "Creating Release metadata ($darch)" 
    1750 cat \$TMPD/Release > dists/$dver/contrib/binary-$darch/Release 
    1751 echo "Architecture: $darch" >> dists/$dver/contrib/binary-$darch/Release 
     1733echo "Creating Packages metadata ($pbos->{'arch'})" 
     1734dpkg-scanpackages -a$pbos->{'arch'} $pbos->{'version'}/$pbos->{'arch'} /dev/null | gzip -c9 > dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Packages.gz 
     1735dpkg-scanpackages -a$pbos->{'arch'} $pbos->{'version'}/$pbos->{'arch'} /dev/null | bzip2 -c9 > dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Packages.bz2 
     1736echo "Creating Contents metadata ($pbos->{'arch'})" 
     1737apt-ftparchive contents $pbos->{'version'} | gzip -c9 > dists/$pbos->{'version'}/Contents-$pbos->{'arch'}.gz 
     1738echo "Creating Release metadata ($pbos->{'arch'})" 
     1739cat \$TMPD/Release > dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Release 
     1740echo "Architecture: $pbos->{'arch'}" >> dists/$pbos->{'version'}/contrib/binary-$pbos->{'arch'}/Release 
    17521741echo "Creating Source metadata" 
    1753 dpkg-scansources $dver/$darch /dev/null | gzip -c9 > dists/$dver/contrib/source/Sources.gz 
    1754 cat \$TMPD/Release > dists/$dver/contrib/source/Release 
    1755 echo "Architecture: Source" >> dists/$dver/contrib/source/Release 
     1742dpkg-scansources $pbos->{'version'}/$pbos->{'arch'} /dev/null | gzip -c9 > dists/$pbos->{'version'}/contrib/source/Sources.gz 
     1743cat \$TMPD/Release > dists/$pbos->{'version'}/contrib/source/Release 
     1744echo "Architecture: Source" >> dists/$pbos->{'version'}/contrib/source/Release 
    17561745echo "Creating Release metadata" 
    1757 apt-ftparchive release dists/$dver > dists/$dver/Release 
     1746apt-ftparchive release dists/$pbos->{'version'} > dists/$pbos->{'version'}/Release 
    17581747rm -rf \$TMPD 
    17591748EOF 
    1760         } elsif ($dtype eq "ebuild") { 
     1749        } elsif ($pbos->{'type'} eq "ebuild") { 
    17611750            # make a pbscript to generate links to latest version 
    17621751            print PBS << "EOF"; 
     
    17931782    # should use a hash instead... 
    17941783    my ($shcmd,$cpcmd,$cptarget,$cp2target); 
     1784    my ($odir,$over,$oarch); 
    17951785    if ($cmt !~ /^VE/) { 
    17961786        my $keyfile = pb_ssh_get(0); 
     
    18841874                my $j = basename($p); 
    18851875                pb_system("$cpcmd $cp2target/$delim$p$delim $ENV{'PBBUILDDIR'}/$odir/$over/$oarch 2> /dev/null","Recovery of package $j in $ENV{'PBBUILDDIR'}/$odir/$over/$oarch"); 
    1886                 $made="$made $odir/$over/$oarch/$j"; # if (($dtype ne "rpm") || ($j !~ /.src.rpm$/)); 
     1876                $made="$made $odir/$over/$oarch/$j"; # if (($pbos->{'type'} ne "rpm") || ($j !~ /.src.rpm$/)); 
    18871877            } 
    18881878            print KEEP "$made\n"; 
     
    18911881 
    18921882            # Sign packages locally 
    1893             if ($dtype eq "rpm") { 
     1883            if ($pbos->{'type'} eq "rpm") { 
    18941884                #pb_system("rpm --addsign --define \"_signature gpg\" --define \"_gpg_name $ENV{'PBPACKAGER'}\" --define \"__gpg_sign_cmd /usr/bin/gpg --batch --no-verbose --no-armor --no-tty --no-secmem-warning -sbo %{__signature_filename} %{__plaintext_filename} --use-agent\" $made","Signing RPM packages packages"); 
    1895             } elsif ($dtype eq "deb") { 
     1885            } elsif ($pbos->{'type'} eq "deb") { 
    18961886                #pb_system("debsign $made","Signing DEB packages"); 
    18971887            } else { 
    1898                 pb_log(0,"I don't know yet how to sign packages for type $dtype.\nPlease give feedback to dev team\n"); 
     1888                pb_log(0,"I don't know yet how to sign packages for type $pbos->{'type'}.\nPlease give feedback to dev team\n"); 
    18991889            } 
    19001890 
     
    19391929        my $hpath = "/sbin"; 
    19401930        # Solaris doesn't support -h and has halt elsewhere 
    1941         if ($dtype eq "pkg") { 
     1931        if ($pbos->{'type'} eq "pkg") { 
    19421932            $hoption = "" ; 
    19431933            $hpath = "/usr/sbin"; 
     
    21502140        # VE here 
    21512141        # Get distro context 
    2152         my ($name,$ver,$darch) = split(/-/,$v); 
    2153         chomp($darch); 
    2154         my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf) = pb_distro_init($name,$ver,$darch); 
     2142        my $pbos = pb_distro_get_context($v); 
    21552143 
    21562144        # Get VE context 
     
    21662154        if (($vetype eq "chroot") || ($vetype eq "schroot")) { 
    21672155            # Architecture consistency 
    2168             if ($arch ne $darch) { 
    2169                 die "Unable to launch a VE of architecture $darch on a $arch platform" if (($darch eq "x86_64") && ($arch =~ /i?86/)); 
     2156            if ($arch ne $pbos->{'arch'}) { 
     2157                die "Unable to launch a VE of architecture $pbos->{'arch'} on a $arch platform" if (($pbos->{'arch'} eq "x86_64") && ($arch =~ /i?86/)); 
    21702158            } 
    21712159 
     
    21752163 
    21762164                # We have to rebuild the chroot 
    2177                 if ($dtype eq "rpm") { 
     2165                if ($pbos->{'type'} eq "rpm") { 
    21782166 
    21792167                    # Which tool is used 
     
    21922180                    } 
    21932181 
    2194                     my $postinstall = pb_get_postinstall($ddir,$dver,$darch,$rbspi,$verpmstyle); 
     2182                    my $postinstall = pb_get_postinstall($pbos,$rbspi,$verpmstyle); 
    21952183                    if ($verpmstyle eq "rinse") { 
    21962184                        # Need to reshape the mirrors generated with local before-post-install script 
    21972185                        my $b4post = "--before-post-install "; 
    2198                         my $postparam = pb_distro_get_param($ddir,$dver,$darch,$rbsb4pi); 
     2186                        my $postparam = pb_distro_get_param($pbos,$rbsb4pi); 
    21992187                        if ($postparam eq "") { 
    22002188                            $b4post = ""; 
     
    22062194                        my $addpkgs; 
    22072195                        $postparam = ""; 
    2208                         $postparam .= pb_distro_get_param($ddir,$dver,$darch,$osmindep); 
     2196                        $postparam .= pb_distro_get_param($pbos,$osmindep); 
    22092197                        if ($postparam eq "") { 
    22102198                            $addpkgs = ""; 
     
    22242212 
    22252213                        my $command = pb_check_req("rinse",0); 
    2226                         pb_system("sudo $command --directory \"$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch\" --arch \"$darch\" --distribution \"$ddir-$dver\" --config \"$rbsconf->{$ENV{'PBPROJ'}}\" $b4post $postinstall $rbsopt $addpkgs $rinseverb","Creating the rinse VE for $ddir-$dver ($darch)", "verbose"); 
     2214                        pb_system("sudo $command --directory \"$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}\" --arch \"$pbos->{'arch'}\" --distribution \"$pbos->{'name'}-$pbos->{'version'}\" --config \"$rbsconf->{$ENV{'PBPROJ'}}\" $b4post $postinstall $rbsopt $addpkgs $rinseverb","Creating the rinse VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose"); 
    22272215                    } elsif ($verpmstyle eq "rpmbootstrap") { 
    22282216                        my $rbsverb = ""; 
     
    22322220                        my $addpkgs = ""; 
    22332221                        my $postparam = ""; 
    2234                         $postparam .= pb_distro_get_param($ddir,$dver,$darch,$osmindep); 
     2222                        $postparam .= pb_distro_get_param($pbos,$osmindep); 
    22352223                        if ($postparam eq "") { 
    22362224                            $addpkgs = ""; 
     
    22392227                        } 
    22402228                        my $command = pb_check_req("rpmbootstrap",0); 
    2241                         pb_system("sudo $command $rbsopt $postinstall $addpkgs $ddir-$dver-$darch $rbsverb","Creating the rpmbootstrap VE for $ddir-$dver ($darch)", "verbose"); 
     2229                        pb_system("sudo $command $rbsopt $postinstall $addpkgs $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} $rbsverb","Creating the rpmbootstrap VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose"); 
    22422230                    } elsif ($verpmstyle eq "mock") { 
    22432231                        my ($rbsconf) = pb_conf_get("rbsconf"); 
    22442232                        my $command = pb_check_req("mock",0); 
    2245                         pb_system("sudo $command --init --resultdir=\"/tmp\" --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v $rbsopt","Creating the mock VE for $ddir-$dver ($darch)"); 
     2233                        pb_system("sudo $command --init --resultdir=\"/tmp\" --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v $rbsopt","Creating the mock VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})"); 
    22462234                        # Once setup we need to install some packages, the pb account, ... 
    22472235                        pb_system("sudo $command --install --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v su","Configuring the mock VE"); 
     
    22492237                        die "Unknown verpmtype type $verpmstyle. Report to dev team"; 
    22502238                    } 
    2251                 } elsif ($dtype eq "deb") { 
     2239                } elsif ($pbos->{'type'} eq "deb") { 
    22522240                    my $vedebstyle = $vedebtype->{$ENV{'PBPROJ'}}; 
    22532241 
    2254                     my $codename = pb_distro_get_param($ddir,$dver,$darch,$oscodename); 
     2242                    my $codename = pb_distro_get_param($pbos,$oscodename); 
    22552243                    my $postparam = ""; 
    22562244                    my $addpkgs; 
    2257                     $postparam .= pb_distro_get_param($ddir,$dver,$darch,$osmindep); 
     2245                    $postparam .= pb_distro_get_param($pbos,$osmindep); 
    22582246                    if ($postparam eq "") { 
    22592247                        $addpkgs = ""; 
     
    22622250                    } 
    22632251                    my $debmir = ""; 
    2264                     $debmir .= pb_distro_get_param($ddir,$dver,$darch,$rbsmirrorsrv); 
     2252                    $debmir .= pb_distro_get_param($pbos,$rbsmirrorsrv); 
    22652253 
    22662254                    # Get potential rbs option 
     
    22772265     
    22782266                    # debootstrap works with amd64 not x86_64 
    2279                     my $debarch = $darch; 
    2280                     $debarch = "amd64" if ($darch eq "x86_64"); 
     2267                    my $debarch = $pbos->{'arch'}; 
     2268                    $debarch = "amd64" if ($pbos->{'arch'} eq "x86_64"); 
    22812269                    if ($vedebstyle eq "debootstrap") { 
    22822270                        my $dbsverb = ""; 
     
    22842272 
    22852273                        # Some perl modules are in Universe on Ubuntu 
    2286                         $rbsopt .= " --components=main,universe" if ($ddir eq "ubuntu"); 
    2287  
    2288                         pb_system("sudo /usr/sbin/debootstrap $dbsverb $rbsopt --arch=$debarch $addpkgs $codename \"$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch\" $debmir","Creating the debootstrap VE for $ddir-$dver ($darch)", "verbose"); 
     2274                        $rbsopt .= " --components=main,universe" if ($pbos->{'name'} eq "ubuntu"); 
     2275 
     2276                        pb_system("sudo /usr/sbin/debootstrap $dbsverb $rbsopt --arch=$debarch $addpkgs $codename \"$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}\" $debmir","Creating the debootstrap VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose"); 
    22892277                        # debootstrap doesn't create an /etc/hosts file 
    2290                         if (! -f "$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch/etc/hosts" ) { 
    2291                             pb_system("sudo cp /etc/hosts $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch/etc/hosts"); 
     2278                        if (! -f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts" ) { 
     2279                            pb_system("sudo cp /etc/hosts $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts"); 
    22922280                        } 
    22932281                    } else { 
    22942282                        die "Unknown vedebtype type $vedebstyle. Report to dev team"; 
    22952283                    } 
    2296                 } elsif ($dtype eq "ebuild") { 
     2284                } elsif ($pbos->{'type'} eq "ebuild") { 
    22972285                    die "Please teach the dev team how to build gentoo chroot"; 
    22982286                } else { 
    2299                     die "Unknown distribution type $dtype. Report to dev team"; 
     2287                    die "Unknown distribution type $pbos->{'type'}. Report to dev team"; 
    23002288                } 
    23012289            } 
    23022290            # Fix modes to allow access to the VE for pb user 
    2303             pb_system("sudo chmod 755 $vepath->{$ENV{'PBPROJ'}}/$ddir $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch","Fixing permissions"); 
     2291            pb_system("sudo chmod 755 $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}","Fixing permissions"); 
    23042292 
    23052293            # Test if an existing snapshot exists and use it if appropriate 
    23062294            # And also use it of no local extracted VE is present 
    2307             if ((-f "$vepath->{$ENV{'PBPROJ'}}/$ddir-$dver-$darch.tar.gz") && 
     2295            if ((-f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz") && 
    23082296                (((defined $vesnap->{$v}) && ($vesnap->{$v} =~ /true/i)) || 
    23092297                    ((defined $vesnap->{$ENV{'PBPROJ'}}) && ($vesnap->{$ENV{'PBPROJ'}} =~ /true/i)) || 
    23102298                    ($pbsnap eq 1) || 
    2311                     (! -d "$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch"))) { 
    2312                         pb_system("sudo rm -rf $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch ; sudo mkdir -p $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch ; sudo tar xz  -C $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch -f $vepath->{$ENV{'PBPROJ'}}/$ddir-$dver-$darch.tar.gz","Extracting snapshot of $ddir-$dver-$darch.tar.gz under $vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch"); 
     2299                    (! -d "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"))) { 
     2300                        pb_system("sudo rm -rf $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo mkdir -p $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo tar xz  -C $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz","Extracting snapshot of $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz under $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"); 
    23132301            } 
    23142302            # Nothing more to do for VE. No real launch 
     
    23192307        # RM here 
    23202308        # Get distro context 
    2321         my ($name,$ver,$darch) = split(/-/,$v); 
    2322         chomp($darch); 
    2323         my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf) = pb_distro_init($name,$ver,$darch); 
     2309        my $pbos = pb_distro_get_context($v); 
    23242310 
    23252311        # Get RM context 
     
    26792665 
    26802666    # Get distro context 
    2681     my ($name,$ver,$darch) = split(/-/,$v); 
    2682     chomp($darch); 
    2683     my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins) = pb_distro_init($name,$ver,$darch); 
     2667    my $pbos = pb_distro_get_context($v); 
    26842668     
    26852669    # Name of the account to deal with for VM/VE/RM 
     
    28002784my $home = "/home"; 
    28012785# Solaris doesn't like that we use /home 
    2802 $home = "/export/home" if ($dtype eq "pkg"); 
     2786$home = "/export/home" if ($pbos->{'type'} eq "pkg"); 
    28032787 
    28042788    print SCRIPT << "EOF"; 
     
    28832867# pb has to be added to portage group on gentoo 
    28842868 
    2885 # We need to have that pb_distro_init function 
     2869# We need to have that pb_distro_get_context function 
    28862870# Get it from Project-Builder::Distribution 
    28872871# And we now need the conf file required for this to work created above 
    28882872 
    2889 my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins, $darch) = pb_distro_init();  
    2890 print "distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $pbins, $darch))."\n"; 
     2873my $pbos = pb_distro_get_context();  
     2874print "distro tuple: ".Dumper($pbos)."\n"; 
    28912875 
    28922876# Adapt sudoers 
    28932877# sudo is not default on Solaris and needs to be installed first 
    28942878# from http://www.sunfreeware.com/programlistsparc10.html#sudo 
    2895 if ($dtype eq "pkg") { 
     2879if ($pbos->{'type'} eq "pkg") { 
    28962880    $file="/usr/local/etc/sudoers"; 
    28972881} else { 
     
    29402924     
    29412925# Suse wants sudoers as 640 
    2942 if ((($ddir eq "sles") && (($dver =~ /10/) || ($dver =~ /9/))) || (($ddir eq "opensuse") && ($dver =~ /10.[012]/))) { 
     2926if ((($pbos->{'name'} eq "sles") && (($pbos->{'version'} =~ /10/) || ($pbos->{'version'} =~ /9/))) || (($pbos->{'name'} eq "opensuse") && ($pbos->{'version'} =~ /10.[012]/))) { 
    29432927    chmod 0640,$file; 
    29442928} 
    29452929 
    29462930# First install all required packages 
    2947 pb_system("yum clean all","Cleaning yum env") if (($ddir eq "fedora") || ($ddir eq "asianux") || ($ddir eq "rhel")); 
     2931pb_system("yum clean all","Cleaning yum env") if (($pbos->{'name'} eq "fedora") || ($pbos->{'name'} eq "asianux") || ($pbos->{'name'} eq "rhel")); 
    29482932my ($ospkgdep) = pb_conf_get_if("ospkgdep"); 
    29492933     
    2950 my $pkgdep = pb_distro_get_param($ddir,$dver,$darch,$ospkgdep,$dfam,$dtype,$dos); 
    2951 pb_distro_installdeps(undef,$dtype,$pbins,pb_distro_only_deps_needed($dtype,join(' ',split(/,/,$pkgdep)))); 
    2952  
    2953 EOF 
    2954     my ($instype) = pb_conf_get("pbinstalltype"); 
    2955     my $itype = pb_distro_get_param($ddir,$dver,$darch,$instype,$dfam,$dtype,$dos); 
     2934my $pkgdep = pb_distro_get_param($pbos,$ospkgdep); 
     2935pb_distro_installdeps(undef,$pbos,pb_distro_only_deps_needed($pbos,join(' ',split(/,/,$pkgdep)))); 
     2936 
     2937EOF 
     2938    my $itype = pb_distro_get_param($pbos,pb_conf_get("pbinstalltype")); 
    29562939    # Install from sandbox mean a file base install 
    29572940    $itype = "file" if (defined $sbx); 
     
    29732956            if ($vtype eq "ve") { 
    29742957                my ($vepath) = pb_conf_get("vepath"); 
    2975                 copy("$ENV{'PBDESTDIR'}/ProjectBuilder-$pbver1.tar.gz","$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch/tmp"); 
    2976                 copy("$ENV{'PBDESTDIR'}/project-builder-$pbver2.tar.gz","$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch/tmp"); 
     2958                copy("$ENV{'PBDESTDIR'}/ProjectBuilder-$pbver1.tar.gz","$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/tmp"); 
     2959                copy("$ENV{'PBDESTDIR'}/project-builder-$pbver2.tar.gz","$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/tmp"); 
    29772960            } else { 
    29782961                pb_system("scp -i $keyfile -p -o UserKnownHostsFile=/dev/null -P $nport $ENV{'PBDESTDIR'}/ProjectBuilder-$pbver1.tar.gz $ENV{'PBDESTDIR'}/project-builder-$pbver2.tar.gz root\@$vmhost->{$ENV{'PBPROJ'}}:/tmp","Copying local project files to $vtype."); 
     
    29862969my ($osperldep,$osperlver) = pb_conf_get_if("osperldep","osperlver"); 
    29872970     
    2988 my $perldep = pb_distro_get_param($ddir,$dver,$darch,$osperldep,$dfam,$dtype,$dos); 
     2971my $perldep = pb_distro_get_param($pbos,$osperldep); 
    29892972foreach my $m (split(/,/,$perldep)) { 
    29902973    # Skip empty deps 
     
    30022985        # pkg based install. We need to point to the project-builder.org repository 
    30032986        print SCRIPT << 'EOF'; 
    3004 my ($ospkg) = pb_conf_get_if("ospkg"); 
    3005  
    3006 my $pkgforpb = pb_distro_get_param($ddir,$dver,$darch,$ospkg,$dfam,$dtype,$dos); 
    3007 pb_distro_setuposrepo($ddir,$dver,$darch,$dtype,$dfam,$dos); 
    3008 pb_distro_installdeps(undef,$dtype,$pbins,pb_distro_only_deps_needed($dtype,join(' ',split(/,/,$pkgforpb)))); 
     2987my $pkgforpb = pb_distro_get_param($pbos,pb_conf_get_if("ospkg")); 
     2988pb_distro_setuposrepo($pbos); 
     2989pb_distro_installdeps(undef,$pbos,pb_distro_only_deps_needed($pbos,join(' ',split(/,/,$pkgforpb)))); 
    30092990EOF 
    30102991    } else { 
     
    30243005 
    30253006my $nf="/etc/sysconfig/network"; 
    3026 if ((! -f $nf) && ($dtype eq "rpm")) { 
     3007if ((! -f $nf) && ($pbos->{'type'} eq "rpm")) { 
    30273008    open(NF,"> $nf") || die "Unable to create $nf"; 
    30283009    print NF "NETWORKING=yes\n"; 
     
    30343015    } 
    30353016 
    3036     # Adds pb_distro_init and all functions needed from ProjectBuilder::Distribution, Conf and Base 
     3017    # Adds pb_distro_get_context and all functions needed from ProjectBuilder::Distribution, Conf and Base 
    30373018    foreach my $d (@INC) { 
    30383019        my @f = ("$d/ProjectBuilder/Base.pm","$d/ProjectBuilder/Distribution.pm","$d/ProjectBuilder/Conf.pm"); 
     
    30933074    if ($vtype eq "ve") { 
    30943075        # Get distro context 
    3095         my ($name,$ver,$darch) = split(/-/,$v); 
    3096         chomp($darch); 
    3097         my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf) = pb_distro_init($name,$ver,$darch); 
     3076        my $pbos = pb_distro_get_context($v); 
    30983077        my ($vepath) = pb_conf_get("vepath"); 
    30993078 
    31003079        # Test if an existing snapshot exists and remove it if there is a VE 
    3101         if ((-f "$vepath->{$ENV{'PBPROJ'}}/$ddir-$dver-$darch.tar.gz") && 
    3102             (! -d "$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch")) { 
    3103                 pb_system("sudo rm -f $vepath->{$ENV{'PBPROJ'}}/$ddir-$dver-$darch.tar.gz","Removing previous snapshot $ddir-$dver-$darch.tar.gz"); 
     3080        if ((-f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz") && 
     3081            (! -d "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}")) { 
     3082                pb_system("sudo rm -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz","Removing previous snapshot $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz"); 
    31043083        } 
    31053084    } 
     
    31353114foreach my $v (@$vm) { 
    31363115    # Get distro context 
    3137     my ($name,$ver,$darch) = split(/-/,$v); 
    3138     chomp($darch); 
    3139     my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins) = pb_distro_init($name,$ver,$darch); 
     3116    my $pbos = pb_distro_get_context($v); 
    31403117 
    31413118    # Prepare the script to be executed on the VM/VE/RM 
     
    31513128        print SCRIPT "sudo mount -t proc /proc /proc\n"; 
    31523129    } 
    3153     print SCRIPT "$pbupd\n"; 
     3130    print SCRIPT "$pbos->{'update'}\n"; 
    31543131    if ($vtype eq "ve") { 
    31553132        print SCRIPT "sudo umount /proc\n"; 
     
    32083185        open(OUT,"> $ENV{'PBTMP'}/$pbpkg.ann") || die "Unable to create $ENV{'PBTMP'}/$pbpkg.ann: $!"; 
    32093186        my %pb; 
    3210         $pb{'dtype'} = "announce"; 
    32113187        $pb{'realpkg'} = $pbpkg; 
    32123188        $pb{'ver'} = $pbver; 
    32133189        $pb{'tag'} = $pbtag; 
    3214         $pb{'suf'} = "N/A";     # Should not be empty even if unused 
    32153190        $pb{'date'} = $pbdate; 
    32163191        $pb{'chglog'} = $chglog; 
     
    35383513my $sdir = shift; 
    35393514my $sources = shift; 
    3540 my $dtype = shift; 
    3541 my $dfam = shift; 
    3542 my $ddir = shift; 
    3543 my $dver = shift; 
    3544 my $arch = shift; 
     3515my $pbos = shift; 
    35453516my $extdir = shift; 
    35463517 
     
    35483519# This function works for both patches and additional sources 
    35493520foreach my $p (sort(<$sdir/*>)) { 
    3550     $sources->{"$ddir-$dver-$arch"} .= "," if ((defined $sources->{"$ddir-$dver-$arch"}) and ($p =~ /\.all$/)); 
    3551     $sources->{"$ddir-$dver-$arch"} .= "file://$p" if ($p =~ /\.all$/); 
    3552     $sources->{"$ddir-$dver-$arch"} .= "," if ((defined $sources->{"$ddir-$dver-$arch"}) and ($p =~ /\.$dtype$/)); 
    3553     $sources->{"$ddir-$dver-$arch"} .= "file://$p" if ($p =~ /\.$dtype$/); 
    3554     $sources->{"$ddir-$dver-$arch"} .= "," if ((defined $sources->{"$ddir-$dver-$arch"}) and ($p =~ /\.$dfam$/)); 
    3555     $sources->{"$ddir-$dver-$arch"} .= "file://$p" if ($p =~ /\.$dfam$/); 
    3556     $sources->{"$ddir-$dver-$arch"} .= "," if ((defined $sources->{"$ddir-$dver-$arch"}) and ($p =~ /\.$ddir$/)); 
    3557     $sources->{"$ddir-$dver-$arch"} .= "file://$p" if ($p =~ /\.$ddir$/); 
    3558     $sources->{"$ddir-$dver-$arch"} .= "," if ((defined $sources->{"$ddir-$dver-$arch"}) and ($p =~ /\.$ddir-$dver$/)); 
    3559     $sources->{"$ddir-$dver-$arch"} .= "file://$p" if ($p =~ /\.$ddir-$dver$/); 
    3560     $sources->{"$ddir-$dver-$arch"} .= "," if ((defined $sources->{"$ddir-$dver-$arch"}) and ($p =~ /\.$ddir-$dver-$arch$/)); 
    3561     $sources->{"$ddir-$dver-$arch"} .= "file://$p" if ($p =~ /\.$ddir-$dver-$arch$/); 
     3521    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if ((defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) and ($p =~ /\.all$/)); 
     3522    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "file://$p" if ($p =~ /\.all$/); 
     3523    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if ((defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) and ($p =~ /\.$pbos->{'type'}$/)); 
     3524    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "file://$p" if ($p =~ /\.$pbos->{'type'}$/); 
     3525    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if ((defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) and ($p =~ /\.$pbos->{'family'}$/)); 
     3526    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "file://$p" if ($p =~ /\.$pbos->{'family'}$/); 
     3527    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if ((defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) and ($p =~ /\.$pbos->{'name'}$/)); 
     3528    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "file://$p" if ($p =~ /\.$pbos->{'name'}$/); 
     3529    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if ((defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) and ($p =~ /\.$pbos->{'name'}-$pbos->{'version'}$/)); 
     3530    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "file://$p" if ($p =~ /\.$pbos->{'name'}-$pbos->{'version'}$/); 
     3531    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if ((defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}) and ($p =~ /\.$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}$/)); 
     3532    $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "file://$p" if ($p =~ /\.$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}$/); 
    35623533} 
    35633534 
    35643535# Prepare also remote sources to be included - Applied after the local ones 
    3565 foreach my $p ("all","$dtype","$dfam","$ddir","$ddir-$dver","$ddir-$dver-$arch") { 
     3536foreach my $p ("all","$pbos->{'type'}","$pbos->{'family'}","$pbos->{'name'}","$pbos->{'name'}-$pbos->{'version'}","$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}") { 
    35663537    my $f = "$extdir.".".$p"; 
    35673538    next if (not -f $f); 
     
    35723543    while (<PATCH>) { 
    35733544        chomp(); 
    3574         $sources->{"$ddir-$dver-$arch"} .= "," if (defined $sources->{"$ddir-$dver-$arch"}); 
    3575         $sources->{"$ddir-$dver-$arch"} .= "$_"; 
     3545        $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "," if (defined $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}); 
     3546        $sources->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"} .= "$_"; 
    35763547    } 
    35773548    close(PATCH); 
     
    36003571sub pb_get_postinstall { 
    36013572 
    3602 my $ddir = shift; 
    3603 my $dver = shift; 
    3604 my $darch = shift; 
     3573my $pbos = shift; 
    36053574my $rbspi = shift; 
    36063575my $vestyle = shift; 
     
    36143583} 
    36153584 
    3616 my $postparam = pb_distro_get_param($ddir,$dver,$darch,$rbspi); 
     3585my $postparam = pb_distro_get_param($pbos,$rbspi); 
    36173586if ($postparam eq "") { 
    36183587    $post = ""; 
  • devel/pb/lib/ProjectBuilder/Filter.pm

    r1156 r1177  
    5353 
    5454The first parameter is the package name. 
    55 The second parameter is the distribution type. 
    56 The third parameter is the distribution family. 
    57 The fourth parameter is the distribution name. 
    58 The fifth parameter is the distribution version. 
     55The second parameter is OS hash 
    5956 
    6057The function returns a pointer on a hash of filters. 
     
    6865my ($mfile00, $mfile0, $mfile1, $mfile2, $mfile3); 
    6966my $pbpkg = shift || die "No package specified"; 
    70 my $dtype = shift || ""; 
    71 my $dfam = shift || ""; 
    72 my $ddir = shift || ""; 
    73 my $dver = shift || ""; 
     67my $pbos = shift; 
    7468my $ptr = undef; # returned value pointer on the hash of filters 
    7569my %h; 
     
    7872if (-d "$ENV{'PBROOTDIR'}/pbfilter") { 
    7973    $mfile00 = "$ENV{'PBROOTDIR'}/pbfilter/all.pbf" if (-f "$ENV{'PBROOTDIR'}/pbfilter/all.pbf"); 
    80     $mfile0 = "$ENV{'PBROOTDIR'}/pbfilter/$dtype.pbf" if (-f "$ENV{'PBROOTDIR'}/pbfilter/$dtype.pbf"); 
    81     $mfile1 = "$ENV{'PBROOTDIR'}/pbfilter/$dfam.pbf" if (-f "$ENV{'PBROOTDIR'}/pbfilter/$dfam.pbf"); 
    82     $mfile2 = "$ENV{'PBROOTDIR'}/pbfilter/$ddir.pbf" if (-f "$ENV{'PBROOTDIR'}/pbfilter/$ddir.pbf"); 
    83     $mfile3 = "$ENV{'PBROOTDIR'}/pbfilter/$ddir-$dver.pbf" if (-f "$ENV{'PBROOTDIR'}/pbfilter/$ddir-$dver.pbf"); 
     74    if (defined $pbos) { 
     75        $mfile0 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'type'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'type'}.pbf")); 
     76        $mfile1 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'family'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'family'}.pbf")); 
     77        $mfile2 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}.pbf")); 
     78        $mfile3 = "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf")); 
     79    } 
    8480 
    8581    push @ffiles,$mfile00 if (defined $mfile00); 
     
    9288if (-d "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter") { 
    9389    $ffile00 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/all.pbf" if (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/all.pbf"); 
    94     $ffile0 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$dtype.pbf" if (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$dtype.pbf"); 
    95     $ffile1 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$dfam.pbf" if (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$dfam.pbf"); 
    96     $ffile2 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$ddir.pbf" if (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$ddir.pbf"); 
    97     $ffile3 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$ddir-$dver.pbf" if (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$ddir-$dver.pbf"); 
    98  
     90    if (defined $pbos) { 
     91        $ffile0 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'type'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'type'}.pbf")); 
     92        $ffile1 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'family'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'family'}.pbf")); 
     93        $ffile2 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}.pbf")); 
     94        $ffile3 = "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf" if ((defined $pbos->{'type'}) && (-f "$ENV{'PBROOTDIR'}/$pbpkg/pbfilter/$pbos->{'name'}-$pbos->{'version'}.pbf")); 
     95    } 
    9996    push @ffiles,$ffile00 if (defined $ffile00); 
    10097    push @ffiles,$ffile0 if (defined $ffile0); 
  • devel/rpmbootstrap/bin/rpmbootstrap

    r1128 r1177  
    164164 
    165165GetOptions("help|?|h" => \$opts{'h'},  
    166         "man|m" => \$opts{'man'}, 
    167         "verbose|v+" => \$opts{'v'}, 
    168         "quiet|q" => \$opts{'q'}, 
    169         "log-files|l=s" => \$opts{'l'}, 
    170         "script|s=s" => \$opts{'s'}, 
    171         "print-rpms|p" => \$opts{'p'}, 
    172         "download-only|d" => \$opts{'d'}, 
    173         "keep|k" => \$opts{'k'}, 
    174         "iso|i=s" => \$opts{'i'}, 
    175         "add|a=s" => \$opts{'a'}, 
    176         "version|V=s" => \$opts{'V'}, 
     166    "man|m" => \$opts{'man'}, 
     167    "verbose|v+" => \$opts{'v'}, 
     168    "quiet|q" => \$opts{'q'}, 
     169    "log-files|l=s" => \$opts{'l'}, 
     170    "script|s=s" => \$opts{'s'}, 
     171    "print-rpms|p" => \$opts{'p'}, 
     172    "download-only|d" => \$opts{'d'}, 
     173    "keep|k" => \$opts{'k'}, 
     174    "iso|i=s" => \$opts{'i'}, 
     175    "add|a=s" => \$opts{'a'}, 
     176    "version|V=s" => \$opts{'V'}, 
    177177) || pb_syntax(-1,0); 
    178178 
     
    193193    $pbLOG = \*pbLOG; 
    194194    $pbdebug = 0  if ($pbdebug == -1); 
    195     } 
     195} 
    196196pb_log_init($pbdebug, $pbLOG); 
    197197#pb_display_init("text",""); 
     
    214214# 
    215215pb_log(0,"Starting VE build for $ENV{'PBV'}\n"); 
    216 my ($name,$ver,$darch) = split(/-/,$ENV{'PBV'}); 
    217 chomp($darch); 
    218 my ($ddir, $dver, $dfam, $dtype, $dos, $pbsuf, $pbupd, $pbins) = pb_distro_init($name,$ver,$darch); 
     216my $pbos = pb_distro_get_context($ENV{'PBV'}); 
    219217 
    220218# 
     
    233231if (not defined $vepath) { 
    234232    my ($vestdpath) = pb_conf_get_if("vepath"); 
    235     $vepath = "$vestdpath->{'default'}/$ddir/$dver/$darch"; 
     233    $vepath = "$vestdpath->{'default'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"; 
    236234} 
    237235 
     
    243241# Get the package list to download, store them in a cache directory 
    244242# 
    245 my ($rbsmindep,$rbsmirrorsrv) = pb_conf_get("rbsmindep","rbsmirrorsrv"); 
    246243my ($rbscachedir) = pb_conf_get_if("rbscachedir"); 
    247 my $pkgs = pb_distro_get_param($ddir,$dver,$darch,$rbsmindep); 
    248 my $mirror = pb_distro_get_param($ddir,$dver,$darch,$rbsmirrorsrv); 
     244my ($pkgs,$mirror) = pb_distro_get_param($pbos->{'name'},$pbos->{'version'},$pbos->{'arch'},pb_conf_get("rbsmindep","rbsmirrorsrv")); 
    249245 
    250246my $cachedir = "/var/cache/rpmbootstrap"; 
     
    252248 
    253249# Point to the right subdir and create it if needed 
    254 $cachedir .= "/$ddir-$dver-$darch"; 
     250$cachedir .= "/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"; 
    255251pb_mkdir_p($cachedir) if (! -d $cachedir); 
    256252 
     
    266262    if ($mirror =~ /i386/) { 
    267263        # Some distro have an i586 or i686 mirror dir instead for i386 
    268         warn "Unable to download packages from $mirror for $ddir-$dver-$darch."; 
     264        warn "Unable to download packages from $mirror for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}."; 
    269265        $mirror =~ s|/i386/|/i586/|; 
    270266        $response = $ua->get($mirror); 
    271267        if (! $response->is_success) { 
    272             die "Unable to download packages from $mirror for $ddir-$dver-$darch"; 
     268            die "Unable to download packages from $mirror for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"; 
    273269        } 
    274270    } 
     
    279275my $repo = $mirror; 
    280276my $found = 0; 
    281 if ($pbins =~ /yum/) { 
     277if ($pbos->{'install'} =~ /yum/) { 
    282278    my $response1; 
    283279    while ($found == 0) { 
     
    290286            my ($scheme, $account, $host, $port, $path) = pb_get_uri($repo); 
    291287            die "Unable to find the repodata structure of the mirror $mirror\nPlease check the URL or warn the dev team.\n" if ($path =~ /^[\/]+$/); 
    292              
     288         
    293289            # / not reached, so looping 
    294290            next; 
     
    302298 
    303299# Manages architectures specificities 
    304 my $parch = $darch; 
    305 $parch = "i[3456]86" if ($darch eq "i386"); 
     300my $parch = $pbos->{'arch'}; 
     301$parch = "i[3456]86" if ($pbos->{'arch'} eq "i386"); 
    306302 
    307303# Get the list of packages and their URL in this hash 
     
    331327my $osupdname = ""; 
    332328 
    333 if ($pbins =~ /yum/) { 
     329if ($pbos->{'install'} =~ /yum/) { 
    334330    $oscachedir = "$vepath/var/cache/yum/core/packages/"; 
    335331    $osupdcachedir = "$vepath/var/cache/yum/updates-released/packages/"; 
    336332    $osupdname = "YUM"; 
    337333    # Recent Fedora release use a new yum cache dir 
    338     if (($ddir eq "fedora") && ($dver > 8)) { 
    339         $oscachedir = "$vepath/var/cache/yum/$darch/$dver/fedora/packages"; 
    340         $osupdcachedir = "$vepath/var/cache/yum/$darch/$dver/updates/packages"; 
     334    if (($pbos->{'name'} eq "fedora") && ($pbos->{'version'} > 8)) { 
     335        $oscachedir = "$vepath/var/cache/yum/$pbos->{'arch'}/$pbos->{'version'}/fedora/packages"; 
     336        $osupdcachedir = "$vepath/var/cache/yum/$pbos->{'arch'}/$pbos->{'version'}/updates/packages"; 
    341337        $osupdcachedir = "$vepath/var/cache/yum/updates-released/packages/"; 
    342338    } 
    343 } elsif ($pbins =~ /zypper/) { 
    344     $oscachedir = "$vepath/var/cache/zypp/packages/opensuse/suse/$darch"; 
     339} elsif ($pbos->{'install'} =~ /zypper/) { 
     340    $oscachedir = "$vepath/var/cache/zypp/packages/opensuse/suse/$pbos->{'arch'}"; 
    345341    $osupdname = "Zypper"; 
    346 } elsif ($pbins =~ /urpmi/) { 
     342} elsif ($pbos->{'install'} =~ /urpmi/) { 
    347343    $oscachedir = "$vepath/var/cache/urpmi/rpms"; 
    348344    $osupdname = "URPMI"; 
     
    373369                pb_log(1,"Package $p1 already in cache\n"); 
    374370            } 
    375              
     371         
    376372            # End if download only 
    377373            if ($opts{'d'}) { 
    378374                next; 
    379375            } 
    380  
     376     
    381377            # 
    382378            # Copy the cached .RPM files into the oscachedir directory, so that os doesn't need to download them again. 
    383379            # 
    384380            pb_log(1,"Link package into $oscachedir\n"); 
    385             copy("$cachedir/$p1",$oscachedir) if (defined $oscachedir); 
    386             symlink("$oscachedir/$p1","$osupdcachedir/p1") if (defined $osupdcachedir); 
     381            copy("$cachedir/$p1",$oscachedir) if (defined $oscachedir); 
     382            symlink("$oscachedir/$p1","$osupdcachedir/p1") if (defined $osupdcachedir); 
    387383 
    388384            # And extract it to the finale dir 
    389385            pb_system("cd $vepath ; rpm2cpio $cachedir/$p1 | cpio -ivdum","Extracting package $p1 into $vepath"); 
    390  
     386         
    391387            # Remove cached package if not asked to keep 
    392388            if (! $opts{'k'}) { 
    393389                unlink("$cachedir/$p1"); 
    394390            } 
    395  
     391     
    396392        } 
    397393    } else { 
     
    403399 
    404400if ($warning ge 1) { 
    405     pb_log(0,"$warning WARNINGS found.\nMaybe you should review your package list for $ddir-$dver-$darch\nand remove$lwpkg\n"); 
     401pb_log(0,"$warning WARNINGS found.\nMaybe you should review your package list for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}\nand remove$lwpkg\n"); 
    406402} 
    407403 
     
    415411 
    416412# yum needs that distro-release package be installed, so force it 
    417 if ($pbins =~ /yum/) { 
     413if ($pbos->{'install'} =~ /yum/) { 
     414    my $ddir = $pbos->{'name'}; 
    418415    foreach my $p1 (<$cachedir/($ddir|redhat)-release-*.rpm>) { 
    419416        copy("$cachedir/$p1","$vepath/tmp"); 
     
    432429# BUGFIX: 
    433430# 
    434 if ((($ddir eq "centos") || ($ddir eq "rhel")) && ($dver eq "5")) { 
     431if ((($pbos->{'name'} eq "centos") || ($pbos->{'name'} eq "rhel")) && ($pbos->{'version'} eq "5")) { 
    435432    pb_log(1,"BUGFIX for centos-5\n"); 
    436433    pb_mkdir_p("$vepath/usr/lib/python2.4/site-packages/urlgrabber.skx"); 
     
    458455 
    459456pb_log(1,"Adapting $osupdname repository entries\n"); 
    460 if ($pbins =~ /yum/) { 
     457if ($pbos->{'install'} =~ /yum/) { 
    461458    # 
    462459    # Force the architecture for yum 
     
    468465    # yum.conf as well 
    469466    foreach my $i (<$vepath/etc/yum.repos.d/*>,"$vepath/etc/yum.conf") { 
    470         pb_system("sed -i -e 's/\$basearch/$darch/g' $i","","quiet"); 
    471         pb_system("sed -i -e 's/\$releasever/$dver/g' $i","","quiet"); 
     467        pb_system("sed -i -e 's/\$basearch/$pbos->{'arch'}/g' $i","","quiet"); 
     468        pb_system("sed -i -e 's/\$releasever/$pbos->{'version'}/g' $i","","quiet"); 
    472469        pb_system("sed -i -e 's/^mirrorlist/#mirrorlist/' $i","","quiet"); 
    473470        # rather use neutral separators here 
     
    475472    } 
    476473    $minipkglist = "ldconfig yum passwd vim-minimal dhclient authconfig"; 
    477 } elsif ($pbins =~ /zypper/) { 
     474} elsif ($pbos->{'install'} =~ /zypper/) { 
    478475    pb_mkdir_p("$vepath/etc/zypp/repos.d"); 
    479     open(REPO,"> $vepath/etc/zypp/repos.d/$ddir-$dver") || die "Unable to create repo file"; 
     476    open(REPO,"> $vepath/etc/zypp/repos.d/$pbos->{'name'}-$pbos->{'version'}") || die "Unable to create repo file"; 
    480477    my $baseurl = dirname(dirname($mirror)); 
    481478    # Setup the repo 
    482479    print REPO << 'EOF'; 
    483480[opensuse] 
    484 name=$ddir-$dver 
     481name=$pbos->{'name'}-$pbos->{'version'} 
    485482baseurl=$baseurl 
    486483enabled=1 
     
    491488    $minipkglist = "zypper vim-minimal dhclient"; 
    492489    # Bootstraping zypper 
    493     if ($dver eq "10.2") { 
    494         pb_system("chroot $vepath /bin/bash -c \"yes | /usr/bin/zypper sa $baseurl $ddir-$dver\"","Bootstrapping Zypper"); 
    495     } 
    496 } elsif ($pbins =~ /urpmi/) { 
     490    if ($pbos->{'version'} eq "10.2") { 
     491        pb_system("chroot $vepath /bin/bash -c \"yes | /usr/bin/zypper sa $baseurl $pbos->{'name'}-$pbos->{'version'}\"","Bootstrapping Zypper"); 
     492    } 
     493} elsif ($pbos->{'install'} =~ /urpmi/) { 
    497494    # Setup the repo 
    498495    my $baseurl = dirname(dirname(dirname($mirror))); 
     
    505502# No need for sudo here 
    506503# 
    507 $pbins =~ s/sudo//g; 
    508 pb_system("chroot $vepath /bin/bash -c \"$pbins $minipkglist \"","Bootstrapping OS by running $pbins $minipkglist"); 
     504$pbos->{'install'} =~ s/sudo//g; 
     505pb_system("chroot $vepath /bin/bash -c \"$pbos->{'install'} $minipkglist \"","Bootstrapping OS by running $pbos->{'install'} $minipkglist"); 
    509506 
    510507# 
     
    517514if (defined $opts{'a'}) { 
    518515    $opts{'a'} =~ s/,/ /g; 
    519     pb_system("chroot $vepath /bin/bash -c \"$pbins $opts{'a'} \"","Adding packages to OS by running $pbins $opts{'a'}"); 
     516    pb_system("chroot $vepath /bin/bash -c \"$pbos->{'install'} $opts{'a'} \"","Adding packages to OS by running $pbos->{'install'} $opts{'a'}"); 
    520517} 
    521518 
     
    524521# 
    525522pb_log(1,"Cleaning up\n"); 
    526 if ($pbins =~ /yum/) { 
     523if ($pbos->{'install'} =~ /yum/) { 
    527524    pb_system("chroot $vepath /usr/bin/yum clean all","Cleaning yum"); 
    528525} 
Note: See TracChangeset for help on using the changeset viewer.