From bbf7c42e709d5fcb2650f666a86669f6aa20341a Mon Sep 17 00:00:00 2001 From: immarvin Date: Thu, 24 Mar 2016 08:29:11 -0400 Subject: [PATCH 1/2] add support for multiple pkglist for ubuntu --- xCAT-server/lib/perl/xCAT/Template.pm | 86 ++++++++++++++------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/xCAT-server/lib/perl/xCAT/Template.pm b/xCAT-server/lib/perl/xCAT/Template.pm index c3d86d410..f3f528232 100644 --- a/xCAT-server/lib/perl/xCAT/Template.pm +++ b/xCAT-server/lib/perl/xCAT/Template.pm @@ -134,51 +134,57 @@ sub subvars { } if (("ubuntu" eq $platform) || ("debian" eq $platform)) { - # since debian/ubuntu uses a preseed file instead of a kickstart file, pkglist - # must be included via simple string replacement instead of using includefile() + # since debian/ubuntu uses a preseed file instead of a kickstart file, pkglist + # must be included via simple string replacement instead of using includefile() - # the first line of $pkglistfile is the space-delimited package list - # the additional lines are considered preseed directives and included as is + # the first line of $pkglistfile is the space-delimited package list + # the additional lines are considered preseed directives and included as is - if ($pkglistfile) { - # handle empty and non-empty $pkglistfile's + if ($pkglistfile) { + # handle empty and non-empty $pkglistfile's + my $allpkglist; + foreach my $mypkglistfile (split(/,/, $pkglistfile)) { + my @tmp_array=(); + if (open PKGLISTFILE, "<$mypkglistfile") { + my $pkglist = ''; + # append preseed directive lines + while () { + chomp $_; + s/\s+$//; #remove trailing white spaces + next if /^\s*$/; #-- skip empty lines + next + if ( /^\s*#/ + && !/^\s*#INCLUDE:[^#^\n]+#/ + && !/^\s*#NEW_INSTALL_LIST#/ + && !/^\s*#ENV:[^#^\n]+#/); #-- skip comments + push(@tmp_array,$_); + } - my @tmp_array=(); + if ( @tmp_array > 0) { + $pkglist=join(' ',@tmp_array); + #handle the #INLCUDE# tag recursively + my $idir = dirname($mypkglistfile); + my $doneincludes=0; + while (not $doneincludes) { + $doneincludes=1; + if ($pkglist =~ /#INCLUDE:[^#^\n]+#/) { + $doneincludes=0; + $pkglist =~ s/#INCLUDE:([^#^\n]+)#/debian_includefile($1,$idir)/eg; + } + } + } - if (open PKGLISTFILE, "<$pkglistfile") { - my $pkglist = ''; - # append preseed directive lines - while () { - chomp $_; - s/\s+$//; #remove trailing white spaces - next if /^\s*$/; #-- skip empty lines - next - if ( /^\s*#/ - && !/^\s*#INCLUDE:[^#^\n]+#/ - && !/^\s*#NEW_INSTALL_LIST#/ - && !/^\s*#ENV:[^#^\n]+#/); #-- skip comments - push(@tmp_array,$_); - } - if ( @tmp_array > 0) { - $pkglist=join(' ',@tmp_array); - #handle the #INLCUDE# tag recursively - my $idir = dirname($pkglistfile); - my $doneincludes=0; - while (not $doneincludes) { - $doneincludes=1; - if ($pkglist =~ /#INCLUDE:[^#^\n]+#/) { - $doneincludes=0; - $pkglist =~ s/#INCLUDE:([^#^\n]+)#/debian_includefile($1,$idir)/eg; - } - } - } - $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#/$pkglist/g; - close PKGLISTFILE; + $allpkglist.=" $pkglist "; + close PKGLISTFILE; + } + } + + $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#/$allpkglist/g; + + } else { + # handle no $pkglistfile + $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#//g; } - } else { - # handle no $pkglistfile - $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#//g; - } } #if user specify the partion file, replace the default partition strategy From 1d36653cb1a0dab65fa46aeef552612e88c53dea Mon Sep 17 00:00:00 2001 From: immarvin Date: Thu, 24 Mar 2016 23:26:45 -0400 Subject: [PATCH 2/2] refine the code on ubuntu multiple pkglist support;raise error message when pkglist cannot be opened --- xCAT-server/lib/perl/xCAT/Postage.pm | 6 ++- xCAT-server/lib/perl/xCAT/Template.pm | 71 ++------------------------- 2 files changed, 10 insertions(+), 67 deletions(-) diff --git a/xCAT-server/lib/perl/xCAT/Postage.pm b/xCAT-server/lib/perl/xCAT/Postage.pm index 8c153b661..6fac85cb1 100644 --- a/xCAT-server/lib/perl/xCAT/Postage.pm +++ b/xCAT-server/lib/perl/xCAT/Postage.pm @@ -1588,6 +1588,10 @@ sub get_envlist sub get_pkglist_tex { my $allfiles_pkglist = shift; + if($allfiles_pkglist =~ "xCAT::"){ + $allfiles_pkglist = shift; + } + my $allfiles_pkgtext; foreach my $pkglist (split(/,/, $allfiles_pkglist)) { @@ -1657,7 +1661,7 @@ sub includefile $file = $idir . "/" . $file; } - open(INCLUDE, $file) || \return "#INCLUDEBAD:cannot open $file#"; + open(INCLUDE, $file) || return "#INCLUDEBAD:cannot open pkglist file $file#"; while () { diff --git a/xCAT-server/lib/perl/xCAT/Template.pm b/xCAT-server/lib/perl/xCAT/Template.pm index f3f528232..d3f1976df 100644 --- a/xCAT-server/lib/perl/xCAT/Template.pm +++ b/xCAT-server/lib/perl/xCAT/Template.pm @@ -122,6 +122,7 @@ sub subvars { $inc =~ s/#ENV:([^#]+)#/envvar($1)/eg; my $res; if ($pkglistfile) { + #substitute the tag #INCLUDE_DEFAULT_PKGLIST# with package file name (for full install of rh, centos,SL, esx fedora) $inc =~ s/#INCLUDE_DEFAULT_PKGLIST#/#INCLUDE:$pkglistfile#/g; @@ -141,44 +142,11 @@ sub subvars { # the additional lines are considered preseed directives and included as is if ($pkglistfile) { - # handle empty and non-empty $pkglistfile's - my $allpkglist; - foreach my $mypkglistfile (split(/,/, $pkglistfile)) { - my @tmp_array=(); - if (open PKGLISTFILE, "<$mypkglistfile") { - my $pkglist = ''; - # append preseed directive lines - while () { - chomp $_; - s/\s+$//; #remove trailing white spaces - next if /^\s*$/; #-- skip empty lines - next - if ( /^\s*#/ - && !/^\s*#INCLUDE:[^#^\n]+#/ - && !/^\s*#NEW_INSTALL_LIST#/ - && !/^\s*#ENV:[^#^\n]+#/); #-- skip comments - push(@tmp_array,$_); - } - - if ( @tmp_array > 0) { - $pkglist=join(' ',@tmp_array); - #handle the #INLCUDE# tag recursively - my $idir = dirname($mypkglistfile); - my $doneincludes=0; - while (not $doneincludes) { - $doneincludes=1; - if ($pkglist =~ /#INCLUDE:[^#^\n]+#/) { - $doneincludes=0; - $pkglist =~ s/#INCLUDE:([^#^\n]+)#/debian_includefile($1,$idir)/eg; - } - } - } - - $allpkglist.=" $pkglist "; - close PKGLISTFILE; - } + my $allpkglist=xCAT::Postage->get_pkglist_tex($pkglistfile); + if($allpkglist =~ /#INCLUDEBAD:(.*)#/){ + return "$1"; } - + $allpkglist =~ s/,/ /g; $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#/$allpkglist/g; } else { @@ -1713,35 +1681,6 @@ sub getNM_GW() return (undef, undef); } -sub debian_includefile -{ - my $file = shift; - my $idir = shift; - my @text = (); - unless ($file =~ /^\//) { - $file = $idir."/".$file; - } - - open(INCLUDE,$file) || - return "#INCLUDEBAD:cannot open $file#"; - - while() { - chomp($_); - s/\s+$//; #remove trailing spaces - next if /^\s*$/; #-- skip empty lines - next - if ( /^\s*#/ - && !/^\s*#INCLUDE:[^#^\n]+#/ - && !/^\s*#NEW_INSTALL_LIST#/ - && !/^\s*#ENV:[^#^\n]+#/); #-- skip comments - push(@text, $_); - } - - close(INCLUDE); - - return join(' ', @text); -} - 1;