From 1439f01e4ec6e08c6c2d61719670d7512d787914 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 20 Dec 2011 14:39:21 +0100 Subject: [PATCH] add temporary rpmlib patch to support filesystem transition https://fedorahosted.org/fpc/ticket/118#comment:14 --- rpm-4.9.1.2-rpmlib-filesystem-check.patch | 127 ++++++++++++++++++++++ rpm.spec | 10 +- 2 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 rpm-4.9.1.2-rpmlib-filesystem-check.patch diff --git a/rpm-4.9.1.2-rpmlib-filesystem-check.patch b/rpm-4.9.1.2-rpmlib-filesystem-check.patch new file mode 100644 index 0000000..d9286ee --- /dev/null +++ b/rpm-4.9.1.2-rpmlib-filesystem-check.patch @@ -0,0 +1,127 @@ +diff --git a/lib/depends.c b/lib/depends.c +index 69aecbb..5101d32 100644 +--- a/lib/depends.c ++++ b/lib/depends.c +@@ -386,6 +386,108 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep) + 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; ++ 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 = rpmdsSingle(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 = rpmdsSingle(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 = rpmdsSingle(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 +@@ -410,9 +512,11 @@ retry: + */ + if (dsflags & RPMSENSE_RPMLIB) { + static int oneshot = -1; +- if (oneshot) ++ if (oneshot) { + oneshot = rpmdsRpmlib(&rpmlibP, NULL); +- ++ CheckFilesystemHierarchy(&rpmlibP, rpmtsRootDir(ts)); ++ } ++ + if (rpmlibP != NULL && rpmdsSearch(rpmlibP, dep) >= 0) { + rpmdsNotify(dep, "(rpmlib provides)", rc); + goto exit; diff --git a/rpm.spec b/rpm.spec index c862502..323ee6a 100644 --- a/rpm.spec +++ b/rpm.spec @@ -21,7 +21,7 @@ Summary: The RPM package management system Name: rpm Version: %{rpmver} -Release: %{?snapver:0.%{snapver}.}7%{?dist} +Release: %{?snapver:0.%{snapver}.}8%{?dist} Group: System Environment/Base Url: http://www.rpm.org/ Source0: http://rpm.org/releases/rpm-4.9.x/%{name}-%{srcver}.tar.bz2 @@ -56,6 +56,8 @@ Patch304: rpm-4.9.1.1-ld-flags.patch Patch305: rpm-4.9.x-gnome-help.patch # Just warn on STABS instead of failing for now Patch306: rpm-4.9.x-debugedit-stabs-warn.patch +# Temporary Patch to provide support for updates +Patch400: rpm-4.9.1.2-rpmlib-filesystem-check.patch # Partially GPL/LGPL dual-licensed and some bits with BSD # SourceLicense: (GPLv2+ and LGPLv2+ with exceptions) and BSD @@ -227,6 +229,8 @@ packages on a system. %patch305 -p1 -b .gnome-help %patch306 -p1 -b .debugedit-stabs-warn +%patch400 -p1 -b .rpmlib-filesystem-check + # this patch cant be applied on softfp builds %ifnarch armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l %patch5 -p1 -b .armhfp @@ -444,6 +448,10 @@ exit 0 %doc COPYING doc/librpm/html/* %changelog +* Tue Dec 20 2011 Kay Sievers - 4.9.1.2-8 +- add temporary rpmlib patch to support filesystem transition + https://fedoraproject.org/wiki/Features/UsrMove + * Fri Dec 02 2011 Panu Matilainen - 4.9.1.2-7 - switch over to libdb, aka Berkeley DB 5.x