diff --git a/xCAT-server/lib/perl/xCAT/Template.pm b/xCAT-server/lib/perl/xCAT/Template.pm index f8b4d88bf..34c2f1e5a 100644 --- a/xCAT-server/lib/perl/xCAT/Template.pm +++ b/xCAT-server/lib/perl/xCAT/Template.pm @@ -131,17 +131,35 @@ sub subvars { if ($pkglistfile) { # handle empty and non-empty $pkglistfile's + my @tmp_array=(); + if (open PKGLISTFILE, "<$pkglistfile") { my $pkglist = ''; # append preseed directive lines while () { chomp $_; - if ((/^\s*#.*/ ) || ( $_ =~ /^-/ )){ - next; - } - $pkglist .= " " . $_; + 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; } @@ -1514,5 +1532,35 @@ 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;