This is different from upstream because:
- it allows for faster-failed builds: a failed build can be detected early through building SRPM first, as well as optional
rpmlintchecks. In the upstream docker image, a failed build will have an exit status code of 0, so CI tools will not be able to detect failed builds to begin with. - a patch is applied to
yum-builddepto prevent unnecessary enablement of-sourcerepos, to facilitate faster builds. , the patch foryum-builddepto NOT enable source repos if .spec file is used (fixes a bug)
Available versions can be located by visiting Docker Hub Repository.
For example, to use the RHEL-9-based image:
BUILDER_VERSION=el9
docker pull getpagespeed/rpmbuilder:${BUILDER_VERSION}Most images are tagged with the dist RPM tag, so you can use el7, el8,
fc38 etc.
In this example SOURCE_DIR contains the .spec file and sources for the RPM
we are building.
# set env variables for convenience
SOURCE_DIR=$(pwd)/sources
OUTPUT_DIR=$(pwd)/output
# create a output directory
mkdir -p ${OUTPUT_DIR}
# make SELinux happy
chcon -Rt svirt_sandbox_file_t ${OUTPUT_DIR} ${SOURCE_DIR}
# build rpm
docker run -v ${SOURCE_DIR}:/sources -v ${OUTPUT_DIR}:/output getpagespeed/rpmbuilder:${BUILDER_VERSION}The output files will be available in OUTPUT_DIR.
- You may pass
RPMLINT=1for failing onrpmlintchecks (pedantic way of producing quality RPMs) - You may pass
SRPM_ONLY=1for only fast checks of particular file's build-ability
If you are creating a spec file, it is often useful to have a clean room debugging environment. You can achieve this by using the following command.
docker run --rm -it --entrypoint bash \
-v ${SOURCE_DIR}:/sources \
-v ${OUTPUT_DIR}:/output \
getpagespeed/rpmbuilder:${BUILDER_VERSION}This command will drop you into a bash shell within the container. From here, you can execute build to build the spec file. You can also iteratively modify the specfile and re-run build.
The following volumes can be mounted from the host.
| Volume | Description |
|---|---|
| /sources | Source to build RPM from |
| /output | Output directory where all built RPMs and SRPMs are extracted to |
| /root/rpmbuild | rpmbuild directory for debugging etc |