summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/rpm/files/0001-When-cross-installing-execute-package-scriptlets-wit.patch
blob: e4251a1a73af7efc2bd2511f9826b8af3f7a62ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
From 34c0d3263f3e0b366a2320e0823f46673f7ba928 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(-)

diff --git a/lib/rpmscript.c b/lib/rpmscript.c
index 3f6313278..57689bb68 100644
--- a/lib/rpmscript.c
+++ b/lib/rpmscript.c
@@ -448,8 +448,7 @@ exit:
 	Fclose(out);	/* XXX dup'd STDOUT_FILENO */
 
     if (fn) {
-	if (!rpmIsDebug())
-	    unlink(fn);
+	unlink(fn);
 	free(fn);
     }
     free(mline);
@@ -483,7 +482,13 @@ rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd,
 
     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);
 	}