mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 11:22:27 +00:00 
			
		
		
		
	use installp/rpm command to handle installp_bundle instead of nim.
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@7365 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -9500,6 +9500,12 @@ sub update_spot_sw | ||||
|         } | ||||
|     }    # end - checking bundles | ||||
|  | ||||
| # It's decided to handle install_bundle file by xCAT itself, not using nim -o cust anymore | ||||
| # nim installs RPMs first then installp fileset, it causes perl-Net_SSLeay.pm pre-install | ||||
| # verification failed due to openssl not installed. | ||||
|  | ||||
| if (0) | ||||
| { | ||||
|     #  do installp_bundles - if any | ||||
|     #  cust operation can only do one bnd at a time!!!! | ||||
|     if (scalar(@bndlnames) > 0) | ||||
| @@ -9544,7 +9550,193 @@ sub update_spot_sw | ||||
|  | ||||
|         } | ||||
|     }    # end - bndls | ||||
| } | ||||
|  | ||||
|     # do installp_bundles - if any | ||||
|     # install installp/RPM without nim, use xcatchroot | ||||
|  | ||||
|     # need pkg source | ||||
|     my $spotloc = &get_res_loc($spotname, $callback); | ||||
|     if (!defined($spotloc)) | ||||
|     { | ||||
|         my $rsp; | ||||
|         push @{$rsp->{data}}, | ||||
|           "Could not get the location for $spotloc.\n"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|     # get lpp_source location in chroot env | ||||
|     # such as /install/nim/spot/61Ldskls_test/usr/lpp/bos/inst_root/lpp_source | ||||
|     my $chroot_lpploc = $spotloc . "/lpp/bos/inst_root/lpp_source"; | ||||
|        | ||||
|     if ($::VERBOSE) | ||||
|     { | ||||
|         my $rsp; | ||||
|         push @{$rsp->{data}}, "NIM lpp_resource location in chroot env: \'$chroot_lpploc\'.\n"; | ||||
|         xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|     } | ||||
|      | ||||
|     if ($::RUNCMD_RC != 0) | ||||
|     { | ||||
|         my $rsp; | ||||
|         push @{$rsp->{data}}, | ||||
|           "Could not get NIM lpp_source resource location in chroot env.\n"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|         return 1; | ||||
|     } | ||||
|        | ||||
|     if (scalar(@bndlnames) > 0) | ||||
|     { | ||||
|         # do installp/RPM install for each bndls | ||||
|         foreach my $bndl (@bndlnames) | ||||
|         { | ||||
|             # generate installp list from bndl file | ||||
|  | ||||
|             # get bndl location | ||||
|             my $bndlloc = &get_res_loc($bndl, $callback); | ||||
|             if (!defined($bndlloc)) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, | ||||
|                   "Could not get the location for $bndl.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|  | ||||
|             # construct tmp file to hold the pkg list. | ||||
|             my ($tmp_installp, $tmp_rpm) = gen_list_file($callback, $bndlloc); | ||||
|  | ||||
|             # use xcatchroot to install sw in SPOT on nimprime. | ||||
|              | ||||
|     # install installp with file first. | ||||
|             my $icmd = "/usr/sbin/installp "; | ||||
|  | ||||
|             # set flags | ||||
|             my $flags; | ||||
|             if (defined($iflags)) | ||||
|             { | ||||
|                 $flags = $iflags; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 # -Y to accept license. | ||||
|                 $flags = "-agQXY "; | ||||
|             } | ||||
|  | ||||
|             # these installp flags can be used with -d | ||||
|             if ($flags =~ /l|L|i|A|a/) | ||||
|             { | ||||
|                 $icmd .= "-d $chroot_lpploc "; | ||||
|             } | ||||
|  | ||||
|             $icmd .= "$flags -f $tmp_installp"; | ||||
|  | ||||
|             # run icmd! | ||||
|             my $cmd = qq~$::XCATROOT/bin/xcatchroot -i $spotname "$icmd"~; | ||||
|  | ||||
|             my $output = | ||||
|               xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0);    | ||||
|  | ||||
|             if ($::RUNCMD_RC != 0) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, | ||||
|                   "Could not install installp packages in SPOT $spotname.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|  | ||||
|             # remove tmp file | ||||
|             $cmd = qq~/usr/bin/rm -f $tmp_installp~; | ||||
|              | ||||
|             $output = | ||||
|               xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0);    | ||||
|  | ||||
|             if ($::RUNCMD_RC != 0) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, | ||||
|                   "Could not run command: $cmd.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|  | ||||
|         	# - run updtvpkg to make sure installp software | ||||
| 			#       is registered with rpm | ||||
| 			# | ||||
| 			$cmd   = qq~$::XCATROOT/bin/xcatchroot -i $spotname "/usr/sbin/updtvpkg"~; | ||||
| 			 | ||||
|             $output = | ||||
|               xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0);    | ||||
|  | ||||
|             if ($::RUNCMD_RC != 0) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, | ||||
|                   "Could not run command: $cmd.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|  | ||||
|     # then to install RPMs. | ||||
|             # set the default rpm flags | ||||
|             # if rpm_flags is supported, need to update here. | ||||
|             $flags = " -Uvh --replacepkgs "; | ||||
|  | ||||
|             unless (open(RFILE, "<$tmp_rpm")) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, "Could not open $tmp_rpm for reading.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|  | ||||
|             my @rlist = <RFILE>; | ||||
|             close(RFILE); | ||||
|  | ||||
|             my $rpmpkgs; | ||||
|             foreach my $line (@rlist) | ||||
|             { | ||||
|                 chomp $line; | ||||
|                 $rpmpkgs .= "$line "; | ||||
|                  | ||||
|             } | ||||
|              | ||||
|             my $chroot_rpmloc = $chroot_lpploc . "/RPMS/ppc"; | ||||
|  | ||||
|             my $cdcmd = qq~cd $chroot_rpmloc;~; | ||||
|             $cmd = qq~$::XCATROOT/bin/xcatchroot -i $spotname "$cdcmd /usr/bin/rpm $flags $rpmpkgs"~; | ||||
|  | ||||
|             $output = | ||||
|               xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0);    | ||||
|  | ||||
|             if ($::RUNCMD_RC != 0) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, | ||||
|                   "Could not install rpm packages in SPOT $spotname.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|              | ||||
|             # remove tmp file | ||||
|             $cmd = qq~/usr/bin/rm -f $tmp_rpm~; | ||||
|  | ||||
|             $output = | ||||
|               xCAT::InstUtils->xcmd($callback, $subreq, "xdsh", $nimprime, $cmd, 0);    | ||||
|  | ||||
|             if ($::RUNCMD_RC != 0) | ||||
|             { | ||||
|                 my $rsp; | ||||
|                 push @{$rsp->{data}}, | ||||
|                   "Could not run command: $cmd.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                 return 1; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     # do the otherpkgs - if any | ||||
|     if (defined($otherpkgs)) | ||||
|     { | ||||
| @@ -9761,4 +9953,99 @@ sub sync_spot_files | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3   gen_list_file | ||||
|  | ||||
| 	generate tmp files for installp filesets and RPMs separately  | ||||
| 	based on NIM installp_bundles | ||||
| 	 | ||||
| 	/tmp/tmp_installp, /tmp/tmp_rpm | ||||
|  | ||||
|    	Arguments: | ||||
|    	callback, installp_bundle location | ||||
|  | ||||
|   	Returns: | ||||
| 	  installp list file, rpm list file | ||||
|  | ||||
|  	Comments: | ||||
|  	  my ($tmp_installp, $tmp_rpm) = gen_list_file($bndlloc); | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| sub gen_list_file | ||||
| { | ||||
|     my $callback = shift; | ||||
|     my $bndfile = shift; | ||||
|  | ||||
|     # open bundle file | ||||
|     unless (open(BNDL, "<$bndfile")) | ||||
|     { | ||||
|         my $rsp; | ||||
|         push @{$rsp->{data}}, "Could not open $bndfile.\n"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|         return 1;                 | ||||
|     } | ||||
|  | ||||
|     # put installp/rpm into an array | ||||
|     my @ilist; | ||||
|     my @rlist; | ||||
|  | ||||
|     while (my $line = <BNDL>) | ||||
|     { | ||||
|         chomp $line; | ||||
|          | ||||
|         if ($line =~ /^I:/) | ||||
|         { | ||||
|             my ($junk, $iname) = split(/:/, $line); | ||||
|             push (@ilist, $iname); | ||||
|         } | ||||
|         elsif ($line =~ /^R:/) | ||||
|         { | ||||
|             my ($junk, $rname) = split(/:/, $line); | ||||
|             push (@rlist, $rname); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     close(BNDL); | ||||
|  | ||||
|     # put installp list into tmp file | ||||
|     my $tmp_installp = "/tmp/tmp_installp"; | ||||
|     my $tmp_rpm = "/tmp/tmp_rpm"; | ||||
|  | ||||
|     unless (open(IFILE, ">$tmp_installp")) | ||||
|     { | ||||
|         my $rsp; | ||||
|         push @{$rsp->{data}}, "Could not open $tmp_installp for writing.\n"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|     foreach (@ilist) | ||||
|     { | ||||
|         print IFILE $_ . "\n"; | ||||
|     } | ||||
|     close(IFILE); | ||||
|  | ||||
|     # put rpm list into tmp file | ||||
|     unless (open(RFILE, ">$tmp_rpm")) | ||||
|     { | ||||
|         my $rsp; | ||||
|         push @{$rsp->{data}}, "Could not open $tmp_rpm for writing.\n"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|         return 1; | ||||
|     } | ||||
|      | ||||
|     foreach (@rlist) | ||||
|     { | ||||
|         print RFILE $_ . "\n"; | ||||
|     } | ||||
|     close(RFILE); | ||||
|  | ||||
|     return ($tmp_installp, $tmp_rpm); | ||||
|      | ||||
| } | ||||
|  | ||||
| 1; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user