mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	initial checkin of xCAT-buildkit rpm
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@14202 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -174,7 +174,7 @@ if [ "$OSNAME" = "AIX" ]; then | ||||
| fi | ||||
|  | ||||
| # Build the rest of the noarch rpms | ||||
| for rpmname in xCAT-client xCAT-server xCAT-IBMhpc xCAT-rmc xCAT-UI xCAT-test; do | ||||
| for rpmname in xCAT-client xCAT-server xCAT-IBMhpc xCAT-rmc xCAT-UI xCAT-test xCAT-build; do | ||||
| 	if $GREP $rpmname $SVNUP || [ "$BUILDALL" == 1 ]; then | ||||
| 		UPLOAD=1 | ||||
| 		if [ "$EMBED" = "zvm" -a "$rpmname" != "xCAT-server" -a "$rpmname" != "xCAT-UI" ]; then continue; fi		# for embedded envs only need to build server special | ||||
|   | ||||
							
								
								
									
										326
									
								
								xCAT-buildkit/LICENSE.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								xCAT-buildkit/LICENSE.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,326 @@ | ||||
| <html xmlns:o="urn:schemas-microsoft-com:office:office" | ||||
| xmlns:w="urn:schemas-microsoft-com:office:word" | ||||
| xmlns="http://www.w3.org/TR/REC-html40"> | ||||
|  | ||||
| <head> | ||||
| <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> | ||||
| <meta name=ProgId content=Word.Document> | ||||
| <meta name=Generator content="Microsoft Word 9"> | ||||
| <meta name=Originator content="Microsoft Word 9"> | ||||
| <title>Eclipse Public License - Version 1.0</title> | ||||
| <!--[if gte mso 9]><xml> | ||||
|  <o:DocumentProperties> | ||||
|   <o:Revision>2</o:Revision> | ||||
|   <o:TotalTime>3</o:TotalTime> | ||||
|   <o:Created>2004-03-05T23:03:00Z</o:Created> | ||||
|   <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved> | ||||
|   <o:Pages>4</o:Pages> | ||||
|   <o:Words>1626</o:Words> | ||||
|   <o:Characters>9270</o:Characters> | ||||
|    <o:Lines>77</o:Lines> | ||||
|   <o:Paragraphs>18</o:Paragraphs> | ||||
|   <o:CharactersWithSpaces>11384</o:CharactersWithSpaces> | ||||
|   <o:Version>9.4402</o:Version> | ||||
|  </o:DocumentProperties> | ||||
| </xml><![endif]--><!--[if gte mso 9]><xml> | ||||
|  <w:WordDocument> | ||||
|   <w:TrackRevisions/> | ||||
|  </w:WordDocument> | ||||
| </xml><![endif]--> | ||||
| <style> | ||||
| <!-- | ||||
|  /* Font Definitions */ | ||||
| @font-face | ||||
| 	{font-family:Tahoma; | ||||
| 	panose-1:2 11 6 4 3 5 4 4 2 4; | ||||
| 	mso-font-charset:0; | ||||
| 	mso-generic-font-family:swiss; | ||||
| 	mso-font-pitch:variable; | ||||
| 	mso-font-signature:553679495 -2147483648 8 0 66047 0;} | ||||
|  /* Style Definitions */ | ||||
| p.MsoNormal, li.MsoNormal, div.MsoNormal | ||||
| 	{mso-style-parent:""; | ||||
| 	margin:0in; | ||||
| 	margin-bottom:.0001pt; | ||||
| 	mso-pagination:widow-orphan; | ||||
| 	font-size:12.0pt; | ||||
| 	font-family:"Times New Roman"; | ||||
| 	mso-fareast-font-family:"Times New Roman";} | ||||
| p | ||||
| 	{margin-right:0in; | ||||
| 	mso-margin-top-alt:auto; | ||||
| 	mso-margin-bottom-alt:auto; | ||||
| 	margin-left:0in; | ||||
| 	mso-pagination:widow-orphan; | ||||
| 	font-size:12.0pt; | ||||
| 	font-family:"Times New Roman"; | ||||
| 	mso-fareast-font-family:"Times New Roman";} | ||||
| p.BalloonText, li.BalloonText, div.BalloonText | ||||
| 	{mso-style-name:"Balloon Text"; | ||||
| 	margin:0in; | ||||
| 	margin-bottom:.0001pt; | ||||
| 	mso-pagination:widow-orphan; | ||||
| 	font-size:8.0pt; | ||||
| 	font-family:Tahoma; | ||||
| 	mso-fareast-font-family:"Times New Roman";} | ||||
| @page Section1 | ||||
| 	{size:8.5in 11.0in; | ||||
| 	margin:1.0in 1.25in 1.0in 1.25in; | ||||
| 	mso-header-margin:.5in; | ||||
| 	mso-footer-margin:.5in; | ||||
| 	mso-paper-source:0;} | ||||
| div.Section1 | ||||
| 	{page:Section1;} | ||||
| --> | ||||
| </style> | ||||
| </head> | ||||
|  | ||||
| <body lang=EN-US style='tab-interval:.5in'> | ||||
|  | ||||
| <div class=Section1> | ||||
|  | ||||
| <p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b> | ||||
| </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER | ||||
| THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, | ||||
| REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE | ||||
| OF THIS AGREEMENT.</span> </p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>"Contribution" means:</span> </p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a) | ||||
| in the case of the initial Contributor, the initial code and documentation | ||||
| distributed under this Agreement, and<br clear=left> | ||||
| b) in the case of each subsequent Contributor:</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i) | ||||
| changes to the Program, and</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii) | ||||
| additions to the Program;</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where | ||||
| such changes and/or additions to the Program originate from and are distributed | ||||
| by that particular Contributor. A Contribution 'originates' from a Contributor | ||||
| if it was added to the Program by such Contributor itself or anyone acting on | ||||
| such Contributor's behalf. Contributions do not include additions to the | ||||
| Program which: (i) are separate modules of software distributed in conjunction | ||||
| with the Program under their own license agreement, and (ii) are not derivative | ||||
| works of the Program. </span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>"Contributor" means any person or | ||||
| entity that distributes the Program.</span> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>"Licensed Patents " mean patent | ||||
| claims licensable by a Contributor which are necessarily infringed by the use | ||||
| or sale of its Contribution alone or when combined with the Program. </span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>"Program" means the Contributions | ||||
| distributed in accordance with this Agreement.</span> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>"Recipient" means anyone who | ||||
| receives the Program under this Agreement, including all Contributors.</span> </p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a) | ||||
| Subject to the terms of this Agreement, each Contributor hereby grants Recipient | ||||
| a non-exclusive, worldwide, royalty-free copyright license to<span | ||||
| style='color:red'> </span>reproduce, prepare derivative works of, publicly | ||||
| display, publicly perform, distribute and sublicense the Contribution of such | ||||
| Contributor, if any, and such derivative works, in source code and object code | ||||
| form.</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) | ||||
| Subject to the terms of this Agreement, each Contributor hereby grants | ||||
| Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free | ||||
| patent license under Licensed Patents to make, use, sell, offer to sell, import | ||||
| and otherwise transfer the Contribution of such Contributor, if any, in source | ||||
| code and object code form. This patent license shall apply to the combination | ||||
| of the Contribution and the Program if, at the time the Contribution is added | ||||
| by the Contributor, such addition of the Contribution causes such combination | ||||
| to be covered by the Licensed Patents. The patent license shall not apply to | ||||
| any other combinations which include the Contribution. No hardware per se is | ||||
| licensed hereunder. </span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c) | ||||
| Recipient understands that although each Contributor grants the licenses to its | ||||
| Contributions set forth herein, no assurances are provided by any Contributor | ||||
| that the Program does not infringe the patent or other intellectual property | ||||
| rights of any other entity. Each Contributor disclaims any liability to Recipient | ||||
| for claims brought by any other entity based on infringement of intellectual | ||||
| property rights or otherwise. As a condition to exercising the rights and | ||||
| licenses granted hereunder, each Recipient hereby assumes sole responsibility | ||||
| to secure any other intellectual property rights needed, if any. For example, | ||||
| if a third party patent license is required to allow Recipient to distribute | ||||
| the Program, it is Recipient's responsibility to acquire that license before | ||||
| distributing the Program.</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d) | ||||
| Each Contributor represents that to its knowledge it has sufficient copyright | ||||
| rights in its Contribution, if any, to grant the copyright license set forth in | ||||
| this Agreement. </span></p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>A Contributor may choose to distribute the | ||||
| Program in object code form under its own license agreement, provided that:</span> | ||||
| </p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a) | ||||
| it complies with the terms and conditions of this Agreement; and</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) | ||||
| its license agreement:</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i) | ||||
| effectively disclaims on behalf of all Contributors all warranties and | ||||
| conditions, express and implied, including warranties or conditions of title | ||||
| and non-infringement, and implied warranties or conditions of merchantability | ||||
| and fitness for a particular purpose; </span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii) | ||||
| effectively excludes on behalf of all Contributors all liability for damages, | ||||
| including direct, indirect, special, incidental and consequential damages, such | ||||
| as lost profits; </span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii) | ||||
| states that any provisions which differ from this Agreement are offered by that | ||||
| Contributor alone and not by any other party; and</span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv) | ||||
| states that source code for the Program is available from such Contributor, and | ||||
| informs licensees how to obtain it in a reasonable manner on or through a | ||||
| medium customarily used for software exchange.<span style='color:blue'> </span></span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>When the Program is made available in source | ||||
| code form:</span> </p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a) | ||||
| it must be made available under this Agreement; and </span></p> | ||||
|  | ||||
| <p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a | ||||
| copy of this Agreement must be included with each copy of the Program. </span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>Contributors may not remove or alter any | ||||
| copyright notices contained within the Program. </span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>Each Contributor must identify itself as the | ||||
| originator of its Contribution, if any, in a manner that reasonably allows | ||||
| subsequent Recipients to identify the originator of the Contribution. </span></p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>Commercial distributors of software may | ||||
| accept certain responsibilities with respect to end users, business partners | ||||
| and the like. While this license is intended to facilitate the commercial use | ||||
| of the Program, the Contributor who includes the Program in a commercial | ||||
| product offering should do so in a manner which does not create potential | ||||
| liability for other Contributors. Therefore, if a Contributor includes the | ||||
| Program in a commercial product offering, such Contributor ("Commercial | ||||
| Contributor") hereby agrees to defend and indemnify every other | ||||
| Contributor ("Indemnified Contributor") against any losses, damages and | ||||
| costs (collectively "Losses") arising from claims, lawsuits and other | ||||
| legal actions brought by a third party against the Indemnified Contributor to | ||||
| the extent caused by the acts or omissions of such Commercial Contributor in | ||||
| connection with its distribution of the Program in a commercial product | ||||
| offering. The obligations in this section do not apply to any claims or Losses | ||||
| relating to any actual or alleged intellectual property infringement. In order | ||||
| to qualify, an Indemnified Contributor must: a) promptly notify the Commercial | ||||
| Contributor in writing of such claim, and b) allow the Commercial Contributor | ||||
| to control, and cooperate with the Commercial Contributor in, the defense and | ||||
| any related settlement negotiations. The Indemnified Contributor may participate | ||||
| in any such claim at its own expense.</span> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>For example, a Contributor might include the | ||||
| Program in a commercial product offering, Product X. That Contributor is then a | ||||
| Commercial Contributor. If that Commercial Contributor then makes performance | ||||
| claims, or offers warranties related to Product X, those performance claims and | ||||
| warranties are such Commercial Contributor's responsibility alone. Under this | ||||
| section, the Commercial Contributor would have to defend claims against the | ||||
| other Contributors related to those performance claims and warranties, and if a | ||||
| court requires any other Contributor to pay any damages as a result, the | ||||
| Commercial Contributor must pay those damages.</span> </p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS | ||||
| AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT | ||||
| WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, | ||||
| WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, | ||||
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely | ||||
| responsible for determining the appropriateness of using and distributing the | ||||
| Program and assumes all risks associated with its exercise of rights under this | ||||
| Agreement , including but not limited to the risks and costs of program errors, | ||||
| compliance with applicable laws, damage to or loss of data, programs or | ||||
| equipment, and unavailability or interruption of operations. </span></p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS | ||||
| AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR | ||||
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
| (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY | ||||
| OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF | ||||
| THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF | ||||
| THE POSSIBILITY OF SUCH DAMAGES.</span> </p> | ||||
|  | ||||
| <p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid | ||||
| or unenforceable under applicable law, it shall not affect the validity or | ||||
| enforceability of the remainder of the terms of this Agreement, and without | ||||
| further action by the parties hereto, such provision shall be reformed to the | ||||
| minimum extent necessary to make such provision valid and enforceable.</span> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>If Recipient institutes patent litigation | ||||
| against any entity (including a cross-claim or counterclaim in a lawsuit) | ||||
| alleging that the Program itself (excluding combinations of the Program with | ||||
| other software or hardware) infringes such Recipient's patent(s), then such | ||||
| Recipient's rights granted under Section 2(b) shall terminate as of the date | ||||
| such litigation is filed. </span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement | ||||
| shall terminate if it fails to comply with any of the material terms or | ||||
| conditions of this Agreement and does not cure such failure in a reasonable | ||||
| period of time after becoming aware of such noncompliance. If all Recipient's | ||||
| rights under this Agreement terminate, Recipient agrees to cease use and | ||||
| distribution of the Program as soon as reasonably practicable. However, | ||||
| Recipient's obligations under this Agreement and any licenses granted by | ||||
| Recipient relating to the Program shall continue and survive. </span></p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute | ||||
| copies of this Agreement, but in order to avoid inconsistency the Agreement is | ||||
| copyrighted and may only be modified in the following manner. The Agreement | ||||
| Steward reserves the right to publish new versions (including revisions) of | ||||
| this Agreement from time to time. No one other than the Agreement Steward has | ||||
| the right to modify this Agreement. The Eclipse Foundation is the initial | ||||
| Agreement Steward. The Eclipse Foundation may assign the responsibility to | ||||
| serve as the Agreement Steward to a suitable separate entity. Each new version | ||||
| of the Agreement will be given a distinguishing version number. The Program | ||||
| (including Contributions) may always be distributed subject to the version of | ||||
| the Agreement under which it was received. In addition, after a new version of | ||||
| the Agreement is published, Contributor may elect to distribute the Program | ||||
| (including its Contributions) under the new version. Except as expressly stated | ||||
| in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to | ||||
| the intellectual property of any Contributor under this Agreement, whether | ||||
| expressly, by implication, estoppel or otherwise. All rights in the Program not | ||||
| expressly granted under this Agreement are reserved.</span> </p> | ||||
|  | ||||
| <p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the | ||||
| State of New York and the intellectual property laws of the United States of | ||||
| America. No party to this Agreement will bring a legal action under this | ||||
| Agreement more than one year after the cause of action arose. Each party waives | ||||
| its rights to a jury trial in any resulting litigation.</span> </p> | ||||
|  | ||||
| <p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> | ||||
|  | ||||
| </div> | ||||
|  | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
							
								
								
									
										1996
									
								
								xCAT-buildkit/bin/buildkit
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1996
									
								
								xCAT-buildkit/bin/buildkit
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										752
									
								
								xCAT-buildkit/lib/perl/xCAT/BuildKitUtils.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										752
									
								
								xCAT-buildkit/lib/perl/xCAT/BuildKitUtils.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,752 @@ | ||||
| #!/usr/bin/env perl | ||||
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html | ||||
| package xCAT::BuildKitUtils; | ||||
|  | ||||
| BEGIN | ||||
| { | ||||
|     $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat'; | ||||
| } | ||||
|  | ||||
| # if AIX - make sure we include perl 5.8.2 in INC path. | ||||
| #       Needed to find perl dependencies shipped in deps tarball. | ||||
| if ($^O =~ /^aix/i) { | ||||
| 	unshift(@INC, qw(/usr/opt/perl5/lib/5.8.2/aix-thread-multi /usr/opt/perl5/lib/5.8.2 /usr/opt/perl5/lib/site_perl/5.8.2/aix-thread-multi /usr/opt/perl5/lib/site_perl/5.8.2)); | ||||
| } | ||||
|  | ||||
| use lib "$::XCATROOT/lib/perl"; | ||||
| use POSIX qw(ceil); | ||||
| use File::Path; | ||||
| use Socket; | ||||
| use strict; | ||||
| use Symbol; | ||||
| my $sha1support = eval { | ||||
| 	require Digest::SHA1; | ||||
| 	1; | ||||
| }; | ||||
| use IPC::Open3; | ||||
| use IO::Select; | ||||
| use xCAT::GlobalDef; | ||||
| eval { | ||||
|   require xCAT::RemoteShellExp; | ||||
| }; | ||||
| use warnings "all"; | ||||
| require xCAT::InstUtils; | ||||
| #require xCAT::NetworkUtils; | ||||
| require xCAT::Schema; | ||||
| #require Data::Dumper; | ||||
| require xCAT::NodeRange; | ||||
| require xCAT::Version; | ||||
| require DBI; | ||||
|  | ||||
| our @ISA       = qw(Exporter); | ||||
| our @EXPORT_OK = qw(genpassword runcmd3); | ||||
|  | ||||
| #-------------------------------------------------------------------------------- | ||||
|  | ||||
| =head1    xCAT::BuildKitUtils | ||||
|  | ||||
| =head2    Package Description | ||||
|  | ||||
| This program module file, is a set of utilities used by xCAT buildkit command | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------- | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3    isAIX | ||||
|     returns 1 if localHost is AIX | ||||
|     Arguments: | ||||
|         none | ||||
|     Returns: | ||||
|         1 - localHost is AIX | ||||
|         0 - localHost is some other platform | ||||
|     Globals: | ||||
|         none | ||||
|     Error: | ||||
|         none | ||||
|     Example: | ||||
|          if (xCAT::BuildKitUtils->isAIX()) { blah; } | ||||
|     Comments: | ||||
|         none | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub isAIX | ||||
| { | ||||
|     if ($^O =~ /^aix/i) { return 1; } | ||||
|     else { return 0; } | ||||
| } | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3    get_OS_VRMF | ||||
|  | ||||
|     Arguments: | ||||
|         none | ||||
|     Returns: | ||||
|         v.r.m.f  - if success | ||||
|         undef - if error | ||||
|     Example: | ||||
|          my $osversion = xCAT::BuildKitUtils->get_OS_VRMF(); | ||||
|     Comments: | ||||
|         Only implemented for AIX for now | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub get_OS_VRMF | ||||
| { | ||||
| 	my $version; | ||||
| 	if (xCAT::BuildKitUtils->isAIX()) { | ||||
| 		my $cmd = "/usr/bin/lslpp -cLq bos.rte"; | ||||
| 		my $output = `$cmd`; | ||||
| 		chomp($output); | ||||
|  | ||||
| 		# The third field in the lslpp output is the VRMF | ||||
| 		$version = (split(/:/, $output))[2]; | ||||
|  | ||||
| 		# not sure if the field would ever contain more than 4 parts? | ||||
| 		my ($v1, $v2, $v3, $v4, $rest) = split(/\./, $version); | ||||
| 		$version = join(".", $v1, $v2, $v3, $v4);  | ||||
| 	} | ||||
| 	return (length($version) ? $version : undef); | ||||
| } | ||||
|  | ||||
| #---------------------------------------------------------------------------- | ||||
|  | ||||
| =head3    testversion | ||||
|  | ||||
|         Compare version1 and version2 according to the operator and | ||||
|         return True or False. | ||||
|  | ||||
|         Arguments: | ||||
|                 $version1 | ||||
|                 $operator | ||||
|                 $version2 | ||||
|                 $release1 | ||||
|                 $release2 | ||||
|         Returns: | ||||
|                 True or False | ||||
|  | ||||
|         Example: | ||||
|                 if (BuildKitUtils->testversion ( $ins_ver, | ||||
| 												"<", | ||||
|                                                 $req_ver, | ||||
|                                                 $ins_rel, | ||||
|                                                 $req_rel)){ blah; } | ||||
|  | ||||
|         Comments: | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub testversion | ||||
| { | ||||
|     my ($class, $version1, $operator, $version2, $release1, $release2) = @_; | ||||
|  | ||||
| 	my @a1 = split(/\./, $version1); | ||||
|     my @a2 = split(/\./, $version2); | ||||
|     my $len = (scalar(@a1) > scalar(@a2) ? scalar(@a1) : scalar(@a2)); | ||||
|     $#a1 = $len - 1;  # make the arrays the same length before appending release | ||||
|     $#a2 = $len - 1; | ||||
|     push @a1, split(/\./, $release1); | ||||
|     push @a2, split(/\./, $release2); | ||||
|     $len = (scalar(@a1) > scalar(@a2) ? scalar(@a1) : scalar(@a2)); | ||||
|     my $num1 = ''; | ||||
|     my $num2 = ''; | ||||
|  | ||||
|     for (my $i = 0 ; $i < $len ; $i++) | ||||
|     { | ||||
|         my ($d1) = $a1[$i] =~ /^(\d*)/;    # remove any non-numbers on the end | ||||
|         my ($d2) = $a2[$i] =~ /^(\d*)/; | ||||
|  | ||||
|         my $diff = length($d1) - length($d2); | ||||
|         if ($diff > 0)                     # pad d2 | ||||
|         { | ||||
|             $num1 .= $d1; | ||||
|             $num2 .= ('0' x $diff) . $d2; | ||||
|         } | ||||
| 		elsif ($diff < 0)                  # pad d1 | ||||
|         { | ||||
|             $num1 .= ('0' x abs($diff)) . $d1; | ||||
|             $num2 .= $d2; | ||||
|         } | ||||
|         else   # they are the same length | ||||
|         { | ||||
|             $num1 .= $d1; | ||||
|             $num2 .= $d2; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     # Remove the leading 0s or perl will interpret the numbers as octal | ||||
|     $num1 =~ s/^0+//; | ||||
|     $num2 =~ s/^0+//; | ||||
|  | ||||
|     #SLES Changes ?? | ||||
|     # if $num1="", the "eval '$num1 $operator $num2'" will fail.  | ||||
| 	#	So MUST BE be sure that $num1 is not a "". | ||||
|     if (length($num1) == 0) { $num1 = 0; } | ||||
|     if (length($num2) == 0) { $num2 = 0; } | ||||
| 	#End of SLES Changes | ||||
|  | ||||
|     if ($operator eq '=') { $operator = '=='; } | ||||
|     my $bool = eval "$num1 $operator $num2"; | ||||
|  | ||||
| 	if (length($@)) | ||||
|     { | ||||
| 		# error msg ? | ||||
| 	} | ||||
|  | ||||
| 	return $bool; | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3    isLinux | ||||
|     returns 1 if localHost is Linux | ||||
|     Arguments: | ||||
|         none | ||||
|     Returns: | ||||
|         1 - localHost is Linux | ||||
|         0 - localHost is some other platform | ||||
|     Globals: | ||||
|         none | ||||
|     Error: | ||||
|         none | ||||
|     Example: | ||||
|          if (xCAT::BuildKitUtils->isLinux()) { blah; } | ||||
|     Comments: | ||||
|         none | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub isLinux | ||||
| { | ||||
|     if ($^O =~ /^linux/i) { return 1; } | ||||
|     else { return 0; } | ||||
| } | ||||
|  | ||||
| #-------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3    CreateRandomName | ||||
|  | ||||
| 		Create a random file name. | ||||
| 				Arguments: | ||||
| 	  	    		Prefix of name | ||||
| 				Returns: | ||||
| 					Prefix with 8 random letters appended | ||||
| 				Error: | ||||
| 				none | ||||
| 				Example: | ||||
| 				$file = xCAT::BuildKitUtils->CreateRandomName($namePrefix); | ||||
| 				Comments: | ||||
| 					None | ||||
| 																				=cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub CreateRandomName | ||||
| { | ||||
| my ($class, $name) = @_; | ||||
|  | ||||
| my $nI; | ||||
| for ($nI = 0 ; $nI < 8 ; $nI++) | ||||
| { | ||||
|    my $char = ('a' .. 'z', 'A' .. 'Z')[int(rand(52)) + 1]; | ||||
|    $name .= $char; | ||||
| } | ||||
| 	$name; | ||||
| } | ||||
|  | ||||
| #----------------------------------------------------------------------- | ||||
|  | ||||
| =head3 | ||||
| close_delete_file. | ||||
|  | ||||
| 	Arguments: | ||||
| 		file handle,filename | ||||
| 	Returns: | ||||
| 	    none | ||||
| 	Globals: | ||||
| 		none | ||||
| 	Error: | ||||
| 		undef | ||||
| 	Example: | ||||
| 	   xCAT::BuildKitUtils->close_delete_file($file_handle, $file_name); | ||||
| 	Comments: | ||||
| 		none | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------ | ||||
| sub close_delete_file | ||||
| { | ||||
|     my ($class, $file_handle, $file_name) = @_; | ||||
|     close $file_handle; | ||||
|  | ||||
|     unlink($file_name); | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| =head3    runcmd3 | ||||
|     Run the specified command with optional input and return stderr, stdout, and exit code | ||||
|  | ||||
|     Arguments: | ||||
|         command=>[] - Array reference of command to run | ||||
|         input=>[] or string - Data to send to stdin of process like piping input | ||||
|     Returns: | ||||
|         { exitcode => number, output=> $string, errors => string } | ||||
| =cut | ||||
| sub runcmd3 { #a proper runcmd that indpendently returns stdout, stderr, pid and accepts a stdin | ||||
|     my %args = @_; | ||||
|     my @indata; | ||||
|     my $output; | ||||
|     my $errors; | ||||
|     if ($args{input}) { | ||||
|         if (ref $args{input}) { #array ref | ||||
|             @indata = @{$args{input}}; | ||||
|         } else { #just a string | ||||
|             @indata=($args{input}); | ||||
|         } | ||||
|     } | ||||
|     my @cmd; | ||||
|     if (ref $args{command}) { | ||||
|         @cmd = @{$args{command}}; | ||||
|     } else { | ||||
|         @cmd = ($args{command}); | ||||
|     } | ||||
|     my $cmdin; | ||||
|     my $cmdout; | ||||
|     my $cmderr = gensym; | ||||
|     my $cmdpid = open3($cmdin,$cmdout,$cmderr,@cmd); | ||||
|     my $cmdsel = IO::Select->new($cmdout,$cmderr); | ||||
|     foreach (@indata) { | ||||
|         print $cmdin $_; | ||||
|     } | ||||
|     close($cmdin); | ||||
|     my @handles; | ||||
|     while ($cmdsel->count()) { | ||||
|         @handles = $cmdsel->can_read(); | ||||
|         foreach (@handles) { | ||||
|             my $line; | ||||
|             my $done = sysread $_,$line,180; | ||||
|             if ($done) { | ||||
|                 if ($_ eq $cmdout) { | ||||
|                     $output .= $line; | ||||
|                 } else { | ||||
|                     $errors .= $line; | ||||
|                 } | ||||
|             } else { | ||||
|                 $cmdsel->remove($_); | ||||
|                 close($_); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     waitpid($cmdpid,0); | ||||
|     my $exitcode = $? >> 8; | ||||
|     return { 'exitcode' => $exitcode, 'output' => $output, 'errors' => $errors } | ||||
| } | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3    runcmd | ||||
|    Run the given cmd and return the output in an array (already chopped). | ||||
|    Alternately, if this function is used in a scalar context, the output | ||||
|    is joined into a single string with the newlines separating the lines. | ||||
|  | ||||
|    Arguments: | ||||
|      command, exitcode, reference to output, streaming mode  | ||||
|    Returns: | ||||
| 	   see below | ||||
|    Globals: | ||||
| 	   $::RUNCMD_RC  , $::CALLBACK | ||||
|    Error: | ||||
|       Normally, if there is an error running the cmd,it will display the | ||||
| 		error and exit with the cmds exit code, unless exitcode | ||||
| 		is given one of the following values: | ||||
|             0:     display error msg, DO NOT exit on error, but set | ||||
| 					$::RUNCMD_RC to the exit code. | ||||
| 			-1:     DO NOT display error msg and DO NOT exit on error, but set | ||||
| 				    $::RUNCMD_RC to the exit code. | ||||
| 			-2:    DO the default behavior (display error msg and exit with cmds | ||||
| 				exit code. | ||||
|              number > 0:    Display error msg and exit with the given code | ||||
|  | ||||
|    Example: | ||||
| 		my $outref = xCAT::BuildKitUtils->runcmd($cmd, -2, 1); | ||||
|                 $::CALLBACK= your callback (required for streaming from plugins) | ||||
| 		my $outref = xCAT::BuildKitUtils->runcmd($cmd,-2, 1, 1); streaming | ||||
|  | ||||
|    Comments: | ||||
| 		   If refoutput is true, then the output will be returned as a | ||||
| 		   reference to an array for efficiency. | ||||
|  | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub runcmd | ||||
|  | ||||
| { | ||||
|  | ||||
|     my ($class, $cmd, $exitcode, $refoutput, $stream) = @_; | ||||
|     $::RUNCMD_RC = 0; | ||||
|     # redirect stderr to stdout | ||||
|     if (!($cmd =~ /2>&1$/)) { $cmd .= ' 2>&1'; }    | ||||
|  | ||||
|     my $outref = []; | ||||
|     if (!defined($stream) || (length($stream) == 0)) { # do not stream | ||||
|       @$outref = `$cmd`; | ||||
|     } else {  # streaming mode | ||||
|       my @cmd; | ||||
|       push @cmd,$cmd; | ||||
|       my $rsp    = {}; | ||||
|       my $output; | ||||
|       my $errout; | ||||
|       open (PIPE, "$cmd |"); | ||||
|       while (<PIPE>) { | ||||
|         if ($::CALLBACK){ | ||||
|            $rsp->{data}->[0] = $_; | ||||
|            $::CALLBACK->($rsp); | ||||
|         } else { | ||||
|           xCAT::MsgUtils->message("D", "$_"); | ||||
|         } | ||||
|         $output .= $_; | ||||
|       } | ||||
|       # store the return string | ||||
|       push  @$outref,$output;    | ||||
|     } | ||||
|  | ||||
|     # now if not streaming process errors  | ||||
|     if (($?) && (!defined($stream))) | ||||
|     { | ||||
|         $::RUNCMD_RC = $? >> 8; | ||||
|         my $displayerror = 1; | ||||
|         my $rc; | ||||
|         if (defined($exitcode) && length($exitcode) && $exitcode != -2) | ||||
|         { | ||||
|             if ($exitcode > 0) | ||||
|             { | ||||
|                 $rc = $exitcode; | ||||
|             }    # if not zero, exit with specified code | ||||
|             elsif ($exitcode <= 0) | ||||
|             { | ||||
|                 $rc = '';    # if zero or negative, do not exit | ||||
|                 if ($exitcode < 0) { $displayerror = 0; } | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             $rc = $::RUNCMD_RC; | ||||
|         }    # if exitcode not specified, use cmd exit code | ||||
|         if ($displayerror) | ||||
|         { | ||||
|             my $rsp    = {}; | ||||
|             my $errmsg = ''; | ||||
|             if (xCAT::BuildKitUtils->isLinux() && $::RUNCMD_RC == 139) | ||||
|             { | ||||
|                 $errmsg = "Segmentation fault  $errmsg"; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 $errmsg = join('', @$outref); | ||||
|                 chomp $errmsg; | ||||
|  | ||||
|             } | ||||
|             if ($::CALLBACK) | ||||
|             { | ||||
|                 $rsp->{data}->[0] = | ||||
|                   "Command failed: $cmd. Error message: $errmsg.\n"; | ||||
|                 xCAT::MsgUtils->message("E", $rsp, $::CALLBACK); | ||||
|  | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 xCAT::MsgUtils->message("E", | ||||
|                              "Command failed: $cmd. Error message: $errmsg.\n"); | ||||
|             } | ||||
|             $xCAT::BuildKitUtils::errno = 29; | ||||
|         } | ||||
|     } | ||||
|     if ($refoutput) | ||||
|     { | ||||
|         chomp(@$outref); | ||||
|         return $outref; | ||||
|     } | ||||
|     elsif (wantarray) | ||||
|     { | ||||
|         chomp(@$outref); | ||||
|         return @$outref; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         my $line = join('', @$outref); | ||||
|         chomp $line; | ||||
|         return $line; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3   CheckVersion | ||||
|        Checks the two versions numbers to see which one is greater. | ||||
|     Arguments: | ||||
|         ver_a the version number in format of d.d.d.d... | ||||
|         ver_b the version number in format of d.d.d.d... | ||||
|     Returns: | ||||
|         1 if ver_a is greater than ver_b | ||||
|         0 if ver_a is eaqual to ver_b | ||||
|         -1 if ver_a is smaller than ver_b | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub CheckVersion | ||||
| { | ||||
|     my $ver_a = shift; | ||||
|     if ($ver_a =~ /xCAT::BuildKitUtils/) | ||||
|     { | ||||
|         $ver_a = shift; | ||||
|     } | ||||
|     my $ver_b = shift; | ||||
|  | ||||
|     my @a = split(/\./, $ver_a); | ||||
|     my @b = split(/\./, $ver_b); | ||||
|     my $len_a = @a; | ||||
|     my $len_b = @b; | ||||
|  | ||||
|     my $index     = 0; | ||||
|     my $max_index = ($len_a > $len_b) ? $len_a : $len_b; | ||||
|  | ||||
|     for ($index = 0 ; $index <= $max_index ; $index++) | ||||
|     { | ||||
|         my $val_a = ($len_a < $index) ? 0 : $a[$index]; | ||||
|         my $val_b = ($len_b < $index) ? 0 : $b[$index]; | ||||
|         if ($val_a > $val_b) { return 1; } | ||||
|         if ($val_a < $val_b) { return -1; } | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3  osver | ||||
|         Returns the os and version of the System you are running on  | ||||
|     Arguments: | ||||
|       none | ||||
|     Returns: | ||||
|         0 - ok | ||||
|     Globals: | ||||
|         none | ||||
|     Error: | ||||
|         1 error | ||||
|     Example: | ||||
|          my $os=(xCAT::BuildKitUtils->osver{ ...} | ||||
|     Comments: | ||||
|         none | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub osver | ||||
| { | ||||
|     my $osver = "unknown"; | ||||
|     my $os    = ''; | ||||
|     my $ver   = ''; | ||||
|     my $line  = ''; | ||||
|     my @lines; | ||||
|     my $relfile; | ||||
|     if (-f "/etc/redhat-release") | ||||
|     { | ||||
|         open($relfile,"<","/etc/redhat-release"); | ||||
|         $line = <$relfile>; | ||||
|         close($relfile); | ||||
|         chomp($line); | ||||
|         $os = "rh"; | ||||
|         $ver=$line; | ||||
|   #      $ver=~ s/\.//; | ||||
|         $ver =~ s/[^0-9]*([0-9.]+).*/$1/; | ||||
|         if    ($line =~ /AS/)     { $os = 'rhas' } | ||||
|         elsif ($line =~ /ES/)     { $os = 'rhes' } | ||||
|         elsif ($line =~ /WS/)     { $os = 'rhws' } | ||||
|         elsif ($line =~ /Server/) { $os = 'rhels' } | ||||
|         elsif ($line =~ /Client/) { $os = 'rhel' } | ||||
|         elsif (-f "/etc/fedora-release") { $os = 'rhfc' } | ||||
|     } | ||||
|     elsif (-f "/etc/SuSE-release") | ||||
|     { | ||||
|         open($relfile,"<","/etc/SuSE-release"); | ||||
|         @lines = <$relfile>; | ||||
|         close($relfile); | ||||
|         chomp(@lines); | ||||
|         if (grep /SLES|Enterprise Server/, @lines) { $os = "sles" } | ||||
|         if (grep /SLEC/, @lines) { $os = "slec" } | ||||
|         $ver = $lines[0]; | ||||
|         $ver =~ s/\.//; | ||||
|         $ver =~ s/[^0-9]*([0-9]+).*/$1/; | ||||
|  | ||||
|         #print "ver: $ver\n"; | ||||
|     } | ||||
|     elsif (-f "/etc/UnitedLinux-release") | ||||
|     { | ||||
|  | ||||
|         $os = "ul"; | ||||
|         open($relfile,"<","/etc/UnitedLinux-release"); | ||||
|         $ver = <$relfile>; | ||||
|         close($relfile); | ||||
|         $ver =~ tr/\.//; | ||||
|         $ver =~ s/[^0-9]*([0-9]+).*/$1/; | ||||
|     } | ||||
|     elsif (-f "/etc/lsb-release")   # Possibly Ubuntu | ||||
|     { | ||||
|  | ||||
|         if (open($relfile,"<","/etc/lsb-release")) { | ||||
|             my @text = <$relfile>; | ||||
|             close($relfile); | ||||
|             chomp(@text); | ||||
|             my $distrib_id = ''; | ||||
|             my $distrib_rel = ''; | ||||
|  | ||||
|             foreach (@text) { | ||||
|                 if ( $_ =~ /^\s*DISTRIB_ID=(.*)$/ ) { | ||||
|                     $distrib_id = $1;                   # last DISTRIB_ID value in file used | ||||
|                 } elsif ( $_ =~ /^\s*DISTRIB_RELEASE=(.*)$/ ) { | ||||
|                     $distrib_rel = $1;                  # last DISTRIB_RELEASE value in file used | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if ( $distrib_id =~ /^(Ubuntu|"Ubuntu")\s*$/ ) { | ||||
|                 $os = "ubuntu"; | ||||
|  | ||||
|                 if ( $distrib_rel =~ /^(.*?)\s*$/ ) {       # eliminate trailing blanks, if any | ||||
|                     $distrib_rel = $1; | ||||
|                 } | ||||
|                 if ( $distrib_rel =~ /^"(.*?)"$/ ) {        # eliminate enclosing quotes, if any | ||||
|                     $distrib_rel = $1; | ||||
|                 } | ||||
|                 $ver = $distrib_rel; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     $os = "$os" . "," . "$ver"; | ||||
|     return ($os); | ||||
| } | ||||
|  | ||||
| #----------------------------------------------------------------------------- | ||||
| =head3 acquire_lock | ||||
|     Get a lock on an arbirtrary named resource.  For now, this is only across the scope of one service node/master node, an argument may be added later if/when 'global' locks are supported. This call will block until the lock is free. | ||||
|     Arguments: | ||||
|         A string name for the lock to acquire | ||||
|     Returns: | ||||
|         false on failure | ||||
|         A reference for the lock being held. | ||||
| =cut | ||||
|  | ||||
| sub acquire_lock { | ||||
|     my $lock_name = shift; | ||||
|     use File::Path; | ||||
|     mkpath("/var/lock/xcat/"); | ||||
|     use Fcntl ":flock"; | ||||
|     my $tlock; | ||||
|     $tlock->{path}="/var/lock/xcat/".$lock_name; | ||||
|     open($tlock->{fd},">",$tlock->{path}) or return undef; | ||||
|     unless ($tlock->{fd}) { return undef; } | ||||
|     flock($tlock->{fd},LOCK_EX) or return undef; | ||||
|     return $tlock; | ||||
| } | ||||
|          | ||||
| #--------------------- | ||||
| =head3 release_lock | ||||
|     Release an acquired lock | ||||
|     Arguments: | ||||
|         reference to lock | ||||
|     Returns: | ||||
|         false on failure, true on success | ||||
| =cut | ||||
|  | ||||
| sub release_lock { | ||||
|     my $tlock = shift; | ||||
|     unlink($tlock->{path}); | ||||
|     flock($tlock->{fd},LOCK_UN); | ||||
|     close($tlock->{fd}); | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3   get_unique_members  | ||||
|     Description: | ||||
|         Return an array which have unique members | ||||
|  | ||||
|     Arguments: | ||||
|         origarray: the original array to be treated | ||||
|     Returns: | ||||
|         Return an array, which contains unique members. | ||||
|     Globals: | ||||
|         none | ||||
|     Error: | ||||
|         none | ||||
|     Example: | ||||
|         my @new_array = xCAT::BuildKitUtils::get_unique_members(@orig_array); | ||||
|     Comments: | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub get_unique_members | ||||
| { | ||||
|     my @orig_array = @_; | ||||
|     my %tmp_hash = (); | ||||
|     for my $ent (@orig_array) | ||||
|     { | ||||
|         $tmp_hash{$ent} = 1; | ||||
|     } | ||||
|     return keys %tmp_hash; | ||||
| } | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3  full_path | ||||
|     Description: | ||||
|         Convert the relative path to full path. | ||||
|  | ||||
|     Arguments: | ||||
|         relpath: relative path | ||||
|         cwdir: current working directory, use the cwd() if not specified | ||||
|     Returns: | ||||
|         Return the full path | ||||
|         NULL  - Failed to get the full path. | ||||
|     Globals: | ||||
|         none | ||||
|     Error: | ||||
|         none | ||||
|     Example: | ||||
|         my $fp = xCAT::BuildKitUtils::full_path('./test', '/home/guest'); | ||||
|     Comments: | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub full_path | ||||
| { | ||||
|     my ($class, $relpath, $cwdir) = @_; | ||||
|  | ||||
|     my $fullpath; | ||||
|  | ||||
|     if (!$cwdir) { #cwdir is not specified | ||||
|         $fullpath = Cwd::abs_path($relpath); | ||||
|     } else { | ||||
|         $fullpath = $cwdir . "/$relpath"; | ||||
|     } | ||||
|  | ||||
|     return $fullpath; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| 1; | ||||
							
								
								
									
										189
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/buildkit.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/buildkit.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,189 @@ | ||||
| # Kit Build File | ||||
| #  | ||||
| # This file was initially auto-generated by the buildkit CLI command. | ||||
| # To create a new kit, the user should modify this file accordingly. | ||||
| # Refer to the buildkit manpage for further details. | ||||
| # | ||||
|  | ||||
| # kit: This section defines general info for the Kit.  | ||||
| #      There must be exactly one kit section in a kit build file. | ||||
| #  | ||||
| # kit attributes: | ||||
| #    basename        (mandatory) Kit base name. e.g., kit-lsf | ||||
| #    desc            (optional)  Kit description. | ||||
| #    version         (mandatory) Kit version. e.g., 1.0 | ||||
| #    ostype          (mandatory) Kit OS type.  Must be Linux. | ||||
| #                      AIX is currently not supported. | ||||
| #    isinternal      (optional)  PCM use only. | ||||
| #                      Indicate if Kit is for internal use. | ||||
| #                      Use 1 for yes, 0 for no. Default: 0 | ||||
| #    kitdeployparams (optional)  Filename containing a list of kit deployment | ||||
| #                       parameters, relative to | ||||
| #                       <Kit Build Directory>/other_files | ||||
| kit: | ||||
|    basename=<<<INSERT_kitbasename_HERE>>> | ||||
|    desc=description for <<<INSERT_kitbasename_HERE>>> | ||||
|    version=1.0 | ||||
|    ostype=Linux | ||||
|    kitdeployparams=sample/kitdeployparams.lst | ||||
|  | ||||
|  | ||||
| # kitrepo: This section defines a Kit Package Repository. | ||||
| #          There must be at least one kitrepo section in a kit build file.   | ||||
| #          If you want to support multiple OSes, you should create a separate | ||||
| #          repo for each OS.  Also, no two repos can be defined with the same  | ||||
| #          OS name, major/minor version and arch. For example, you cannot have | ||||
| #          two repos for RHEL 6.2 x86_64 in the same kit. | ||||
| # | ||||
| # kitrepo attributes: | ||||
| #    kitrepoid          (mandatory) Kit package repository ID. | ||||
| #                         Must be unique within this file. | ||||
| #    osbasename         (mandatory) OS distro base name. e.g., rhels. | ||||
| #    osmajorversion     (mandatory) OS major version. e.g., 6 | ||||
| #    osminorversion     (optional)  OS minor version. | ||||
| #    osarch             (mandatory) OS architecture. e.g., x86_64 | ||||
| #    compat_osbasenames (optional)  Comma-separated list of compatible  | ||||
| #                         OS distro base names. e.g., centos | ||||
|  | ||||
| kitrepo: | ||||
|    kitrepoid=<<<INSERT_kitrepoid_HERE>>> | ||||
|    osbasename=<<<INSERT_osbasename_HERE>>> | ||||
|    osmajorversion=<<<INSERT_osmajorversion_HERE>>> | ||||
|    osminorversion=<<<INSERT_osminorversion_HERE>>> | ||||
|    osarch=<<<INSERT_osarch_HERE>>> | ||||
|    #compat_osbasenames= | ||||
|  | ||||
|  | ||||
| # kitcomponent: This section defines one Kit Component.   | ||||
| #               There can be zero or more kitcomponent sections.  | ||||
| #               If you want to build a component which supports multiple OSes, | ||||
| #               you should create one kitcomponent section for each OS.   | ||||
| #               Also, no two components in a kit can be defined with the same  | ||||
| #               base name.  | ||||
| # | ||||
| # kitcomponent attributes: | ||||
| #    basename        (mandatory) Kit component base name | ||||
| #    desc            (optional)  Kit component description | ||||
| #    version         (mandatory) Kit component version | ||||
| #    release         (mandatory) Kit component release | ||||
| #    serverroles     (mandatory) Comma-separated list of servers that this | ||||
| #                      component can install on. Valid values: | ||||
| #                         mgtnode,servicenode,compute,loginnode,storagenode | ||||
| #    kitrepoid       (mandatory) The ID of the kit package repository this | ||||
| #                      component belongs to | ||||
| #    kitcompdeps     (optional)  Comma-separated list of kit component | ||||
| #                       dependencies.  These kit components can be included in | ||||
| #                       this kit or in other kits. | ||||
| #    ospkgdeps       (optional)  Comma-separated list of OS package dependencies | ||||
| #                       These packages must be shipped with the OS distro. | ||||
| #    kitpkgdeps      (optional)  Comma-separated list of kit package names that | ||||
| #                       will be listed as "REQUIRES" when building this kit | ||||
| #                       component. Each package must be defined in a separate | ||||
| #                       kitpackage section. Each package must be in the same  | ||||
| #                       kitrepo as this kit component. | ||||
| #    non_native_pkgs (optional)  TBD -- NOT SUPPORTED YET! | ||||
| #                       Comma-separated list of non-native package  | ||||
| #                       paths that will be included as files in this kit  | ||||
| #                       component. All filenames are relative to  | ||||
| #                       <Kit Build Directory>/source_packages  | ||||
| #                       Kit component deployment scripts must be specified | ||||
| #                       to manage these files. | ||||
| #   driverpacks      (optional) Comma-separated list of driver package filenames | ||||
| #                       Each driverpack must be defined in a separate kitpackage | ||||
| #                       section. | ||||
| #   exlist           (optional) Exclude list file for stateless image, relative | ||||
| #                       to <Kit Build Directory>/other_files | ||||
| #   Kit component deployment scripts (optional)  Each attribute specifies  | ||||
| #                       script path relative to <Kit Build Directory>/scripts | ||||
| #                       Script attributes: | ||||
| #                         preinstall, postinstall, preuninstall, postuninstall,  | ||||
| #                         preupgrade, postupgrade, postbootscripts | ||||
| kitcomponent: | ||||
|     basename=<<<INSERT_kitcomponent_basename_HERE>>> | ||||
|     desc=description for component <<<INSERT_kitcomponent_basename_HERE>>> | ||||
|     version=1.0 | ||||
|     release=1 | ||||
|     serverroles=compute | ||||
|     kitrepoid=<<<INSERT_kitrepoid_HERE>>> | ||||
|     #kitcompdeps= | ||||
|     #ospkgdeps= | ||||
|     kitpkgdeps=pkg1 | ||||
|     #kitpkgdeps=pkg1,pkg2,pkg2,pkg4 | ||||
|     #non_native_pkgs=  | ||||
|     #driverpacks= | ||||
|     exlist=sample/exclude.lst  | ||||
|     preinstall=sample/pre.sh | ||||
|     postinstall=sample/post.sh | ||||
|     preuninstall=sample/preun.sh | ||||
|     postuninstall=sample/postun.sh | ||||
|     preupgrade=sample/preup.sh | ||||
|     postupgrade=sample/postup.sh | ||||
|     postbootscripts=sample/postboot.sh  | ||||
|  | ||||
|  | ||||
| # kitpackage: This section defines one Kit Package, and how to build it. | ||||
| #             There can be zero or more kitpackage sections.   | ||||
| #             All filenames should be relative paths to | ||||
| #                <Kit Build Directory>/source_packages   | ||||
| #             If you want to build a package which can run on multiple OSes,  | ||||
| #             you have two options: | ||||
| #               1. Build a separate package for each OS you want to support.   | ||||
| #                  For this option, you need to define one kitpackage section  | ||||
| #                  per supported OS. | ||||
| #               2. Build one package that can run on multiple OSes.   | ||||
| #                  If you are building an RPM package, you are responsible for  | ||||
| #                  creating an RPM spec file that can run on multiple OSes.   | ||||
| #                  For this option, you need to define one kitpackage section | ||||
| #                  which contains multiple kitrepoid lines. | ||||
| #  | ||||
| # kitpackage attributes: | ||||
| #    filename   (mandatory) Package filename | ||||
| #    kitrepoid  (mandatory) The repo(s) this package belongs to.   | ||||
| #                 If multiple repos are defined, the package will be built for | ||||
| #                 the first repo only. For the other repos, a symlink is created | ||||
| #                 to the package built for the first repo. | ||||
| #   Package build methods (optional)   | ||||
| #                 Define how to build the packages.  | ||||
| #                 If you don't specify a build method, the default behavior is | ||||
| #                 to assume the package is pre-built under  | ||||
| #                   <Kit Build Directory>/source_packages | ||||
| #                 All files in this section are relative to  | ||||
| #                   <Kit Build Directory>/source_packages | ||||
| #                 There are four methods to build packages. | ||||
| #                   1. Use pre-built RPM package | ||||
| #                       rpm_prebuiltdir: Path to directory containing pre-built | ||||
| #                                        RPM package | ||||
| #                   2. Build RPM from spec + src dir | ||||
| #                       rpm_spec:   Path to spec file. | ||||
| #                       rpm_srcdir: Path to source directory. | ||||
| #                   3. Build RPM from spec + src tarball | ||||
| #                       rpm_spec:        Path to spec file. | ||||
| #                       rpm_srctarball:  Path to source tarball. | ||||
| #                   4. Build RPM from source RPM | ||||
| #                       rpm_srpm:  Path to source RPM package. | ||||
| kitpackage: | ||||
|     filename=pkg1-1-1.noarch.rpm | ||||
|     kitrepoid=<<<INSERT_kitrepoid_HERE>>> | ||||
|     # Method 1: Use pre-built RPM package | ||||
|     rpm_prebuiltdir=sample/pkg1 | ||||
|  | ||||
| #kitpackage: | ||||
| #    filename=pkg2-1-1.noarch.rpm | ||||
| #    kitrepoid=<<<INSERT_kitrepoid_HERE>>> | ||||
| #    # Method 2: Build RPM from spec + src dir | ||||
| #    rpm_spec=sample/pkg2/pkg2.spec | ||||
| #    rpm_srcdir=sample/pkg2/pkg2 | ||||
| # | ||||
| #kitpackage: | ||||
| #    filename=pkg3-1-1.noarch.rpm | ||||
| #    kitrepoid=<<<INSERT_kitrepoid_HERE>>> | ||||
| #    # Method 3: Build RPM from spec + src tarball | ||||
| #    rpm_spec=sample/pkg3/pkg3.spec | ||||
| #    rpm_srctarball=sample/pkg3/pkg3.tar.gz | ||||
| # | ||||
| #kitpackage: | ||||
| #    filename=pkg4-1-1.noarch.rpm | ||||
| #    kitrepoid=<<<INSERT_kitrepoid_HERE>>> | ||||
| #    # Method 4: Build RPM from source RPM | ||||
| #    rpm_srpm=sample/pkg4/pkg4-1-1.src.rpm | ||||
| # | ||||
| @@ -0,0 +1,175 @@ | ||||
| package xCAT_plugin::<<<buildkit_WILL_INSERT_kitname_HERE>>>_imageprofile; | ||||
|  | ||||
| use strict; | ||||
| use warnings; | ||||
|  | ||||
| require xCAT::Utils; | ||||
| require xCAT::Table; | ||||
| require xCAT::KitPluginUtils; | ||||
|  | ||||
|  | ||||
| # buildkit Processing | ||||
| #   In order to avoid collisions with other plugins, the package | ||||
| #   name for this plugin must contain the full kit name. | ||||
| #   The buildkit buildtar command will copy this file from your plugins | ||||
| #   directory to the the kit build directory, renaming the file with the | ||||
| #   correct kit name.  All strings in this file of the form | ||||
| #      <<<buildkit_WILL_INSERT_kitname_HERE>>> | ||||
| #   will be replaced with the full kit name.  In order for buildkit to | ||||
| #   correctly edit this file, do not remove these strings. | ||||
|  | ||||
|  | ||||
| # Global Variables | ||||
|  | ||||
| # This is the full name of the kit which this plugin belongs  | ||||
| # to. The kit name is used by some code in process_request()  | ||||
| # to determine if the plugin should run.  When you are testing  | ||||
| # your plugin the kit name should be set to "TESTMODE" to  | ||||
| # bypass the plugin check in process_request(). | ||||
|  | ||||
| our ($PLUGIN_KITNAME); | ||||
| #$PLUGIN_KITNAME = "TESTMODE"; | ||||
| $PLUGIN_KITNAME = "<<<buildkit_WILL_INSERT_kitname_HERE>>>"; | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head1 | ||||
|  | ||||
|     Image Profile Kit Plugin | ||||
|     This plugin contains commands to run custom actions  | ||||
|     during image profile operations. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  handled_commands | ||||
|  | ||||
|     Return list of kit plugin commands handled by this plugin | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub handled_commands { | ||||
|     return { | ||||
|         kitimagevalidatecomps => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_imageprofile', | ||||
|         kitimageimport => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_imageprofile', | ||||
|     }; | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  process_request | ||||
|  | ||||
|     Process the kit plugin command. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub process_request { | ||||
|     my $request = shift; | ||||
|     my $callback = shift; | ||||
|  | ||||
|     # This kit plugin is passed the name of an image profile. | ||||
|     # We need to determine which kits is used by this | ||||
|     # image profile to decide if this plugin should run or not. | ||||
|  | ||||
|     my $imgprofilename = $request->{arg}->[0]; | ||||
|  | ||||
|     my $kitdata = $request->{kitdata}; | ||||
|     if (! defined($kitdata)) { | ||||
|         $kitdata = xCAT::KitPluginUtils->get_kits_used_by_image_profiles([$imgprofilename]); | ||||
|         $request->{kitdata} = $kitdata; | ||||
|     } | ||||
|  | ||||
|     if ($PLUGIN_KITNAME ne "TESTMODE" && ! exists($kitdata->{$PLUGIN_KITNAME})) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     # Name of command and node list | ||||
|     my $command = $request->{command}->[0]; | ||||
|     my $args = $request->{arg}; | ||||
|  | ||||
|     if($command eq 'kitimagevalidatecomps') { | ||||
|         kitimagevalidatecomps($callback, $args); | ||||
|     } | ||||
|     elsif ($command eq 'kitimageimport') { | ||||
|         kitimageimport($callback, $args); | ||||
|  | ||||
|     } else { | ||||
|         my $rsp; | ||||
|         $rsp->{data}->[0] = "Command is not supported"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitimagevalidatecomps | ||||
|  | ||||
|      This command is called to validate new changes to an  | ||||
|      image profile's kit component list before the changes  | ||||
|      are committed. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitimagevalidatecomps { | ||||
|     my $callback = shift; | ||||
|     my $args = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     # Parameters | ||||
|     my $imgprofilename =  $args->[0]; | ||||
|     my $newcomplist = $args->[1]; | ||||
|     my @newcomplist = (); | ||||
|     if (defined($newcomplist)) { | ||||
|         @newcomplist = split(/,/, $newcomplist); | ||||
|     } | ||||
|     my $newosdistro = $args->[2]; | ||||
|     my $newosdistroupdate = $args->[3]; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitimagevalidatecomps"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitimageimport | ||||
|  | ||||
|     This command is called after changes to an image profile  | ||||
|     have been committed. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitimageimport { | ||||
|     my $callback = shift; | ||||
|     my $args = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     # Parameters | ||||
|     my $imgprofilename = $args->[0]; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitimageimport"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -0,0 +1,251 @@ | ||||
| package xCAT_plugin::<<<buildkit_WILL_INSERT_kitname_HERE>>>_nodemgmt; | ||||
|  | ||||
| use strict; | ||||
| use warnings; | ||||
|  | ||||
| require xCAT::Utils; | ||||
| require xCAT::Table; | ||||
| require xCAT::KitPluginUtils; | ||||
|  | ||||
| # buildkit Processing | ||||
| #   In order to avoid collisions with other plugins, the package | ||||
| #   name for this plugin must contain the full kit name. | ||||
| #   The buildkit buildtar command will copy this file from your plugins | ||||
| #   directory to the the kit build directory, renaming the file with the | ||||
| #   correct kit name.  All strings in this file of the form  | ||||
| #      <<<buildkit_WILL_INSERT_kitname_HERE>>> | ||||
| #   will be replaced with the full kit name.  In order for buildkit to | ||||
| #   correctly edit this file, do not remove these strings. | ||||
|  | ||||
| # Global Variables | ||||
|  | ||||
| # This is the full name of the kit which this plugin belongs  | ||||
| # to. The kit name is used by some code in process_request()  | ||||
| # to determine if the plugin should run.  When you are testing  | ||||
| # your plugin the kit name should be set to "TESTMODE" to  | ||||
| # bypass the plugin check in process_request(). | ||||
|  | ||||
| our ($PLUGIN_KITNAME); | ||||
| #$PLUGIN_KITNAME = "TESTMODE"; | ||||
| $PLUGIN_KITNAME = "<<<buildkit_WILL_INSERT_kitname_HERE>>>"; | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head1 | ||||
|  | ||||
|     Node Management Kit Plugin | ||||
|     This plugin contains commands to run custom actions  | ||||
|     during node management operations. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  handled_commands | ||||
|  | ||||
|     Return list of kit plugin commands handled by this plugin | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub handled_commands { | ||||
|     return { | ||||
|         kitnodeadd => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_nodemgmt', | ||||
|         kitnoderemove => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_nodemgmt', | ||||
|         kitnodeupdate => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_nodemgmt', | ||||
|         kitnoderefresh => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_nodemgmt', | ||||
|         kitnodefinished => '<<<buildkit_WILL_INSERT_kitname_HERE>>>_nodemgmt', | ||||
|     }; | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  process_request | ||||
|  | ||||
|     Process the kit plugin command. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub process_request { | ||||
|     my $request = shift; | ||||
|     my $callback = shift; | ||||
|  | ||||
|     # Name of command and node list | ||||
|     my $command = $request->{command}->[0]; | ||||
|     my $nodes = $request->{node}; | ||||
|  | ||||
|     # This kit plugin is passed a list of node names. | ||||
|     # We need to determine which kits are used by these | ||||
|     # nodes to decide if this plugin should run or not. | ||||
|  | ||||
|     my $kitdata = $request->{kitdata}; | ||||
|     if (! defined($kitdata)) { | ||||
|         $kitdata = xCAT::KitPluginUtils->get_kits_used_by_nodes($nodes); | ||||
|         $request->{kitdata} = $kitdata; | ||||
|     } | ||||
|  | ||||
|     if ($PLUGIN_KITNAME ne "TESTMODE" && ! exists($kitdata->{$PLUGIN_KITNAME})) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     # Get the nodes using this plugin's kit | ||||
|     $nodes = $kitdata->{$PLUGIN_KITNAME}; | ||||
|  | ||||
|  | ||||
|     if($command eq 'kitnodeadd') { | ||||
|         kitnodeadd($callback, $nodes); | ||||
|     } | ||||
|     elsif ($command eq 'kitnoderemove') { | ||||
|         kitnoderemove($callback, $nodes); | ||||
|     } | ||||
|     elsif ($command eq 'kitnodeupdate') { | ||||
|         kitnodeupdate($callback, $nodes); | ||||
|     } | ||||
|     elsif ($command eq 'kitnoderefresh') { | ||||
|         kitnoderefresh($callback, $nodes); | ||||
|     } | ||||
|     elsif ($command eq 'kitnodefinished') { | ||||
|         kitnodefinished($callback); | ||||
|  | ||||
|     } else { | ||||
|         my $rsp; | ||||
|         $rsp->{data}->[0] = "Command is not supported"; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitnodeadd | ||||
|  | ||||
|     This command is called when one or more nodes are added  | ||||
|     to the cluster. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitnodeadd { | ||||
|     my $callback = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     # Parameters | ||||
|     my $nodes = shift; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitnodeadd"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitnoderemove | ||||
|  | ||||
|     This command is called when one or more nodes are  | ||||
|     removed from the cluster. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitnoderemove { | ||||
|     my $callback = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     # Parameters | ||||
|     my $nodes = shift; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitnoderemove"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitnodeupdate | ||||
|  | ||||
|     This command is called when the configuration of one  | ||||
|     or more nodes are updated. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitnodeupdate { | ||||
|     my $callback = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     # Parameters | ||||
|     my $nodes = shift; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitnodeupdate"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitnoderefresh | ||||
|  | ||||
|     This command is called when node-related configuration | ||||
|     files are updated. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitnoderefresh { | ||||
|     my $callback = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     # Parameters | ||||
|     my $nodes = shift; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitnoderefresh"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| =head3  kitnodefinished | ||||
|  | ||||
|     This command is called at the end of a node management | ||||
|     operation.  | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------- | ||||
|  | ||||
| sub kitnodefinished { | ||||
|     my $callback = shift; | ||||
|     my $rsp; | ||||
|  | ||||
|     $rsp->{data}->[0] = "Running kitnodefinished"; | ||||
|     xCAT::MsgUtils->message("I", $rsp, $callback); | ||||
|  | ||||
|     # TODO | ||||
|     # ... ADD YOUR CODE HERE | ||||
| } | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/post.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/post.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| echo "running sample-comp1 post script" | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/postboot.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/postboot.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| echo "running sample-comp1 postboot script" | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/postun.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/postun.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| echo "running sample-comp1 postun script" | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/postup.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/postup.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| echo "running sample-comp1 postup script" | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/pre.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/pre.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| echo "running sample-comp1 pre script" | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/preun.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/preun.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| echo "running sample-comp1 preun script" | ||||
|  | ||||
							
								
								
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/preup.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								xCAT-buildkit/share/xcat/kits/kit_template/scripts/sample/preup.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
|  | ||||
| echo "running sample-comp1 preup script" | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1,76 @@ | ||||
| Summary: Pkg2 for Sample Kit | ||||
| Name: pkg2 | ||||
| Version: 1 | ||||
| Release: 1 | ||||
| Epoch: 1 | ||||
| License: EPL | ||||
| Group: Applications/System | ||||
| Source: pkg2.tar.gz | ||||
| Packager: IBM Corp. | ||||
| Vendor: IBM Corp. | ||||
| Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}} | ||||
| Prefix: /opt/xcat-kitsample | ||||
| BuildRoot: /var/tmp/%{name}-%{version}-%{release}-root | ||||
|  | ||||
| %ifos linux | ||||
| BuildArch: noarch | ||||
| #Requires: | ||||
| %endif | ||||
|  | ||||
| Provides: pkg2 = %{epoch}:%{version} | ||||
|  | ||||
| %description | ||||
| Testing package builds for xCAT Sample Kit | ||||
|  | ||||
| %prep | ||||
| %setup -q -n pkg2 | ||||
| %build | ||||
| %install | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/%{name}/files | ||||
| mkdir -p $RPM_BUILD_ROOT/etc/%{name} | ||||
|  | ||||
|  | ||||
| set +x | ||||
|  | ||||
| %ifos linux | ||||
| cp -a files/* $RPM_BUILD_ROOT/%{prefix}/%{name}/files/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/%{name}/files/* | ||||
| cp -a cfg/* $RPM_BUILD_ROOT/etc/%{name}/ | ||||
| chmod -R 644 $RPM_BUILD_ROOT/etc/%{name}/* | ||||
| %endif | ||||
|  | ||||
| set -x | ||||
|  | ||||
|  | ||||
| %clean | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
|  | ||||
| %files | ||||
| %defattr(-,root,root) | ||||
| %{prefix} | ||||
| /etc/%{name} | ||||
|  | ||||
| %changelog | ||||
|  | ||||
| %pre | ||||
| if [ "$1" = "1" ] ; then | ||||
|    echo "running pkg2 rpm pre section" | ||||
| elif [ "$1" = "2" ] ; then | ||||
|    echo "running pkg2 rpm preup section" | ||||
| fi | ||||
|  | ||||
| %post | ||||
| if [ "$1" = "1" ] ; then | ||||
|    echo "running pkg2 rpm post section" | ||||
| elif [ "$1" = "2" ] ; then | ||||
|     echo "running pkg2 rpm postup section" | ||||
| fi | ||||
|  | ||||
| %preun | ||||
| echo "running pkg2 rpm preun section" | ||||
|  | ||||
| %postun | ||||
| echo "running pkg2 rpm postun section" | ||||
|  | ||||
|  | ||||
| @@ -0,0 +1,3 @@ | ||||
| # | ||||
| # | ||||
| #  a config file for pkg2 | ||||
| @@ -0,0 +1 @@ | ||||
| file 1 in pkg2 | ||||
| @@ -0,0 +1,2 @@ | ||||
| file 2 in pkg2 | ||||
|  | ||||
| @@ -0,0 +1,76 @@ | ||||
| Summary: Pkg3 for Sample Kit | ||||
| Name: pkg3 | ||||
| Version: 1 | ||||
| Release: 1 | ||||
| Epoch: 1 | ||||
| License: EPL | ||||
| Group: Applications/System | ||||
| Source: pkg3.tar.gz | ||||
| Packager: IBM Corp. | ||||
| Vendor: IBM Corp. | ||||
| Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}} | ||||
| Prefix: /opt/xcat-kitsample | ||||
| BuildRoot: /var/tmp/%{name}-%{version}-%{release}-root | ||||
|  | ||||
| %ifos linux | ||||
| BuildArch: noarch | ||||
| #Requires: | ||||
| %endif | ||||
|  | ||||
| Provides: pkg3 = %{epoch}:%{version} | ||||
|  | ||||
| %description | ||||
| Testing package builds for xCAT Sample Kit | ||||
|  | ||||
| %prep | ||||
| %setup -q -n pkg3 | ||||
| %build | ||||
| %install | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/%{name}/files | ||||
| mkdir -p $RPM_BUILD_ROOT/etc/%{name} | ||||
|  | ||||
| set +x | ||||
|  | ||||
| %ifos linux | ||||
| cp -a files/* $RPM_BUILD_ROOT/%{prefix}/%{name}/files/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/%{name}/files/* | ||||
| cp -a cfg/* $RPM_BUILD_ROOT/etc/%{name}/ | ||||
| chmod -R 644 $RPM_BUILD_ROOT/etc/%{name}/* | ||||
| %endif | ||||
|  | ||||
| set -x | ||||
|  | ||||
|  | ||||
| %clean | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
|  | ||||
| %files | ||||
| %defattr(-,root,root) | ||||
| %{prefix} | ||||
| /etc/%{name} | ||||
|  | ||||
| %changelog | ||||
|  | ||||
| %pre | ||||
| if [ "$1" = "1" ] ; then | ||||
|    echo "running pkg3 rpm pre section" | ||||
| elif [ "$1" = "2" ] ; then | ||||
|    echo "running pkg3 rpm preup section" | ||||
| fi | ||||
|  | ||||
| %post | ||||
| if [ "$1" = "1" ] ; then | ||||
|    echo "running pkg3 rpm post section" | ||||
| elif [ "$1" = "2" ] ; then | ||||
|     echo "running pkg3 rpm postup section" | ||||
| fi | ||||
|  | ||||
| %preun | ||||
| echo "running pkg3 rpm preun section" | ||||
|  | ||||
| %postun | ||||
| echo "running pkg3 rpm postun section" | ||||
|  | ||||
|  | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										48
									
								
								xCAT-buildkit/share/xcat/kits/kitcomponent.spec.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								xCAT-buildkit/share/xcat/kits/kitcomponent.spec.template
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| Summary: Kit <<<INSERT_kitbasename_HERE>>> Component <<<INSERT_kitcomponent_basename_HERE>>> metapackage | ||||
| Name: <<<INSERT_kitcomponent_basename_HERE>>> | ||||
| Version: <<<INSERT_kitcomponent_version_HERE>>> | ||||
| Release: <<<INSERT_kitcomponent_release_HERE>>> | ||||
| License: EPL | ||||
| BuildArch: noarch | ||||
| Requires:   <<<INSERT_kitcomponent_ospkgdeps_HERE>>>,<<<INSERT_kitcomponent_kitpkgdeps_HERE>>>,<<<INSERT_kitcomponent_kitcompdeps_HERE>>> | ||||
|  | ||||
| %description | ||||
| <<<INSERT_kitcomponent_desc_HERE>>> | ||||
|  | ||||
| %prep | ||||
| %build | ||||
| %install | ||||
|  | ||||
| %clean | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
|  | ||||
| %files | ||||
| %defattr(-,root,root) | ||||
|  | ||||
| %changelog | ||||
|  | ||||
| %pre | ||||
| if [ "$1" = "1" ] ; then | ||||
| <<<INSERT_kitcomponent_preinstall_script_HERE>>> | ||||
|     | ||||
|  | ||||
| elif [ "$1" = "2" ] ; then | ||||
| <<<INSERT_kitcomponent_preupgrade_script_HERE>>> | ||||
|  | ||||
| fi | ||||
|  | ||||
| %post | ||||
| if [ "$1" = "1" ] ; then | ||||
| <<<INSERT_kitcomponent_postinstall_script_HERE>>> | ||||
|  | ||||
| elif [ "$1" = "2" ] ; then | ||||
| <<<INSERT_kitcomponent_postupgrade_script_HERE>>> | ||||
|  | ||||
| fi | ||||
|  | ||||
| %preun | ||||
| <<<INSERT_kitcomponent_preuninstall_script_HERE>>> | ||||
|  | ||||
| %postun | ||||
| <<<INSERT_kitcomponent_postuninstall_script_HERE>>> | ||||
|  | ||||
							
								
								
									
										93
									
								
								xCAT-buildkit/xCAT-buildkit.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								xCAT-buildkit/xCAT-buildkit.spec
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| Summary: xCAT buildkit tools and sample kit | ||||
| Name: xCAT-buildkit | ||||
| Version: %(cat Version) | ||||
| Release: snap%(date +"%Y%m%d%H%M") | ||||
| Epoch: 4 | ||||
| License: EPL | ||||
| Group: Applications/System | ||||
| Source: xCAT-buildkit-%(cat Version).tar.gz | ||||
| Packager: IBM Corp. | ||||
| Vendor: IBM Corp. | ||||
| Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}} | ||||
| Prefix: /opt/xcat | ||||
| BuildRoot: /var/tmp/%{name}-%{version}-%{release}-root | ||||
|  | ||||
| #%ifnos linux | ||||
| AutoReqProv: no | ||||
| #%endif | ||||
|  | ||||
| # AIX will build with an arch of "ppc" | ||||
| # also need to fix Requires for AIX | ||||
| %ifos linux | ||||
| BuildArch: noarch | ||||
| #Requires:  | ||||
| %endif | ||||
|  | ||||
| # No dependencies on any other xCAT rpms | ||||
| # so that this rpm can be installed in a separate build server | ||||
| Requires: rpm-build | ||||
|  | ||||
| Provides: xCAT-buildkit = %{epoch}:%{version} | ||||
|  | ||||
| %description | ||||
| xCAT-buildkit provides the buildkit tool and sample kit files to build an xCAT kit. | ||||
|  | ||||
| %prep | ||||
| %setup -q -n xCAT-buildkit | ||||
| %build | ||||
| %install | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/bin | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT | ||||
|  | ||||
| %ifos linux | ||||
| cp -aR share/xcat/kits/* $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/ | ||||
| chmod -R 644 $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/* | ||||
| cp -a lib/perl/xCAT/* $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT | ||||
| chmod -R 644 $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT/* | ||||
| cp -a bin/* $RPM_BUILD_ROOT/%{prefix}/bin/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/bin/* | ||||
| %else | ||||
| cp -hpR share/xcat/kits/* $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/ | ||||
| chmod -R 644 $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/* | ||||
| cp -hpR lib/perl/xCAT/* $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT/* | ||||
| cp -hpR bin/* $RPM_BUILD_ROOT/%{prefix}/bin/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/bin/* | ||||
| %endif | ||||
|  | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-buildkit | ||||
| cp LICENSE.html $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-buildkit | ||||
| chmod 644 $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-buildkit/* | ||||
| echo $RPM_BUILD_ROOT %{prefix} | ||||
|  | ||||
| %clean | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
|  | ||||
| %files | ||||
| %defattr(-,root,root) | ||||
| #%doc LICENSE.html | ||||
| %{prefix} | ||||
|  | ||||
| %changelog | ||||
|  | ||||
| %pre | ||||
| # only need to check on AIX | ||||
| %ifnos linux | ||||
| if [ -x /usr/sbin/emgr ]; then          # Check for emgr cmd | ||||
| 	/usr/sbin/emgr -l 2>&1 |  grep -i xCAT   # Test for any xcat ifixes -  msg and exit if found | ||||
| 	if [ $? = 0 ]; then | ||||
| 		echo "Error: One or more xCAT emgr ifixes are installed. You must use the /usr/sbin/emgr command to uninstall each xCAT emgr ifix prior to RPM installation." | ||||
| 		exit 2 | ||||
| 	fi | ||||
| fi | ||||
| %endif | ||||
|  | ||||
| %post | ||||
|  | ||||
| %preun | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										86
									
								
								xCAT-buildkit/xCAT-buildkit.spec.broken
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								xCAT-buildkit/xCAT-buildkit.spec.broken
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| Summary: xCAT buildkit tools and sample kit | ||||
| Name: xCAT-buildkit | ||||
| Version: %(cat Version) | ||||
| Release: snap%(date +"%Y%m%d%H%M") | ||||
| Epoch: 4 | ||||
| License: EPL | ||||
| Group: Applications/System | ||||
| Source: xCAT-buildkit-%(cat Version).tar.gz | ||||
| Packager: IBM Corp. | ||||
| Vendor: IBM Corp. | ||||
| Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}} | ||||
| Prefix: /opt/xcat | ||||
| BuildRoot: /var/tmp/%{name}-%{version}-%{release}-root | ||||
|  | ||||
| %ifnos linux | ||||
| AutoReqProv: no | ||||
| %endif | ||||
|  | ||||
| # AIX will build with an arch of "ppc" | ||||
| # also need to fix Requires for AIX | ||||
| %ifos linux | ||||
| BuildArch: noarch | ||||
| #Requires:  | ||||
| %endif | ||||
|  | ||||
| # No dependencies on any other xCAT rpms | ||||
| # so that this rpm can be installed in a separate build server | ||||
| Requires: rpm-build | ||||
|  | ||||
| Provides: xCAT-buildkit = %{epoch}:%{version} | ||||
|  | ||||
| %description | ||||
| xCAT-buildkit provides the buildkit tool and sample kit files to build an xCAT kit. | ||||
|  | ||||
| %prep | ||||
| %setup -q -n xCAT-buildkit | ||||
| %build | ||||
| %install | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/bin | ||||
|  | ||||
| %ifos linux | ||||
| cp -aR share/xcat/kits/* $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/ | ||||
| chmod -R 644 $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/* | ||||
| cp -a bin/* $RPM_BUILD_ROOT/%{prefix}/bin/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/bin/* | ||||
| %else | ||||
| cp -hpR share/xcat/kits/* $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/ | ||||
| chmod -R 755 $RPM_BUILD_ROOT/%{prefix}/share/xcat/kits/* | ||||
| %endif | ||||
|  | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-buildkit | ||||
| cp LICENSE.html $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-buildkit | ||||
| chmod 644 $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-buildkit/* | ||||
| echo $RPM_BUILD_ROOT %{prefix} | ||||
|  | ||||
| %clean | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
|  | ||||
| %files | ||||
| %defattr(-,root,root) | ||||
| #%doc LICENSE.html | ||||
| %{prefix} | ||||
|  | ||||
| %changelog | ||||
|  | ||||
| %pre | ||||
| # only need to check on AIX | ||||
| %ifnos linux | ||||
| if [ -x /usr/sbin/emgr ]; then          # Check for emgr cmd | ||||
| 	/usr/sbin/emgr -l 2>&1 |  grep -i xCAT   # Test for any xcat ifixes -  msg and exit if found | ||||
| 	if [ $? = 0 ]; then | ||||
| 		echo "Error: One or more xCAT emgr ifixes are installed. You must use the /usr/sbin/emgr command to uninstall each xCAT emgr ifix prior to RPM installation." | ||||
| 		exit 2 | ||||
| 	fi | ||||
| fi | ||||
| %endif | ||||
|  | ||||
| %post | ||||
|  | ||||
| %preun | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user