embedded-linux - 如何在构建时通过 Yocto 添加用户?

标签 embedded-linux yocto

我正在开发一个带有 i.MX6 DL、Yocto Pyro 和内核 4.14.16 的定制板,并试图弄清楚如何添加新用户。我已经尝试过这里提供的建议:How to add an user and re set the root user in yocto?无济于事。我还尝试按原样运行演示 useradd-example.bb 配方(位于配方骨架层),这也不起作用。

它可以编译并且我可以构建一个镜像,但是当我尝试以任何新用户的身份登录时,我的登录信息不正确。如果我以 root 身份登录,我在/home/目录中看不到任何文件夹(我已将根主文件夹移动到/root)。我猜有什么东西不见了。

这是我正在使用的食谱:

SUMMARY = "Add the user accounts that the production printer will need."
LICENSE = "CLOSED"

#inherit extrausers
#
#EXTRA_USERS_PARAMS = "\
#    useradd -P Z2tQc0Ewto0c. mi_printer; \
#    usermod -P Z2tQc0Ewto0c. root;"


#SUMMARY = "Example recipe for using inherit useradd"
#DESCRIPTION = "This recipe serves as an example for using features from useradd.bbclass"
#SECTION = "examples"
#PR = "r1"
#LICENSE = "MIT"
#LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"

SRC_URI = "file://file1 \
           file://file2 \
           file://file3 \
           file://file4"

S = "${WORKDIR}"

PACKAGES =+ "${PN}-user3"

#EXCLUDE_FROM_WORLD = "1"

inherit useradd

# You must set USERADD_PACKAGES when you inherit useradd. This
# lists which output packages will include the user/group
# creation code.
USERADD_PACKAGES = "${PN} ${PN}-user3"

# You must also set USERADD_PARAM and/or GROUPADD_PARAM when
# you inherit useradd.

# USERADD_PARAM specifies command line options to pass to the
# useradd command. Multiple users can be created by separating
# the commands with a semicolon. Here we'll create two users,
# user1 and user2:
USERADD_PARAM_${PN} = "-u 1200 -d /home/user1 -r -s /bin/bash user1; -u 1201 -d /home/user2 -r -s /bin/bash user2"

# user3 will be managed in the useradd-example-user3 pacakge:
# As an example, we use the -P option to set clear text password for user3
USERADD_PARAM_${PN}-user3 = "-u 1202 -d /home/user3 -r -s /bin/bash -P 'user3' user3"

# GROUPADD_PARAM works the same way, which you set to the options
# you'd normally pass to the groupadd command. This will create
# groups group1 and group2:
GROUPADD_PARAM_${PN} = "-g 880 group1; -g 890 group2"

# Likewise, we'll manage group3 in the useradd-example-user3 package:
GROUPADD_PARAM_${PN}-user3 = "-g 900 group3"

do_install () {
    install -d -m 755 ${D}${datadir}/user1
    install -d -m 755 ${D}${datadir}/user2
    install -d -m 755 ${D}${datadir}/user3

    install -p -m 644 file1 ${D}${datadir}/user1/
    install -p -m 644 file2 ${D}${datadir}/user1/

    install -p -m 644 file2 ${D}${datadir}/user2/
    install -p -m 644 file3 ${D}${datadir}/user2/

    install -p -m 644 file3 ${D}${datadir}/user3/
    install -p -m 644 file4 ${D}${datadir}/user3/

    # The new users and groups are created before the do_install
    # step, so you are now free to make use of them:
    chown -R user1 ${D}${datadir}/user1
    chown -R user2 ${D}${datadir}/user2
    chown -R user3 ${D}${datadir}/user3

    chgrp -R group1 ${D}${datadir}/user1
    chgrp -R group2 ${D}${datadir}/user2
    chgrp -R group3 ${D}${datadir}/user3
}

FILES_${PN} = "${datadir}/user1/* ${datadir}/user2/*"
FILES_${PN}-user3 = "${datadir}/user3/*"

# Prevents do_package failures with:
# debugsources.list: No such file or directory:
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"

短文使用 extrausers 注释掉了简介一开始是我尝试过的,我在网上的其他地方看到的。理想情况下,我想添加一个名为打印机的用户,但只要我能做一些工作,我可能就可以完成剩下的工作。

更新:最终配方如下:
SUMMARY = "Add the user accounts that the production printer will need."
LICENSE = "CLOSED"

SRC_URI = "file://file1 \
           file://file2"

S = "${WORKDIR}"

inherit useradd

USERADD_PACKAGES = "${PN}"
USERADD_PARAM_${PN} = "-u 1200 -d /home/user1 -m -s /bin/sh -p Z2tQc0Ewto0c. mi-printer"

GROUPADD_PARAM_${PN} = "-g 880 group1"

do_install () {
    install -d -m 755 ${D}${datadir}/mi-printer

    install -p -m 644 file1 ${D}${datadir}/mi-printer/
    install -p -m 644 file2 ${D}${datadir}/mi-printer/

    # The new users and groups are created before the do_install
    # step, so you are now free to make use of them:
    chown -R mi-printer ${D}${datadir}/mi-printer

    chgrp -R group1 ${D}${datadir}/mi-printer
}

FILES_${PN} = "${datadir}/mi-printer/*"

# Prevents do_package failures with:
# debugsources.list: No such file or directory:
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"

密码哈希是通过运行 openssl passwd password 获得的

最佳答案

你的问题似乎由两部分组成:

  • 如何添加用户
    useradd你的例子中的一部分已经这样做了;查看/etc/passwd文件,你会发现 user1
  • 如何设置密码

    您必须使用 -p 指定密码选项并确保已提供登录外壳(例如不是 /bin/false ):
  • USERADD_PARAM_${PN} = "-s /bin/bash -p '$1$HzRkQcjT$/jV0VB4GJd1b3DTXfCYNo.' user1" 
    

    但在大多数情况下,您不需要第 2 步,因为嵌入式系统上通常只有服务用户而没有普通用户。

    关于embedded-linux - 如何在构建时通过 Yocto 添加用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229706/

    相关文章:

    Yocto(英特尔物联网镜像),安装包

    c - ncurses 大多数可移植 key 使用

    embedded-linux - 如何在socketcan中检查总线状态

    linux - 如何使用QEMU学习ARM Linux内核开发?

    linux-kernel - Yocto 设备树覆盖

    c++ - 编译 Yocto 项目

    ubuntu - YOCTO:启动 menuconfig 打开一个空终端

    linux - 如何停止/重启USB设备(Linux嵌入式系统)

    embedded-linux - BitBake 中的任务 do_patch() 期间失败

    yocto - do_rootfs 在 yocto 构建上失败