移植useradd到嵌入式Linux设备

2024-01-07 20:08:32

??????? (友情提示:前面一大段描述的是在老版本Ubuntu14.4交叉编译新版本shadow,过程曲折,没有结果,分割线后面一段是重新换了一个较老版本shadow-4.4,过程丝滑,结果喜人。诸君如耐心有限可直接划拉至分割线后部分内容。对于其他程序的移植也是同理,合适的才是最好的)

????????一般嵌入式Linux设备上只有默认的一个root用户(其他的比如ftp什么的用户暂时不管)及其一个对应的密码(比如通过SSH或串口登录进去的时候会被要求输入用户名及密码),如果我们根据某种需求需要新增一个用户,可以通过useradd命令进行添加,桌面Linux系统一般自带,但嵌入式设备可能会被裁剪掉,此时就需要通过移植的方式添加这个命令。

??????? GitHub - shadow-maint/shadow: Upstream shadow tree下载shadow工程源码,将压缩包拷贝进Linux系统中(如果用的虚拟机,千万不能放到与windows的共享路径下),解压后如下内容,

我们不再通过前面移植wolfssl时做的那样通过aclocal系列操作生成configure(试过,问题很多,也许是Ubuntu里面的一些环境不一样导致的,没精力细究,不想踩坑的直接略过),而是通过执行

./autogen.sh

生成configure文件,这里面可能会提示gettext版本过低相关的错误信息(我的Ubuntu是14.04,比较久远了,gettext版本为0.18.3),切换过几个源重新安装gettext,都是提示已经最新,我们采用手动编译源码安装的方式升级到0.19.4(Index of /gnu/gettext),解压->./configure->make->make install。重新查看gettext版本(gettext --v),提示已经是0.19.4了。

执行autogen.sh后的文件夹情况如下:

多了m4文件夹,多了aclocal.m4、config.rpath、configure几个文件。

接下来执行命令

./configure

提示如下错误

解决无果后重新依次执行如下命令

aclocal -I /usr/share/aclocal-1.14 -I /usr/share/libtool/m4 --install
autoconf
autoheader
automake --add-missing

因为通过autogen.sh的方式生成了首次通过aclocal运行提示缺少的相应文件,所以此次在执行前三行命令后都很正常,但是在执行automake时,提示如下错误:

configure.ac:34: error: required file './ltmain.sh' not found

解决方式如下:

//查看版本
libtoolize --version
//解决方法
libtoolize --automake --copy --debug -- force

当前路径下生成了ltmain.sh文件,咱接着configure

./configure --prefix=$PWD/../arm-gcc/ --host=arm-linux CC=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-gcc AR=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-ar STRIP=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-strip

提示(。。。。。)

未完,待续........

---------------------------------------------------------------------------------------------------------------------------------

A few weeks later...

??????? 本来前人已经在嵌入式系统里面移植了adduser命令,同样也能实现添加用户的任务,前段时间打算就不再移植useradd了,但又有一个问题出现,如何通过程序实现添加用户后再添加密码,adduser及passwd都可以达到目的,只是需要等待系统的输入密码提示后才能手动输入,而不能通过程序直接指定(或许也有办法,暂时不清楚),只能再次继续前次未竟之事了。

??????? 在各版本shadow下载网站上找到一款2016年提交的shadow-4.4.tar.xz,解压到虚拟机非共享路径下,

里面已有现成的configure文件,

命令窗口进入到该路径,执行如下命令,进行配置(安装路径、编译工具链),生成Makefile文件,

./configure --prefix=$PWD/../arm-gcc/ --host=arm-linux CC=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-gcc AR=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-ar STRIP=/root/DCJ_hf/buildroot/output/host/usr/bin/arm-linux-gnueabihf-strip

分别执行make和make install后,在指定的安装目录下生成了目标文件,

拷贝到嵌入式设备中,查看帮助,显示如下,

至此结束。

文章来源:https://blog.csdn.net/DIANZI520SUA/article/details/134970373
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。