运行 buildroot 为 root。在环境变量中设置 FORCE_UNSAFE_CONFIGURE=1 后仍然出错

running buildroot as root. still error after setting FORCE_UNSAFE_CONFIGURE=1 in environment variable

我正在尝试 运行 使用 root 用户构建 root。即使将 FORCE_UNSAFE_CONFIGURE=1 设置为 export FORCE_UNSAFE_CONFIGURE=1 我仍然得到 configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check).

当我在没有 root 用户的情况下尝试 运行 buildroot 时,我收到一些与 fakeroot

相关的错误

如果 运行ning 作为 root 为什么即使在 运行ning 命令 export FORCE_UNSAFE_CONFIGURE=1 之后我仍然得到 configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check) See config.log'详情`

如何用 root 用户修复它,这样我就可以 运行 buildroot

错误消息还说看 config.log file.What 我想知道我 运行 export FORCE_UNSAFE_CONFIGURE=1 命令但我找不到 FORCE_UNSAFE_CONFIGURE=1 config.log

的缓存变量

这也打印在config.log

#define GNULIB_TEST_MKFIFOAT 1
| #define GNULIB_TEST_MKNODAT 1
| /* end confdefs.h.  */
| #include <sys/stat.h>
|              #include <unistd.h>
| 
|              /* Copied from root-uid.h.  FIXME: Just use root-uid.h.  */
|              #ifdef __TANDEM
|              # define ROOT_UID 65535
|              #else
|              # define ROOT_UID 0
|              #endif
| 
| int
| main ()
| {
| /* Indeterminate for super-user, assume no.  Why are you running
|          configure as root, anyway?  */
|       if (geteuid () == ROOT_UID) return 99;
|       if (mknod ("conftest.fifo", S_IFIFO | 0600, 0)) return 2;
|   ;
|   return 0;
| }
configure:25690: error: in `/home/ubuntu/qemuD/build/output/build/host-tar-1.29':
configure:25692: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See `config.log' for more details

##

我可以删除检查根变量并允许根 运行ning buildroot 在一些 buildroot 代码中,比如在某些 python 文件或其他东西中。

另外请告知什么是fakeroot。如果我没有 运行 作为 root 用户,那么它会导致一些关于 fakeroot 的错误。这是我需要在 ubuntu 中安装并执行 buildroot 的额外东西吗?或者它是 buildroot 的一部分。所以为了那几句话

更新

如果我不 运行 作为 root 和 运行 命令

make host-tar-dirclean
make

我收到以下错误。我想知道如何调试或排除此错误。我的意思是,如果出现以下错误,您将面临您会怎么做。以及任何解释。特南克斯

In file included from libfakeroot.c:60:
communicate.h:209:44: note: expected ‘struct stat64 *’ but argument is of type ‘struct stat *’
  209 | extern void send_get_stat64(struct stat64 *buf);
      |                             ~~~~~~~~~~~~~~~^~~
libtool: link: /usr/bin/gcc -O2 -I/home/ubuntu/abc/buildroot-2020.02.3/output/host/include -Wl,-rpath -Wl,/home/ubuntu/abc/buildroot-2020.02.3/output/host/lib -o simple simple.o  -L/home/ubuntu/abc/buildroot-2020.02.3/output/host/lib -ldl
make[4]: *** [Makefile:652: libfakeroot.lo] Error 1
make[4]: *** Waiting for unfinished jobs....
libtool: link: /usr/bin/ar cru .libs/libmacosx.a .libs/libfakeroot_inode64.o .libs/libfakeroot_unix2003.o 
/usr/bin/ar: `u' modifier ignored since `D' is the default (see `U')
libtool: link: /usr/bin/ranlib .libs/libmacosx.a
libtool: link: ( cd ".libs" && rm -f "libmacosx.la" && ln -s "../libmacosx.la" "libmacosx.la" )
make[3]: *** [Makefile:670: all-recursive] Error 1
make[2]: *** [Makefile:445: all] Error 2
make[1]: *** [package/pkg-generic.mk:269: /home/ubuntu/abc/buildroot-2020.02.3/output/build/host-fakeroot-1.20.2/.stamp_built] Error 2
make: *** [Makefile:84: _all] Error 2
ubuntu@this:~/abc/buildroot-2020.02.3$ 

首先:不要以 root 用户身份构建。这只是个坏主意。

错误不是来自 Buildroot,而是来自 tar 包。

FORCE_UNSAFE_CONFIG 不是缓存变量,因此它不会出现在 config.log.

它应该适用于该环境变量集。你试过了吗:

export FORCE_UNSAFE_CONFIGURE=1
make host-tar-dirclean
make

fakeroot 是一个工具,可以伪造一些通常只有 root 才能做的事情:设置文件所有权、创建设备节点等。然后可以将伪造的文件添加到 tar 存档或到生成的文件系统。

fakeroot 有一个“错误”,它正在使用 glibc 内部宏 _STAT_VER。该宏已在 glibc-2.33 中删除。 Ubuntu 21.04(多毛)正在使用 glibc-2.33。修复此问题的补丁包含在维护的 Buildroot 分支中。更新到受支持的 Buildroot 版本以解决此问题(或将您的构建环境降级到 2020 年的 Ubuntu 版本)。