Building a Package from a Source RPM
This section describes how to install and build a package on the full version of Photon OS from the package's source RPM. Obtain the source RPMs that Photon OS uses from the Bintray location, https://bintray.com/vmware/photon
Prerequisites
To build a package from its source RPM, or SRPM, Photon OS requires the following packages:
rpmbuild
. This package is installed by default on the full version of Photon OS, so you should not have to install it.gcc
. This package is also installed by default on the full version of Photon OS, so you should not have to install it.make
,Cmake
,automake
, or anothermake
package, depending on the package you are trying to install and build from its source RPM. Cmake is installed by default on Photon OS.You can install other make packages by using tdnf or yum.
- A local unprivileged user account other than the root account. You should build RPMs as an unprivileged user. Do not build a package as
root
becau--building an RPM with the root account might damage your system. - Take a snapshot of your virtual machine before building the package if you are building a package on a virtual machine running Photon OS in VMware vSphere, VMware Workstation, or VMware Fusion.
Procedure
VMware recommends that you install and build packages from their source RPMs on the full version of Photon OS. Do not use the minimal version to work with source RPMs.
Perfrom the following steps to install and build an example package- sed
from its source RPM on Photon OS with an unprivileged account.
check whether rpmbuild is installed by running the following command:
rpmbuild --version
If it is not installed, install it by running the following command as root:
tdnf install rpm-build
Create the directories for building RPMs under your local user account home directory and not under root:
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
Create a
.rpmmacros
file under your home directory and override the default location of the RPM building tree with the new one. This command overwrites an existing.rpmmacros
file. Before running the following command, make sure you do not already have a.rpmmacros file
. If a.rpmmacros
file exists, back it up under a new name in case you want to restore it later.echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
Place the source RPM file that you want to install and build in the
/tmp
directory.- Install the source file, run the following command with your unprivileged user account, replacing the sed example source RPM with the name of the one that you want to install:
```
rpm -i /tmp/sed-4.2.2-2.ph1.src.rpm
```
The above command unpacks the source RPM and places its `.spec` file in your `~/rpmbuild/SPECS` directory. In the next step, the `rpmbuild` tool uses the `.spec` file to build the RPM.
Build the RPM, run the following commands with your unprivileged user account. Replace the
sed.spec
example file with the name of the.spec
file that you want to build.cd ~/rpmbuild/SPECS rpmbuild -ba sed.spec
If successful, the rpmbuild -ba command builds the RPM and generates an RPM package file in your ~/rpmbuild/RPMS/x86_64 directory. For example:
ls RPMS/x86_64/ sed-4.2.2-2.x86_64.rpm sed-debuginfo-4.2.2-2.x86_64.rpm sed-lang-4.2.2-2.x86_64.rpm
The rpmbuild command also generates a new SRPM file and saves it in your ~/rpmbuild/SRPMS directory. For example:
ls SRPMS/ sed-4.2.2-2.src.rpm
If the rpmbuild command is unsuccessful with an error that it cannot find a library, you must install the RPMs for the library that your source RPM depends on before you can successfully build your source RPM. Iterate through installing the libraries that your source RPM relies on until you can successfully build it.
To install the RPM, run the following command with your unprivileged user account:
rpm -i RPMS/x86_64/sed-4.2.2-2.x86_64.rpm