Rocky Linux Release Engineering Article Series

Cross-posting this from Reddit, as I’d like it to be visible, and I think it might be useful to people.
(TLDR, First article in a series: )

I’ve decided to write a little series of articles covering some “behind the scenes” work on Rocky Linux: how do we put the distro together from a Release Engineering perspective?

Some topics I think I’ll cover:

  • Overview of software pieces, and how they fit together
  • How source is imported/stored/patched
  • Dependency resolution: more complicated than we think
  • How builds are conducted, build strategy
  • Modules and modular streams

This first entry is just an introduction to Rocky Linux and how it came about. I’m hoping to de-mystify the process by which Rocky Linux and other Feodra/EL based distros are built. And to make the concepts and pieces accessible to a much wider audience.

This is the first article:

Thanks, hope you enjoy!

-Skip (RelEng/Dev guy)


Feels weird replying to myself, but I didn’t think a whole other thread would be appropriate.

The next article is up: Build Steps!

In broad strokes, we’ll go over what steps are taken to get a package imported, debranded, built, signed, and released! There’s also a neat diagram to help visualize the package build infrastructure a bit. This covers several topics, and we’ll go even deeper to some of them in subsequent posts.

Link to the post: Skip Grube Blog


And a new article is up: Meet the (Software) Players!

I’ll attempt to list out all the components of the build system, and the role of each piece in putting our packages together.

Link to the post:


Been a while, but I’ve been busy.

New Article: Source Control

All about the sources! Where they’re stored, how they’re imported from RHEL, how patches/debrands work, and more!

Link to article: Source Control


Speaking of the sources, Red Hat has an article entitled " A guide for using CentOS Project code".

1 Like

The article about sources is amazing. Really clear explanation of how it works in real life.

Yes, I remember reading when it came out. Our release team referred to it extensively :wink: .

Oh, I also saw your question about the c8 branch continuity. We were also worried about that, but RH has made a commitment to continue uploading/syncing RHEL sources to those branches. So we’re hoping they honor that commitment.

It’s always possible to extract from SRPMs, but it is much messier.


Well thank you. I aim to please :slight_smile: .

All the content in these articles contains stuff that we had to figure out for ourselves circa Dec. 2020 - April 2021, and it was quite painful. The goal is to summarize the concepts so everyone else can understand too!

1 Like

Back with the next article! (#4 in the series)

This new one is all about build dependencies: how they’re resolved, what sort of troubles we face, and what exactly are these module things, anyway?

Check it out: #4 : Build Dependencies


Another plain speaking article explaining about build dependencies and hard to find -devel packages. and a future atticle about rpmbuild (how to actually do it).

It would be great to have a future article about “Secure Boot”. I’m especailly interested to know which exact files would be different e.g. between Rocky and RHEL.


Theses articles are really awesome. Thanks for taking the time to write and explain that !


I’m back from vacation, and I’ve got a new article.

Enough theory, this one is practical: Build Lab! (part 1)

We’ll set up the mock build program, clone some source from git, and do a build on your system just like the release engineering team! This will put some concepts into action that have been mentioned in the past few articles.

Link: #5 : Rocky Build Lab


Been a bit, but I’ve been busy!

Here’s Build Lab! (part 2)

We’ve covered building packages, but what about dependencies? We’ll attempt to build a trickier package: bind. It depends on things, that we don’t have, so we will build the prerequisites in-order, and make them available to subsequent Mock builds!

Link: #6 : Rocky Build Lab (part 2)