Provides rules for creating RPM packages via pkg_filegroup and friends.
pkg_rpm() depends on the existence of an rpmbuild toolchain. Many users will find to convenient to use the one provided with their system. To enable that toolchain add the following stanza to WORKSPACE:
# Find rpmbuild if it exists.
load("@rules_pkg//toolchains:rpmbuild_configure.bzl", "find_system_rpmbuild")
find_system_rpmbuild(name="rules_pkg_rpmbuild")
Rules
pkg_rpm
Creates an RPM format package via pkg_filegroup
and friends.
The uses the outputs of the rules in mappings.bzl
to construct arbitrary
RPM packages. Attributes of this rule provide preamble information and
scriptlets, which are then used to compose a valid RPM spec file.
This rule will fail at analysis time if:
- Any
srcs
input creates the same destination, regardless of other attributes.
This rule only functions on UNIXy platforms. The following tools must be available on your system for this to function properly:
rpmbuild
(as specified inrpmbuild_path
, or available in$PATH
)GNU coreutils. BSD coreutils may work, but are not tested.
To set RPM file attributes (like %config
and friends), set the
rpm_filetag
in corresponding packaging rule (pkg_files
, etc). The value
is prepended with "%" and added to the %files
list, for example:
attrs = {"rpm_filetag": ("config(missingok, noreplace)",)},
Is the equivalent to %config(missingok, noreplace)
in the %files
list.
Example usage (generated)
load("@rules_pkg//pkg:rpm_pfg.bzl", "pkg_rpm")
pkg_rpm(
# A unique name for this target.
name = "",
# RPM "License" tag
license = "",
# Mapping groups to include in this RPM
srcs = [],
# RPM "Summary" tag
summary = "",
)
name
A unique name for this target.
architecture
Package architecture.
This currently sets the BuildArch
tag, which influences the output
architecture of the package.
Typically, BuildArch
only needs to be set when the package is
known to be cross-platform (e.g. written in an interpreted
language), or, less common, when it is known that the application is
only valid for specific architectures.
When no attribute is provided, this will default to your host's architecture. This is usually what you want.
binary_payload_compression
Compression mode used for this RPM
Must be a form that rpmbuild(8)
knows how to process, which will
depend on the version of rpmbuild
in use. The value corresponds
to the %_binary_payload
macro and is set on the rpmbuild(8)
command line if provided.
Some examples of valid values (which may not be supported on your
system) can be found here. On CentOS
systems (also likely Red Hat and Fedora), you can find some
supported values by looking for %_binary_payload
in
/usr/lib/rpm/macros
. Other systems have similar files and
configurations.
If not provided, the compression mode will be computed by rpmbuild
itself. Defaults may vary per distribution or build of rpm
;
consult the relevant documentation for more details.
WARNING: Bazel is currently not aware of action threading requirements for non-test actions. Using threaded compression may result in overcommitting your system.
changelog
conflicts
List of capabilities that conflict with this package when it is installed.
Cooresponds to the "Conflicts" preamble tag.
debug
Debug the RPM helper script and RPM generation
description
Multi-line description of this package, corresponds to RPM %description.
Exactly one of description
or description_file
must be provided.
description_file
File containing a multi-line description of this package, corresponds to RPM %description.
group
Optional; RPM "Group" tag.
NOTE: some distributions (as of writing, Fedora > 17 and CentOS/RHEL
- have deprecated this tag. Other distributions may require it, but it is harmless in any case.
license
RPM "License" tag.
The software license for the code distributed in this package.
The underlying RPM builder requires you to put something here; if your package is not going to be distributed, feel free to set this to something like "Internal".
package_file_name
See 'Common Attributes' in the rules_pkg reference.
If this is not provided, the package file given a NVRA-style (name-version-release.arch) output, which is preferred by most RPM repositories.
package_name
Optional; RPM name override.
If not provided, the name
attribute of this rule will be used
instead.
This influences values like the spec file name.
package_variables
See 'Common Attributes' in the rules_pkg reference
post_scriptlet
RPM %post
scriptlet. Currently only allowed to be a shell script.
post_scriptlet
and post_scriptlet_file
are mutually exclusive.
post_scriptlet_file
File containing the RPM %post
scriptlet
postun_scriptlet
RPM %postun
scriptlet. Currently only allowed to be a shell script.
postun_scriptlet
and postun_scriptlet_file
are mutually exclusive.
postun_scriptlet_file
File containing the RPM %postun
scriptlet
pre_scriptlet
RPM %pre
scriptlet. Currently only allowed to be a shell script.
pre_scriptlet
and pre_scriptlet_file
are mutually exclusive.
pre_scriptlet_file
File containing the RPM %pre
scriptlet
preun_scriptlet
RPM %preun
scriptlet. Currently only allowed to be a shell script.
preun_scriptlet
and preun_scriptlet_file
are mutually exclusive.
preun_scriptlet_file
File containing the RPM %preun
scriptlet
provides
List of rpm capabilities that this package provides.
Cooresponds to the "Provides" preamble tag.
release
RPM "Release" tag
Exactly one of release
or release_file
must be provided.
release_file
File containing RPM "Release" tag.
requires
List of rpm capability expressions that this package requires.
Corresponds to the "Requires" preamble tag.
requires_contextual
Contextualized requirement specifications
This is a map of various properties (often scriptlet types) to capability name specifications, e.g.:
{"pre": ["GConf2"],"post": ["GConf2"], "postun": ["GConf2"]}
Which causes the below to be added to the spec file's preamble:
Requires(pre): GConf2
Requires(post): GConf2
Requires(postun): GConf2
This is most useful for ensuring that required tools exist when scriptlets are run, although there may be other valid use cases. Valid keys for this attribute may include, but are not limited to:
pre
post
preun
postun
pretrans
posttrans
For capabilities that are always required by packages at runtime,
use the requires
attribute instead.
See also: https://rpm.org/user_doc/more_dependencies.html
NOTE: pkg_rpm
does not check if the keys of this dictionary are
acceptable to rpm(8)
.
rpmbuild_path
Path to a rpmbuild
binary. Deprecated in favor of the rpmbuild toolchain
source_date_epoch
Value to export as SOURCE_DATE_EPOCH to facilitate reproducible builds
Implicitly sets the %clamp_mtime_to_source_date_epoch
in the
subordinate call to rpmbuild
to facilitate more consistent in-RPM
file timestamps.
Negative values (like the default) disable this feature.
source_date_epoch_file
File containing the SOURCE_DATE_EPOCH value.
Implicitly sets the %clamp_mtime_to_source_date_epoch
in the
subordinate call to rpmbuild
to facilitate more consistent in-RPM
file timestamps.
spec_template
Spec file template.
Use this if you need to add additional logic to your spec files that is not available by default.
In most cases, you should not need to override this attribute.
srcs
Mapping groups to include in this RPM.
These are typically brought into life as pkg_filegroup
s.
summary
RPM "Summary" tag.
One-line summary of this package. Must not contain newlines.
url
RPM "URL" tag; this project/vendor's home on the Internet.
version
RPM "Version" tag.
Exactly one of version
or version_file
must be provided.
version_file
File containing RPM "Version" tag.