.. _Install-Additional-OS-Packages-label: Install Additional OS Packages for RHEL and SLES ------------------------------------------------ Install Additional Packages using OS Packages steps ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For rpms from the OS distro, add the new rpm names (without the version number) in the .pkglist file. For example, file **/install/custom///.pkglist** will look like this after adding perl-DBI: :: bash nfs-utils openssl dhcpcd kernel-smp openssh procps psmisc resmgr wget rsync timezone perl-DBI For the format of the .pkglist file, see :ref:`File-Format-for-pkglist-label` If you have newer updates to some of your operating system packages that you would like to apply to your **OS** image, you can place them in another directory, and add that directory to your osimage pkgdir attribute. For example, with the osimage defined above, if you have a new openssl package that you need to update for security fixes, you could place it in a directory, create repository data, and add that directory to your pkgdir: :: mkdir -p /install/osupdates// cd /install/osupdates// cp . createrepo . chdef -t osimage --- pkgdir=/install//,/install/osupdates// Note:If the objective node is not installed by xCAT, make sure the correct osimage pkgdir attribute so that you could get the correct repository data. .. _File-Format-for-pkglist-label: File Format for .ospkgs.pkglist File ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The .pklist file is used to specify the rpm and the group/pattern names from os distro that will be installed on the nodes. It can contain the following types of entries: :: * rpm name without version numbers * group/pattern name marked with a '@' (for full install only) * rpms to removed after the installation marked with a "-" (for full install only) These are described in more details in the following sections. RPM Names '''''''''' A simple .pkglist file just contains the name of the rpm file without the version numbers. For example :: openssl xntp rsync glibc-devel.i686 Include pkglist Files '''''''''''''''''''''' The **#INCLUDE** statement is supported in the pkglist file. You can group some rpms in a file and include that file in the pkglist file using **#INCLUDE:#** format. :: openssl xntp rsync glibc-devel.1686 #INCLUDE:/install/post/custom//myotherlist# where **/install/post/custom//myotherlist** is another package list file that follows the same format. Note: the trailing **"#"** character at the end of the line. It is important to specify this character for correct pkglist parsing. Module/Group/Pattern Names '''''''''''''''''''''''''' .. note:: On SLES pattern names are not supported for diskless deployment On Linux, groups of rpms can be packaged together into one package. It can be a module or a group on RedHat, CentOS, Fedora and Scientific Linux. To get the list of available groups, run * **[RHEL]** :: yum group list yum module list * **[SLES]** :: zypper se -t pattern You can specify module/group/pattern names by adding a **'@'** before the module/group/pattern names. For example: :: @base @Security Tools @ruby:2.6 Remove RPMs After Installing '''''''''''''''''''''''''''' You can specify that certain rpms to be removed after installing the new software. This is done by adding **'-'** before the rpm names you want to remove. For example: :: -ntp -@ruby:2.6