> the author was analysing trying to build a binary package directly.
To analyse, there's two approaches that have been well documented for around 20 years now:
- open the .src.rpm for a package
- Run the rpm binary over the .rpm, which can dump spec file contents too
To build:
- Make a spec file
Again, there's lots to dislike about RPM (my main issue is how the sections are macros and so are the autoconf macros), which confused a lot of new people) but this article in incredibly unresearched.
OP made it clear what they were focusing on. If a passerby mistakes it for a complaint about using RPM as a sysadmin, it's their own problem.
For this purpose it's fitting to do a deep analysis of files actually produced, rather than trust the documentation to be entirely complete and sufficient. Such low-level dump is also needed to debug interoperability issues when files produced by the new implementation are rejected by existing tools.
I'm developing cargo-deb, which builds Debian packages without need for spec files. It doesn't use Perl, and can even build Debian packages from macOS. I had to learn and reproduce the structure of the deb files, which was relatively easy. I would need to go through exactly the same horror as in the article if I wanted to add RPM support the same NIH way (so RPM tooling may be good and easy, but RPM as a format is a failure.)
But even if I wanted to recreate RPM which the author does (although he doesn't state this) I'd start with the source code.
Yes, he does, right in the first paragraphs.
I'd start with the source code.
He started with the formal specification of the RPM format, which includes relevant pieces of the source; how is that not a good place to start?
> I ship configuration as system packages. Every distribution has their own tooling and process for building these packages, but I eventually grew tired of the ceremony involved in it, and wrote my own system package compiler.
Which to most engineers would mean making a tool that builds.rpm files, not reimplements the rpm build tools.