Show Table of Contents
2.7.2. Creating a Metapackage
When creating a new metapackage:
- It is recommended to define the following macros at the top of the metapackage spec file:
scl_name_prefixthat specifies the provider's name to be used as a prefix in your Software Collection's name, for example, myorganization-. This is different from_scl_prefix, which specifies the root of your Software Collection but also uses the provider's name. See Section 2.4, “The Software Collection Prefix” for more information.scl_name_basethat specifies the base name of your Software Collection, for example, ruby.scl_name_versionthat specifies the version of your Software Collection, for example, 193.
- You are advised to define a Software Collection macro
nfsmountablethat changes the location of configuration and state files and makes your Software Collection usable over NFS. For more information, see Section 3.1, “Using Software Collections over NFS”. - Consider specifying all packages in your Software Collection that are essential for the Software Collection run time as dependencies of the metapackage. That way you can ensure that the packages are installed with the Software Collection metapackage.
- You are advised to add
Requires: scl-utils-buildto the build subpackage. - You are not required to use conditionals for Software Collection-specific macros in the metapackage.
- Include any path redefinition that the packages in your Software Collection may require in the
enablescriptlet.For information on commonly used path redefinitions, see Section 2.9, “Commonly Used Path Redefinitions”. - Always make sure that the metapackage contains the
%setupmacro in the%prepsection, otherwise building the Software Collection will fail. If you do not need to use a particular option with the%setupmacro, add the%setup -c -Tcommand to the%prepsection.This is because the%setupmacro defines and creates the%buildsubdirdirectory, which is normally used for storing temporary files at build time. If you do not define%setupin your Software Collection packages, files in the%buildsubdirdirectory will be overwritten, causing the build to fail. - Add any macros you need to use to the
macros.%{scl}-configfile in the build subpackage.
Example of the Metapackage
To get an idea of what a typical metapackage for a Software Collection named myorganization-ruby193 looks like, see the following example:
%global scl_name_prefix myorganization-
%global scl_name_base ruby
%global scl_name_version 193
%global scl %{scl_name_prefix}%{scl_name_base}%{scl_name_version}
# Optional but recommended: define nfsmountable
%global nfsmountable 1
%scl_package %scl
%global _scl_prefix /opt/myorganization
Summary: Package that installs %scl
Name: %scl_name
Version: 1
Release: 1%{?dist}
License: GPLv2+
Requires: %{scl_prefix}less
BuildRequires: scl-utils-build
%description
This is the main package for %scl Software Collection.
%package runtime
Summary: Package that handles %scl Software Collection.
Requires: scl-utils
%description runtime
Package shipping essential scripts to work with %scl Software Collection.
%package build
Summary: Package shipping basic build configuration
Requires: scl-utils-build
%description build
Package shipping essential configuration macros to build %scl Software Collection.
# This is only needed when you want to provide an optional scldevel subpackage
%package scldevel
Summary: Package shipping development files for %scl
%description scldevel
Package shipping development files, especially useful for development of
packages depending on %scl Software Collection.
%prep
%setup -c -T
%install
%scl_install
cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PATH="%{_bindir}:%{_sbindir}\${PATH:+:\${PATH}}"
export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"
export MANPATH="%{_mandir}:\${MANPATH:-}"
export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
EOF
# This is only needed when you want to provide an optional scldevel subpackage
cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF
%%scl_%{scl_name_base} %{scl}
%%scl_prefix_%{scl_name_base} %{scl_prefix}
EOF
# Install the generated man page
mkdir -p %{buildroot}%{_mandir}/man7/
install -p -m 644 %{scl_name}.7 %{buildroot}%{_mandir}/man7/
%files
%files runtime -f filelist
%scl_files
%files build
%{_root_sysconfdir}/rpm/macros.%{scl}-config
%files scldevel
%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel
%changelog
* Fri Aug 30 2013 John Doe <jdoe@example.com> 1-1
- Initial package
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.