当允许执行通常为root用户保留的某些操作时,某些任务更容易实现(例如do_install​do_package_write*​​do_rootfs​​do_image*​)。例如,​do_install​ 任务可以将已安装文件的UID和GID设置为任意值。

允许任务执行仅限root操作的一种方法是要求BitBake 以root身份运行。但是,这种方法很麻烦,并且存在安全问题。实际使用的方法是在“fake”root环境中运行受益于root权限的任务。在这个环境中,任务及其子进程认为它们是以root用户身份运行的,并且可以看到文件系统内部一致的视图。只要生成最终输出(例如包或镜像)不需要root权限,那么在fake root 环境中运行的一些早期步骤就不会导致问题。

在fake root环境中运行任务的能力被称为“fakeroot”,它是从BitBake关键字/变量标志派生出来的,该标志为任务请求一个fake root环境。

OpenEmbedded 构建系统中,实现fakeroot的程序称为​Pseudo​。Pseudo通过使用环境变量​LD_PRELOAD​重写系统调用,这会导致以root用户身份运行的错觉。为了跟踪“fake”文件所有权和由需要root 权限的操作产生的权限,Pseudo使用SQLite 3数据库。此数据库存储在​${​​WORKDIR​​}/pseudo/files.db​为个人recipes。将数据库存储在一个文件中,而不是在内存中,这样可以在任务和构建之间实现持久性,而这不是使用fakeroot实现的。

注意:如果您添加自己的任务来处理与fakeroot任务相同的文件或目录,那么该任务也需要在fakeroot下运行。否则,该任务将无法运行仅限root的操作,并且无法查看其他任务设置的fake 文件所有权和权限。您还需要添加对virtual/fakeroot-native:do_populate_sysroot的依赖,给出以下内容:

fakeroot do_mytask () {
...
}
do_mytask[depends] += "virtual/fakeroot-native:do_populate_sysroot"