From b88973f637bc72b362991653af1577b93f8d16ca Mon Sep 17 00:00:00 2001 From: Scott Rifenbark Date: Tue, 2 Aug 2016 09:49:58 -0700 Subject: ref-manual: New "Fakeroot and Pseudo" section. Fixes [YOCTO #10060] I provided a new section in the Technical Details chapter. Also some extra explanation was added to both the do_install task and to the D variable. (From yocto-docs rev: 565fb11d72bf8c585469bcf65f92b6738e344813) Signed-off-by: Scott Rifenbark Signed-off-by: Richard Purdie --- documentation/ref-manual/ref-tasks.xml | 9 ++++ documentation/ref-manual/ref-variables.xml | 5 ++ documentation/ref-manual/technical-details.xml | 72 ++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) (limited to 'documentation') diff --git a/documentation/ref-manual/ref-tasks.xml b/documentation/ref-manual/ref-tasks.xml index d6f0051f16..b0a65a989b 100644 --- a/documentation/ref-manual/ref-tasks.xml +++ b/documentation/ref-manual/ref-tasks.xml @@ -260,6 +260,15 @@ This task runs with the current working directory set to ${B}, which is the compilation directory. + The do_install task, as well as other tasks + that either directly or indirectly depend on the installed files + (e.g. + do_package, + do_package_write_*, + and + do_rootfs), + run under + fakeroot. Caution diff --git a/documentation/ref-manual/ref-variables.xml b/documentation/ref-manual/ref-variables.xml index 3fe5cc3c2d..2507d4b520 100644 --- a/documentation/ref-manual/ref-variables.xml +++ b/documentation/ref-manual/ref-variables.xml @@ -2599,6 +2599,11 @@ ${WORKDIR}/image + Caution + Tasks that read from or write to this directory should + run under + fakeroot. + diff --git a/documentation/ref-manual/technical-details.xml b/documentation/ref-manual/technical-details.xml index 8535d2c6e8..5ef764c8e0 100644 --- a/documentation/ref-manual/technical-details.xml +++ b/documentation/ref-manual/technical-details.xml @@ -1020,6 +1020,78 @@ +
+ Fakeroot and Pseudo + + + Some tasks are easier to implement when allowed to perform certain + operations that are normally reserved for the root user. + For example, the + do_install + task benefits from being able to set the UID and GID of installed files + to arbitrary values. + + + + One approach to allowing tasks to perform root-only operations + would be to require BitBake to run as root. + However, this method is cumbersome and has security issues. + The approach that is actually used is to run tasks that benefit from + root privileges in a "fake" root environment. + Within this environment, the task and its child processes believe that + they are running as the root user, and see an internally consistent + view of the filesystem. + As long as generating the final output (e.g. a package or an image) + does not require root privileges, the fact that some earlier steps ran + in a fake root environment does not cause problems. + + + + The capability to run tasks in a fake root environment is known as + "fakeroot", which is derived from the BitBake keyword/variable + flag that requests a fake root environment for a task. + In current versions of the OpenEmbedded build system, + the program that implements fakeroot is known as Pseudo. + + + + Pseudo overrides system calls through the + LD_PRELOAD mechanism to give the + illusion of running as root. + To keep track of "fake" file ownership and permissions resulting from + operations that require root permissions, an sqlite3 + database is used. + This database is stored in + ${WORKDIR}/pseudo/files.db + for individual recipes. + Storing the database in a file as opposed to in memory + gives persistence between tasks, and even between builds. + Caution + If you add your own task that manipulates the same files or + directories as a fakeroot task, then that task should also run + under fakeroot. + Otherwise, the task will not be able to run root-only operations, + and will not see the fake file ownership and permissions set by the + other task. + You should also add a dependency on + virtual/fakeroot-native:do_populate_sysroot, + giving the following: + + fakeroot do_mytask () { + ... + } + do_mytask[depends] += "virtual/fakeroot-native:do_populate_sysroot" + + + For more information, see the + FAKEROOT* + variables in the BitBake User Manual. + You can also reference this + Pseudo + article. + +
+
x32 -- cgit 1.2.3-korg