ERROR: useradd: useradd command did not succeed in Yocto build

ERROR: useradd: useradd command did not succeed in Yocto build

我正在尝试创建一个用户并将其添加到拨出组。

我做了一个继承 useradd 并添加我的系统需要的用户的食谱。

这是我食谱的相关部分:

inherit useradd                                                                                     

USERADD_PACKAGES = "${PN}"                                                                          

USERADD_PARAM_${PN} = "-d /home/myuser -r -m -s /bin/bash myuser -g 
mygroup -G dialout;"                                                                               

GROUPADD_PARAM_${PN} = "-g 870 mygroup;"

构建在出现错误之前进入 rootfs_build 步骤。日志显示:

NOTE: useradd: Performing useradd with [--root 
/mnt/hdd1/yocto/build/tmp/work/intel_corei7_64-poky- 
linux/core-image-sato/1.0-r0/rootfs -d /home/myuser -r -m -s /bin/bash 
myuser -g mygroup -G dialout]                                                                                         
ERROR: useradd: useradd command did not succeed

没有 -G dialout 选项它可以完美运行。 关于如何解决这个问题的任何想法? 我也尝试过继承 extrausers 并做 usermod -aG dialout myuser.

我怀疑这是因为 dialout 组不存在,至少在添加 myuser 时不存在。

如果你跳过-G dialout部分构建镜像,你在/etc/group中有一个叫dialout的组吗?如果没有,您可以像创建 mygroup 一样创建 dialout 组。如果它已经存在,我怀疑您需要确保在使用 RDEPENDS_${PN} += "<package that provides dialout group>.

之类的包之前安装添加 dialout 组的包

最后解决的是将每个用户添加到自己的配方中。我不知道为什么将它们放在同一个食谱中不起作用,因为这是基于元骨架中的 this 示例。

因此,我现在拥有 user1.bb、user2.bb 等,而不是拥有一个 users.bb 和多个用户,而且它工作得非常棒。

我遇到了同样的问题。解决方案是在附加 ${PN} 时使用 : 而不是 _

inherit useradd                                                                                     

USERADD_PACKAGES = "${PN}"  
                                                                        
USERADD_PARAM:${PN} = "-d /home/myuser -r -m -s /bin/bash myuser -g mygroup -G dialout;"                                                                               

GROUPADD_PARAM:${PN} = "-g 870 mygroup;"

我认为这是由于新的覆盖语法所致。在其他情况下,bitbake 抱怨(我使用“honister”),例如:

do_install_append() {
    ...
}

导致此错误消息: Variable do_install_append contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake.

这可以通过使用 do_install:append() 来解决。

这里是覆盖语法的完整参考: https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-metadata.html#conditional-syntax-overrides