Aller au contenu

Packaging and developer starter guide

Rocky Devtools refers to a set of homegrown scripts and utilities created by members of the Rocky Linux community to help with sourcing, creating, branding, patching, and building software packages distributed with the Rocky Linux Operating system. Rocky Devtools consists of rockyget, rockybuild, rockypatch, and rockyprep.

At a low level Rocky Devtools is a wrapper for running some custom and traditional programs for various package management tasks. Rocky Devtools relies heavily on srpmproc, go, git, and rpmbuild.

You'll need an existing modern RPM based Linux system to install and use Rocky devtools.

Let's walk through a typical installation and usage scenario of the devtools.

Dependencies

Several packages are required on the system before you can begin to use the devtools. These commands have been tested on Rocky Linux but should work on CentOS 8 / RHEL 8 too

dnf install git make golang

1. Download Rocky Devtools

Download the devtools zipped source from the following URL:

https://github.com/rocky-linux/devtools/archive/refs/heads/main.zip

Here we use the curl command:

curl -OJL https://github.com/rocky-linux/devtools/archive/refs/heads/main.zip

You should now have a zipped archive named devtools-main.zip

2. Install Rocky Devtools

Locate and uncompress the devtools archive that you just downloaded.

Here we'll use the unzip command line utility:

unzip devtools-main.zip

Change your working directory to the new devtool source directory that was just created:

cd devtools-main

Run make to configure and compile devtools:

make

Install devtools:

sudo make install

3. Use Rocky Devtools (rockyget) to search for and download Source RPMs (SRPMs)

Once installed, the main utility for finding and downloading SRPMs is the rockyget utility.

Let's use rockyget to download the SRPM for the popular sed package:

rockyget sed

The first time rockyget is run, it will automatically create a directory structure that roughly mimics the repository structure of Rocky's build servers. For example the ~/rocky/rpms folder will be automaically created.

For our current sed example, its sources will be stored under the following sample folder hierchy:

~rocky/rpms/sed/
└── r8
    ├── SOURCES
       ├── sed-4.2.2-binary_copy_args.patch
       ├── sed-4.5.tar.xz
       ├── sedfaq.txt
       ├── sed-fuse.patch
       └── sed-selinux.patch
    └── SPECS
        └── sed.spec

Tip

Once you have the original sources, this might be a good time to look through the SPECs file (~rocky/rpms/sed/SPECS/specs.spec) to look for potential debranding opportinites in the given package. Debranding might include replacing upstream artwork/logos and so on.

Tip

If you are looking for other Rocky packages to build and experiment with, you can browse the list of packages that are currently failing in the Rocky automated build environment here

4. Use Rocky Devtools (rockybuild) to build a new package for the Rocky OS

Under the hood, rockybuild calls rpmbuild and mock utilities to build the source package in a chroot environment for the application specified on the command-line. It relies on the application sources and RPM SPEC file that was automatically downloaded via the rockyget command.

Use rockybuild to build the sed utility:

rockybuild sed

The time needed to complete the build process/step depends on the size and complexity of the application you are trying to build.

At the end of the rockybuild run, an output similar to the one here indicates that the build completed successfully.

..........
+ exit 0
Finish: rpmbuild sed-4.5-2.el8.src.rpm
Finish: build phase for sed-4.5-2.el8.src.rpm
INFO: Done(~/rocky/rpms/sed/r8/SRPMS/sed-4.5-2.el8.src.rpm) Config(baseos) 4 minutes 34 seconds
INFO: Results and/or logs in: /home/centos/rocky/builds/sed/r8
........

If all goes well you should end up with a Rocky ready SRPM file under the ~/rocky/builds/sed/r8 directory.

~/rocky/rpms/sed/r8/SRPMS/sed-4.5-2.el8.src.rpm

5. Debugging a failed package build

The previous rockybuild process will generate some log files that can be used in debugging failed application builds. The results and/or logs of the build process are stored under the ~/rocky/builds/<PACKAGE NAME>/r8. For example ~/rocky/builds/sed/r8

~/rocky/builds/sed/r8
├── build.log
├── hw_info.log
├── installed_pkgs.log
├── root.log
├── sed-4.5-2.el8_3.src.rpm
├── sed-4.5-2.el8_3.x86_64.rpm
├── sed-debuginfo-4.5-2.el8_3.x86_64.rpm
├── sed-debugsource-4.5-2.el8_3.x86_64.rpm
└── state.log

The main files to search for clues for the causes any error(s) are the build.log and root.log. The build.log file should detail all build errors and the root.log file will contain information about the chroot environment setup and tear down processes. With everything else being equal, most of the build debugging/troubleshooting process can be performed with the contents of the build.log file.