From e54c5b92e36d9c8748ec4e1de2b69e66be73ee1c Mon Sep 17 00:00:00 2001 From: kth5 Date: Tue, 31 Dec 2024 21:39:26 +0100 Subject: [PATCH] */add rpm-tools --- rpm-tools/.SRCINFO | 40 ++++++++ rpm-tools/.nvchecker.toml | 7 ++ rpm-tools/PKGBUILD | 56 +++++++++++ rpm-tools/rpm-tools.install | 8 ++ rpm-tools/rpmextract.sh | 6 ++ rpm-tools/rpmlib-filesystem-check.patch | 125 ++++++++++++++++++++++++ 6 files changed, 242 insertions(+) create mode 100644 rpm-tools/.SRCINFO create mode 100644 rpm-tools/.nvchecker.toml create mode 100644 rpm-tools/PKGBUILD create mode 100644 rpm-tools/rpm-tools.install create mode 100644 rpm-tools/rpmextract.sh create mode 100644 rpm-tools/rpmlib-filesystem-check.patch diff --git a/rpm-tools/.SRCINFO b/rpm-tools/.SRCINFO new file mode 100644 index 0000000000..9e1ea2a41c --- /dev/null +++ b/rpm-tools/.SRCINFO @@ -0,0 +1,40 @@ +pkgbase = rpm-tools + pkgdesc = RPM Package Manager - RPM.org fork, used in major RPM distros + pkgver = 4.20.0 + pkgrel = 2 + url = https://rpm.org/ + install = rpm-tools.install + arch = x86_64 + arch = powerpc64le + arch = powerpc64 + arch = powerpc + arch = riscv64 + license = GPL2 + makedepends = python + makedepends = pkg-config + makedepends = cmake + depends = lua + depends = file + depends = nss + depends = popt + depends = elfutils + depends = libarchive + depends = libcap + depends = rpm-sequoia + provides = rpm=4.20.0 + provides = rpmextract=1.0-4 + provides = rpm-org + conflicts = rpm + conflicts = rpmextract + options = !libtool + source = http://ftp.rpm.org/releases/rpm-4.20.x/rpm-4.20.0.tar.bz2 + source = rpmextract.sh + source = rpmlib-filesystem-check.patch + sha256sums = 56ff7638cff98b56d4a7503ff59bc79f281a6ddffcda0d238c082bedfb5fbe7b + sha256sums = 3e5bf450d4628366ba35469ec0530a99cd09ab2616a3d261a3f68270f481f777 + sha256sums = bd0e6dbd458f990268c60324190c6825b234647ecdde08296d2b453dc4bce27a + makedepends_x86_64 = podman + makedepends_powerpc64le = podman + makedepends_riscv64 = podman + +pkgname = rpm-tools diff --git a/rpm-tools/.nvchecker.toml b/rpm-tools/.nvchecker.toml new file mode 100644 index 0000000000..e69f750df0 --- /dev/null +++ b/rpm-tools/.nvchecker.toml @@ -0,0 +1,7 @@ +[rpm-tools] +source = "git" +git = "https://github.com/rpm-software-management/rpm.git" +include_regex = '^rpm-([\d.]+)-release$' +from_pattern = '^rpm-([\d.]+)-release$' +to_pattern = '\1' +use_max_tag = true diff --git a/rpm-tools/PKGBUILD b/rpm-tools/PKGBUILD new file mode 100644 index 0000000000..41f7c21837 --- /dev/null +++ b/rpm-tools/PKGBUILD @@ -0,0 +1,56 @@ +# POWER Maintainer: Alexander Baldeck +# Maintainer: Anatol Pomozov +# Contributor: Johannes Dewender arch at JonnyJD dot net +# Contributor: Konrad +# Contributor: Luka Perkov lukaperkov net> +# Contributor: Fernando M beford.net> +# Author: Wintershade + +# Note: rebuilds required: sogrep all librpmio.so and librpm.so + +pkgname=rpm-tools +pkgver=4.20.0 +pkgrel=2 +pkgdesc="RPM Package Manager - RPM.org fork, used in major RPM distros" +arch=(x86_64 powerpc64le powerpc64 powerpc riscv64) +url='https://rpm.org/' +license=('GPL2') +depends=('lua' 'file' 'nss' 'popt' 'elfutils' 'libarchive' 'libcap' 'rpm-sequoia') +makedepends=('python' 'pkg-config' 'cmake') +makedepends_powerpc64le=('podman') +makedepends_riscv64=('podman') +makedepends_x86_64=('podman') +conflicts=('rpm' 'rpmextract') +options=('!libtool') +provides=("rpm=${pkgver}" 'rpmextract=1.0-4' 'rpm-org') +install=rpm-tools.install + +_pkgver_major="${pkgver%%.*}" +_pkgver_major_rem="${pkgver#*.}" +_pkgver_minor="${_pkgver_major_rem%%.*}" +_base_pkgver=$_pkgver_major.$_pkgver_minor.x + +source=(http://ftp.rpm.org/releases/rpm-$_base_pkgver/rpm-$pkgver.tar.bz2 + rpmextract.sh + rpmlib-filesystem-check.patch) +sha256sums=('56ff7638cff98b56d4a7503ff59bc79f281a6ddffcda0d238c082bedfb5fbe7b' + '3e5bf450d4628366ba35469ec0530a99cd09ab2616a3d261a3f68270f481f777' + 'bd0e6dbd458f990268c60324190c6825b234647ecdde08296d2b453dc4bce27a') + +prepare() { + cd rpm-${pkgver} + patch -p1 < ../rpmlib-filesystem-check.patch +} + +build() { + cmake -B build -S "rpm-$pkgver" \ + -DCMAKE_INSTALL_PREFIX='/usr' \ + -DWITH_SELINUX=OFF \ + -DWITH_DBUS=OFF \ + -DENABLE_TESTSUITE=OFF + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} diff --git a/rpm-tools/rpm-tools.install b/rpm-tools/rpm-tools.install new file mode 100644 index 0000000000..2e45c24afb --- /dev/null +++ b/rpm-tools/rpm-tools.install @@ -0,0 +1,8 @@ +post_install() { + echo " rpm-tools installs RedHat package manager for you." + echo " It is useful for those who wants to create/modify RPM files." + echo " But do not use rpm-tools to install RedHat packages at your ArchLinux machine." + echo " It will break your system!" + echo " You will need to go back to Arch wiki and read the installation guide again." + echo " You've been warned!" +} diff --git a/rpm-tools/rpmextract.sh b/rpm-tools/rpmextract.sh new file mode 100644 index 0000000000..f9d4e5b1e0 --- /dev/null +++ b/rpm-tools/rpmextract.sh @@ -0,0 +1,6 @@ +#!/bin/sh +if [ "$1" = "" -o ! -e "$1" ]; then + echo "no package supplied" 1>&2 + exit 1 +fi +bsdtar xf $1 diff --git a/rpm-tools/rpmlib-filesystem-check.patch b/rpm-tools/rpmlib-filesystem-check.patch new file mode 100644 index 0000000000..984d8c4af8 --- /dev/null +++ b/rpm-tools/rpmlib-filesystem-check.patch @@ -0,0 +1,125 @@ +diff -up rpm-4.10.90.git11978/lib/depends.c.rpmlib-filesystem-check rpm-4.10.90.git11978/lib/depends.c +--- rpm-4.10.90.git11978/lib/depends.c.rpmlib-filesystem-check 2012-11-01 09:40:26.000000000 +0200 ++++ rpm-4.10.90.git11978/lib/depends.c 2012-11-05 10:53:42.294733695 +0200 +@@ -589,6 +589,109 @@ static int rpmdbProvides(rpmts ts, depCa + return rc; + } + ++/* ++ * Temporary support for live-conversion of the filesystem hierarchy ++ * mailto: kay@redhat.com, harald@redhat.com ++ * https://fedoraproject.org/wiki/Features/UsrMove ++ * ++ * X-CheckUnifiedSystemdir: ++ * /bin, /sbin, /lib, /lib64 --> /usr ++ * ++ * X-CheckUnifiedBindir: ++ * /usr/sbin -> /usr/bin ++ * ++ * X-CheckMultiArchLibdir: ++ * /usr/lib64 /usr/lib/ (e.g. x86_64-linux-gnu) ++ * ++ * This code is not needed for new installations, it can be removed after ++ * updates from older systems are no longer supported: Fedora 19 / RHEL 8. ++ */ ++ ++static int CheckLink(const char *dir, const char *root) ++{ ++ char *d = NULL; ++ struct stat sbuf; ++ int rc = 0; ++ ++ if (!root) ++ root = "/"; ++ ++ rasprintf(&d, "%s%s", root, dir); ++ if (!d) { ++ rc = -1; ++ goto exit; ++ } ++ ++ /* directory or symlink does not exist, all is fine */ ++ if (lstat(d, &sbuf) < 0) { ++ rc = 1; ++ goto exit; ++ } ++ ++ /* if it is a symlink, all is fine */ ++ if (S_ISLNK(sbuf.st_mode)) ++ rc = 1; ++ ++exit: ++ free(d); ++ return rc; ++} ++ ++static int CheckFilesystemHierarchy(rpmds * dsp, const char *root) ++{ ++ static const char *dirs[] = { "bin", "sbin", "lib", "lib64" }; ++ int check; ++ int i; ++ rpmds ds; ++ rpmstrPool pool = rpmdsPool(*dsp); ++ int rc = 0; ++ ++ for (i = 0; i < sizeof(dirs) / sizeof(dirs[0]); i++) { ++ check = CheckLink(dirs[i], root); ++ if (check < 0) { ++ rc = -1; ++ goto exit; ++ } ++ ++ if (check == 0) ++ goto exit; ++ } ++ ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME, ++ "rpmlib(X-CheckUnifiedSystemdir)", "1", ++ RPMSENSE_EQUAL); ++ rpmdsMerge(dsp, ds); ++ rpmdsFree(ds); ++ ++ check = CheckLink("usr/lib64", root); ++ if (check < 0) { ++ rc = -1; ++ goto exit; ++ } ++ if (check > 0) { ++ ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME, ++ "rpmlib(X-CheckMultiArchLibdir)", "1", ++ RPMSENSE_EQUAL); ++ rpmdsMerge(dsp, ds); ++ rpmdsFree(ds); ++ } ++ ++ check = CheckLink("usr/sbin", root); ++ if (check < 0) { ++ rc = -1; ++ goto exit; ++ } ++ if (check > 0) { ++ ds = rpmdsSinglePool(pool, RPMTAG_PROVIDENAME, ++ "rpmlib(X-CheckUnifiedBindir)", "1", ++ RPMSENSE_EQUAL); ++ rpmdsMerge(dsp, ds); ++ rpmdsFree(ds); ++ } ++ ++exit: ++ return rc; ++} ++ + /** + * Check dep for an unsatisfied dependency. + * @param ts transaction set +@@ -612,8 +715,10 @@ retry: + * Check those dependencies now. + */ + if (dsflags & RPMSENSE_RPMLIB) { +- if (tsmem->rpmlib == NULL) ++ if (tsmem->rpmlib == NULL) { + rpmdsRpmlibPool(rpmtsPool(ts), &(tsmem->rpmlib), NULL); ++ CheckFilesystemHierarchy(&(tsmem->rpmlib), rpmtsRootDir(ts)); ++ } + + if (tsmem->rpmlib != NULL && rpmdsSearch(tsmem->rpmlib, dep) >= 0) { + rpmdsNotify(dep, "(rpmlib provides)", rc);