Compare commits
No commits in common. "factory" and "factory" have entirely different histories.
122
0001-Add-option-to-set-mtime-of-files-in-rpms.patch
Normal file
122
0001-Add-option-to-set-mtime-of-files-in-rpms.patch
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
From fc04a1bde1941d2c61a9e33e55c5c492327674ba Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Zerebecki <jan.suse@zerebecki.de>
|
||||||
|
Date: Thu, 15 Feb 2024 09:57:35 +0100
|
||||||
|
Subject: [PATCH 1/3] Add option to set mtime of files in rpms
|
||||||
|
|
||||||
|
to SOURCE_DATE_EPOCH.
|
||||||
|
|
||||||
|
For backwards compatibility the option clamp / limit the maximum mtime
|
||||||
|
is retained.
|
||||||
|
|
||||||
|
Setting it ouright avoids problems with an incorrectly older clock. It
|
||||||
|
also avoids problems with build scrips that incorrectly change file
|
||||||
|
mtimes when SOURCE_DATE_EPOCH_MTIME is in use.
|
||||||
|
|
||||||
|
mtimes are required to increase with new versions and releases
|
||||||
|
of an rpm with the same name, as rsync without --checksum and similar
|
||||||
|
tools would get confused if the content changes without newer mtime.
|
||||||
|
|
||||||
|
If SOURCE_DATE_EPOCH_MTIME is set use it instead for file modification time
|
||||||
|
stamps. It is supposed to be newer. This can be used if we might want to
|
||||||
|
compare if the file content remains the same when a build dependency
|
||||||
|
changes while a build script embeds SOURCE_DATE_EPOCH in the file
|
||||||
|
content.
|
||||||
|
|
||||||
|
This can be used to support automatic rebuilds. Normally automatic
|
||||||
|
rebuilds work, but together with reproducible builds an undesirable
|
||||||
|
situation may occur. If a build e.g. embeds SOURCE_DATE_EPOCH in the
|
||||||
|
output, then the output changes every time such a rebuild happens, which
|
||||||
|
can be very often. This is to be avoided as updating packages without
|
||||||
|
necessity is too expensive.
|
||||||
|
---
|
||||||
|
build/files.c | 33 ++++++++++++++++++++++++++++-----
|
||||||
|
docs/manual/buildprocess.md | 5 +++--
|
||||||
|
2 files changed, 31 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/build/files.c b/build/files.c
|
||||||
|
index c403c806e..cec7999ca 100644
|
||||||
|
--- a/build/files.c
|
||||||
|
+++ b/build/files.c
|
||||||
|
@@ -1033,14 +1033,34 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
||||||
|
rpm_loff_t totalFileSize = 0;
|
||||||
|
Header h = pkg->header; /* just a shortcut */
|
||||||
|
int override_date = 0;
|
||||||
|
+ int set_mtime = 0;
|
||||||
|
time_t source_date_epoch = 0;
|
||||||
|
char *srcdate = getenv("SOURCE_DATE_EPOCH");
|
||||||
|
+ char *msrcdate = getenv("SOURCE_DATE_EPOCH_MTIME");
|
||||||
|
|
||||||
|
- /* Limit the maximum date to SOURCE_DATE_EPOCH if defined
|
||||||
|
- * similar to the tar --clamp-mtime option
|
||||||
|
+ /* If SOURCE_DATE_EPOCH_MTIME is set use it for file modification time
|
||||||
|
+ * stamps, it is supposed to be newer. This can be used if we might want to
|
||||||
|
+ * compare if the file content remains the same when a build dependency
|
||||||
|
+ * changes while a build script embeds SOURCE_DATE_EPOCH in the file
|
||||||
|
+ * content. mtimes are required to increase with new versions and releases
|
||||||
|
+ * of an rpm with the same name, as rsync without --checksum and similar
|
||||||
|
+ * tools would get confused if the content changes without newer mtime. */
|
||||||
|
+ if (msrcdate != NULL) {
|
||||||
|
+ srcdate = msrcdate;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Set the file mtime to SOURCE_DATE_EPOCH it if requested to make the
|
||||||
|
+ * resulting rpm reproducible.
|
||||||
|
* https://reproducible-builds.org/specs/source-date-epoch/
|
||||||
|
+ *
|
||||||
|
+ * For backwards compatibility clamp / limit the maximum mtime if requested
|
||||||
|
+ * similar the tar --clamp-mtime option. Setting it ouright avoids problems
|
||||||
|
+ * with an incorrectly older clock. It also avoids problems with build
|
||||||
|
+ * scrips that incorrectly change file mtimes when SOURCE_DATE_EPOCH_MTIME
|
||||||
|
+ * is in use.
|
||||||
|
*/
|
||||||
|
- if (srcdate && rpmExpandNumeric("%{?clamp_mtime_to_source_date_epoch}")) {
|
||||||
|
+ if (srcdate && (rpmExpandNumeric("%{?clamp_mtime_to_source_date_epoch}")
|
||||||
|
+ || rpmExpandNumeric("%{?set_mtime_to_source_date_epoch}"))) {
|
||||||
|
char *endptr;
|
||||||
|
errno = 0;
|
||||||
|
source_date_epoch = strtol(srcdate, &endptr, 10);
|
||||||
|
@@ -1049,6 +1069,9 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
||||||
|
fl->processingFailed = 1;
|
||||||
|
}
|
||||||
|
override_date = 1;
|
||||||
|
+ if (rpmExpandNumeric("%{?set_mtime_to_source_date_epoch}")) {
|
||||||
|
+ set_mtime = 1;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1191,8 +1214,8 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
||||||
|
totalFileSize += flp->fl_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- if (override_date && flp->fl_mtime > source_date_epoch) {
|
||||||
|
+
|
||||||
|
+ if (override_date && (flp->fl_mtime > source_date_epoch || set_mtime)) {
|
||||||
|
flp->fl_mtime = source_date_epoch;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
diff --git a/docs/manual/buildprocess.md b/docs/manual/buildprocess.md
|
||||||
|
index 1ceb47a7e..64cd35626 100644
|
||||||
|
--- a/docs/manual/buildprocess.md
|
||||||
|
+++ b/docs/manual/buildprocess.md
|
||||||
|
@@ -94,13 +94,14 @@ Macro name | Description
|
||||||
|
`%_build_pkgcheck` | Progam to run on each generated binary package
|
||||||
|
`%_build_pkcheck_set` | Program to run on the generated binary package set
|
||||||
|
|
||||||
|
-### Reproducability
|
||||||
|
+### Reproducibility
|
||||||
|
|
||||||
|
Macro name | Description
|
||||||
|
--------------------------------------|-----------
|
||||||
|
`%source_date_epoch_from_changelog` | Set `SOURCE_DATE_EPOCH` from latest `%changelog` entry
|
||||||
|
`%use_source_date_epoch_as_buildtime` | Set package BuildTime to `SOURCE_DATE_EPOCH`
|
||||||
|
-`%clamp_mtime_to_source_date_epoch` | Ensure file timestamps are not newer than `SOURCE_DATE_EPOCH`
|
||||||
|
+`%set_mtime_to_source_date_epoch` | Set file modification timestamps to `SOURCE_DATE_EPOCH_MTIME` or as fallback to `SOURCE_DATE_EPOCH`
|
||||||
|
+`%clamp_mtime_to_source_date_epoch` | You should use the above instead, it is for backwards compatibility only. Ensure file timestamps are not newer than `SOURCE_DATE_EPOCH`
|
||||||
|
|
||||||
|
### Vendor defaults
|
||||||
|
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
@ -1,6 +1,17 @@
|
|||||||
--- build/build.c.orig 2024-12-16 09:50:41.468083747 +0000
|
From e0a8b84f68993fccbe70c4fb1cd8402fa7371147 Mon Sep 17 00:00:00 2001
|
||||||
+++ build/build.c 2024-12-16 09:50:48.428069376 +0000
|
From: Jan Zerebecki <jan.suse@zerebecki.de>
|
||||||
@@ -45,8 +45,11 @@ static rpm_time_t getBuildTime(void)
|
Date: Thu, 15 Feb 2024 07:58:44 +0100
|
||||||
|
Subject: [PATCH 2/3] log build time if it is set from SOURCE_DATE_EPOCH
|
||||||
|
|
||||||
|
---
|
||||||
|
build/build.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/build/build.c b/build/build.c
|
||||||
|
index f2cf98c8b..2693d80b3 100644
|
||||||
|
--- a/build/build.c
|
||||||
|
+++ b/build/build.c
|
||||||
|
@@ -35,8 +35,11 @@ static rpm_time_t getBuildTime(void)
|
||||||
epoch = strtol(srcdate, &endptr, 10);
|
epoch = strtol(srcdate, &endptr, 10);
|
||||||
if (srcdate == endptr || *endptr || errno != 0)
|
if (srcdate == endptr || *endptr || errno != 0)
|
||||||
rpmlog(RPMLOG_ERR, _("unable to parse SOURCE_DATE_EPOCH\n"));
|
rpmlog(RPMLOG_ERR, _("unable to parse SOURCE_DATE_EPOCH\n"));
|
||||||
@ -12,4 +23,7 @@
|
|||||||
+ }
|
+ }
|
||||||
} else
|
} else
|
||||||
buildTime = (uint32_t) time(NULL);
|
buildTime = (uint32_t) time(NULL);
|
||||||
free(btMacro);
|
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
||||||
|
@ -1,14 +1,30 @@
|
|||||||
--- build/build.c.orig 2024-10-07 09:35:46.000000000 +0000
|
From 973f94bafea8e641ed747d3c420ea1bc2e1cb37f Mon Sep 17 00:00:00 2001
|
||||||
+++ build/build.c 2024-12-16 09:50:14.728138966 +0000
|
From: Jan Zerebecki <jan.suse@zerebecki.de>
|
||||||
@@ -385,8 +385,10 @@ static int buildSpec(rpmts ts, BTA_t bui
|
Date: Thu, 15 Feb 2024 08:03:05 +0100
|
||||||
|
Subject: [PATCH 3/3] Error out on a missing changelog date
|
||||||
|
|
||||||
|
if it is needed as the source for SOURCE_DATE_EPOCH, instead of only
|
||||||
|
logging a warning.
|
||||||
|
---
|
||||||
|
build/build.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/build/build.c b/build/build.c
|
||||||
|
index 2693d80b3..ce7bc8b88 100644
|
||||||
|
--- a/build/build.c
|
||||||
|
+++ b/build/build.c
|
||||||
|
@@ -344,8 +344,10 @@ static rpmRC buildSpec(rpmts ts, BTA_t buildArgs, rpmSpec spec, int what)
|
||||||
setenv("SOURCE_DATE_EPOCH", sdestr, 0);
|
setenv("SOURCE_DATE_EPOCH", sdestr, 0);
|
||||||
rpmtdFreeData(&td);
|
rpmtdFreeData(&td);
|
||||||
} else {
|
} else {
|
||||||
- rpmlog(RPMLOG_WARNING, _("%%source_date_epoch_from_changelog is set, but "
|
- rpmlog(RPMLOG_WARNING, _("source_date_epoch_from_changelog set but "
|
||||||
+ rpmlog(RPMLOG_ERR, _("%%source_date_epoch_from_changelog is set, but "
|
+ rpmlog(RPMLOG_ERR, _("source_date_epoch_from_changelog set but "
|
||||||
"%%changelog has no entries to take a date from\n"));
|
"%%changelog is missing\n"));
|
||||||
+ rc = RPMRC_FAIL;
|
+ rc = RPMRC_FAIL;
|
||||||
+ goto exit;
|
+ goto exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
--- tools/elfdeps.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- tools/elfdeps.c.orig 2014-06-26 06:51:55.768815677 +0000
|
||||||
+++ tools/elfdeps.c 2024-12-16 09:25:13.479234184 +0000
|
+++ tools/elfdeps.c 2014-08-04 13:02:16.981081591 +0000
|
||||||
@@ -17,6 +17,7 @@ int fake_soname = 1;
|
@@ -17,6 +17,7 @@ int soname_only = 0;
|
||||||
|
int fake_soname = 1;
|
||||||
int filter_soname = 1;
|
int filter_soname = 1;
|
||||||
int require_interp = 0;
|
int require_interp = 0;
|
||||||
int multifile = 0;
|
|
||||||
+int assume_exec = 0;
|
+int assume_exec = 0;
|
||||||
|
|
||||||
typedef struct elfInfo_s {
|
typedef struct elfInfo_s {
|
||||||
Elf *elf;
|
Elf *elf;
|
||||||
@@ -302,7 +303,7 @@ static int processFile(const char *fn, i
|
@@ -299,7 +300,7 @@ static int processFile(const char *fn, i
|
||||||
if (ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC) {
|
if (ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC) {
|
||||||
ei->marker = mkmarker(ehdr);
|
ei->marker = mkmarker(ehdr);
|
||||||
ei->isDSO = (ehdr->e_type == ET_DYN);
|
ei->isDSO = (ehdr->e_type == ET_DYN);
|
||||||
@ -17,10 +17,10 @@
|
|||||||
|
|
||||||
processProgHeaders(ei, ehdr);
|
processProgHeaders(ei, ehdr);
|
||||||
processSections(ei);
|
processSections(ei);
|
||||||
@@ -372,6 +373,7 @@ int main(int argc, char *argv[])
|
@@ -364,6 +365,7 @@ int main(int argc, char *argv[])
|
||||||
|
{ "no-fake-soname", 0, POPT_ARG_VAL, &fake_soname, 0, NULL, NULL },
|
||||||
{ "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL },
|
{ "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL },
|
||||||
{ "require-interp", 0, POPT_ARG_VAL, &require_interp, -1, NULL, NULL },
|
{ "require-interp", 0, POPT_ARG_VAL, &require_interp, -1, NULL, NULL },
|
||||||
{ "multifile", 'm', POPT_ARG_VAL, &multifile, -1, NULL, NULL },
|
|
||||||
+ { "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL },
|
+ { "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL },
|
||||||
POPT_AUTOHELP
|
POPT_AUTOHELP
|
||||||
POPT_TABLEEND
|
POPT_TABLEEND
|
||||||
|
@ -1,19 +1,25 @@
|
|||||||
--- build/parseSimpleScript.c.orig 2024-12-16 09:59:01.199053527 +0000
|
Index: build/parseSpec.c
|
||||||
+++ build/parseSimpleScript.c 2024-12-16 10:08:22.389914963 +0000
|
===================================================================
|
||||||
@@ -59,6 +59,28 @@ int parseSimpleScript(rpmSpec spec, cons
|
--- build/parseSpec.c.orig
|
||||||
target = &buf;
|
+++ build/parseSpec.c
|
||||||
}
|
@@ -942,7 +942,30 @@ static rpmSpec parseSpec(const char *spe
|
||||||
|
&(spec->buildrequires));
|
||||||
+ if (!mode && !*target && !strcmp(name, "build")) {
|
break;
|
||||||
+ *target = newStringBuf();
|
case PART_BUILD:
|
||||||
+ appendLineStringBuf(*target,
|
- parsePart = parseSimpleScript(spec, "%build", &(spec->build));
|
||||||
|
+ if (spec->build) {
|
||||||
|
+ rpmlog(RPMLOG_ERR, _("line %d: second %s\n"), spec->lineNum, "%build");
|
||||||
|
+ parsePart = PART_ERROR;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ spec->build = newStringBuf();
|
||||||
|
+ appendLineStringBuf(spec->build,
|
||||||
+ "ref=/usr/lib/rpm\n"
|
+ "ref=/usr/lib/rpm\n"
|
||||||
+ "mints=0\n"
|
+ "mints=0\n"
|
||||||
+ "case $(uname -m) in\n"
|
+ "case $(uname -m) in\n"
|
||||||
+ " aarch64) mints=20120610;;\n"
|
+ " aarch64) mints=20120610;;\n"
|
||||||
+ " ppc64le) mints=20130610;;\n"
|
+ " ppc64le) mints=20130610;;\n"
|
||||||
+ " riscv64) mints=20160911;;\n"
|
+ " riscv64) mints=20160911;;\n"
|
||||||
+ " loongarch64) mints=20201222;;\n"
|
|
||||||
+ "esac\n"
|
+ "esac\n"
|
||||||
+ "for s in guess sub; do\n"
|
+ "for s in guess sub; do\n"
|
||||||
+ " for c in $(find -maxdepth 8 -name \"config.$s\"); do\n"
|
+ " for c in $(find -maxdepth 8 -name \"config.$s\"); do\n"
|
||||||
@ -24,8 +30,7 @@
|
|||||||
+ " done\n"
|
+ " done\n"
|
||||||
+ "done\n"
|
+ "done\n"
|
||||||
+ );
|
+ );
|
||||||
+ }
|
+ parsePart = parseLines(spec, STRIP_NOTHING, NULL, &(spec->build));
|
||||||
+
|
break;
|
||||||
res = parseLines(spec, STRIP_NOTHING, NULL, target);
|
case PART_INSTALL:
|
||||||
|
parsePart = parseSimpleScript(spec, "%install", &(spec->install));
|
||||||
if (buf) {
|
|
||||||
|
12
brp.diff
12
brp.diff
@ -1,5 +1,5 @@
|
|||||||
--- scripts/brp-strip-comment-note.orig 2024-10-07 09:35:46.000000000 +0000
|
--- scripts/brp-strip-comment-note.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ scripts/brp-strip-comment-note 2024-12-16 09:15:41.572425334 +0000
|
+++ scripts/brp-strip-comment-note 2023-10-09 12:22:27.504732553 +0000
|
||||||
@@ -15,7 +15,7 @@ esac
|
@@ -15,7 +15,7 @@ esac
|
||||||
|
|
||||||
# Strip .comment and .note sections (the latter only if it is not allocated)
|
# Strip .comment and .note sections (the latter only if it is not allocated)
|
||||||
@ -9,10 +9,10 @@
|
|||||||
note="-R .note"
|
note="-R .note"
|
||||||
if $OBJDUMP -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
|
if $OBJDUMP -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
|
||||||
grep ALLOC >/dev/null; then
|
grep ALLOC >/dev/null; then
|
||||||
--- scripts/brp-strip.orig 2024-10-07 09:35:46.000000000 +0000
|
--- scripts/brp-strip.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ scripts/brp-strip 2024-12-16 09:15:41.572425334 +0000
|
+++ scripts/brp-strip 2023-10-09 12:24:36.920521652 +0000
|
||||||
@@ -37,6 +37,7 @@ strip_elf_binaries()
|
@@ -35,6 +35,7 @@ strip_elf_binaries()
|
||||||
! -name "*.py" ! -name "*.js" ! -name "*.rb" \
|
! -regex "${RPM_BUILD_ROOT}/*usr/lib/debug.*" \
|
||||||
! -name "*.go" -links "${nlinks}" -print0 | \
|
! -name "*.go" -links "${nlinks}" -print0 | \
|
||||||
xargs -0 -r -P${nprocs} -n${MAX_ARGS} sh -c "file \"\$@\" | \
|
xargs -0 -r -P${nprocs} -n${MAX_ARGS} sh -c "file \"\$@\" | \
|
||||||
+ grep -v ' shared object,' | grep -v '/lib/modules/ | \
|
+ grep -v ' shared object,' | grep -v '/lib/modules/ | \
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:85df6005b9b78efe6bbe3341b3d260915aab3b5660d33886aa7e4b2c540f68e9
|
oid sha256:69ead89491a66ae6c1a960977b7cc567e56f74d535a022fc193334d78be838f1
|
||||||
size 24182
|
size 21222
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
--- scripts/check-files.orig 2024-12-17 09:47:18.016502845 +0000
|
|
||||||
+++ scripts/check-files 2024-12-17 09:50:09.872159687 +0000
|
|
||||||
@@ -27,6 +27,6 @@ trap "rm -f \"${FILES_DISK}\"" 0 2 3 5 1
|
|
||||||
|
|
||||||
# Find non-directory files in the build root and compare to the manifest.
|
|
||||||
# TODO: regex chars in last sed(1) expression should be escaped
|
|
||||||
-find "${RPM_BUILD_ROOT}" -type f -o -type l | LC_ALL=C sort > "${FILES_DISK}"
|
|
||||||
+find -H "${RPM_BUILD_ROOT}" -type f -o -type l | LC_ALL=C sort > "${FILES_DISK}"
|
|
||||||
LC_ALL=C sort | diff -d "${FILES_DISK}" - | sed -n -e 's!^\(-\|< \)'"${RPM_BUILD_ROOT}"'/usr/share/info/dir$!!' -e 's!^\(-\|< \)'"${RPM_BUILD_ROOT}"'\(.*\)$! \2!gp'
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
--- build/parseSpec.c.orig 2025-02-13 13:20:21.075462279 +0000
|
|
||||||
+++ build/parseSpec.c 2025-02-13 13:15:42.447942795 +0000
|
|
||||||
@@ -1429,7 +1429,8 @@ static rpmRC parseSpecParts(rpmSpec spec
|
|
||||||
/* rpmGlob returns files sorted */
|
|
||||||
if (rpmGlob(pattern, &argc, &argv) == 0) {
|
|
||||||
for (int i = 0; i < argc; i++) {
|
|
||||||
- rpmlog(RPMLOG_NOTICE, "Reading %s\n", argv[i]);
|
|
||||||
+ if (stage != PARSE_BUILDSYS)
|
|
||||||
+ rpmlog(RPMLOG_NOTICE, "Reading %s\n", argv[i]);
|
|
||||||
pushOFI(spec, argv[i]);
|
|
||||||
snprintf(spec->fileStack->readBuf, spec->fileStack->readBufLen,
|
|
||||||
"# Spec part read from %s\n\n", argv[i]);
|
|
@ -1,6 +1,6 @@
|
|||||||
--- CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
|
--- CMakeLists.txt.orig 2024-02-07 09:57:31.944781372 +0000
|
||||||
+++ CMakeLists.txt 2024-12-16 09:42:51.221054406 +0000
|
+++ CMakeLists.txt 2024-02-07 09:57:51.924739495 +0000
|
||||||
@@ -153,14 +153,26 @@ function(makemacros)
|
@@ -138,14 +138,26 @@ function(makemacros)
|
||||||
|
|
||||||
list(GET db_backends 0 DB_BACKEND)
|
list(GET db_backends 0 DB_BACKEND)
|
||||||
|
|
||||||
@ -28,5 +28,5 @@
|
|||||||
+ set(RPMCANONGNU -gnu)
|
+ set(RPMCANONGNU -gnu)
|
||||||
+ endif()
|
+ endif()
|
||||||
|
|
||||||
configure_file(platform.in platform @ONLY)
|
if (ENABLE_CUTF8)
|
||||||
configure_file(rpmrc.in rpmrc @ONLY)
|
set(C_LOCALE "C.UTF-8")
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
--- CMakeLists.txt.orig 2024-12-16 09:43:16.909001370 +0000
|
--- CMakeLists.txt.orig 2024-02-01 13:24:18.665660569 +0000
|
||||||
+++ CMakeLists.txt 2024-12-16 09:45:05.892776434 +0000
|
+++ CMakeLists.txt 2024-02-01 13:25:07.917586376 +0000
|
||||||
@@ -277,7 +277,11 @@ endif()
|
@@ -238,7 +238,11 @@ endif()
|
||||||
list(APPEND db_backends dummy)
|
list(APPEND db_backends dummy)
|
||||||
|
|
||||||
if (ENABLE_PYTHON)
|
if (ENABLE_PYTHON)
|
||||||
- find_package(Python3 3.7 COMPONENTS Interpreter Development REQUIRED)
|
- find_package(Python3 3.2 COMPONENTS Interpreter Development REQUIRED)
|
||||||
+ if (WITH_PYTHON_VERSION)
|
+ if (WITH_PYTHON_VERSION)
|
||||||
+ find_package(Python3 ${WITH_PYTHON_VERSION} EXACT COMPONENTS Interpreter Development REQUIRED)
|
+ find_package(Python3 ${WITH_PYTHON_VERSION} EXACT COMPONENTS Interpreter Development REQUIRED)
|
||||||
+ else()
|
+ else()
|
||||||
+ find_package(Python3 3.7 COMPONENTS Interpreter Development REQUIRED)
|
+ find_package(Python3 3.2 COMPONENTS Interpreter Development REQUIRED)
|
||||||
+ endif()
|
+ endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- lib/backend/bdb_ro.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/backend/bdb_ro.c.orig 2022-04-07 11:13:18.994517848 +0000
|
||||||
+++ lib/backend/bdb_ro.c 2024-12-16 09:28:13.146864067 +0000
|
+++ lib/backend/bdb_ro.c 2022-12-02 13:22:16.726408071 +0000
|
||||||
@@ -793,6 +793,7 @@ static unsigned int bdbro_pkgdbKey(dbiIn
|
@@ -793,6 +793,7 @@ static unsigned int bdbro_pkgdbKey(dbiIn
|
||||||
struct rpmdbOps_s bdbro_dbops = {
|
struct rpmdbOps_s bdbro_dbops = {
|
||||||
.name = "bdb_ro",
|
.name = "bdb_ro",
|
||||||
@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
.open = bdbro_Open,
|
.open = bdbro_Open,
|
||||||
.close = bdbro_Close,
|
.close = bdbro_Close,
|
||||||
--- lib/backend/dbi.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/backend/dbi.c.orig 2022-04-07 11:13:18.994517848 +0000
|
||||||
+++ lib/backend/dbi.c 2024-12-16 09:28:13.150864059 +0000
|
+++ lib/backend/dbi.c 2022-12-02 13:22:16.726408071 +0000
|
||||||
@@ -138,11 +138,20 @@ exit:
|
@@ -138,11 +138,20 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,8 +31,8 @@
|
|||||||
const char * dbiName(dbiIndex dbi)
|
const char * dbiName(dbiIndex dbi)
|
||||||
{
|
{
|
||||||
return dbi->dbi_file;
|
return dbi->dbi_file;
|
||||||
--- lib/backend/dbi.h.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/backend/dbi.h.orig 2022-04-07 11:13:18.994517848 +0000
|
||||||
+++ lib/backend/dbi.h 2024-12-16 09:28:13.150864059 +0000
|
+++ lib/backend/dbi.h 2022-12-02 13:22:16.726408071 +0000
|
||||||
@@ -13,6 +13,7 @@ enum rpmdbFlags {
|
@@ -13,6 +13,7 @@ enum rpmdbFlags {
|
||||||
RPMDB_FLAG_REBUILD = (1 << 1),
|
RPMDB_FLAG_REBUILD = (1 << 1),
|
||||||
RPMDB_FLAG_VERIFYONLY = (1 << 2),
|
RPMDB_FLAG_VERIFYONLY = (1 << 2),
|
||||||
@ -41,7 +41,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef enum dbCtrlOp_e {
|
typedef enum dbCtrlOp_e {
|
||||||
@@ -54,6 +55,7 @@ struct rpmdb_s {
|
@@ -53,6 +54,7 @@ struct rpmdb_s {
|
||||||
int db_buildindex; /*!< Index rebuild indicator */
|
int db_buildindex; /*!< Index rebuild indicator */
|
||||||
|
|
||||||
const struct rpmdbOps_s * db_ops; /*!< backend ops */
|
const struct rpmdbOps_s * db_ops; /*!< backend ops */
|
||||||
@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
/* dbenv and related parameters */
|
/* dbenv and related parameters */
|
||||||
void * db_dbenv; /*!< Backend private handle */
|
void * db_dbenv; /*!< Backend private handle */
|
||||||
@@ -194,6 +196,14 @@ RPM_GNUC_INTERNAL
|
@@ -197,6 +199,14 @@ RPM_GNUC_INTERNAL
|
||||||
const char * dbiName(dbiIndex dbi);
|
const char * dbiName(dbiIndex dbi);
|
||||||
|
|
||||||
/** \ingroup dbi
|
/** \ingroup dbi
|
||||||
@ -64,7 +64,7 @@
|
|||||||
* Open a database cursor.
|
* Open a database cursor.
|
||||||
* @param dbi index database handle
|
* @param dbi index database handle
|
||||||
* @param flags DBC_WRITE if writing, or 0 (DBC_READ) for reading
|
* @param flags DBC_WRITE if writing, or 0 (DBC_READ) for reading
|
||||||
@@ -237,6 +247,7 @@ const void * idxdbKey(dbiIndex dbi, dbiC
|
@@ -240,6 +250,7 @@ const void * idxdbKey(dbiIndex dbi, dbiC
|
||||||
struct rpmdbOps_s {
|
struct rpmdbOps_s {
|
||||||
const char *name; /* backend name */
|
const char *name; /* backend name */
|
||||||
const char *path; /* main database name */
|
const char *path; /* main database name */
|
||||||
@ -72,9 +72,9 @@
|
|||||||
|
|
||||||
int (*open)(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags);
|
int (*open)(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags);
|
||||||
int (*close)(dbiIndex dbi, unsigned int flags);
|
int (*close)(dbiIndex dbi, unsigned int flags);
|
||||||
--- lib/backend/ndb/rpmpkg.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/backend/ndb/rpmpkg.c.orig 2022-04-07 11:13:18.997517869 +0000
|
||||||
+++ lib/backend/ndb/rpmpkg.c 2024-12-16 09:28:13.150864059 +0000
|
+++ lib/backend/ndb/rpmpkg.c 2022-12-02 13:22:16.726408071 +0000
|
||||||
@@ -1111,11 +1111,12 @@ static int rpmpkgPutInternal(rpmpkgdb pk
|
@@ -1116,11 +1116,12 @@ static int rpmpkgPutInternal(rpmpkgdb pk
|
||||||
if (rpmpkgWriteBlob(pkgdb, pkgidx, blkoff, blkcnt, blob, blobl, pkgdb->generation)) {
|
if (rpmpkgWriteBlob(pkgdb, pkgidx, blkoff, blkcnt, blob, blobl, pkgdb->generation)) {
|
||||||
return RPMRC_FAIL;
|
return RPMRC_FAIL;
|
||||||
}
|
}
|
||||||
@ -90,9 +90,9 @@
|
|||||||
if (rpmpkgWriteslot(pkgdb, slotno, pkgidx, blkoff, blkcnt)) {
|
if (rpmpkgWriteslot(pkgdb, slotno, pkgidx, blkoff, blkcnt)) {
|
||||||
free(pkgdb->slots);
|
free(pkgdb->slots);
|
||||||
pkgdb->slots = 0;
|
pkgdb->slots = 0;
|
||||||
--- lib/rpmdb.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpmdb.c.orig 2022-09-20 12:08:27.197920294 +0000
|
||||||
+++ lib/rpmdb.c 2024-12-16 09:29:39.686685792 +0000
|
+++ lib/rpmdb.c 2022-12-02 13:24:02.830159868 +0000
|
||||||
@@ -466,7 +466,12 @@ static int openDatabase(const char * pre
|
@@ -469,7 +469,12 @@ static int openDatabase(const char * pre
|
||||||
/* Open just bare minimum when rebuilding a potentially damaged db */
|
/* Open just bare minimum when rebuilding a potentially damaged db */
|
||||||
int justPkgs = (db->db_flags & RPMDB_FLAG_REBUILD) &&
|
int justPkgs = (db->db_flags & RPMDB_FLAG_REBUILD) &&
|
||||||
((db->db_mode & O_ACCMODE) == O_RDONLY);
|
((db->db_mode & O_ACCMODE) == O_RDONLY);
|
||||||
@ -106,7 +106,7 @@
|
|||||||
|
|
||||||
if (!db->db_descr)
|
if (!db->db_descr)
|
||||||
db->db_descr = "unknown db";
|
db->db_descr = "unknown db";
|
||||||
@@ -2209,6 +2214,15 @@ int rpmdbAdd(rpmdb db, Header h)
|
@@ -2228,6 +2233,15 @@ int rpmdbAdd(rpmdb db, Header h)
|
||||||
if (db == NULL)
|
if (db == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -119,10 +119,10 @@
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
hdrBlob = (uint8_t *)headerExport(h, &hdrLen);
|
hdrBlob = headerExport(h, &hdrLen);
|
||||||
if (hdrBlob == NULL || hdrLen == 0) {
|
if (hdrBlob == NULL || hdrLen == 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
@@ -2404,7 +2418,22 @@ int rpmdbRebuild(const char * prefix, rp
|
@@ -2423,7 +2437,22 @@ int rpmdbRebuild(const char * prefix, rp
|
||||||
}
|
}
|
||||||
rootdbpath = rpmGetPath(prefix, dbpath, NULL);
|
rootdbpath = rpmGetPath(prefix, dbpath, NULL);
|
||||||
|
|
||||||
@ -146,7 +146,7 @@
|
|||||||
if (rstreq(newdbpath, "") || rstreq(newdbpath, dbpath)) {
|
if (rstreq(newdbpath, "") || rstreq(newdbpath, dbpath)) {
|
||||||
newdbpath = _free(newdbpath);
|
newdbpath = _free(newdbpath);
|
||||||
rasprintf(&newdbpath, "%srebuilddb.%d", dbpath, (int) getpid());
|
rasprintf(&newdbpath, "%srebuilddb.%d", dbpath, (int) getpid());
|
||||||
@@ -2430,7 +2459,9 @@ int rpmdbRebuild(const char * prefix, rp
|
@@ -2449,7 +2478,9 @@ int rpmdbRebuild(const char * prefix, rp
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (openDatabase(prefix, newdbpath, &newdb,
|
if (openDatabase(prefix, newdbpath, &newdb,
|
||||||
@ -157,9 +157,9 @@
|
|||||||
rc = 1;
|
rc = 1;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
--- lib/rpmdb_internal.h.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpmdb_internal.h.orig 2022-04-07 11:13:19.014517984 +0000
|
||||||
+++ lib/rpmdb_internal.h 2024-12-16 09:28:13.150864059 +0000
|
+++ lib/rpmdb_internal.h 2022-12-02 13:22:16.726408071 +0000
|
||||||
@@ -18,6 +18,7 @@
|
@@ -25,6 +25,7 @@ extern "C" {
|
||||||
|
|
||||||
enum rpmdbRebuildFlags_e {
|
enum rpmdbRebuildFlags_e {
|
||||||
RPMDB_REBUILD_FLAG_SALVAGE = (1 << 0),
|
RPMDB_REBUILD_FLAG_SALVAGE = (1 << 0),
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
--- macros.in.orig 2024-12-19 13:27:56.291657815 +0000
|
|
||||||
+++ macros.in 2024-12-19 13:29:00.335537654 +0000
|
|
||||||
@@ -199,11 +199,12 @@ package or when debugging this package.\
|
|
||||||
%{nil}
|
|
||||||
|
|
||||||
# The duplicate __debug_package definition is needed to ensure matching
|
|
||||||
-# state when %install is skipped due to short-circuit.
|
|
||||||
+# state when %install is skipped due to short-circuit, IFF buildsubdir
|
|
||||||
+# is defined (indicating use of automatic debuginfo generation)
|
|
||||||
%debug_package \
|
|
||||||
%ifnarch noarch\
|
|
||||||
%global __debug_package 1\
|
|
||||||
-%%global __debug_package 1\
|
|
||||||
+%{?buildsubdir:%%global __debug_package 1}\
|
|
||||||
%_debuginfo_template\
|
|
||||||
%{?_debugsource_packages:%_debugsource_template}\
|
|
||||||
%endif\
|
|
@ -1,6 +1,6 @@
|
|||||||
--- lib/rpmscript.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpmscript.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/rpmscript.c 2024-12-16 09:26:15.035107390 +0000
|
+++ lib/rpmscript.c 2023-10-09 13:10:38.011654503 +0000
|
||||||
@@ -462,7 +462,7 @@ rpmRC rpmScriptRun(rpmScript script, int
|
@@ -463,7 +463,7 @@ rpmRC rpmScriptRun(rpmScript script, int
|
||||||
if (script == NULL) return RPMRC_OK;
|
if (script == NULL) return RPMRC_OK;
|
||||||
|
|
||||||
ARGV_t args = NULL;
|
ARGV_t args = NULL;
|
||||||
@ -9,7 +9,7 @@
|
|||||||
RPMLOG_ERR : RPMLOG_WARNING;
|
RPMLOG_ERR : RPMLOG_WARNING;
|
||||||
rpmRC rc;
|
rpmRC rc;
|
||||||
int script_type = RPMSCRIPTLET_FORK | RPMSCRIPTLET_EXEC;
|
int script_type = RPMSCRIPTLET_FORK | RPMSCRIPTLET_EXEC;
|
||||||
@@ -724,5 +724,8 @@ rpmscriptTypes rpmScriptType(rpmScript s
|
@@ -723,5 +723,8 @@ rpmscriptTypes rpmScriptType(rpmScript s
|
||||||
|
|
||||||
rpmscriptFlags rpmScriptFlags(rpmScript script)
|
rpmscriptFlags rpmScriptFlags(rpmScript script)
|
||||||
{
|
{
|
||||||
@ -19,11 +19,11 @@
|
|||||||
+ flags |= RPMSCRIPT_FLAG_CRITICAL;
|
+ flags |= RPMSCRIPT_FLAG_CRITICAL;
|
||||||
+ return flags;
|
+ return flags;
|
||||||
}
|
}
|
||||||
--- macros.in.orig 2024-12-16 09:26:03.635130873 +0000
|
--- macros.in.orig 2023-10-09 13:10:35.043659922 +0000
|
||||||
+++ macros.in 2024-12-16 09:26:15.035107390 +0000
|
+++ macros.in 2023-10-09 13:10:38.015654495 +0000
|
||||||
@@ -1390,6 +1390,11 @@ end
|
@@ -1377,5 +1377,10 @@ end
|
||||||
# Global buildsystem defaults
|
end
|
||||||
%buildsystem_default_prep() %autosetup -C -p1 %*
|
}
|
||||||
|
|
||||||
+# Should errors in %post scriptlet be propagated as errors?
|
+# Should errors in %post scriptlet be propagated as errors?
|
||||||
+#
|
+#
|
||||||
@ -32,4 +32,3 @@
|
|||||||
+
|
+
|
||||||
# \endverbatim
|
# \endverbatim
|
||||||
#*/
|
#*/
|
||||||
|
|
||||||
|
@ -1,9 +1,26 @@
|
|||||||
--- fileattrs/elf.attr.orig 2024-10-07 09:35:46.000000000 +0000
|
--- fileattrs/elf.attr.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ fileattrs/elf.attr 2024-12-16 09:23:29.831448715 +0000
|
+++ fileattrs/elf.attr 2023-10-09 13:07:09.252042587 +0000
|
||||||
@@ -1,5 +1,5 @@
|
@@ -1,4 +1,4 @@
|
||||||
%__elf_provides %{_rpmconfigdir}/elfdeps --provides --multifile
|
%__elf_provides %{_rpmconfigdir}/elfdeps --provides
|
||||||
%__elf_requires %{_rpmconfigdir}/elfdeps --requires --multifile
|
%__elf_requires %{_rpmconfigdir}/elfdeps --requires
|
||||||
%__elf_magic ^(setuid,? )?(setgid,? )?(sticky )?ELF (32|64)-bit.*$
|
%__elf_magic ^(setuid,? )?(setgid,? )?(sticky )?ELF (32|64)-bit.*$
|
||||||
-%__elf_exclude_path ^/lib/modules/.*\\.ko?(\\.[[:alnum:]]*)$
|
-%__elf_exclude_path ^/lib/modules/.*\.ko?(\.[[:alnum:]]*)$
|
||||||
+%__elf_exclude_path (^/usr/lib/debug/)|(^/lib/modules/.*\\.ko?(\\.[[:alnum:]]*)$)
|
+%__elf_exclude_path (^/usr/lib/debug/)|(^/lib/modules/.*\.ko?(\.[[:alnum:]]*)$)
|
||||||
%__elf_protocol multifile
|
--- fileattrs/perl.attr.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
|
+++ fileattrs/perl.attr 2023-10-09 12:58:36.893003334 +0000
|
||||||
|
@@ -1,3 +1,4 @@
|
||||||
|
-%__perl_requires %{_rpmconfigdir}/perl.req
|
||||||
|
+# disabled for now
|
||||||
|
+#%__perl_requires %{_rpmconfigdir}/perl.req
|
||||||
|
%__perl_magic ^.*[Pp]erl .*$
|
||||||
|
%__perl_flags exeonly
|
||||||
|
--- fileattrs/perllib.attr.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
|
+++ fileattrs/perllib.attr 2023-10-09 12:58:36.893003334 +0000
|
||||||
|
@@ -1,5 +1,6 @@
|
||||||
|
%__perllib_provides %{_rpmconfigdir}/perl.prov
|
||||||
|
-%__perllib_requires %{_rpmconfigdir}/perl.req
|
||||||
|
+#disabled for now
|
||||||
|
+#%__perllib_requires %{_rpmconfigdir}/perl.req
|
||||||
|
%__perllib_magic ^Perl[[:digit:]] module source.*
|
||||||
|
%__perllib_path \\.pm$
|
||||||
|
%__perllib_flags magic_and_path
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
--- scripts/CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
|
--- scripts/CMakeLists.txt.orig 2023-10-09 13:14:50.011193421 +0000
|
||||||
+++ scripts/CMakeLists.txt 2024-12-16 09:27:43.274925606 +0000
|
+++ scripts/CMakeLists.txt 2023-10-09 13:15:00.395174379 +0000
|
||||||
@@ -4,7 +4,7 @@ install(PROGRAMS
|
@@ -5,6 +5,7 @@ install(PROGRAMS
|
||||||
brp-strip-static-archive brp-elfperms brp-remove-la-files
|
|
||||||
check-files check-prereqs
|
check-files check-prereqs
|
||||||
check-buildroot check-rpaths check-rpaths-worker
|
check-buildroot check-rpaths check-rpaths-worker
|
||||||
- find-lang.sh find-requires find-provides
|
find-lang.sh find-requires find-provides
|
||||||
+ find-lang.sh find-requires find-provides find-supplements
|
+ find-supplements
|
||||||
|
perl.prov perl.req
|
||||||
pkgconfigdeps.sh
|
pkgconfigdeps.sh
|
||||||
ocamldeps.sh
|
ocamldeps.sh
|
||||||
fontconfig.prov script.req
|
--- scripts/find-supplements.orig 2023-10-09 13:14:37.371216603 +0000
|
||||||
--- scripts/find-supplements.orig 2024-12-16 09:27:13.626986691 +0000
|
+++ scripts/find-supplements 2023-10-09 13:14:37.371216603 +0000
|
||||||
+++ scripts/find-supplements 2024-12-16 09:27:13.626986691 +0000
|
|
||||||
@@ -0,0 +1,3 @@
|
@@ -0,0 +1,3 @@
|
||||||
+#!/bin/sh
|
+#!/bin/sh
|
||||||
+
|
+
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
--- macros.in.orig 2025-02-12 13:23:21.868124201 +0000
|
--- macros.in.orig 2023-10-09 12:34:52.359518015 +0000
|
||||||
+++ macros.in 2025-02-12 13:23:58.436059109 +0000
|
+++ macros.in 2023-10-09 12:34:56.915510497 +0000
|
||||||
@@ -163,6 +163,7 @@
|
@@ -161,6 +161,7 @@
|
||||||
%{?_unique_debug_names:--unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
|
%{?_unique_debug_names:--unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
|
||||||
%{?_unique_debug_srcs:--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
|
%{?_unique_debug_srcs:--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
|
||||||
%{?_find_debuginfo_dwz_opts} \\\
|
%{?_find_debuginfo_dwz_opts} \\\
|
||||||
+ %{lua:if posix.access(rpm.expand("%_sourcedir/baselibs.conf"), "r") then print("--dwz-single-file-mode") end} \\\
|
+ %{lua:if posix.access(rpm.expand("%_sourcedir/baselibs.conf"), "r") then print("--dwz-single-file-mode") end} \\\
|
||||||
%{?_find_debuginfo_opts} \\\
|
%{?_find_debuginfo_opts} \\\
|
||||||
%{?_debugsource_packages:-S debugsourcefiles.list} \\\
|
%{?_debugsource_packages:-S debugsourcefiles.list} \\\
|
||||||
"%{builddir}/%{?buildsubdir}"\
|
"%{_builddir}/%{?buildsubdir}"\
|
||||||
@@ -216,7 +217,8 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -211,7 +212,8 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
%files langpack-%{1}\
|
%files langpack-%{1}\
|
||||||
%{nil}
|
%{nil}
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
%_defaultlicensedir %{_datadir}/licenses
|
%_defaultlicensedir %{_datadir}/licenses
|
||||||
|
|
||||||
# Following macros for filtering auto deps must not be used in spec files.
|
# Following macros for filtering auto deps must not be used in spec files.
|
||||||
@@ -275,7 +277,8 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -277,7 +279,8 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
%_tmppath %{_var}/tmp
|
%_tmppath %{_var}/tmp
|
||||||
|
|
||||||
# Path to top of build area.
|
# Path to top of build area.
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
# ---- Optional rpmrc macros.
|
# ---- Optional rpmrc macros.
|
||||||
@@ -366,7 +369,7 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -379,7 +382,7 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
# "w.ufdio" uncompressed
|
# "w.ufdio" uncompressed
|
||||||
#
|
#
|
||||||
#%_source_payload w9.gzdio
|
#%_source_payload w9.gzdio
|
||||||
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
# Algorithm to use for generating file checksum digests on build.
|
# Algorithm to use for generating file checksum digests on build.
|
||||||
# If not specified or 0, MD5 is used.
|
# If not specified or 0, MD5 is used.
|
||||||
@@ -476,6 +479,19 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -489,6 +492,19 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
#
|
#
|
||||||
#%_include_minidebuginfo 1
|
#%_include_minidebuginfo 1
|
||||||
|
|
||||||
@ -57,7 +57,7 @@
|
|||||||
#
|
#
|
||||||
# Include a .gdb_index section in the .debug files.
|
# Include a .gdb_index section in the .debug files.
|
||||||
# Requires _enable_debug_packages and gdb-add-index installed.
|
# Requires _enable_debug_packages and gdb-add-index installed.
|
||||||
@@ -508,39 +524,39 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -521,39 +537,39 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
# Same as for "separate" but if the __debug_package global is set then
|
# Same as for "separate" but if the __debug_package global is set then
|
||||||
# the -debuginfo package will have a compatibility link for the main
|
# the -debuginfo package will have a compatibility link for the main
|
||||||
# ELF /usr/lib/debug/.build-id/xx/yyy -> /usr/lib/.build-id/xx/yyy
|
# ELF /usr/lib/debug/.build-id/xx/yyy -> /usr/lib/.build-id/xx/yyy
|
||||||
@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
#
|
#
|
||||||
# Use internal dependency generator rather than external helpers?
|
# Use internal dependency generator rather than external helpers?
|
||||||
@@ -559,6 +575,7 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -572,6 +588,7 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
%__find_requires %{_rpmconfigdir}/find-requires
|
%__find_requires %{_rpmconfigdir}/find-requires
|
||||||
#%__find_conflicts ???
|
#%__find_conflicts ???
|
||||||
#%__find_obsoletes ???
|
#%__find_obsoletes ???
|
||||||
@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
#
|
#
|
||||||
# Path to file attribute classifications for automatic dependency
|
# Path to file attribute classifications for automatic dependency
|
||||||
@@ -980,7 +997,7 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -984,7 +1001,7 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
%_build_vendor %{_host_vendor}
|
%_build_vendor %{_host_vendor}
|
||||||
%_build_os %{_host_os}
|
%_build_os %{_host_os}
|
||||||
%_host @host@
|
%_host @host@
|
||||||
@ -121,7 +121,7 @@
|
|||||||
%_host_cpu @host_cpu@
|
%_host_cpu @host_cpu@
|
||||||
%_host_vendor @host_vendor@
|
%_host_vendor @host_vendor@
|
||||||
%_host_os @host_os@
|
%_host_os @host_os@
|
||||||
@@ -1105,11 +1122,13 @@ Supplements: (%{name} = %{version}-%{r
|
@@ -1109,11 +1126,13 @@ Supplements: (%{name} = %{version}-%{r
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# arch macro for all supported 32-bit ARM processors
|
# arch macro for all supported 32-bit ARM processors
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
--- build/files.c.orig 2025-02-12 13:27:08.131721537 +0000
|
|
||||||
+++ build/files.c 2025-02-12 13:32:28.371151422 +0000
|
|
||||||
@@ -1049,10 +1049,10 @@ static void genCpioListAndHeader(FileLis
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!strcmp(mtime_policy_str, "clamp_to_buildtime")) {
|
|
||||||
+ if (!strcmp(mtime_policy_str, "clamp_to_buildtime") || !strcmp(mtime_policy_str, "set_to_buildtime")) {
|
|
||||||
mtime_clamp = spec->buildTime;
|
|
||||||
- override_date = 1;
|
|
||||||
- } else if (!strcmp(mtime_policy_str, "clamp_to_source_date_epoch")) {
|
|
||||||
+ override_date = mtime_policy_str[0] == 's' ? 2 : 1;
|
|
||||||
+ } else if (!strcmp(mtime_policy_str, "clamp_to_source_date_epoch") || !strcmp(mtime_policy_str, "set_to_source_date_epoch")) {
|
|
||||||
/* Limit the maximum date to SOURCE_DATE_EPOCH if defined
|
|
||||||
* similar to the tar --clamp-mtime option
|
|
||||||
* https://reproducible-builds.org/specs/source-date-epoch/
|
|
||||||
@@ -1065,7 +1065,7 @@ static void genCpioListAndHeader(FileLis
|
|
||||||
rpmlog(RPMLOG_ERR, _("unable to parse %s=%s\n"), "SOURCE_DATE_EPOCH", srcdate);
|
|
||||||
fl->processingFailed = 1;
|
|
||||||
}
|
|
||||||
- override_date = 1;
|
|
||||||
+ override_date = mtime_policy_str[0] == 's' ? 2 : 1;
|
|
||||||
}
|
|
||||||
} else if (*mtime_policy_str) {
|
|
||||||
rpmlog(RPMLOG_WARNING,
|
|
||||||
@@ -1214,7 +1214,7 @@ static void genCpioListAndHeader(FileLis
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (override_date && flp->fl_mtime > mtime_clamp) {
|
|
||||||
+ if (override_date && (flp->fl_mtime > mtime_clamp || override_date == 2)) {
|
|
||||||
flp->fl_mtime = mtime_clamp;
|
|
||||||
}
|
|
||||||
/*
|
|
@ -1,40 +0,0 @@
|
|||||||
--- lib/rpmtriggers.c.orig 2024-12-19 14:05:56.403437646 +0000
|
|
||||||
+++ lib/rpmtriggers.c 2024-12-19 14:11:56.646774439 +0000
|
|
||||||
@@ -239,31 +239,33 @@ typedef struct matchFilesIter_s {
|
|
||||||
static rpmfiles rpmtsNextFiles(matchFilesIter mfi)
|
|
||||||
{
|
|
||||||
Header h;
|
|
||||||
- rpmte *te;
|
|
||||||
rpmfiles files = NULL;
|
|
||||||
+ const char *pkgname = NULL;
|
|
||||||
rpmstrPool pool = mfi->ts->members->pool;
|
|
||||||
int ix;
|
|
||||||
- unsigned int offset;
|
|
||||||
|
|
||||||
ix = rpmdbGetIteratorIndex(mfi->pi);
|
|
||||||
if (ix < rpmdbGetIteratorCount(mfi->pi)) {
|
|
||||||
- offset = rpmdbGetIteratorOffsetFor(mfi->pi, ix);
|
|
||||||
+ unsigned int offset = rpmdbGetIteratorOffsetFor(mfi->pi, ix);
|
|
||||||
+ rpmte *te;
|
|
||||||
if (packageHashGetEntry(mfi->ts->members->removedPackages, offset,
|
|
||||||
&te, NULL, NULL)) {
|
|
||||||
/* Files are available in memory */
|
|
||||||
files = rpmteFiles(te[0]);
|
|
||||||
+ pkgname = rpmteN(te[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packageHashGetEntry(mfi->ts->members->installedPackages, offset,
|
|
||||||
&te, NULL, NULL)) {
|
|
||||||
/* Files are available in memory */
|
|
||||||
files = rpmteFiles(te[0]);
|
|
||||||
+ pkgname = rpmteN(te[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (files) {
|
|
||||||
rpmdbSetIteratorIndex(mfi->pi, ix + 1);
|
|
||||||
- mfi->pkgname = rpmteN(te[0]);
|
|
||||||
+ mfi->pkgname = pkgname;
|
|
||||||
} else {
|
|
||||||
/* Files are not available in memory. Read them from rpmdb */
|
|
||||||
h = rpmdbNextIterator(mfi->pi);
|
|
@ -1,20 +1,20 @@
|
|||||||
--- build/parsePreamble.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- build/parsePreamble.c.orig 2019-10-02 11:38:15.807736662 +0000
|
||||||
+++ build/parsePreamble.c 2024-12-16 09:21:44.247668941 +0000
|
+++ build/parsePreamble.c 2019-10-02 11:39:12.495617575 +0000
|
||||||
@@ -1103,7 +1103,7 @@ static struct PreambleRec_s const preamb
|
@@ -1032,7 +1032,7 @@ static struct PreambleRec_s const preamb
|
||||||
{RPMTAG_SUGGESTNAME, 2, 0, 0, 0, LEN_AND_STR("suggests")},
|
{RPMTAG_SUGGESTNAME, 0, 0, 0, LEN_AND_STR("suggests")},
|
||||||
{RPMTAG_SUPPLEMENTNAME, 2, 0, 0, 0, LEN_AND_STR("supplements")},
|
{RPMTAG_SUPPLEMENTNAME, 0, 0, 0, LEN_AND_STR("supplements")},
|
||||||
{RPMTAG_ENHANCENAME, 2, 0, 0, 0, LEN_AND_STR("enhances")},
|
{RPMTAG_ENHANCENAME, 0, 0, 0, LEN_AND_STR("enhances")},
|
||||||
- {RPMTAG_PREREQ, 2, 1, 0, 0, LEN_AND_STR("prereq")},
|
- {RPMTAG_PREREQ, 2, 1, 0, LEN_AND_STR("prereq")},
|
||||||
+ {RPMTAG_PREREQ, 2, 0, 0, 0, LEN_AND_STR("prereq")},
|
+ {RPMTAG_PREREQ, 2, 0, 0, LEN_AND_STR("prereq")},
|
||||||
{RPMTAG_CONFLICTNAME, 0, 0, 0, 0, LEN_AND_STR("conflicts")},
|
{RPMTAG_CONFLICTNAME, 0, 0, 0, LEN_AND_STR("conflicts")},
|
||||||
{RPMTAG_OBSOLETENAME, 0, 0, 0, 0, LEN_AND_STR("obsoletes")},
|
{RPMTAG_OBSOLETENAME, 0, 0, 0, LEN_AND_STR("obsoletes")},
|
||||||
{RPMTAG_PREFIXES, 0, 0, 1, 0, LEN_AND_STR("prefixes")},
|
{RPMTAG_PREFIXES, 0, 0, 1, LEN_AND_STR("prefixes")},
|
||||||
@@ -1113,7 +1113,7 @@ static struct PreambleRec_s const preamb
|
@@ -1041,7 +1041,7 @@ static struct PreambleRec_s const preamb
|
||||||
{RPMTAG_BUILDARCHS, 0, 0, 0, 0, LEN_AND_STR("buildarch")},
|
{RPMTAG_BUILDARCHS, 0, 0, 0, LEN_AND_STR("buildarchitectures")},
|
||||||
{RPMTAG_BUILDCONFLICTS, 0, 0, 0, 1, LEN_AND_STR("buildconflicts")},
|
{RPMTAG_BUILDARCHS, 0, 0, 0, LEN_AND_STR("buildarch")},
|
||||||
{RPMTAG_BUILDOPTION, 2, 0, 0, 1, LEN_AND_STR("buildoption")},
|
{RPMTAG_BUILDCONFLICTS, 0, 0, 0, LEN_AND_STR("buildconflicts")},
|
||||||
- {RPMTAG_BUILDPREREQ, 0, 1, 0, 1, LEN_AND_STR("buildprereq")},
|
- {RPMTAG_BUILDPREREQ, 0, 1, 0, LEN_AND_STR("buildprereq")},
|
||||||
+ {RPMTAG_BUILDPREREQ, 0, 0, 0, 1, LEN_AND_STR("buildprereq")},
|
+ {RPMTAG_BUILDPREREQ, 0, 0, 0, LEN_AND_STR("buildprereq")},
|
||||||
{RPMTAG_BUILDREQUIRES, 0, 0, 0, 1, LEN_AND_STR("buildrequires")},
|
{RPMTAG_BUILDREQUIRES, 0, 0, 0, LEN_AND_STR("buildrequires")},
|
||||||
{RPMTAG_BUILDSYSTEM, 0, 0, 1, 1, LEN_AND_STR("buildsystem")},
|
{RPMTAG_AUTOREQPROV, 0, 0, 0, LEN_AND_STR("autoreqprov")},
|
||||||
{RPMTAG_AUTOREQPROV, 0, 0, 0, 0, LEN_AND_STR("autoreqprov")},
|
{RPMTAG_AUTOREQ, 0, 0, 0, LEN_AND_STR("autoreq")},
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- include/rpm/rpmcli.h.orig 2024-10-07 09:35:46.000000000 +0000
|
--- include/rpm/rpmcli.h.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ include/rpm/rpmcli.h 2024-12-16 09:31:12.446494695 +0000
|
+++ include/rpm/rpmcli.h 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -306,6 +306,7 @@ enum rpmInstallFlags_e {
|
@@ -306,6 +306,7 @@ enum rpmInstallFlags_e {
|
||||||
INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */
|
INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */
|
||||||
INSTALL_REINSTALL = (1 << 10), /*!< from --reinstall */
|
INSTALL_REINSTALL = (1 << 10), /*!< from --reinstall */
|
||||||
@ -24,8 +24,8 @@
|
|||||||
*/
|
*/
|
||||||
extern struct rpmInstallArguments_s rpmIArgs;
|
extern struct rpmInstallArguments_s rpmIArgs;
|
||||||
|
|
||||||
--- include/rpm/rpmts.h.orig 2024-12-16 09:30:58.714522978 +0000
|
--- include/rpm/rpmts.h.orig 2023-10-12 11:43:35.870664176 +0000
|
||||||
+++ include/rpm/rpmts.h 2024-12-16 09:31:12.446494695 +0000
|
+++ include/rpm/rpmts.h 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -253,6 +253,15 @@ int rpmtsOrder(rpmts ts);
|
@@ -253,6 +253,15 @@ int rpmtsOrder(rpmts ts);
|
||||||
int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet);
|
int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet);
|
||||||
|
|
||||||
@ -42,8 +42,8 @@
|
|||||||
* Reference a transaction set instance.
|
* Reference a transaction set instance.
|
||||||
* @param ts transaction set
|
* @param ts transaction set
|
||||||
* @return new transaction set reference
|
* @return new transaction set reference
|
||||||
--- lib/poptI.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/poptI.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/poptI.c 2024-12-16 09:31:12.446494695 +0000
|
+++ lib/poptI.c 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -283,6 +283,10 @@ struct poptOption rpmInstallPoptTable[]
|
@@ -283,6 +283,10 @@ struct poptOption rpmInstallPoptTable[]
|
||||||
&rpmIArgs.installInterfaceFlags, (INSTALL_RESTORE),
|
&rpmIArgs.installInterfaceFlags, (INSTALL_RESTORE),
|
||||||
N_("restore package(s)"),
|
N_("restore package(s)"),
|
||||||
@ -55,9 +55,9 @@
|
|||||||
|
|
||||||
POPT_TABLEEND
|
POPT_TABLEEND
|
||||||
};
|
};
|
||||||
--- lib/psm.c.orig 2024-12-16 09:30:58.694523019 +0000
|
--- lib/psm.c.orig 2023-10-12 11:43:35.850664215 +0000
|
||||||
+++ lib/psm.c 2024-12-16 09:31:12.446494695 +0000
|
+++ lib/psm.c 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -1000,7 +1000,7 @@ static rpmRC rpmPackageErase(rpmts ts, r
|
@@ -1001,7 +1001,7 @@ static rpmRC rpmPackageErase(rpmts ts, r
|
||||||
}
|
}
|
||||||
if (rc) break;
|
if (rc) break;
|
||||||
|
|
||||||
@ -66,8 +66,8 @@
|
|||||||
/* Prepare post transaction uninstall triggers */
|
/* Prepare post transaction uninstall triggers */
|
||||||
rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te);
|
rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te);
|
||||||
}
|
}
|
||||||
--- lib/rpminstall.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpminstall.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/rpminstall.c 2024-12-16 09:31:12.446494695 +0000
|
+++ lib/rpminstall.c 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -6,6 +6,8 @@
|
@@ -6,6 +6,8 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -98,7 +98,7 @@
|
|||||||
+ goto exit;
|
+ goto exit;
|
||||||
+ }
|
+ }
|
||||||
+ while ((s = fgets(line, sizeof(line) - 1, f)) != 0) {
|
+ while ((s = fgets(line, sizeof(line) - 1, f)) != 0) {
|
||||||
+ if ((p = strrchr(s, '\n')) != 0)
|
+ if (p = strrchr(s, '\n'))
|
||||||
+ *p = 0;
|
+ *p = 0;
|
||||||
+ argvAdd(&manifest, s);
|
+ argvAdd(&manifest, s);
|
||||||
+ }
|
+ }
|
||||||
@ -110,8 +110,8 @@
|
|||||||
+ argvFree(manifest);
|
+ argvFree(manifest);
|
||||||
+ return rc;
|
+ return rc;
|
||||||
+}
|
+}
|
||||||
--- lib/rpmtriggers.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpmtriggers.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/rpmtriggers.c 2024-12-16 09:31:12.446494695 +0000
|
+++ lib/rpmtriggers.c 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -1,5 +1,6 @@
|
@@ -1,5 +1,6 @@
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
|
||||||
@ -128,7 +128,7 @@
|
|||||||
unsigned int tix, unsigned int priority)
|
unsigned int tix, unsigned int priority)
|
||||||
{
|
{
|
||||||
if (trigs->count == trigs->alloced) {
|
if (trigs->count == trigs->alloced) {
|
||||||
@@ -190,6 +191,14 @@ int runPostUnTransFileTrigs(rpmts ts)
|
@@ -178,6 +179,14 @@ int runPostUnTransFileTrigs(rpmts ts)
|
||||||
if (trigH == NULL)
|
if (trigH == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -143,7 +143,7 @@
|
|||||||
/* Prepare and run script */
|
/* Prepare and run script */
|
||||||
script = rpmScriptFromTriggerTag(trigH,
|
script = rpmScriptFromTriggerTag(trigH,
|
||||||
triggertag(RPMSENSE_TRIGGERPOSTUN),
|
triggertag(RPMSENSE_TRIGGERPOSTUN),
|
||||||
@@ -610,6 +619,16 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm
|
@@ -587,6 +596,16 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm
|
||||||
rpmTagVal priorityTag;
|
rpmTagVal priorityTag;
|
||||||
rpmtriggers triggers;
|
rpmtriggers triggers;
|
||||||
|
|
||||||
@ -160,9 +160,9 @@
|
|||||||
if (tm == RPMSCRIPT_FILETRIGGER) {
|
if (tm == RPMSCRIPT_FILETRIGGER) {
|
||||||
priorityTag = RPMTAG_FILETRIGGERPRIORITIES;
|
priorityTag = RPMTAG_FILETRIGGERPRIORITIES;
|
||||||
} else {
|
} else {
|
||||||
--- lib/rpmtriggers.h.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpmtriggers.h.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/rpmtriggers.h 2024-12-16 09:31:12.446494695 +0000
|
+++ lib/rpmtriggers.h 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -24,6 +24,10 @@ rpmtriggers rpmtriggersCreate(unsigned i
|
@@ -27,6 +27,10 @@ rpmtriggers rpmtriggersCreate(unsigned i
|
||||||
RPM_GNUC_INTERNAL
|
RPM_GNUC_INTERNAL
|
||||||
rpmtriggers rpmtriggersFree(rpmtriggers triggers);
|
rpmtriggers rpmtriggersFree(rpmtriggers triggers);
|
||||||
|
|
||||||
@ -173,9 +173,9 @@
|
|||||||
/*
|
/*
|
||||||
* Prepare post trans uninstall file triggers. After transcation uninstalled
|
* Prepare post trans uninstall file triggers. After transcation uninstalled
|
||||||
* files are not saved anywhere. So we need during uninstalation of every
|
* files are not saved anywhere. So we need during uninstalation of every
|
||||||
--- lib/rpmts_internal.h.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/rpmts_internal.h.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/rpmts_internal.h 2024-12-16 09:31:12.446494695 +0000
|
+++ lib/rpmts_internal.h 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -83,6 +83,8 @@ struct rpmts_s {
|
@@ -94,6 +94,8 @@ struct rpmts_s {
|
||||||
int min_writes; /*!< macro minimize_writes used */
|
int min_writes; /*!< macro minimize_writes used */
|
||||||
|
|
||||||
time_t overrideTime; /*!< Time value used when overriding system clock. */
|
time_t overrideTime; /*!< Time value used when overriding system clock. */
|
||||||
@ -183,9 +183,9 @@
|
|||||||
+ int dump_posttrans; /*!< macro dump_posttrans used */
|
+ int dump_posttrans; /*!< macro dump_posttrans used */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \ingroup rpmts
|
#ifdef __cplusplus
|
||||||
--- lib/transaction.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- lib/transaction.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ lib/transaction.c 2024-12-16 09:37:17.425742632 +0000
|
+++ lib/transaction.c 2023-10-12 11:44:28.398560689 +0000
|
||||||
@@ -1475,6 +1475,8 @@ static int rpmtsSetup(rpmts ts, rpmprobF
|
@@ -1475,6 +1475,8 @@ static int rpmtsSetup(rpmts ts, rpmprobF
|
||||||
/* Get available space on mounted file systems. */
|
/* Get available space on mounted file systems. */
|
||||||
(void) rpmtsInitDSI(ts);
|
(void) rpmtsInitDSI(ts);
|
||||||
@ -195,23 +195,44 @@
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1858,6 +1860,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp
|
@@ -1858,27 +1860,31 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp
|
||||||
/* Actually install and remove packages */
|
/* Actually install and remove packages */
|
||||||
nfailed = rpmtsProcess(ts);
|
nfailed = rpmtsProcess(ts);
|
||||||
|
|
||||||
+ if (ts->dump_posttrans) {
|
+ if (ts->dump_posttrans) {
|
||||||
+ rpmlog(RPMLOG_NOTICE, "dump_posttrans: enabled\n");
|
+ rpmlog(RPMLOG_NOTICE, "dump_posttrans: enabled\n");
|
||||||
+ runPostUnTransFileTrigs(ts);
|
|
||||||
+ runTransScripts(ts, PKG_TRANSFILETRIGGERIN);
|
|
||||||
+ /* Final exit code */
|
|
||||||
+ rc = nfailed ? -1 : 0;
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
/* Run %posttrans scripts unless disabled */
|
/* Run %posttrans scripts unless disabled */
|
||||||
if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
|
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
|
||||||
|
+ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
|
||||||
rpmlog(RPMLOG_DEBUG, "running %%posttrans scripts\n");
|
rpmlog(RPMLOG_DEBUG, "running %%posttrans scripts\n");
|
||||||
@@ -1901,3 +1912,117 @@ exit:
|
runTransScripts(ts, PKG_POSTTRANS);
|
||||||
|
}
|
||||||
|
/* Run %postuntrans scripts unless disabled */
|
||||||
|
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUNTRANS)) {
|
||||||
|
+ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUNTRANS)) {
|
||||||
|
rpmlog(RPMLOG_DEBUG, "running %%postuntrans scripts\n");
|
||||||
|
runTransScripts(ts, PKG_POSTUNTRANS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run %transfiletriggerpostun scripts unless disabled */
|
||||||
|
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
|
||||||
|
+ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
|
||||||
|
runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0);
|
||||||
|
}
|
||||||
|
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) {
|
||||||
|
+ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) {
|
||||||
|
runPostUnTransFileTrigs(ts);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run %transfiletriggerin scripts unless disabled */
|
||||||
|
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
|
||||||
|
+ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
|
||||||
|
runTransScripts(ts, PKG_TRANSFILETRIGGERIN);
|
||||||
|
}
|
||||||
|
/* Final exit code */
|
||||||
|
@@ -1901,3 +1907,117 @@ exit:
|
||||||
sigaction(SIGPIPE, &oact, NULL);
|
sigaction(SIGPIPE, &oact, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -315,7 +336,7 @@
|
|||||||
+ runTransScripts(ts, PKG_POSTTRANS);
|
+ runTransScripts(ts, PKG_POSTTRANS);
|
||||||
+ runTransScripts(ts, PKG_POSTUNTRANS);
|
+ runTransScripts(ts, PKG_POSTUNTRANS);
|
||||||
+ /* run %transfiletriggerin scripts */
|
+ /* run %transfiletriggerin scripts */
|
||||||
+ runFileTriggers(ts, NULL, -1, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0);
|
+ runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0);
|
||||||
+ /* run %transfiletriggerpostun scrips */
|
+ /* run %transfiletriggerpostun scrips */
|
||||||
+ runPostUnTransFileTrigs(ts);
|
+ runPostUnTransFileTrigs(ts);
|
||||||
+ /* Run immed %transfiletriggerin scripts */
|
+ /* Run immed %transfiletriggerin scripts */
|
||||||
@ -329,8 +350,8 @@
|
|||||||
+ rpmtsEmpty(ts);
|
+ rpmtsEmpty(ts);
|
||||||
+ return rc;
|
+ return rc;
|
||||||
+}
|
+}
|
||||||
--- tools/rpm.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- tools/rpm.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ tools/rpm.c 2024-12-16 09:31:12.446494695 +0000
|
+++ tools/rpm.c 2023-10-12 11:43:59.662617302 +0000
|
||||||
@@ -21,6 +21,7 @@ enum modes {
|
@@ -21,6 +21,7 @@ enum modes {
|
||||||
MODE_ERASE = (1 << 2),
|
MODE_ERASE = (1 << 2),
|
||||||
MODE_RESTORE = (1 << 4),
|
MODE_RESTORE = (1 << 4),
|
||||||
|
@ -1,8 +1,3 @@
|
|||||||
-------------------------------------------------------------------
|
|
||||||
Mon Dec 16 11:55:23 CET 2024 - mls@suse.de
|
|
||||||
|
|
||||||
- update to rpm-4.20.0
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Feb 9 11:34:31 CET 2024 - mls@suse.de
|
Fri Feb 9 11:34:31 CET 2024 - mls@suse.de
|
||||||
|
|
||||||
@ -41,7 +36,7 @@ Fri Dec 2 15:09:55 CET 2022 - mls@suse.de
|
|||||||
|
|
||||||
- update to rpm-4.18.0
|
- update to rpm-4.18.0
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
Thu Jul 21 16:11:22 CEST 2022 - mls@suse.de
|
Thu Jul 21 16:11:22 CEST 2022 - mls@suse.de
|
||||||
|
|
||||||
- update to rpm-4.17.1
|
- update to rpm-4.17.1
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package python-rpm
|
# spec file for package python-rpm
|
||||||
#
|
#
|
||||||
# Copyright (c) 2025 SUSE LLC
|
# Copyright (c) 2024 SUSE LLC
|
||||||
# Copyright (c) 2017 Neal Gompa <ngompa13@gmail.com>.
|
# Copyright (c) 2017 Neal Gompa <ngompa13@gmail.com>.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
@ -20,7 +20,7 @@
|
|||||||
# Enable Python build sourced from rpm spec
|
# Enable Python build sourced from rpm spec
|
||||||
%global with_python 1
|
%global with_python 1
|
||||||
Name: python-rpm
|
Name: python-rpm
|
||||||
Version: 4.20.0
|
Version: 4.19.1.1
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Python Bindings for Manipulating RPM Packages
|
Summary: Python Bindings for Manipulating RPM Packages
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
@ -32,7 +32,6 @@ BuildRequires: cmake
|
|||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: file-devel
|
BuildRequires: file-devel
|
||||||
BuildRequires: libacl-devel
|
BuildRequires: libacl-devel
|
||||||
BuildRequires: libarchive-devel
|
|
||||||
BuildRequires: libbz2-devel
|
BuildRequires: libbz2-devel
|
||||||
BuildRequires: libcap-devel
|
BuildRequires: libcap-devel
|
||||||
BuildRequires: libdw-devel
|
BuildRequires: libdw-devel
|
||||||
|
3
rpm-4.19.1.1.tar.bz2
Normal file
3
rpm-4.19.1.1.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:874091b80efe66f9de8e3242ae2337162e2d7131e3aa4ac99ac22155e9c521e5
|
||||||
|
size 5849649
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:56ff7638cff98b56d4a7503ff59bc79f281a6ddffcda0d238c082bedfb5fbe7b
|
|
||||||
size 5984513
|
|
98
rpm.changes
98
rpm.changes
@ -1,100 +1,3 @@
|
|||||||
-------------------------------------------------------------------
|
|
||||||
Wed Feb 12 13:36:45 CET 2025 - mls@suse.de
|
|
||||||
|
|
||||||
- make the rpm package not depend on libarchive
|
|
||||||
* move the rpmuncompress tool to rpm-build
|
|
||||||
* rewrite rpm2archive to not use libarchive for cpio/tar writing
|
|
||||||
* new patch: rpm2archive.diff
|
|
||||||
- revert buildroot macro setting that did more harm than good
|
|
||||||
- add set_to_buildtime and set_to_source_date_epoch mtime policy
|
|
||||||
support
|
|
||||||
* new patch: mtime_policy_set.diff
|
|
||||||
- drop unused 0001-Add-option-to-set-mtime-of-files-in-rpms.patch
|
|
||||||
patch
|
|
||||||
- do not output debug messages in rpmspec -q if a buildsystem is
|
|
||||||
used
|
|
||||||
* new patch: buildsys.diff
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Mon Feb 3 13:13:27 CET 2025 - mls@suse.de
|
|
||||||
|
|
||||||
- allow to have the primary binding signature in the unhashed area
|
|
||||||
* updated rpmpgp_legacy-1.0.tar.gz to rpmpgp_legacy-1.1.tar.gz
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Thu Jan 30 12:17:34 CET 2025 - mls@suse.de
|
|
||||||
|
|
||||||
- Split unshare plugin configuration into a new "rpm-plugin-unshare"
|
|
||||||
subpackage. This disables the plugin unless the new package
|
|
||||||
is installed.
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Thu Jan 30 12:03:40 CET 2025 - Adrian Schröter <adrian@suse.de>
|
|
||||||
|
|
||||||
- enable config.guess/sub update also for loongarch64 architecture
|
|
||||||
- update config.guess/sub files to current state from autoconf-2.72
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Tue Jan 7 10:58:17 CET 2025 - mls@suse.de
|
|
||||||
|
|
||||||
- make misuses of %global with %buildroot work again
|
|
||||||
* new patch: undefbuildroot.diff
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Thu Dec 19 14:29:49 CET 2024 - mls@suse.de
|
|
||||||
|
|
||||||
- backport debug_package regression fix from upstream
|
|
||||||
* new patch: debugpackage.diff
|
|
||||||
- fix segfault in rpmtsNextFiles
|
|
||||||
* new patch: nextfiles.diff
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Tue Dec 17 10:59:26 CET 2024 - mls@suse.de
|
|
||||||
|
|
||||||
- allow the buildroot to be a symbolic link in check-files
|
|
||||||
(needed for pesign-obs-integration)
|
|
||||||
* new patch: buildroot-symlink.diff
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Mon Dec 16 11:55:23 CET 2024 - mls@suse.de
|
|
||||||
|
|
||||||
- update to rpm-4.20.0
|
|
||||||
* new BuildSystem directive
|
|
||||||
* support for build scriptley augmenting
|
|
||||||
* per-package build directory available as %builddir
|
|
||||||
* --build-in-place automatically sets --noprep
|
|
||||||
* new -C option for autosetup
|
|
||||||
* better support for reproducible builds
|
|
||||||
* support for group membership lines
|
|
||||||
* new rpm.spawn() lua function
|
|
||||||
* support indentation in spec tags
|
|
||||||
* new rpmdump tool
|
|
||||||
- switch to rpmpgp-legacy-1.0
|
|
||||||
- disable buildroot check in rpmlintrc for now
|
|
||||||
- refreshed patches:
|
|
||||||
* brp.diff macrosin.diff rpmqpack.diff specfilemacro.diff
|
|
||||||
* noprereqdeprec.diff fileattrs.diff assumeexec.diff
|
|
||||||
* enable-postin-scripts-error.diff findsupplements.diff
|
|
||||||
* db_conversion.diff canongnu.diff cmake_python_version.diff
|
|
||||||
* zstdpool.diff posttrans.diff
|
|
||||||
* auto-config-update-aarch64-ppc64le.diff
|
|
||||||
* 0002-log-build-time-if-it-is-set-from-SOURCE_DATE_EPOCH.patch
|
|
||||||
* 0003-Error-out-on-a-missing-changelog-date.patch
|
|
||||||
- add compatibility %buildroot definition
|
|
||||||
- backport unshare fix from upstream and extend it a bit
|
|
||||||
* new patch: unshare.diff
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Mon Nov 11 08:43:56 UTC 2024 - Michal Suchanek <msuchanek@suse.de>
|
|
||||||
|
|
||||||
- Bump debugedit version (bsc#1233156)
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
|
||||||
Wed Sep 4 09:27:50 UTC 2024 - Dirk Stoecker <opensuse@dstoecker.de>
|
|
||||||
|
|
||||||
- move perl packaging to own package
|
|
||||||
adapt fileattrs.diff
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 1 12:55:27 UTC 2024 - Marcus Meissner <meissner@suse.com>
|
Fri Mar 1 12:55:27 UTC 2024 - Marcus Meissner <meissner@suse.com>
|
||||||
|
|
||||||
@ -4910,3 +4813,4 @@ Thu Jun 26 19:10:48 MEST 1997 - ma@suse.de
|
|||||||
|
|
||||||
- introducing rpm, version 2.4.1
|
- introducing rpm, version 2.4.1
|
||||||
- documentation (ascii,html) in usr/doc/packages/rpm
|
- documentation (ascii,html) in usr/doc/packages/rpm
|
||||||
|
|
||||||
|
69
rpm.spec
69
rpm.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package rpm
|
# spec file for package rpm
|
||||||
#
|
#
|
||||||
# Copyright (c) 2025 SUSE LLC
|
# Copyright (c) 2024 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -32,7 +32,6 @@ BuildRequires: gettext-devel
|
|||||||
BuildRequires: glibc-devel
|
BuildRequires: glibc-devel
|
||||||
BuildRequires: gzip
|
BuildRequires: gzip
|
||||||
BuildRequires: libacl-devel
|
BuildRequires: libacl-devel
|
||||||
BuildRequires: libarchive-devel
|
|
||||||
BuildRequires: libbz2-devel
|
BuildRequires: libbz2-devel
|
||||||
BuildRequires: libcap-devel
|
BuildRequires: libcap-devel
|
||||||
BuildRequires: libdw-devel
|
BuildRequires: libdw-devel
|
||||||
@ -58,13 +57,11 @@ Requires: rpm-config-SUSE
|
|||||||
Summary: The RPM Package Manager
|
Summary: The RPM Package Manager
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
Group: System/Packages
|
Group: System/Packages
|
||||||
Version: 4.20.0
|
Version: 4.19.1.1
|
||||||
Release: 0
|
Release: 0
|
||||||
URL: https://rpm.org/
|
URL: https://rpm.org/
|
||||||
#Git-Clone: https://github.com/rpm-software-management/rpm
|
#Git-Clone: https://github.com/rpm-software-management/rpm
|
||||||
Source: https://ftp.osuosl.org/pub/rpm/releases/rpm-4.19.x/rpm-%{version}.tar.bz2
|
Source: https://ftp.osuosl.org/pub/rpm/releases/rpm-4.19.x/rpm-%{version}.tar.bz2
|
||||||
#Git-Clone: https://github.com/rpm-software-management/rpmpgp_legacy
|
|
||||||
Source1: rpmpgp_legacy-1.1.tar.gz
|
|
||||||
Source5: rpmsort
|
Source5: rpmsort
|
||||||
Source8: rpmconfigcheck
|
Source8: rpmconfigcheck
|
||||||
Source9: sysconfig.services-rpm
|
Source9: sysconfig.services-rpm
|
||||||
@ -116,16 +113,9 @@ Patch135: selinux_transactional_update.patch
|
|||||||
Patch136: rpmsort_reverse.diff
|
Patch136: rpmsort_reverse.diff
|
||||||
Patch138: canongnu.diff
|
Patch138: canongnu.diff
|
||||||
Patch139: cmake_python_version.diff
|
Patch139: cmake_python_version.diff
|
||||||
|
Patch140: 0001-Add-option-to-set-mtime-of-files-in-rpms.patch
|
||||||
Patch141: 0002-log-build-time-if-it-is-set-from-SOURCE_DATE_EPOCH.patch
|
Patch141: 0002-log-build-time-if-it-is-set-from-SOURCE_DATE_EPOCH.patch
|
||||||
Patch142: 0003-Error-out-on-a-missing-changelog-date.patch
|
Patch142: 0003-Error-out-on-a-missing-changelog-date.patch
|
||||||
Patch150: unshare.diff
|
|
||||||
Patch151: buildroot-symlink.diff
|
|
||||||
Patch152: debugpackage.diff
|
|
||||||
Patch153: nextfiles.diff
|
|
||||||
Patch154: undefbuildroot.diff
|
|
||||||
Patch155: rpm2archive.diff
|
|
||||||
Patch156: mtime_policy_set.diff
|
|
||||||
Patch157: buildsys.diff
|
|
||||||
Patch6464: auto-config-update-aarch64-ppc64le.diff
|
Patch6464: auto-config-update-aarch64-ppc64le.diff
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
#
|
#
|
||||||
@ -197,7 +187,7 @@ Requires: util-linux
|
|||||||
Requires: which
|
Requires: which
|
||||||
Requires: xz
|
Requires: xz
|
||||||
# needed for debuginfo generation
|
# needed for debuginfo generation
|
||||||
Requires: debugedit >= 5.0
|
Requires: debugedit = 5.0
|
||||||
# drop candidates
|
# drop candidates
|
||||||
Requires: cpio
|
Requires: cpio
|
||||||
Requires: file
|
Requires: file
|
||||||
@ -211,22 +201,19 @@ Conflicts: rpm < 4.15.0
|
|||||||
If you want to build a rpm, you need this package. It provides rpmbuild
|
If you want to build a rpm, you need this package. It provides rpmbuild
|
||||||
and requires some packages that are usually required.
|
and requires some packages that are usually required.
|
||||||
|
|
||||||
%package plugin-unshare
|
%package build-perl
|
||||||
Summary: Rpm plugin for Linux namespace isolation functionality
|
Summary: RPM dependency generator for Perl
|
||||||
Requires: rpm = %{version}
|
Group: Development/Languages/Perl
|
||||||
|
Requires: perl-base
|
||||||
|
|
||||||
%description plugin-unshare
|
%description build-perl
|
||||||
Rpm plugin for Linux namespace isolation functionality.
|
Provides and requires generator for .pl files and modules.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n rpm-%{version}
|
%setup -q -n rpm-%{version}
|
||||||
%ifarch aarch64 ppc64le riscv64 loongarch64
|
%ifarch aarch64 ppc64le riscv64
|
||||||
tar xf %{SOURCE14}
|
tar xf %{SOURCE14}
|
||||||
%endif
|
%endif
|
||||||
pushd rpmio
|
|
||||||
tar xf %{SOURCE1}
|
|
||||||
ln -s rpmpgp_legacy-* rpmpgp_legacy
|
|
||||||
popd
|
|
||||||
|
|
||||||
rm -rf sqlite
|
rm -rf sqlite
|
||||||
%patch -P 5 -P 12 -P 13 -P 18
|
%patch -P 5 -P 12 -P 13 -P 18
|
||||||
@ -243,10 +230,9 @@ rm -rf sqlite
|
|||||||
%patch -P 122 -P 123
|
%patch -P 122 -P 123
|
||||||
%patch -P 131 -P 133 -P 134 -P 135 -P 136 -P 138
|
%patch -P 131 -P 133 -P 134 -P 135 -P 136 -P 138
|
||||||
%patch -P 139
|
%patch -P 139
|
||||||
%patch -P 141 -P 142
|
%patch -P 140 -P 141 -P 142 -p1
|
||||||
%patch -P 150 -P 151 -P 152 -P 153 -P 154 -P 155 -P 156 -P 157
|
|
||||||
|
|
||||||
%ifarch aarch64 ppc64le riscv64 loongarch64
|
%ifarch aarch64 ppc64le riscv64
|
||||||
%patch -P 6464
|
%patch -P 6464
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -284,11 +270,10 @@ cmake .. \
|
|||||||
-DCMAKE_INSTALL_FULL_SHAREDSTATEDIR:PATH=/var/lib \
|
-DCMAKE_INSTALL_FULL_SHAREDSTATEDIR:PATH=/var/lib \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
-DRPM_VENDOR=suse \
|
-DRPM_VENDOR=suse \
|
||||||
-DWITH_ARCHIVE=ON \
|
-DWITH_ARCHIVE=OFF \
|
||||||
-DWITH_READLINE=OFF \
|
-DWITH_READLINE=OFF \
|
||||||
-DWITH_SELINUX=ON \
|
-DWITH_SELINUX=ON \
|
||||||
-DWITH_SEQUOIA=OFF \
|
-DWITH_INTERNAL_OPENPGP=ON \
|
||||||
-DWITH_LEGACY_OPENPGP=ON \
|
|
||||||
-DENABLE_NDB=ON \
|
-DENABLE_NDB=ON \
|
||||||
-DENABLE_BDB_RO=ON \
|
-DENABLE_BDB_RO=ON \
|
||||||
-DENABLE_SQLITE=OFF \
|
-DENABLE_SQLITE=OFF \
|
||||||
@ -360,7 +345,7 @@ for i in /usr/share/automake-*/*; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
popd
|
popd
|
||||||
%ifarch aarch64 ppc64le riscv64 loongarch64
|
%ifarch aarch64 ppc64le riscv64
|
||||||
install -m 755 build-aux/config.guess %{buildroot}/usr/lib/rpm
|
install -m 755 build-aux/config.guess %{buildroot}/usr/lib/rpm
|
||||||
install -m 755 build-aux/config.sub %{buildroot}/usr/lib/rpm
|
install -m 755 build-aux/config.sub %{buildroot}/usr/lib/rpm
|
||||||
%endif
|
%endif
|
||||||
@ -419,15 +404,12 @@ fi
|
|||||||
%license COPYING
|
%license COPYING
|
||||||
%doc %{_datadir}/doc/packages/rpm
|
%doc %{_datadir}/doc/packages/rpm
|
||||||
%exclude %{_datadir}/doc/packages/rpm/API
|
%exclude %{_datadir}/doc/packages/rpm/API
|
||||||
%exclude /usr/lib/rpm/macros.d/macros.transaction_unshare
|
|
||||||
%exclude %{_mandir}/man8/rpm-plugin-unshare*
|
|
||||||
/etc/rpm
|
/etc/rpm
|
||||||
%if 0%{?suse_version} < 1550
|
%if 0%{?suse_version} < 1550
|
||||||
/bin/rpm
|
/bin/rpm
|
||||||
%endif
|
%endif
|
||||||
%{_bindir}/gendiff
|
%{_bindir}/gendiff
|
||||||
%{_bindir}/rpm
|
%{_bindir}/rpm
|
||||||
%{_bindir}/rpm2archive
|
|
||||||
%{_bindir}/rpm2cpio
|
%{_bindir}/rpm2cpio
|
||||||
%{_bindir}/rpmdb
|
%{_bindir}/rpmdb
|
||||||
%{_bindir}/rpmgraph
|
%{_bindir}/rpmgraph
|
||||||
@ -449,7 +431,7 @@ fi
|
|||||||
/usr/lib/rpm/rpmpopt-*
|
/usr/lib/rpm/rpmpopt-*
|
||||||
/usr/lib/rpm/rpmrc
|
/usr/lib/rpm/rpmrc
|
||||||
/usr/lib/rpm/rpmsort
|
/usr/lib/rpm/rpmsort
|
||||||
/usr/lib/rpm/rpmdump
|
/usr/lib/rpm/rpmuncompress
|
||||||
/usr/lib/rpm/suse
|
/usr/lib/rpm/suse
|
||||||
/usr/lib/rpm/tgpg
|
/usr/lib/rpm/tgpg
|
||||||
%{_libdir}/rpm-plugins
|
%{_libdir}/rpm-plugins
|
||||||
@ -481,19 +463,27 @@ fi
|
|||||||
/usr/lib/rpm/rpm_macros_provides.sh
|
/usr/lib/rpm/rpm_macros_provides.sh
|
||||||
/usr/lib/rpm/elfdeps
|
/usr/lib/rpm/elfdeps
|
||||||
/usr/lib/rpm/rpmdeps
|
/usr/lib/rpm/rpmdeps
|
||||||
/usr/lib/rpm/rpmuncompress
|
|
||||||
/usr/bin/rpmspec
|
/usr/bin/rpmspec
|
||||||
/usr/lib/rpm/brp-*
|
/usr/lib/rpm/brp-*
|
||||||
/usr/lib/rpm/check-*
|
/usr/lib/rpm/check-*
|
||||||
/usr/lib/rpm/*find*
|
/usr/lib/rpm/*find*
|
||||||
/usr/lib/rpm/fileattrs/
|
/usr/lib/rpm/fileattrs/
|
||||||
|
%exclude /usr/lib/rpm/fileattrs/perl*.attr
|
||||||
/usr/lib/rpm/*.prov
|
/usr/lib/rpm/*.prov
|
||||||
|
%exclude /usr/lib/rpm/perl.prov
|
||||||
/usr/lib/rpm/*.req
|
/usr/lib/rpm/*.req
|
||||||
%ifarch aarch64 ppc64le riscv64 loongarch64
|
%exclude /usr/lib/rpm/perl.req
|
||||||
|
%ifarch aarch64 ppc64le riscv64
|
||||||
/usr/lib/rpm/config.guess
|
/usr/lib/rpm/config.guess
|
||||||
/usr/lib/rpm/config.sub
|
/usr/lib/rpm/config.sub
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%files build-perl
|
||||||
|
%defattr(-,root,root)
|
||||||
|
/usr/lib/rpm/fileattrs/perl*.attr
|
||||||
|
/usr/lib/rpm/perl.prov
|
||||||
|
/usr/lib/rpm/perl.req
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(644,root,root,755)
|
%defattr(644,root,root,755)
|
||||||
/usr/include/rpm
|
/usr/include/rpm
|
||||||
@ -505,9 +495,4 @@ fi
|
|||||||
%{_libdir}/cmake/rpm
|
%{_libdir}/cmake/rpm
|
||||||
%doc %{_datadir}/doc/packages/rpm/API
|
%doc %{_datadir}/doc/packages/rpm/API
|
||||||
|
|
||||||
%files plugin-unshare
|
|
||||||
%defattr(-,root,root)
|
|
||||||
/usr/lib/rpm/macros.d/macros.transaction_unshare
|
|
||||||
%doc %{_mandir}/man8/rpm-plugin-unshare*
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
612
rpm2archive.diff
612
rpm2archive.diff
@ -1,612 +0,0 @@
|
|||||||
--- tools/CMakeLists.txt.orig 2025-02-13 09:56:00.257085875 +0000
|
|
||||||
+++ tools/CMakeLists.txt 2025-02-13 09:56:11.433064235 +0000
|
|
||||||
@@ -40,11 +40,8 @@ if (READLINE_FOUND)
|
|
||||||
target_link_libraries(rpmlua PRIVATE PkgConfig::READLINE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
-if (WITH_ARCHIVE)
|
|
||||||
- add_executable(rpm2archive rpm2archive.c)
|
|
||||||
- target_link_libraries(rpm2archive PRIVATE PkgConfig::LIBARCHIVE)
|
|
||||||
- install(TARGETS rpm2archive)
|
|
||||||
-endif()
|
|
||||||
+add_executable(rpm2archive rpm2archive.c)
|
|
||||||
+install(TARGETS rpm2archive)
|
|
||||||
|
|
||||||
# Everything links to these
|
|
||||||
get_property(executables DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
|
|
||||||
@@ -60,12 +57,10 @@ foreach(cmd rpmverify rpmquery)
|
|
||||||
)
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${cmd} TYPE BIN)
|
|
||||||
endforeach()
|
|
||||||
-if (WITH_ARCHIVE)
|
|
||||||
- add_custom_target(rpm2cpio ALL COMMAND
|
|
||||||
- ${CMAKE_COMMAND} -E create_symlink rpm2archive rpm2cpio
|
|
||||||
- )
|
|
||||||
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rpm2cpio TYPE BIN)
|
|
||||||
-endif()
|
|
||||||
+add_custom_target(rpm2cpio ALL COMMAND
|
|
||||||
+ ${CMAKE_COMMAND} -E create_symlink rpm2archive rpm2cpio
|
|
||||||
+ )
|
|
||||||
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rpm2cpio TYPE BIN)
|
|
||||||
|
|
||||||
if (WITH_CXX)
|
|
||||||
set (cxx_sources
|
|
||||||
--- tools/rpm2archive.c.orig 2024-10-07 09:35:46.000000000 +0000
|
|
||||||
+++ tools/rpm2archive.c 2025-02-13 11:50:46.533098005 +0000
|
|
||||||
@@ -2,6 +2,14 @@
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
+#if defined(MAJOR_IN_MKDEV)
|
|
||||||
+#include <sys/mkdev.h>
|
|
||||||
+#elif defined(MAJOR_IN_SYSMACROS)
|
|
||||||
+#include <sys/sysmacros.h>
|
|
||||||
+#else
|
|
||||||
+#include <sys/types.h> /* already included from system.h */
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#include <rpm/rpmlib.h> /* rpmReadPackageFile .. */
|
|
||||||
#include <rpm/rpmfi.h>
|
|
||||||
#include <rpm/rpmstring.h>
|
|
||||||
@@ -12,8 +20,11 @@
|
|
||||||
|
|
||||||
#include <popt.h>
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
#include <archive.h>
|
|
||||||
#include <archive_entry.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <libgen.h>
|
|
||||||
@@ -36,6 +47,8 @@ static struct poptOption optionsTable[]
|
|
||||||
POPT_TABLEEND
|
|
||||||
};
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
+
|
|
||||||
static void fill_archive_entry(struct archive_entry * entry, rpmfi fi,
|
|
||||||
char **hardlink)
|
|
||||||
{
|
|
||||||
@@ -282,6 +295,540 @@ static int process_package(rpmts ts, con
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#else
|
|
||||||
+
|
|
||||||
+static int do_fwrite(FD_t fdo, const void *p, size_t l)
|
|
||||||
+{
|
|
||||||
+ if (Fwrite(p, l, 1, fdo) != l) {
|
|
||||||
+ fprintf(stderr, "Error writing archive: %s\n", Fstrerror(fdo));
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ }
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int do_fwrite_content(FD_t fdo, char * buf, rpmfi fi)
|
|
||||||
+{
|
|
||||||
+ rpm_loff_t left = rpmfiFSize(fi);
|
|
||||||
+ size_t len, read;
|
|
||||||
+
|
|
||||||
+ while (left) {
|
|
||||||
+ len = (left > BUFSIZE ? BUFSIZE : left);
|
|
||||||
+ read = rpmfiArchiveRead(fi, buf, len);
|
|
||||||
+ if (read != len) {
|
|
||||||
+ fprintf(stderr, "Error reading file from rpm payload\n");
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ if (do_fwrite(fdo, buf, len)) {
|
|
||||||
+ fprintf(stderr, "Error writing archive: %s\n", Fstrerror(fdo));
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ left -= len;
|
|
||||||
+ }
|
|
||||||
+ return (left > 0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* cpio support */
|
|
||||||
+
|
|
||||||
+static inline void write_cpio_entry_num(unsigned char *p, unsigned long val)
|
|
||||||
+{
|
|
||||||
+ char space[64];
|
|
||||||
+ sprintf(space, "%8.8lx", val);
|
|
||||||
+ memcpy(p, space, 8);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int write_cpio_entry(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, const char *flink, const char *hlink, char *buf)
|
|
||||||
+{
|
|
||||||
+ unsigned char cpioh[110];
|
|
||||||
+ memcpy(cpioh, "070701", 6);
|
|
||||||
+ if (!fi) {
|
|
||||||
+ memset(cpioh + 6, '0', sizeof(cpioh) - 6);
|
|
||||||
+ write_cpio_entry_num(cpioh + 38, 1);
|
|
||||||
+ write_cpio_entry_num(cpioh + 94, 11);
|
|
||||||
+ if (do_fwrite(fdo, cpioh, sizeof(cpioh)))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (do_fwrite(fdo, "TRAILER!!!\0\0\0", 11 + 3))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+ }
|
|
||||||
+ if (st->st_size > UINT32_MAX) {
|
|
||||||
+ fprintf(stderr, "Warning: file too large for format, skipping: %s\n", filename);
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+ }
|
|
||||||
+ size_t fnl = strlen(filename);
|
|
||||||
+ write_cpio_entry_num(cpioh + 6, st->st_ino);
|
|
||||||
+ write_cpio_entry_num(cpioh + 14, st->st_mode);
|
|
||||||
+ write_cpio_entry_num(cpioh + 22, st->st_uid);
|
|
||||||
+ write_cpio_entry_num(cpioh + 30, st->st_gid);
|
|
||||||
+ write_cpio_entry_num(cpioh + 38, st->st_nlink);
|
|
||||||
+ write_cpio_entry_num(cpioh + 46, st->st_mtime);
|
|
||||||
+ write_cpio_entry_num(cpioh + 54, st->st_size);
|
|
||||||
+ write_cpio_entry_num(cpioh + 62, major(st->st_dev));
|
|
||||||
+ write_cpio_entry_num(cpioh + 70, minor(st->st_dev));
|
|
||||||
+ write_cpio_entry_num(cpioh + 78, major(st->st_rdev));
|
|
||||||
+ write_cpio_entry_num(cpioh + 86, minor(st->st_rdev));
|
|
||||||
+ write_cpio_entry_num(cpioh + 94, fnl + 1);
|
|
||||||
+ write_cpio_entry_num(cpioh + 102, 0);
|
|
||||||
+ if (do_fwrite(fdo, cpioh, sizeof(cpioh)))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (do_fwrite(fdo, filename, fnl + 1))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ fnl = (110 + fnl + 1) & 3;
|
|
||||||
+ if (fnl && do_fwrite(fdo, "\0\0\0", 4 - fnl))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (S_ISLNK(st->st_mode)) {
|
|
||||||
+ if (st->st_size != strlen(flink))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (do_fwrite(fdo, flink, st->st_size))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ } else if (S_ISREG(st->st_mode)) {
|
|
||||||
+ if (st->st_size && do_fwrite_content(fdo, buf, fi))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ } else {
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+ }
|
|
||||||
+ fnl = (st->st_size) & 3;
|
|
||||||
+ if (fnl && do_fwrite(fdo, "\0\0\0", 4 - fnl))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* pax support */
|
|
||||||
+
|
|
||||||
+static void add_pax_attrib(char **paxbuf, const char *pax, const char *val)
|
|
||||||
+{
|
|
||||||
+ size_t ten, len = 1 + strlen(pax) + 1 + strlen(val) + 1;
|
|
||||||
+ for (ten = 1; ten <= len; ten *= 10)
|
|
||||||
+ len++;
|
|
||||||
+ if (*paxbuf)
|
|
||||||
+ *paxbuf = realloc(*paxbuf, strlen(*paxbuf) + len + 1);
|
|
||||||
+ else {
|
|
||||||
+ *paxbuf = xmalloc(len + 1);
|
|
||||||
+ **paxbuf = 0;
|
|
||||||
+ }
|
|
||||||
+ sprintf(*paxbuf + strlen(*paxbuf), "%llu %s=%s\n", (unsigned long long)len, pax, val);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void set_pax_entry_num_base256(unsigned char *p, unsigned long long val, int size)
|
|
||||||
+{
|
|
||||||
+ /* use base-256 encoding */
|
|
||||||
+ unsigned char *pe = p + size;
|
|
||||||
+ for (; pe > p; val >>= 8)
|
|
||||||
+ *pe-- = (unsigned char)(val & 255);
|
|
||||||
+ *p |= 0x80;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline void set_pax_entry_num(unsigned char *p, unsigned long long val, int size, char *pax, char **paxbuf)
|
|
||||||
+{
|
|
||||||
+ char space[64];
|
|
||||||
+ int sz = size == 12 ? size - 1 : size - 2;
|
|
||||||
+ if (paxbuf && val >= (unsigned long long)1 << (sz * 3)) {
|
|
||||||
+ /* add pax header */
|
|
||||||
+ sprintf(space, "%llu", val);
|
|
||||||
+ add_pax_attrib(paxbuf, pax, space);
|
|
||||||
+ }
|
|
||||||
+ if (val >= (unsigned long long)1 << (size * 3)) {
|
|
||||||
+ set_pax_entry_num_base256(p, val, size);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ sprintf(space, "%0*llo ", sz, val);
|
|
||||||
+ memcpy(p, space, size);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int pax_is_ascii(const char *val)
|
|
||||||
+{
|
|
||||||
+ for (; *val; val++)
|
|
||||||
+ if (*(const unsigned char *)val >= 0x80)
|
|
||||||
+ return 0;
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline void set_pax_entry_str(unsigned char *p, const char *val, int size, char *pax, char **paxbuf)
|
|
||||||
+{
|
|
||||||
+ size_t l = strlen(val);
|
|
||||||
+ if (paxbuf && (l > size || !pax_is_ascii(val)))
|
|
||||||
+ add_pax_attrib(paxbuf, pax, val);
|
|
||||||
+ memcpy(p, val, l < size ? l : size);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void set_pax_path_mangle(unsigned char *paxh, const char *filename, const char *insert)
|
|
||||||
+{
|
|
||||||
+ size_t l = strlen(filename);
|
|
||||||
+ size_t ilen = insert ? strlen(insert) + 1 : 0;
|
|
||||||
+ const char *p, *p2, *bn;
|
|
||||||
+ int isdir = 0;
|
|
||||||
+ /* strip trailing '/' and '/.' components */
|
|
||||||
+ while (l && (filename[l - 1] == '/' || (filename[l - 1] == '.' && l > 1 && filename[l - 2] == '/'))) {
|
|
||||||
+ l--;
|
|
||||||
+ isdir = 1;
|
|
||||||
+ }
|
|
||||||
+ if (ilen) {
|
|
||||||
+ isdir = 0; /* no trailing slash for a PaxHeader */
|
|
||||||
+ if (l == 0) {
|
|
||||||
+ filename = "/rootdir";
|
|
||||||
+ l = 8;
|
|
||||||
+ } else if (l == 1 && filename[0] == '.') {
|
|
||||||
+ filename = "currentdir";
|
|
||||||
+ l = 10;
|
|
||||||
+ } else if (l == 2 && filename[0] == '.' && filename[1] == '.') {
|
|
||||||
+ filename = "parrentdir";
|
|
||||||
+ l = 10;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ /* find the basename */
|
|
||||||
+ bn = filename + l;
|
|
||||||
+ while (bn > filename && bn[-1] != '/')
|
|
||||||
+ bn--;
|
|
||||||
+ /* truncate basename (we use 99 like libarchive so we can add a '/' if the prefix is empty) */
|
|
||||||
+ l -= bn - filename;
|
|
||||||
+ if (l > 99 - (ilen + isdir))
|
|
||||||
+ l = 99 - (ilen + isdir);
|
|
||||||
+ /* calculate prefix */
|
|
||||||
+ if (bn - filename <= 100 - (l + ilen + isdir)) {
|
|
||||||
+ p = filename; /* no need for a prefix */
|
|
||||||
+ } else {
|
|
||||||
+ p = bn - filename > 155 ? filename + 155 : bn;
|
|
||||||
+ while (p > filename && *p != '/')
|
|
||||||
+ p--;
|
|
||||||
+ /* move as much of the prefix into name as possible */
|
|
||||||
+ if (p > filename && bn - p < 99 - (l + ilen + isdir)) {
|
|
||||||
+ p2 = strchr(bn - (99 - (l + ilen + isdir)), '/');
|
|
||||||
+ if (p2 && p2 < p)
|
|
||||||
+ p = p2;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ /* copy the prefix */
|
|
||||||
+ if (p != filename) {
|
|
||||||
+ memcpy(paxh + 345, filename, p - filename);
|
|
||||||
+ p++; /* skip the '/' */
|
|
||||||
+ }
|
|
||||||
+ /* copy rest of the dir */
|
|
||||||
+ p2 = p + (99 - (l + ilen + isdir)) > bn ? bn : p + (99 - (l + ilen + isdir));
|
|
||||||
+ while (p2 > p && *p2 != '/')
|
|
||||||
+ p2--;
|
|
||||||
+ if (p2 < bn && *p2 == '/')
|
|
||||||
+ p2++; /* always fits as we used 99 as size limit above */
|
|
||||||
+ memcpy(paxh, p, p2 - p);
|
|
||||||
+ /* copy the insert */
|
|
||||||
+ if (ilen) {
|
|
||||||
+ memcpy(paxh + (p2 - p), insert, ilen);
|
|
||||||
+ paxh[p2 - p + ilen - 1] = '/';
|
|
||||||
+ }
|
|
||||||
+ /* copy the basename */
|
|
||||||
+ memcpy(paxh + (p2 - p) + ilen, bn, l);
|
|
||||||
+ if (isdir)
|
|
||||||
+ paxh[p2 - p + ilen + l] = '/';
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int set_pax_path(unsigned char *paxh, const char *filename)
|
|
||||||
+{
|
|
||||||
+ size_t l = strlen(filename);
|
|
||||||
+ if (l <= 100) {
|
|
||||||
+ memcpy(paxh, filename, l);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ const char *p = strchr(filename + l - 100 - 1, '/');
|
|
||||||
+ if (p == filename)
|
|
||||||
+ p = strchr(filename + 1, '/');
|
|
||||||
+ if (p && p[1] && p - filename <= 155) {
|
|
||||||
+ memcpy(paxh, p + 1, l - (p + 1 - filename));
|
|
||||||
+ memcpy(paxh + 345, filename, p - filename);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ set_pax_path_mangle(paxh, filename, NULL);
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int write_pax_entry_pax(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, char *paxbuf);
|
|
||||||
+
|
|
||||||
+static int write_pax_entry(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, const char *flink, const char *hlink, char *buf)
|
|
||||||
+{
|
|
||||||
+ unsigned char paxh[512];
|
|
||||||
+ int tartype = -1;
|
|
||||||
+ rpm_loff_t size = 0;
|
|
||||||
+
|
|
||||||
+ memset(paxh, 0, sizeof(paxh));
|
|
||||||
+ if (!fi) {
|
|
||||||
+ if (do_fwrite(fdo, paxh, sizeof(paxh)))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (do_fwrite(fdo, paxh, sizeof(paxh)))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+ }
|
|
||||||
+ if (filename == NULL && flink)
|
|
||||||
+ tartype = 'x';
|
|
||||||
+ else if (S_ISREG(st->st_mode))
|
|
||||||
+ tartype = st->st_nlink > 1 && !rpmfiArchiveHasContent(fi) ? '1' : '0';
|
|
||||||
+ else if (S_ISLNK(st->st_mode))
|
|
||||||
+ tartype = '2';
|
|
||||||
+ else if (S_ISCHR(st->st_mode))
|
|
||||||
+ tartype = '3';
|
|
||||||
+ else if (S_ISBLK(st->st_mode))
|
|
||||||
+ tartype = '4';
|
|
||||||
+ else if (S_ISDIR(st->st_mode))
|
|
||||||
+ tartype = '5';
|
|
||||||
+ else if (S_ISFIFO(st->st_mode))
|
|
||||||
+ tartype = '6';
|
|
||||||
+ if (tartype == -1) {
|
|
||||||
+ fprintf(stderr, "Warning: unsupported file type, skipping: %s\n", filename);
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+ }
|
|
||||||
+ if (tartype == '5') {
|
|
||||||
+ size_t l = strlen(filename);
|
|
||||||
+ if (!l || filename[l - 1] != '/') {
|
|
||||||
+ char *dirfilename = rstrscat(NULL, filename, "/", NULL);
|
|
||||||
+ int r = write_pax_entry(fdo, fi, dirfilename, st, flink, hlink, buf);
|
|
||||||
+ _free(dirfilename);
|
|
||||||
+ return r;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (tartype == '0' || tartype == '1')
|
|
||||||
+ size = rpmfiFSize(fi);
|
|
||||||
+ else if (tartype == 'x')
|
|
||||||
+ size = (rpm_loff_t)strlen(buf);
|
|
||||||
+
|
|
||||||
+ /* fill entry header */
|
|
||||||
+ char *paxbuf = NULL;
|
|
||||||
+ char **paxbufp = tartype == 'x' ? NULL : &paxbuf;
|
|
||||||
+ if (tartype == 'x') {
|
|
||||||
+ set_pax_path_mangle(paxh, flink, "PaxHeader");
|
|
||||||
+ } else {
|
|
||||||
+ if (set_pax_path(paxh, filename) || !pax_is_ascii(filename))
|
|
||||||
+ add_pax_attrib(paxbufp, "path", filename);
|
|
||||||
+ }
|
|
||||||
+ set_pax_entry_num(paxh + 100, st->st_mode & 07777, 8, NULL, NULL);
|
|
||||||
+ set_pax_entry_num(paxh + 108, st->st_uid, 8, "uid", paxbufp);
|
|
||||||
+ set_pax_entry_num(paxh + 116, st->st_gid, 8, "gid", paxbufp);
|
|
||||||
+ set_pax_entry_num(paxh + 124, size, 12, "size", paxbufp);
|
|
||||||
+ set_pax_entry_num(paxh + 136, st->st_mtime, 12, "mtime", paxbufp);
|
|
||||||
+ memset(paxh + 148, ' ', 8);
|
|
||||||
+ paxh[156] = tartype;
|
|
||||||
+ if (tartype == '1' || tartype == '2')
|
|
||||||
+ set_pax_entry_str(paxh + 157, tartype == '1' ? hlink : flink, 100, "linkpath", paxbufp);
|
|
||||||
+ memcpy(paxh + 257, "ustar\00000", 8);
|
|
||||||
+ set_pax_entry_str(paxh + 265, rpmfiFUser(fi), 32, "user", paxbufp);
|
|
||||||
+ set_pax_entry_str(paxh + 297, rpmfiFGroup(fi), 32, "group", paxbufp);
|
|
||||||
+ set_pax_entry_num(paxh + 329, major(st->st_rdev), 8, "SCHILY.devmajor", paxbufp);
|
|
||||||
+ set_pax_entry_num(paxh + 337, minor(st->st_rdev), 8, "SCHILY.devminor", paxbufp);
|
|
||||||
+ int i, checksum = 0;
|
|
||||||
+ for (i = 0; i < 512; i++)
|
|
||||||
+ checksum += paxh[i];
|
|
||||||
+ set_pax_entry_num(paxh + 148, checksum, 8, NULL, NULL);
|
|
||||||
+ paxh[148 + 6] = 0;
|
|
||||||
+ paxh[148 + 7] = ' ';
|
|
||||||
+ /* write pax header if we need it */
|
|
||||||
+ if (paxbuf) {
|
|
||||||
+ int r = write_pax_entry_pax(fdo, fi, filename, st, paxbuf);
|
|
||||||
+ free(paxbuf);
|
|
||||||
+ if (r)
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ }
|
|
||||||
+ /* write entry header */
|
|
||||||
+ if (do_fwrite(fdo, paxh, 512))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (tartype != '0' && tartype != 'x')
|
|
||||||
+ return RPMRC_OK; /* no content for those types */
|
|
||||||
+ /* write content */
|
|
||||||
+ if (tartype == '0' && size && do_fwrite_content(fdo, buf, fi))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ if (tartype == 'x' && size && do_fwrite(fdo, buf, size))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ /* write padding */
|
|
||||||
+ size &= 511;
|
|
||||||
+ if (size) {
|
|
||||||
+ memset(paxh, 0, sizeof(paxh));
|
|
||||||
+ if (do_fwrite(fdo, paxh, 512 - size))
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ }
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int write_pax_entry_pax(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, char *paxbuf)
|
|
||||||
+{
|
|
||||||
+ /* tweak stat data and filename */
|
|
||||||
+ struct stat paxst = *st;
|
|
||||||
+ paxst.st_size = strlen(paxbuf);
|
|
||||||
+ paxst.st_mode = paxst.st_mode & 0777;
|
|
||||||
+ if (paxst.st_uid >= (1 << 18))
|
|
||||||
+ paxst.st_uid = (1 << 18) - 1;
|
|
||||||
+ if (paxst.st_gid >= (1 << 18))
|
|
||||||
+ paxst.st_gid = (1 << 18) - 1;
|
|
||||||
+ if (paxst.st_mtime < 0)
|
|
||||||
+ paxst.st_mtime = 0;
|
|
||||||
+ if ((unsigned long long)paxst.st_mtime >= 1ULL << 33)
|
|
||||||
+ paxst.st_mtime = (time_t)((1ULL << 33) - 1);
|
|
||||||
+ return write_pax_entry(fdo, fi, NULL, &paxst, filename, NULL, paxbuf);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int process_package(rpmts ts, const char * filename)
|
|
||||||
+{
|
|
||||||
+ FD_t fdi;
|
|
||||||
+ FD_t gzdi;
|
|
||||||
+ FD_t fdo;
|
|
||||||
+ Header h;
|
|
||||||
+ int rc = 0;
|
|
||||||
+ char * rpmio_flags = NULL;
|
|
||||||
+ int iscpio = 0;
|
|
||||||
+
|
|
||||||
+ if (!strcmp(filename, "-")) {
|
|
||||||
+ if(isatty(STDIN_FILENO)) {
|
|
||||||
+ fprintf(stderr, "Error: missing input RPM package\n");
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+ fdi = fdDup(STDIN_FILENO);
|
|
||||||
+ } else {
|
|
||||||
+ fdi = Fopen(filename, "r.ufdio");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (Ferror(fdi)) {
|
|
||||||
+ fprintf(stderr, "rpm2archive: %s: %s\n",
|
|
||||||
+ filename, Fstrerror(fdi));
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h);
|
|
||||||
+
|
|
||||||
+ switch (rc) {
|
|
||||||
+ case RPMRC_OK:
|
|
||||||
+ case RPMRC_NOKEY:
|
|
||||||
+ case RPMRC_NOTTRUSTED:
|
|
||||||
+ break;
|
|
||||||
+ case RPMRC_NOTFOUND:
|
|
||||||
+ fprintf(stderr, _("argument is not an RPM package\n"));
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ break;
|
|
||||||
+ case RPMRC_FAIL:
|
|
||||||
+ default:
|
|
||||||
+ fprintf(stderr, _("error reading header from package\n"));
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /* Retrieve payload size and compression type. */
|
|
||||||
+ { const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR);
|
|
||||||
+ rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
|
|
||||||
+ free(rpmio_flags);
|
|
||||||
+
|
|
||||||
+ if (gzdi == NULL) {
|
|
||||||
+ fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (rstreq(format, "pax")) {
|
|
||||||
+ iscpio = 0;
|
|
||||||
+ } else if (rstreq(format, "cpio")) {
|
|
||||||
+ iscpio = 1;
|
|
||||||
+ } else {
|
|
||||||
+ fprintf(stderr, "Error: Format %s is not supported\n", format);
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!isatty(STDOUT_FILENO)) {
|
|
||||||
+ fdo = fdDup(STDOUT_FILENO);
|
|
||||||
+ } else {
|
|
||||||
+ if (!strcmp(filename, "-")) {
|
|
||||||
+ fprintf(stderr, "Error: refusing to output archive data to a terminal.\n");
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+ char * outname;
|
|
||||||
+ if (urlIsURL(filename)) {
|
|
||||||
+ const char * fname = strrchr(filename, '/');
|
|
||||||
+ if (fname != NULL) {
|
|
||||||
+ fname++;
|
|
||||||
+ } else {
|
|
||||||
+ fname = filename;
|
|
||||||
+ }
|
|
||||||
+ outname = rstrscat(NULL, fname, NULL);
|
|
||||||
+ } else {
|
|
||||||
+ outname = rstrscat(NULL, filename, NULL);
|
|
||||||
+ }
|
|
||||||
+ if (compress) {
|
|
||||||
+ outname = rstrscat(&outname, ".tgz", NULL);
|
|
||||||
+ } else {
|
|
||||||
+ outname = rstrscat(&outname, ".tar", NULL);
|
|
||||||
+ }
|
|
||||||
+ fdo = Fopen(outname, "w.ufdio");
|
|
||||||
+ if (!fdo) {
|
|
||||||
+ fprintf(stderr, "Error: Can't open output file: %s\n", outname);
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+ _free(outname);
|
|
||||||
+ }
|
|
||||||
+ if (compress && fdo)
|
|
||||||
+ fdo = Fdopen(fdo, "w.gzdio");
|
|
||||||
+ if (!fdo) {
|
|
||||||
+ fprintf(stderr, "Error: Can't setup output file\n");
|
|
||||||
+ exit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ char * buf = (char *)xmalloc(BUFSIZE);
|
|
||||||
+ char * hardlink = NULL;
|
|
||||||
+
|
|
||||||
+ rpmfiles files = rpmfilesNew(NULL, h, 0, RPMFI_KEEPHEADER);
|
|
||||||
+ rpmfi fi = rpmfiNewArchiveReader(gzdi, files, iscpio ? RPMFI_ITER_READ_ARCHIVE : RPMFI_ITER_READ_ARCHIVE_CONTENT_FIRST);
|
|
||||||
+
|
|
||||||
+ while ((rc = rpmfiNext(fi)) >= 0) {
|
|
||||||
+ struct stat st;
|
|
||||||
+ const char *dn, *flink;
|
|
||||||
+ char *filename;
|
|
||||||
+ if (rpmfiStat(fi, 0, &st)) {
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ dn = rpmfiDN(fi);
|
|
||||||
+ if (!strcmp(dn, "")) dn = "/";
|
|
||||||
+ filename = rstrscat(NULL, ".", dn, rpmfiBN(fi), NULL);
|
|
||||||
+ flink = S_ISLNK(st.st_mode) ? rpmfiFLink(fi) : NULL;
|
|
||||||
+ if (st.st_nlink > 1 && !iscpio) {
|
|
||||||
+ if (rpmfiArchiveHasContent(fi)) {
|
|
||||||
+ /* hardlink sizes are special, see rpmfiStat() */
|
|
||||||
+ _free(hardlink);
|
|
||||||
+ hardlink = xstrdup(filename);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (iscpio)
|
|
||||||
+ rc = write_cpio_entry(fdo, fi, filename, &st, flink, st.st_nlink > 1 ? hardlink : NULL, buf);
|
|
||||||
+ else
|
|
||||||
+ rc = write_pax_entry(fdo, fi, filename, &st, flink, st.st_nlink > 1 ? hardlink : NULL, buf);
|
|
||||||
+ _free(filename);
|
|
||||||
+ if (rc == RPMRC_FAIL)
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ /* End of iteration is not an error, everything else is */
|
|
||||||
+ if (rc == RPMERR_ITER_END) {
|
|
||||||
+ rc = 0;
|
|
||||||
+ } else {
|
|
||||||
+ rc = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* write trailer */
|
|
||||||
+ if (!rc) {
|
|
||||||
+ if (iscpio)
|
|
||||||
+ rc = write_cpio_entry(fdo, NULL, NULL, NULL, NULL, NULL, buf);
|
|
||||||
+ else
|
|
||||||
+ rc = write_pax_entry(fdo, NULL, NULL, NULL, NULL, NULL, buf);
|
|
||||||
+ rc = rc == RPMRC_FAIL ? 1 : 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (Fclose(fdo) && !rc) {
|
|
||||||
+ fprintf(stderr, "Error writing archive\n");
|
|
||||||
+ rc = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ _free(hardlink);
|
|
||||||
+
|
|
||||||
+ Fclose(gzdi); /* XXX gzdi == fdi */
|
|
||||||
+ buf = _free(buf);
|
|
||||||
+ rpmfilesFree(files);
|
|
||||||
+ rpmfiFree(fi);
|
|
||||||
+ headerFree(h);
|
|
||||||
+ return rc;
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:5e123301a48b8d64e97f1c168097e023baa68f5f352adb3e8c954d4ac7efd0cf
|
|
||||||
size 33987
|
|
@ -1,5 +1,5 @@
|
|||||||
--- docs/man/CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
|
--- docs/man/CMakeLists.txt.orig 2024-02-07 13:36:51.000000000 +0000
|
||||||
+++ docs/man/CMakeLists.txt 2024-12-16 09:17:15.684229047 +0000
|
+++ docs/man/CMakeLists.txt 2024-02-09 10:36:43.300952115 +0000
|
||||||
@@ -2,6 +2,7 @@ set(core
|
@@ -2,6 +2,7 @@ set(core
|
||||||
gendiff.1 rpm2cpio.8
|
gendiff.1 rpm2cpio.8
|
||||||
rpm.8 rpmbuild.8 rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
|
rpm.8 rpmbuild.8 rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
|
||||||
@ -8,8 +8,8 @@
|
|||||||
)
|
)
|
||||||
set(extra
|
set(extra
|
||||||
rpm2archive.8 rpm-plugins.8 rpm-plugin-prioreset.8 rpm-plugin-syslog.8
|
rpm2archive.8 rpm-plugins.8 rpm-plugin-prioreset.8 rpm-plugin-syslog.8
|
||||||
--- docs/man/rpmqpack.8.orig 2024-12-16 09:17:15.684229047 +0000
|
--- docs/man/rpmqpack.8.orig 2024-02-09 10:36:43.300952115 +0000
|
||||||
+++ docs/man/rpmqpack.8 2024-12-16 09:17:15.684229047 +0000
|
+++ docs/man/rpmqpack.8 2024-02-09 10:36:43.300952115 +0000
|
||||||
@@ -0,0 +1,25 @@
|
@@ -0,0 +1,25 @@
|
||||||
+.TH RPMQPACK 8 "Mar 2002"
|
+.TH RPMQPACK 8 "Mar 2002"
|
||||||
+.SH NAME
|
+.SH NAME
|
||||||
@ -36,9 +36,9 @@
|
|||||||
+
|
+
|
||||||
+.SH AUTHOR
|
+.SH AUTHOR
|
||||||
+Michael Schroeder <mls@suse.de>
|
+Michael Schroeder <mls@suse.de>
|
||||||
--- tools/CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
|
--- tools/CMakeLists.txt.orig 2024-02-07 13:36:51.000000000 +0000
|
||||||
+++ tools/CMakeLists.txt 2024-12-16 09:18:57.764016162 +0000
|
+++ tools/CMakeLists.txt 2024-02-09 10:37:32.932875459 +0000
|
||||||
@@ -6,6 +6,7 @@ add_executable(rpmkeys rpmkeys.c cliutil
|
@@ -7,6 +7,7 @@ add_executable(rpm2cpio rpm2cpio.c cliut
|
||||||
add_executable(rpmsign rpmsign.c cliutils)
|
add_executable(rpmsign rpmsign.c cliutils)
|
||||||
add_executable(rpmbuild rpmbuild.c cliutils)
|
add_executable(rpmbuild rpmbuild.c cliutils)
|
||||||
add_executable(rpmspec rpmspec.c cliutils)
|
add_executable(rpmspec rpmspec.c cliutils)
|
||||||
@ -46,17 +46,17 @@
|
|||||||
|
|
||||||
add_executable(rpmdeps rpmdeps.c)
|
add_executable(rpmdeps rpmdeps.c)
|
||||||
add_executable(rpmgraph rpmgraph.c)
|
add_executable(rpmgraph rpmgraph.c)
|
||||||
@@ -77,7 +78,7 @@ endif()
|
@@ -60,7 +61,7 @@ foreach(cmd rpmverify rpmquery)
|
||||||
|
endforeach()
|
||||||
install(TARGETS
|
install(TARGETS
|
||||||
rpm rpmdb rpmkeys rpmsign rpmbuild rpmspec
|
rpm rpmdb rpmkeys rpm2cpio rpmsign rpmbuild rpmspec
|
||||||
- rpmlua rpmgraph
|
- rpmlua rpmgraph
|
||||||
+ rpmlua rpmgraph rpmqpack
|
+ rpmlua rpmgraph rpmqpack
|
||||||
)
|
)
|
||||||
install(TARGETS rpmdeps rpmdump rpmuncompress DESTINATION ${RPM_CONFIGDIR})
|
install(TARGETS rpmdeps rpmuncompress DESTINATION ${RPM_CONFIGDIR})
|
||||||
|
|
||||||
--- tools/rpmqpack.c.orig 2024-12-16 09:17:15.688229038 +0000
|
--- tools/rpmqpack.c.orig 2024-02-09 10:36:43.300952115 +0000
|
||||||
+++ tools/rpmqpack.c 2024-12-16 09:17:15.688229038 +0000
|
+++ tools/rpmqpack.c 2024-02-09 10:36:43.300952115 +0000
|
||||||
@@ -0,0 +1,60 @@
|
@@ -0,0 +1,60 @@
|
||||||
+#include <sys/types.h>
|
+#include <sys/types.h>
|
||||||
+#include <limits.h>
|
+#include <limits.h>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
--- build/parseSpec.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- build/parseSpec.c.orig 2013-06-10 15:55:10.000000000 +0000
|
||||||
+++ build/parseSpec.c 2024-12-16 09:19:43.511920745 +0000
|
+++ build/parseSpec.c 2013-07-12 12:04:11.000000000 +0000
|
||||||
@@ -1309,6 +1309,7 @@ static rpmSpec parseSpec(const char *spe
|
@@ -561,6 +561,7 @@ static rpmSpec parseSpec(const char *spe
|
||||||
spec = newSpec();
|
spec = newSpec();
|
||||||
|
|
||||||
spec->specFile = rpmGetPath(specFile, NULL);
|
spec->specFile = rpmGetPath(specFile, NULL);
|
||||||
+ addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC);
|
+ addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC);
|
||||||
pushOFI(spec, spec->specFile);
|
pushOFI(spec, spec->specFile);
|
||||||
/* If explicit --buildroot was passed, grab hold of it */
|
/* If buildRoot not specified, use default %{buildroot} */
|
||||||
if (buildRoot)
|
if (buildRoot) {
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
--- build/parseSpec.c.orig 2025-01-07 09:55:58.006136886 +0000
|
|
||||||
+++ build/parseSpec.c 2025-01-07 09:56:23.618086661 +0000
|
|
||||||
@@ -1321,9 +1321,11 @@ static rpmSpec parseSpec(const char *spe
|
|
||||||
rpmPushMacroFlags(spec->macros, "_top_builddir", NULL,
|
|
||||||
top_builddir, RMIL_GLOBAL, RPMMACRO_LITERAL);
|
|
||||||
|
|
||||||
- /* Undefine (!!) %_builddir so %global misuses fall through */
|
|
||||||
+ /* Undefine (!!) %_builddir and %buildroot so %global misuses fall through */
|
|
||||||
while (rpmMacroIsDefined(spec->macros, "_builddir"))
|
|
||||||
rpmPopMacro(spec->macros, "_builddir");
|
|
||||||
+ while (rpmMacroIsDefined(spec->macros, "buildroot"))
|
|
||||||
+ rpmPopMacro(spec->macros, "buildroot");
|
|
||||||
free(top_builddir);
|
|
||||||
}
|
|
||||||
|
|
65
unshare.diff
65
unshare.diff
@ -1,65 +0,0 @@
|
|||||||
--- docs/man/rpm-plugin-unshare.8.md.orig 2024-10-07 09:35:46.000000000 +0000
|
|
||||||
+++ docs/man/rpm-plugin-unshare.8.md 2024-12-16 13:28:44.597787315 +0000
|
|
||||||
@@ -27,6 +27,11 @@ This plugin implements the following con
|
|
||||||
execution. Typical examples would be `/tmp` to protect against
|
|
||||||
insecure temporary file usage inside scriptlets, and `/home` to
|
|
||||||
prevent scriptlets from accessing user home directories.
|
|
||||||
+ When path unsharing is enabled, any mounts made from scriptlets
|
|
||||||
+ are also private to the scriptlet (and vice versa, mount changes
|
|
||||||
+ on the host are not visible to the scriptlet).
|
|
||||||
+
|
|
||||||
+ Private mounts in chroot-operations is unimplemented.
|
|
||||||
|
|
||||||
`%__transaction_unshare_nonet`
|
|
||||||
|
|
||||||
--- plugins/unshare.c.orig 2024-10-07 09:35:46.000000000 +0000
|
|
||||||
+++ plugins/unshare.c 2024-12-16 13:52:31.530793880 +0000
|
|
||||||
@@ -15,12 +15,32 @@
|
|
||||||
static ARGV_t private_mounts = NULL;
|
|
||||||
static int unshare_flags = 0;
|
|
||||||
|
|
||||||
+static int in_chroot()
|
|
||||||
+{
|
|
||||||
+ struct stat sta, stb;
|
|
||||||
+ if (stat("/", &sta))
|
|
||||||
+ return 0;
|
|
||||||
+ if (stat("/proc/1/root", &stb))
|
|
||||||
+ return 1; /* proc not mounted, assume chroot */
|
|
||||||
+ return sta.st_dev == stb.st_dev && sta.st_ino == stb.st_ino ? 0 : 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static rpmRC unshare_init(rpmPlugin plugin, rpmts ts)
|
|
||||||
{
|
|
||||||
char *paths = rpmExpand("%{?__transaction_unshare_paths}", NULL);
|
|
||||||
private_mounts = argvSplitString(paths, ":", ARGV_SKIPEMPTY);
|
|
||||||
- if (private_mounts)
|
|
||||||
- unshare_flags |= CLONE_NEWNS;
|
|
||||||
+ if (private_mounts) {
|
|
||||||
+ /*
|
|
||||||
+ * Changing mount propagation from inside a chroot fails if the root
|
|
||||||
+ * is not also a mount point, disable for now.
|
|
||||||
+ */
|
|
||||||
+ if (strcmp(rpmtsRootDir(ts), "/") || in_chroot()) {
|
|
||||||
+ rpmlog(RPMLOG_WARNING,
|
|
||||||
+ "private mounts in chroot not implemented\n");
|
|
||||||
+ } else {
|
|
||||||
+ unshare_flags |= CLONE_NEWNS;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
free(paths);
|
|
||||||
|
|
||||||
if (rpmExpandNumeric("%{?__transaction_unshare_nonet}"))
|
|
||||||
@@ -47,9 +67,10 @@ static rpmRC unshare_scriptlet_fork_post
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (private_mounts) {
|
|
||||||
- if (mount("/", "/", NULL, MS_REC | MS_PRIVATE, NULL) == -1) {
|
|
||||||
- rpmlog(RPMLOG_ERR, _("failed to mount private %s: %s\n"),
|
|
||||||
+ if (unshare_flags & CLONE_NEWNS) {
|
|
||||||
+ if (mount(NULL, "/", NULL, MS_REC | MS_PRIVATE, NULL) == -1) {
|
|
||||||
+ rpmlog(RPMLOG_ERR,
|
|
||||||
+ _("failed to change mount propagation %s: %s\n"),
|
|
||||||
"/", strerror(errno));
|
|
||||||
goto exit;
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
--- rpmio/rpmio.c.orig 2024-10-07 09:35:46.000000000 +0000
|
--- rpmio/rpmio.c.orig 2023-09-19 10:10:10.000000000 +0000
|
||||||
+++ rpmio/rpmio.c 2024-12-16 09:42:02.197155600 +0000
|
+++ rpmio/rpmio.c 2023-10-10 12:09:28.171040124 +0000
|
||||||
@@ -8,6 +8,7 @@
|
@@ -8,6 +8,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
@ -8,7 +8,7 @@
|
|||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
|
||||||
#include <rpm/rpmlog.h>
|
#include <rpm/rpmlog.h>
|
||||||
@@ -996,6 +997,7 @@ const FDIO_t lzdio = &lzdio_s;
|
@@ -997,6 +998,7 @@ static const FDIO_t lzdio = &lzdio_s;
|
||||||
/* Support for ZSTD library. */
|
/* Support for ZSTD library. */
|
||||||
#ifdef HAVE_ZSTD
|
#ifdef HAVE_ZSTD
|
||||||
|
|
||||||
@ -16,7 +16,7 @@
|
|||||||
#include <zstd.h>
|
#include <zstd.h>
|
||||||
|
|
||||||
typedef struct rpmzstd_s {
|
typedef struct rpmzstd_s {
|
||||||
@@ -1013,6 +1015,29 @@ typedef struct rpmzstd_s {
|
@@ -1011,6 +1013,29 @@ typedef struct rpmzstd_s {
|
||||||
ZSTD_outBuffer zob; /*!< ZSTD_outBuffer */
|
ZSTD_outBuffer zob; /*!< ZSTD_outBuffer */
|
||||||
} * rpmzstd;
|
} * rpmzstd;
|
||||||
|
|
||||||
@ -45,21 +45,21 @@
|
|||||||
+
|
+
|
||||||
static rpmzstd rpmzstdNew(int fdno, const char *fmode)
|
static rpmzstd rpmzstdNew(int fdno, const char *fmode)
|
||||||
{
|
{
|
||||||
rpmzstd zstd = NULL;
|
int flags = 0;
|
||||||
@@ -1119,8 +1144,18 @@ static rpmzstd rpmzstdNew(int fdno, cons
|
@@ -1116,8 +1141,18 @@ static rpmzstd rpmzstdNew(int fdno, cons
|
||||||
}
|
}
|
||||||
|
|
||||||
if (threads > 0) {
|
if (threads > 0) {
|
||||||
- if (ZSTD_isError (ZSTD_CCtx_setParameter(zstd->stream.c, ZSTD_c_nbWorkers, threads)))
|
- if (ZSTD_isError (ZSTD_CCtx_setParameter(_stream, ZSTD_c_nbWorkers, threads)))
|
||||||
+ if (ZSTD_isError (ZSTD_CCtx_setParameter(zstd->stream.c, ZSTD_c_nbWorkers, threads))) {
|
+ if (ZSTD_isError (ZSTD_CCtx_setParameter(_stream, ZSTD_c_nbWorkers, threads))) {
|
||||||
rpmlog(RPMLOG_DEBUG, "zstd library does not support multi-threading\n");
|
rpmlog(RPMLOG_DEBUG, "zstd library does not support multi-threading\n");
|
||||||
+ } else {
|
+ } else {
|
||||||
+#if ZSTD_VERSION_NUMBER >= 10407
|
+#if ZSTD_VERSION_NUMBER >= 10407
|
||||||
+ pthread_once(&zstdThreadPoolCreated, zstdCreateThreadPool);
|
+ pthread_once(&zstdThreadPoolCreated, zstdCreateThreadPool);
|
||||||
+ if (zstdThreadPool) {
|
+ if (zstdThreadPool) {
|
||||||
+ if (threads > zstdThreadPoolThreads)
|
+ if (threads > zstdThreadPoolThreads)
|
||||||
+ ZSTD_CCtx_setParameter(zstd->stream.c, ZSTD_c_nbWorkers, zstdThreadPoolThreads);
|
+ ZSTD_CCtx_setParameter(_stream, ZSTD_c_nbWorkers, zstdThreadPoolThreads);
|
||||||
+ ZSTD_CCtx_refThreadPool(zstd->stream.c, zstdThreadPool);
|
+ ZSTD_CCtx_refThreadPool(_stream, zstdThreadPool);
|
||||||
+ }
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+ }
|
+ }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user