67 lines
2.5 KiB
Diff
67 lines
2.5 KiB
Diff
From a89daa75ac970d8e247edc762d1181e9a5b0c5d0 Mon Sep 17 00:00:00 2001
|
|
From: Alexander Kanavin <alex.kanavin@gmail.com>
|
|
Date: Tue, 17 Jan 2017 14:07:17 +0200
|
|
Subject: [PATCH] When cross-installing, execute package scriptlets without
|
|
chrooting into destination rootfs
|
|
|
|
This is triggered only when RPM_NO_CHROOT_FOR_SCRIPTS environment variable is defined.
|
|
Otherwise they will trigger an explosion of failures, obviously.
|
|
|
|
Amended 2018-07-03 by Olof Johansson <olofjn@axis.com>:
|
|
|
|
Remove leaking temporary scriptlet files
|
|
|
|
Since we tell dnf to run rpm with debug output, this will result in rpm not
|
|
cleaning up written temporary scriptlet files (same flag controls both
|
|
behaviors). This wouldn't have been a problem since we normally would use the
|
|
target sysroot also for temporary files, but we need to chroot out to be able
|
|
to actually run the rpm scriptlets (purpose of this patch), so the temporary
|
|
files are written to the host's /var/tmp/ directory, causing a gradual
|
|
resource leakage on the host system for every RPM based do_rootfs task
|
|
executed.
|
|
|
|
Signed-off-by: Olof Johansson <olofjn@axis.com>
|
|
|
|
Upstream-Status: Inappropriate [oe-core specific]
|
|
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
|
|
---
|
|
lib/rpmscript.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
--- a/lib/rpmscript.c
|
|
+++ b/lib/rpmscript.c
|
|
@@ -17,7 +17,7 @@
|
|
#include "rpmio/rpmio_internal.h"
|
|
|
|
#include "lib/rpmplugins.h" /* rpm plugins hooks */
|
|
-
|
|
+#include "lib/rpmchroot.h" /* rpmChrootOut */
|
|
#include "debug.h"
|
|
|
|
struct scriptNextFileFunc_s {
|
|
@@ -391,8 +391,7 @@ exit:
|
|
Fclose(out); /* XXX dup'd STDOUT_FILENO */
|
|
|
|
if (fn) {
|
|
- if (!rpmIsDebug())
|
|
- unlink(fn);
|
|
+ unlink(fn);
|
|
free(fn);
|
|
}
|
|
free(mline);
|
|
@@ -426,7 +425,13 @@ rpmRC rpmScriptRun(rpmScript script, int
|
|
|
|
if (rc != RPMRC_FAIL) {
|
|
if (script_type & RPMSCRIPTLET_EXEC) {
|
|
- rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
|
|
+ if (getenv("RPM_NO_CHROOT_FOR_SCRIPTS") != NULL) {
|
|
+ rpmChrootOut();
|
|
+ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
|
|
+ rpmChrootIn();
|
|
+ } else {
|
|
+ rc = runExtScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
|
|
+ }
|
|
} else {
|
|
rc = runLuaScript(plugins, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2, &script->nextFileFunc);
|
|
}
|