| 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(-) |
| |
| Index: git/lib/rpmscript.c |
| =================================================================== |
| --- git.orig/lib/rpmscript.c |
| +++ git/lib/rpmscript.c |
| @@ -18,7 +18,7 @@ |
| #include "rpmio/rpmio_internal.h" |
| |
| #include "lib/rpmplugins.h" /* rpm plugins hooks */ |
| - |
| +#include "lib/rpmchroot.h" /* rpmChrootOut */ |
| #include "debug.h" |
| |
| struct scriptNextFileFunc_s { |
| @@ -427,8 +427,7 @@ exit: |
| Fclose(out); /* XXX dup'd STDOUT_FILENO */ |
| |
| if (fn) { |
| - if (!rpmIsDebug()) |
| - unlink(fn); |
| + unlink(fn); |
| free(fn); |
| } |
| free(mline); |
| @@ -462,7 +461,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); |
| } |