Yocto Dunfell自定义配方设置root密码及创建用户失败求助
问题分析与修复方案
你的配方存在两个核心问题:一是extrausers类的作用时机不对,二是用户配置的命令细节有疏漏,导致root密码和test用户未生效。以下是具体修复方案:
核心问题说明
extrausers类是在镜像构建的rootfs阶段执行用户操作,你的配方是普通package配方,单独继承extrausers不会自动触发用户配置逻辑,除非确保该package被纳入镜像构建流程。debug-tweaks特性会强制root无密码登录,若未彻底移除会覆盖你的密码设置;同时useradd命令缺少必要参数,导致用户创建后无法正常使用。
方案1:将用户配置迁移到镜像配方(推荐)
把用户设置逻辑放到自定义镜像配方(如my-custom-image.bb)中,这是Yocto中管理用户的标准方式:
# 移除强制root无密码的调试特性 IMAGE_FEATURES_remove += "debug-tweaks" # 继承用户管理类 inherit extrausers # 配置用户参数 EXTRA_USERS_PARAMS = " \ # 设置root明文密码,系统会自动加密 usermod -P testpasswd root; \ # 创建test用户,-m生成家目录,-s指定登录shell useradd -m -s /bin/sh -p '' test; \ "
方案2:修改现有package配方使其生效
若必须在package配方中实现,需补充依赖并调整配置逻辑:
SUMMARY = "Test" LICENSE = "CLOSED" # 全局移除debug-tweaks特性 IMAGE_FEATURES_remove += "debug-tweaks" inherit extrausers # 添加用户操作所需的原生工具依赖 DEPENDS += "shadow-native" # 追加用户配置,避免覆盖其他组件的用户设置 EXTRA_USERS_PARAMS_append = " \ usermod -P testpasswd root; \ useradd -m -s /bin/sh -p '' test; \ " FILES_${PN} = "/test/tmp" do_install () { install -d ${D}/test/tmp }
注意:需在镜像配方中添加
IMAGE_INSTALL_append = " 你的package名称 ",确保该package被纳入镜像。
验证与额外调整
- 清理构建缓存后重新编译:
bitbake 你的镜像名 -c cleanall && bitbake 你的镜像名 - 若明文密码仍不生效,可改用加密密码:
- 执行
openssl passwd -1 testpasswd生成加密后的密码串(如$1$abc123...) - 将配方中的密码命令替换为:
usermod -p "$1$abc123..." root;
- 执行
内容的提问来源于stack exchange,提问作者Chip Brommer
相关产品推荐
相关产品推荐

