Yocto Kirkstone构建core-image-base报错:无法找到newuser匹配项
解决Yocto Kirkstone中newuser包无法找到的问题
核心问题分析
错误No match for argument: newuser说明Yocto的rootfs构建阶段(do_rootfs)在本地repo中找不到newuser包,大概率是包未成功构建、配方路径/配置有误,或者配方本身存在语法/逻辑问题。
分步解决
1. 先单独构建newuser包,确认是否能成功
先跳过镜像构建,单独构建newuser包,查看是否有构建错误:
bitbake newuser
如果构建失败,查看终端输出的错误信息;如果成功,再继续下一步。
2. 检查配方路径与层配置
- 确认
bblayers.conf中正确添加了meta-mylayer:
打开build/conf/bblayers.conf,确保存在类似行:
(因为BBLAYERS += "${TOPDIR}/../meta-mylayer"meta-mylayer与poky同级,TOPDIR是poky/build,所以../meta-mylayer路径正确) - 确认
local.conf中的IMAGE_INSTALL配置:
检查build/conf/local.conf里的追加语句:
注意IMAGE_INSTALL:append = " newuser"newuser前的空格必须存在,用于分隔包名。
3. 修复配方中的语法/逻辑问题
你的newuser_1.0.bb存在三处关键问题:
(1) 路径缺失斜杠
do_install中的路径少了根目录斜杠,导致生成的路径错误:
修改前:
install -d -m 0755 ${D}home/user1/.ssh
修改后:
install -d -m 0755 ${D}/home/user1/.ssh
(2) 空目录无法被打包
Yocto不会将空目录打包进rpm,所以需要在.ssh目录下添加至少一个文件(比如空的authorized_keys):
更新do_install:
do_install(){ install -d -m 0755 ${D}/home/user1/.ssh touch ${D}/home/user1/.ssh/authorized_keys chown -R user1:user1 ${D}/home/user1 }
(3) 密码参数需要哈希值
USERADD_PARAM中的-p参数需要加密后的密码哈希,而非明文。可以用openssl生成:
openssl passwd -1 "your_password_here"
将生成的哈希值替换原有的HKygs03Q6Cwsk,例如:
USERADD_PARAM:${PN} = "-u 1000 -d /home/user1 -m -s /bin/sh -p '$1$xyz...' user1"
4. 清理缓存并重新构建
清理newuser的构建缓存,避免旧的错误文件干扰:
bitbake -c cleanall newuser
重新构建newuser:
bitbake newuser
确认包生成后,再构建镜像:
bitbake core-image-base
5. 验证包是否存在
构建成功后,检查tmp/deploy/rpm/qemux86_64/目录下是否存在newuser-1.0-r0.qemux86_64.rpm,如果存在说明包已正确生成。
内容的提问来源于stack exchange,提问作者Rechem MEG
相关产品推荐
相关产品推荐

