mirror of
https://github.com/YellowJacketLinux/lfs-rpmify.git
synced 2025-01-23 14:32:11 +08:00
341 lines
9.6 KiB
Markdown
341 lines
9.6 KiB
Markdown
Building RPM in LFS 12.2
|
||
========================
|
||
|
||
__STATUS__: Complee
|
||
|
||
This git is for the scripts needed to build the dependencies for the RPM Package
|
||
Manager (RPM) within a LFS 12.2 system. This is ‘Phase Three’ in `THE-PLAN.md`.
|
||
|
||
First I resolved the dependencies needed to build RPM 4.18.2 as I successfully
|
||
built and used RPM 4.18.1 on an LFS 11.3 system so I knew it was possible. Once
|
||
I had that building (but not installed) I resolved the dependencies needed to
|
||
build RPM 4.20.0 which is the current series.
|
||
|
||
With dependencies through Lua built, RPM 4.18.2 builds in LFS 12.2 but there are
|
||
still two needed components for a complete RPM environment:
|
||
|
||
1. GnuPG (critical, needed to sign packages, important for package security)
|
||
2. debugedit (critical, needed for debug packages)
|
||
|
||
Dependencies 13 through 27 build GnuPG.
|
||
Dependencies 28 and 29 build debugedit.
|
||
|
||
Some of the additional needed dependencies for RPM 4.20.0 (such as CMake) were
|
||
built as a result of building GnuPG, there was only one additional dependency
|
||
(audit) which itself had an unmet dependency (swig). Once those were built, I
|
||
was able to successfully build RPM 4.20.0.
|
||
|
||
RPM 4.20.0 does want to use ‘rpm-sequoia’ for digests and OpenPGP however
|
||
‘rpm-sequoia’ requires Rust and Rust is a can of worms I just do not like.
|
||
Perhaps I am wrong not to like it, but I *really* do not like it. At this
|
||
point in time I have zero plans to ever include it in YJL (add-on repositories
|
||
of course can) as I just see no value in dealing with it.
|
||
|
||
RPM 4.20.0 still supports using libgcrypt for the hashes and there is an
|
||
unsupported way to use their legacy OpenPGP parser for signatures, detailed at
|
||
[RPM PGP Legacy](https://github.com/rpm-software-management/rpmpgp_legacy)
|
||
git repository. That is implemented in my build of RPM 4.20.0.
|
||
|
||
The file [`yjl-lfs-rpm-macros`](yjl-lfs-rpm-macros) should be installed as
|
||
`/etc/rpm/macros` for LFS/YJL with RPM. The biggest issue is RPM likes to use
|
||
`/lib64` and `/usr/lib64` on `x86_64` systems but LFS (and the YJL I am
|
||
building) does not. The macro file fixes that without needing to alter RPM
|
||
itself.
|
||
|
||
RPM Test Suite
|
||
--------------
|
||
|
||
RPM 4.18.2 requires `fakechroot` to run the test suite. That project appears to
|
||
be abandoned with the last release about four years ago, and no recent activity
|
||
in the project git repository.
|
||
|
||
RPM 4.20.0 requires either `podman` or `docker` to run the test suite. As I do
|
||
not (yet) have either available, I could not run the test suite.
|
||
|
||
Dependency One: UnZip
|
||
---------------------
|
||
|
||
Justification: Needed to build SQLite 3 (to unpack the documentation). No build
|
||
dependencies outside of LFS.
|
||
|
||
* Script: [`01-unzip.sh`](01-unzip.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Two: SQLite3
|
||
-----------------------
|
||
|
||
Justification: Needed to build RPM itself and for Cyrus SASL. Depends upon UnZip
|
||
for documentation.
|
||
|
||
* Script: [`02-sqlite3.sh`](02-sqlite3.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Three: libgpg-error
|
||
------------------------------
|
||
|
||
Justification: Needed to build libgcrypt, libassuan, libksba, and pinentry. No
|
||
build dependencies outside of LFS.
|
||
|
||
* Script: [`03-libgpg-error.sh`](03-libgpg-error.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Four: libgcrypt
|
||
--------------------------
|
||
|
||
Justification: Needed to build RPM itself and GnuPG. Depends upon libgpg-error.
|
||
|
||
* Script: [`04-libgcrypt.sh`](04-libgcrypt.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Five: popt
|
||
---------------------
|
||
|
||
Justification: Needed to build RPM itself. No build dependencies outside of LFS.
|
||
|
||
* Script: [`05-popt.sh`](05-popt.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Six: ICU
|
||
-------------------
|
||
|
||
Justification: Needed to build libxml2. No build dependencies outside of LFS.
|
||
|
||
* Script: [`06-icu.sh`](06-icu.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Seven: libxml2
|
||
-------------------------
|
||
|
||
Justification: Needed for libarchive and CMake. Depends on ICU.
|
||
|
||
* Script: [`07-libxml2.sh`](07-libxml2.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Eight: LZO
|
||
---------------------
|
||
|
||
Justification: Needed for libarchive. No build dependencies outside of LFS.
|
||
|
||
* Script: [`08-lzo.sh`](08-lzo.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Nine: nettle
|
||
-----------------------
|
||
|
||
Justification: Needed for libarchive. No build dependencies outside of LFS.
|
||
|
||
* Script: [`09-nettle.sh`](09-nettle.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Ten: pcre2
|
||
---------------------
|
||
|
||
Justification: Needed for libarchive. No build dependencies outside of LFS.
|
||
|
||
* Script: [`10-pcre2.sh`](10-pcre2.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Eleven: libarchive
|
||
-----------------------------
|
||
|
||
Justification: Needed to build RPM and CMake. Depends upon libxml2, LZO, Nettle,
|
||
and pcre2.
|
||
|
||
* Script: [`11-libarchive.sh`](11-libarchive.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Twelve: Lua
|
||
----------------------
|
||
|
||
Justification: Needed to build RPM. No build dependencies outside of LFS.
|
||
|
||
* Script: [`12-lua.sh`](12-lua.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Thirteen: libassuan
|
||
------------------------------
|
||
|
||
Justification: Needed to build pinentry and GnuPG. Requires libgpg-error.
|
||
|
||
* Script: [`13-libassuan.sh`](13-libassuan.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Fourteen: libksba
|
||
----------------------------
|
||
|
||
Justification: Needed to build GnuPG. Requires libgpg-error.
|
||
|
||
* Script: [`14-libksba.sh`](14-libksba.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Fifteen: npth
|
||
------------------------
|
||
|
||
Justification: Needed to build GnuPG. No dependencies outside of LFS.
|
||
|
||
* Script: [`15-npth.sh`](15-npth.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Sixteen: libuv
|
||
-------------------------
|
||
|
||
Justification: Needed to build CMake. No dependencies outside of LFS.
|
||
|
||
* Script: [`16-libuv.sh`](16-libuv.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Seventeen: nghttp2
|
||
-----------------------------
|
||
|
||
Justification: Needed to build CMake. Depends upon libxml2 to build.
|
||
|
||
* Script: [`17-nghttp2.sh`](17-nghttp2.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Eighteen: CMake
|
||
--------------------------
|
||
|
||
Justification: Needed by brotli and current RPM versions. Depends upon curl,
|
||
libarchive, libuv, and nghttp2.
|
||
|
||
* Script: [`18-cmake.sh`](18-cmake.sh)
|
||
* Status: Script Works
|
||
* Note: Rebuild once GCC Fortran available
|
||
|
||
Dependency Nineteen: brotli
|
||
---------------------------
|
||
|
||
Justification: Neded to build GnuTLS and beneficial to future rebuild of cURL.
|
||
Requires CMake to build.
|
||
|
||
* Script: [`19-brotli.sh`](19-brotli.sh)
|
||
* Status: Script Works
|
||
* Note: Python bindings NOT built
|
||
|
||
Dependency Twenty: which
|
||
------------------------
|
||
|
||
Justification: Needed for libseccomp test suite, and by *many* test suites and
|
||
scripts on a GNU/Linux system. No build dependencies outside of LFS.
|
||
|
||
* Script: [`20-which.sh`](20-which.sh)
|
||
* Stutus: Script Works
|
||
|
||
Dependency Twenty-One: libseccomp
|
||
---------------------------------
|
||
|
||
Justification: Needed for GnuTLS. Depends upon which.
|
||
|
||
* Script: [`21-libseccomp.sh`](21-libseccomp.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Twenty-Two: GnuTLS
|
||
-----------------------------
|
||
|
||
Justification: Needed for GnuPG. Also is the preferred TLS stack for YJL. Build
|
||
requires nettle, libunistring, libtasn1, p11-kit, brotli, libidn2, libseccomp.
|
||
Runtime requires make-ca.
|
||
|
||
|
||
* Script: [`22-gnutls.sh`](22-gnutls.sh)
|
||
* Status: Script Works
|
||
* Note: Note yet built with DANE support, or Trousers support.
|
||
|
||
Dependency Twenty-Three: LMDB
|
||
-----------------------------
|
||
|
||
Justification: Needed for Cyrus SASL. No build dependencies outside of LFS.
|
||
|
||
* Script: [`23-lmdb.sh`](23-lmdb.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Twenty-Four: Cyrus SASL
|
||
----------------------------------
|
||
|
||
Justification: Needed for OpenLDAP. Requires LMDB and SQLite3
|
||
|
||
* Script: [`24-cyrus-sasl.sh`](24-cyrus-sasl.sh)
|
||
* Status: Script Works
|
||
* Note: Does not install files needed to start the auth daemon
|
||
|
||
Dependency Twenty-Five: OpenLDAP
|
||
--------------------------------
|
||
|
||
Justification: Needed for GnuPG. Requires Cyrus SASL to build.
|
||
|
||
* Script: [`25-openldap.sh`](25-openldap.sh)
|
||
* Status: Script Works
|
||
* Note: Only installs client libraries, not the daemon
|
||
|
||
Dependency Twenty-Six: pinentry
|
||
-------------------------------
|
||
|
||
Justification: Runtime dependency of GnuPG. Requires libassuan and libgpg-error.
|
||
|
||
* Script: [`26-pinentry.sh`](26-pinentry.sh)
|
||
* Status: Script Works
|
||
* Note: GUI clients not built yet
|
||
|
||
Dependency Twenty-Seven: GnuPG
|
||
------------------------------
|
||
|
||
Justification: Needed for RPM signatures. Requires libassuan, libgcrypt,
|
||
libksba, npth, OpenLDAP, GnuTLS, and pinentry.
|
||
|
||
* Script: [`27-gnupg.sh`](27-gnupg.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Twenty-Eight: elfutils
|
||
---------------------------------
|
||
|
||
Justification: LFS already installs libelf from elfutils, but debugedit needs
|
||
libdw from elfutils as well.
|
||
|
||
* Script: [`28-elfutils.sh`](28-elfutils.sh)
|
||
* Status: Script Works
|
||
* Note: Binaries in `/usr/bin` installed with an `eu-` prefix.
|
||
|
||
Dependency Twenty-Nine: debugedit
|
||
---------------------------------
|
||
|
||
Justification: Required for RPM debuginfo packages. Build requires libelf and
|
||
libdw from elfutils.
|
||
|
||
* Script: [`29-debugedit.sh`](29-debugedit.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Thirty: swig
|
||
-----------------------
|
||
|
||
Justification: Required to build audit. Build requires pcre2.
|
||
|
||
* Script: [`30-swig.sh`](30-swig.sh)
|
||
* Status: Script Works
|
||
|
||
Dependency Thirty-One: audit
|
||
----------------------------
|
||
|
||
Justification: Required to build RPM 4.20.0 (current)
|
||
|
||
* Script: [`31-audit.sh`](31-audit.sh)
|
||
* Status: Script Works
|
||
* Note: \texttt{/var/log/auditd} needs to be manually created and the configure
|
||
switch in script needs to be updated for correct PID location, but it
|
||
works.
|
||
|
||
Dependency Thirty-Two: cpio
|
||
---------------------------
|
||
|
||
Justification: RPM run-time dependency.
|
||
|
||
* Script: [`32-cpio.sh`](32-cpio.sh)
|
||
* Status: Script Works
|
||
|
||
|
||
|
||
Build RPM 4.20.0
|
||
----------------
|
||
|
||
* Script: [`99-rpm.sh`](99-rpm.sh)
|
||
* Status: Script Works
|