diff --git a/xCAT-server/lib/xcat/plugins/kmodules.pm b/xCAT-server/lib/xcat/plugins/kmodules.pm index 3b350ae2f..1801c87a9 100644 --- a/xCAT-server/lib/xcat/plugins/kmodules.pm +++ b/xCAT-server/lib/xcat/plugins/kmodules.pm @@ -287,6 +287,7 @@ sub lskmodules { } return ( $rc - 1 ); } + if ($::VERBOSE) { my $rsp; push @{ $rsp->{data} }, "Running lskmodules command... "; @@ -301,7 +302,7 @@ sub lskmodules { xCAT::MsgUtils->message( "E", $rsp, $::CALLBACK ); return 1; } - + # Get the list of kernel modules in each rpm/img file my @modlist; foreach my $source (@sources) { @@ -309,7 +310,12 @@ sub lskmodules { $source =~ s/^dud://; push (@modlist, &mods_in_img($source) ); } else { - $source =~ s/^rpm://; + my $osver = xCAT::Utils->osver(); + if ($osver =~ /ubuntu/) { + $source =~ s/^deb://; + }else{ + $source =~ s/^rpm://; + } push (@modlist, &mods_in_rpm($source) ); } } @@ -328,7 +334,7 @@ sub lskmodules { push @{ $rsp->{data} }, $mn->{name}.': '.$mn->{description}; } } - #xCAT::MsgUtils->message( "I", $rsp, $::CALLBACK ); + if ( $rsp ) { $::CALLBACK->($rsp); } @@ -443,7 +449,7 @@ sub set_sources { if ( defined($::opt_u) ) { my $outab = xCAT::Table->new('osdistroupdate'); foreach my $ou (split( ',', $::opt_u)) { - my ($ou_entry) = $outab->getAttribs({'osupdatename'=>$ou},('dirpath')); + my ($ou_entry) = $outab->getAttribs({'osupdatename'=>$ou},('dirpath','basename')); if ( !($ou_entry) || !(defined($ou_entry->{'dirpath'})) ) { if ($::VERBOSE) { my $rsp; @@ -453,7 +459,16 @@ sub set_sources { next; } my $dirpath = $ou_entry->{'dirpath'}; - my @kernel_rpms = `find $dirpath -name kernel-*.rpm`; + my @kernel_rpms = (); + if ($ou_entry->{'basename'} =~ /^ubuntu/) + { + @kernel_rpms = `find $dirpath/pool/main/l/linux/ -name *.deb`; + } + else + { + @kernel_rpms = `find $dirpath -name kernel-*.rpm`; + } + foreach my $krpm (@kernel_rpms) { chomp($krpm); my $base_krpm = basename($krpm); @@ -477,13 +492,13 @@ sub set_sources { if ( defined($::opt_o) ) { my $odtab = xCAT::Table->new('osdistro'); foreach my $od (split( ',', $::opt_o)) { - my ($od_entry) = $odtab->getAttribs({'osdistroname'=>$od},('dirpaths')); + my ($od_entry) = $odtab->getAttribs({'osdistroname'=>$od},('dirpaths','basename')); if ( !($od_entry) ) { # try building dirpath from distro_name/local_arch my $arch = `uname -m`; chomp($arch); $arch = "x86" if ($arch =~ /i.86$/); - my $dirpath = $installdir.'/'.$od.'/'.$arch; + my $dirpath = $installdir.'/'.$od.'/'.$arch; if (!(-e $dirpath)) { if ($::VERBOSE) { my $rsp; @@ -492,7 +507,17 @@ sub set_sources { } next; } - my @kernel_rpms = `find $dirpath -name kernel-*.rpm`; + + my @kernel_rpms = (); + if ($od_entry->{'basename'} =~ /ubuntu/) + { + @kernel_rpms = `find $dirpath/pool/main/l/linux/ -name *.deb`; + } + else + { + @kernel_rpms = `find $dirpath -name kernel-*.rpm`; + } + foreach my $krpm (@kernel_rpms) { chomp($krpm); my $base_krpm = basename($krpm); @@ -504,7 +529,16 @@ sub set_sources { } } else { foreach my $dirpath (split( ',', $od_entry->{'dirpaths'})){ - my @kernel_rpms = `find $dirpath -name kernel-*.rpm`; + my @kernel_rpms = (); + if ($od_entry->{'basename'} =~ /ubuntu/) + { + @kernel_rpms = `find $dirpath/pool/main/l/linux/ -name *.deb`; + } + else + { + @kernel_rpms = `find $dirpath -name kernel-*.rpm`; + } + #my @kernel_rpms = `find $dirpath -name kernel-*.rpm`; foreach my $krpm (@kernel_rpms) { chomp($krpm); my $base_krpm = basename($krpm); @@ -573,14 +607,24 @@ sub mods_in_rpm { my $tmp_path = "/tmp/lskmodules_expanded_rpm"; mkpath($tmp_path); if (-r $krpm) { - if (system ("cd $tmp_path; rpm2cpio $krpm | cpio -idum *.ko > /dev/null 2>&1 ; cd - > /dev/null 2>&1")) { - my $rsp; - push @{ $rsp->{data} }, "Unable to extract files from the rpm $krpm."; - xCAT::MsgUtils->message( "E", $rsp, $::CALLBACK ); - rmtree($tmp_path); - return; - } - } else { + my $osver = xCAT::Utils->osver(); + if ($osver =~ /ubuntu/) { + if (system ("cd $tmp_path; dpkg -X $krpm $tmp_path > /dev/null 2>&1 ; cd - > /dev/null 2>&1")) { + my $rsp; + push @{ $rsp->{data} }, "Unable to extract files from the deb package $krpm."; + xCAT::MsgUtils->message( "E", $rsp, $::CALLBACK ); + rmtree($tmp_path); + return;} + }else{ + if (system ("cd $tmp_path; rpm2cpio $krpm | cpio -idum *.ko > /dev/null 2>&1 ; cd - > /dev/null 2>&1")) { + my $rsp; + push @{ $rsp->{data} }, "Unable to extract files from the rpm $krpm."; + xCAT::MsgUtils->message( "E", $rsp, $::CALLBACK ); + rmtree($tmp_path); + return; + } + } + }else{ my $rsp; push @{ $rsp->{data} }, "Unable to read rpm $krpm."; xCAT::MsgUtils->message( "E", $rsp, $::CALLBACK );