mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-22 03:32:04 +00:00
325 lines
17 KiB
ReStructuredText
325 lines
17 KiB
ReStructuredText
Building a Kit
|
|
==============
|
|
|
|
|
|
Install the xCAT-buildkit RPM
|
|
-----------------------------
|
|
check to see if xCAT-buildkit RPM is installed in the build server
|
|
::
|
|
rpm -qa | grep xCAT-buildkit
|
|
|
|
The xCAT-buildkit RPM is required to build a kit. It will be installed automatically as part of installing base xCAT. If the build server is not an xCAT management node, it can be
|
|
#. Download the xCAT tar file and install the xCAT-buildkit RPM from the local repositroy
|
|
#. Install the RPM directly from the internet-hosted repository
|
|
Once the repositories are setup, use yum to install xCAT-buildkit and all its dependencies
|
|
::
|
|
yum clean metadata
|
|
yum install xCAT-buildkit
|
|
|
|
For sles, use zypper install and for Ubuntu, use apt-get to install xCAT-buildkit
|
|
|
|
|
|
Create a Kit directory Structure
|
|
--------------------------------
|
|
Use the **buildkit** command to create a kit template directory structure
|
|
::
|
|
buildkit create <kit_basename> [-l|--kitloc <kit location>]
|
|
|
|
The Kit directory location will be automatically populated with additional subdirecotries and samples:
|
|
::
|
|
|
|
**buildkit.conf** - The sample Kit build configuration file.
|
|
**source_packages** - This directory stores the source packages for Kit Packages and Non-Native Packages.
|
|
The **buildkit** command will search these directories for source packages when building packages.
|
|
This directory stores:
|
|
* RPM spec and tarballs. (A sample spec file is provided.)
|
|
* Source RPMs.
|
|
* Pre-built RPMs (contained in a subdirectory of source_packages)
|
|
* Non-Native Packages
|
|
**scripts** - This directory stores the Kit Deployment Scripts. Samples are provided for each type of script.
|
|
**plugins** - This directory stores the Kit Plugins. Samples are provided for each type of plugin.
|
|
**docs** - This directory stores the Kit documentation files.
|
|
**other_files**
|
|
* **kitdeployparams.lst**: Kit Deployment parameters file
|
|
* **exclude.lst**: File containing files/dirs to exclude in stateless image.
|
|
**build** - This directory stores files when the Kit is built.
|
|
**build/kit_repodir** - This directory stores the fully built Kit Package Repositories
|
|
**build/<kitbasename>** - This directory stores the contents of the Kit tarfile before it is tar'red up.
|
|
**<kit directory location>/<kitname>** - The kit tar file, partial kit name or complete kit tar file name (ex. kitname.tar.bz2)
|
|
|
|
|
|
The Kit Configuration File
|
|
---------------------------------
|
|
|
|
The sample buildkit.conf file contains a description of all the supported attributes and an indication of whether or not they are required or optional. The user need to modify this file for the product kit he/she is building. The file contains stanza format.
|
|
|
|
**kit** --- This stanza defines general information for the Kit. There must be exactly one kit stanza in a kit build file.
|
|
|
|
**kitrepo** --- This stanza defines a Kit Package Repository. There must be at least one kitrepo stanza in a kit build file. If this kit need to support multiple OSes, user should create a separate repository for each OS. Also, no two repositories can be defined with the same OS name, major/minor version, and arch.
|
|
|
|
**kitcomponent** --- This stanza defines one Kit Component. A kitcomponent definition is a way of specifying a subset of the product Kit that may be installed into an xCAT osimage. A kitcomponent may or may not be dependent on other kitcomponents.If user want to build a component which supports multiple OSes, need to create one kitcomponent stanza for each OS.
|
|
|
|
**kitpackage** --- This stanza defines Kit Package (ie. RPM). There can be zero or more kitpackage stanzas. For multiple package supports, need to
|
|
1. Define one kitpackage section per supported OS. or
|
|
2. Define one kitpacakge stanza which contains multiple kitrepoid lines. For the RPM packages, users need to responsible for createing an RPM spec file that can run on multiple OSes.
|
|
|
|
|
|
Sample of buildkit.conf file
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
**Note**: The sample buildkit.conf file may change over time. To get the latest version of the file look for it in the /opt/xcat/share/xcat/kits/kit_template directory.
|
|
::
|
|
# Kit Build File
|
|
#
|
|
# A unique version of this file is automatically generated for a new Kit
|
|
# when you run the **buildkit** command to create a new Kit. The basic template
|
|
# for this file is contained in the /opt/xcat/share/xcat/kits/kit_template
|
|
# directory. Once the initial version of this file is generated you will
|
|
# have to modify it by adding the details needed to build your new Kit.
|
|
#
|
|
# Refer to the buildkit manpage for further details.
|
|
#
|
|
# kit: This stanza defines general information for the Kit.
|
|
# There must be exactly one kit stanza in a buildkit.conf file.
|
|
#
|
|
# kit attributes:
|
|
# basename (mandatory) Kit base name. (ex. "myproduct")
|
|
#
|
|
# description (optional) Kit description.
|
|
#
|
|
# version (mandatory) Kit version. ( template default "1.0")
|
|
#
|
|
# release (optional) Kit release. (template default "1")
|
|
#
|
|
# ostype (mandatory) Kit OS type. (template default "Linux")
|
|
# (AIX is currently not supported.)
|
|
#
|
|
# vendor (optional) The vendor tag is used to define the name of
|
|
# the entity that is responsible for packaging
|
|
# the software.
|
|
#
|
|
# packager (optional) The packager tag is used to hold the name and
|
|
# contact information for the person or persons
|
|
# who built the package.
|
|
#
|
|
# url (optional) The url tag is used to provide a location to
|
|
# obtain additional information about the
|
|
# packaged software.
|
|
#
|
|
# osbasename (optional) OS distro base name. (ex. "rhels")
|
|
#
|
|
# osmajorversion (optional) OS major version. (ex. "6")
|
|
#
|
|
# osminorversion (optional) OS minor version.
|
|
#
|
|
# osarch (optional) OS architecture. (ex. "x86_64")
|
|
#
|
|
# 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. The name should be the full path name of
|
|
# the file relative to <Kit Build Directory>/other_files
|
|
#
|
|
# kitlicense (mandatory) Kit license string to be built into all
|
|
# kitcomponent packages. (template default "EPL")
|
|
#
|
|
# kittarfilename (optional) Filename.tar.bz2 to be used for the generated
|
|
# kit. (ex. "myproduct-1.4.0.6-0-x86_64.tar.bz2")
|
|
# The default format is:
|
|
# <basename>-<version>-<opt-release>-<opt-osbasename>-<opt-osmajorversion>-<opt-osminorversion>-<opt-osarch>.tar.bz2
|
|
#
|
|
kit:
|
|
basename=<<<INSERT_kitbasename_HERE>>>
|
|
description=description for <<<INSERT_kitbasename_HERE>>>
|
|
version=1.0
|
|
release=1
|
|
ostype=Linux
|
|
kitlicense=EPL
|
|
# vendor=
|
|
# packager=
|
|
# url=
|
|
# osbasename=
|
|
# osmajorversion=
|
|
# osminorversion=
|
|
# osarch=
|
|
# isinternal=
|
|
# kitdeployparams=sample/kitdeployparams.lst
|
|
# kittarfilename=
|
|
#
|
|
# kitrepo: This stanza defines a Kit Package Repository.
|
|
# There must be at least one kitrepo stanza 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. A typical name may be something like:
|
|
# "<osbasename><osmajorversion>.<osminorversion>_<osarch>".
|
|
# (ex. "rhels6.4_x86_64")
|
|
#
|
|
# osbasename (mandatory) OS distro base name. (ex. "rhels")
|
|
#
|
|
# osmajorversion (mandatory) OS major version. (ex. "6")
|
|
#
|
|
# osminorversion (optional) OS minor version. (ex. "4")
|
|
#
|
|
# osarch (mandatory) OS architecture. (ex. "x86_64")
|
|
#
|
|
# compat_osbasenames (optional) Comma-separated list of compatible
|
|
# OS distribution base names. (ex. "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 stanza defines one Kit Component.
|
|
# There can be zero or more kitcomponent stanzas.
|
|
# If you want to build a component which supports multiple OSes,
|
|
# you should create one kitcomponent section for each OS.
|
|
# You can define multiple kit components with the same base name
|
|
# only if each kit component using this base name meets these
|
|
# requirements:
|
|
# - Each kit component must be defined with the same version
|
|
# and release number
|
|
# - Each kit component must be defined with a unique kitrepoid
|
|
#
|
|
# kitcomponent attributes:
|
|
# basename (mandatory) Kit component base name (ex. "myproduct_compute")
|
|
#
|
|
# description (optional) Kit component description
|
|
#
|
|
# version (optional) Kit component version. The default is the kit version.
|
|
#
|
|
# release (optional) Kit component release. The default is the kit release.
|
|
#
|
|
# serverroles (mandatory) Comma-separated list of node types that this
|
|
# component could be installed on. (Valid values:
|
|
# mgtnode,servicenode,compute,login,storage,utility)
|
|
# (template default: "compute")
|
|
#
|
|
# 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 RPM dependency basenames.
|
|
# These packages must be shipped with the OS distro.
|
|
#
|
|
# kitpkgdeps (mandatory IF product RPMs will be included in this Kit)
|
|
# Comma-separated list of RPM basenames. Each RPM must
|
|
# be defined in a separate kitpackage stanza. Each RPM
|
|
# package must be in the same kitrepo as this kit component.
|
|
#
|
|
# non_native_pkgs (optional)
|
|
# 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 and may contain
|
|
# wildcards. If a filename is prefixed by 'EXTERNALPKGS:'
|
|
# the file will not be built into the kit tarfile, but
|
|
# will need to be added later with a 'buildkit addpkgs'
|
|
# command.
|
|
# Files will be placed in
|
|
# /opt/xcat/kits/<kitbasename>/<kitcomponent_name>
|
|
# when the kitcomponent package is deployed to an
|
|
# OS image.
|
|
# 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,
|
|
# genimage_postinstall
|
|
kitcomponent:
|
|
basename=<<<INSERT_kitcomponent_basename_HERE>>>
|
|
description=description for component <<<INSERT_kitcomponent_basename_HERE>>>
|
|
serverroles=compute
|
|
kitrepoid=<<<INSERT_kitrepoid_HERE>>>
|
|
kitpkgdeps=pkg1basename,pkg2basename
|
|
# kitcompdeps=myproduct_license
|
|
# ospkgdeps=dep1,dep2
|
|
# non_native_pkgs=a_kitcomponent.file
|
|
# non_native_pkgs=EXTERNALPKGS:a_kitcomponent.file
|
|
# 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
|
|
# genimage_postinstall=sample/genimage_post.sh
|
|
#
|
|
# kitpackage: This stanza defines one Kit Package.
|
|
# There can be zero or more kitpackage stanzas.
|
|
#
|
|
# 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 stanza
|
|
# 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 stanza
|
|
# which contains multiple kitrepoid lines.
|
|
#
|
|
#
|
|
# kitpackage attributes:
|
|
# filename (mandatory) Package filename. The filename may contain wildcards to avoid needing to
|
|
# specify an explicit package version-release filename.
|
|
#
|
|
# kitrepoid (mandatory) A comma-separated list of kit repo names 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.
|
|
#
|
|
# isexternalpkg (mandatory) Indicates if the package will be included in this kit or added later.
|
|
# 'no' or '0' means the package is included.
|
|
# 'yes' or '1' means the packages will be added later.
|
|
# The default if not set is 'no'.
|
|
#
|
|
# rpm_prebuiltdir (mandatory IF isexternalpkg=no) Path to the directory containing the pre-built RPMs relative to
|
|
# <Kit Build Directory>/source_packages directory.
|
|
# For example, if the file is "<Kit Build Directory>/source_packages/foobar/foo.rpm"
|
|
# then set "rpm_prebuiltdir=foobar".
|
|
kitpackage:
|
|
filename=pkg1-*.noarch.rpm
|
|
kitrepoid=<<<INSERT_kitrepoid_HERE>>>
|
|
isexternalpkg=no
|
|
rpm_prebuiltdir=<path>
|
|
|
|
Copy Files into the Kit Directory Structure
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
After editing the buildkit configuration file (buildkit.conf), the user needs to copy files into the kit directory if defined in the buildkit.conf.
|
|
The type of files may need to copy are:
|
|
|
|
**Source Packages** -- If kitpackage attribute isexternalpkt define "no", all the required pre-built RPMS need to copy to rpm_prebuildtdir
|
|
|
|
**Deployment Scripts** --- These files should be copied to <Kit directory location>/scripts
|
|
|
|
**Plugins** --- For IBM HPC Products in this first release, no plugins will be developed. However, future support may be considered by the product packaging developers. For example, GPFS may choose to implement a nodemgmt.pm plugin that would add a new node to the GPFS cluster. - These files should be copied to: <Kit directory location>/plugins
|
|
|
|
**Doc Files** --- These files should be copied to <Kit directory location>/docs
|
|
|
|
|
|
|