From 36f1ae42fe13dae174b7fb5eb85dc49d7d7b516b Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 22 Oct 2010 13:00:40 +0100 Subject: pseudo/fakeroot: Move the pseudo directory creation into bitbake If sstate was used to accelerate a build, the pseudo directory might not have been created leading to subsequent task failures. Also, sstate packages were not being installed under pseudo context meaning file permissions could have been lost. Fix these problems by creating a FAKEROOTDIRS variable which bitbake ensures exists before running tasks and running the appropriate setscene tasks under fakeroot context. Signed-off-by: Richard Purdie --- bitbake/lib/bb/runqueue.py | 4 ++++ meta/classes/base.bbclass | 1 - meta/classes/package.bbclass | 2 ++ meta/classes/package_deb.bbclass | 1 + meta/classes/package_ipk.bbclass | 1 + meta/classes/package_rpm.bbclass | 1 + meta/conf/bitbake.conf | 1 + 7 files changed, 10 insertions(+), 1 deletion(-) diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 0d80a6934..0a319d2c4 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -1066,6 +1066,10 @@ class RunQueueExecute: for var in envvars: comps = var.split("=") env[comps[0]] = comps[1] + fakedirs = (the_data.getVar("FAKEROOTDIRS", True) or "").split() + for p in fakedirs: + bb.mkdirhier(p) + bb.msg.debug(2, bb.msg.domain.RunQueue, "Running %s:%s under fakeroot, state dir is %s" % (fn, taskname, fakedirs)) env['BB_TASKHASH'] = self.rqdata.runq_hash[task] env['PATH'] = self.cooker.configuration.initial_path diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index f540b58fb..feee524a6 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass @@ -135,7 +135,6 @@ python base_do_setscene () { bb.build.make_stamp("do_setscene", d) } do_setscene[selfstamp] = "1" -do_setscene[dirs] = "${PSEUDO_LOCALSTATEDIR}" addtask setscene before do_fetch addtask fetch diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index b64ff5de5..a35fbb29e 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -1096,6 +1096,8 @@ python do_package_setscene () { sstate_setscene(d) } addtask do_package_setscene +do_package_setscene[fakeroot] = "1" + # Dummy task to mark when all packaging is complete do_package_write () { diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass index 0efef67b8..2f0d78ddb 100644 --- a/meta/classes/package_deb.bbclass +++ b/meta/classes/package_deb.bbclass @@ -273,6 +273,7 @@ python do_package_write_deb_setscene () { sstate_setscene(d) } addtask do_package_write_deb_setscene +do_package_write_deb_setscene[fakeroot] = "1" python () { if bb.data.getVar('PACKAGES', d, True) != '': diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index cac045368..e93d7e2b1 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass @@ -317,6 +317,7 @@ python do_package_write_ipk_setscene () { sstate_setscene(d) } addtask do_package_write_ipk_setscene +do_package_write_ipk_setscene[fakeroot] = "1" python () { if bb.data.getVar('PACKAGES', d, True) != '': diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 0af93e7b7..4ad97c35c 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass @@ -556,6 +556,7 @@ python do_package_write_rpm_setscene () { sstate_setscene(d) } addtask do_package_write_rpm_setscene +do_package_write_rpm_setscene[fakeroot] = "1" python do_package_write_rpm () { bb.build.exec_func("read_subpackage_metadata", d) diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index 33a6fad30..13c8f86a6 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -546,6 +546,7 @@ SRC_URI = "file://${FILE}" PSEUDO_LOCALSTATEDIR ?= "${WORKDIR}/pseudo/" FAKEROOT = "PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_NOSYMLINKEXP=1 pseudo" FAKEROOTENV = "PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_NOSYMLINKEXP=1 LD_PRELOAD=libpseudo.so LD_LIBRARY_PATH=${STAGING_LIBDIR_NATIVE}/pseudo/lib64:${STAGING_LIBDIR_NATIVE}/pseudo/lib" +FAKEROOTDIRS = "${PSEUDO_LOCALSTATEDIR}" PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native" -- cgit v1.2.3