0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

添加社区软件包proftpd教程

瑞萨嵌入式小百科 来源:瑞萨MCU小百科 2025-03-12 14:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

14.7.3添加社区软件包proftpd

通常我们的应用还需要实现开机自启动,这些也可以在配方中实现。下面以一个稍微复杂一点的FTP服务应用为例说明如何使用Yocto构建包含特定应用的生产镜像,这里的FTP服务程序采用的是开源的Proftpd,各个版本源码位于ftp://ftp.proftpd.org/distrib/source/。

本节重点描述如何移植FTP服务到目标机器中的方法。通过搜索当前源代码仓库发现Yocto项目中已经存在proftpd的配方,只是没有添加的系统镜像中。下面详细描述具体的移植过程。

01查找Yocto的proftpd配方

bitbake -s | grep proftpd

注:这里可以看到Yocto项目中已经存在proftpd配方,版本为1.3.6-r0。

39c45ac6-fd65-11ef-9310-92fbcf53809c.png

02单独编译proftpd

左右滑动查看完整内容

PC:~/renesas/yocto/build-remi-1g$ bitbake proftpd

39e2f486-fd65-11ef-9310-92fbcf53809c.png

03打包proftpd到文件系统

在conf/local.conf中增加一行语句:

左右滑动查看完整内容

IMAGE_INSTALL_append = " proftpd"

3a095e14-fd65-11ef-9310-92fbcf53809c.png

04重新构建镜像

左右滑动查看完整内容

PC:~/renesas/yocto/build-remi-1g$ bitbake myir-image-full

3a23c0d8-fd65-11ef-9310-92fbcf53809c.png

05烧录新镜像

系统构建完成之后,需重新烧录镜像并查看proftpd服务是否运行:

左右滑动查看完整内容

root@myir-remi-1g:~# ps -axu | grep proftpd
root 501 0.0 0.0 2780 624 ttySC0 S+ 00:39 0:00 grep proftpd

06ftp账户权限配置

这里补充说明一下FTP的账户设置。FTP客户端有三种类型登录账户,分别为匿名账户,普通账户和root账户。

匿名账户

用户名默认为ftp,不需要设置密码,用户登录后可以查看系统/var/lib/ftp目录下的内容,默认没有写权限。

由于系统默认不存在/var/lib/ftp目录,所以需要用户在目标机器上创建一个目录/var/lib/ftp。

为了尽量不修改meta-openembbed,我们可以通过为proftpd recipes添加Append文件“proftpd_1%.bbappend”来实现/var/lib/ftp目录的创建。

首先需要在meta-myir-remi/recipes-common/recipes-devtools/目录下新建一个proftpd文件夹,之后进入文件夹,新建一个proftpd_1%.bbappend文件。加入下面这段task安装任务,保存退出至构建目录。然后重复之前章节添加应用的步骤,重新构建镜像文件进行测试。

左右滑动查看完整内容

do_install_append() {
install -m 755 -d ${D}/var/lib/${FTPUSER}
chown ftp:ftp ${D}/var/lib/${FTPUSER}
}

3af2a83a-fd65-11ef-9310-92fbcf53809c.png

普通账户

在目标机器上使用useradd和passwd命令可以创建普通用户,并设置用户密码之后,客户端也可以使用该普通账户登录到该用户的HOME目录。

如果需要在编译镜像时包含普通用户,可以参照以下链接添加普通用户,然后重新构建镜像文件,具体方法这里不再描述。(您可复制下方链接至浏览器,或扫描二维码进行查看)

添加普通用户

https://docs.yoctoproject.org/3.1.1/mega-manual/mega-manual.html#ref-classes-useradd

root账户

如果需要开放root账户登录FTP服务器,需要先修改 /etc/proftpd.conf文件,在文件中增加一行配置 "RootLogin on"。与此同时,也需要为root账户设置密码,重启proftpd服务之后,客户端也可以使用root账户登录到目标机器上。

左右滑动查看完整内容

root@myir-remi-1g:/# systemctl restart proftpd

注意:修改/etc/proftpd.conf使能root账户登录仅用于测试目的,关于/etc/proftpd.conf的更多配置,参见下方链接。(您可复制下方链接至浏览器,或扫描二维码进行查看)

关于/etc/proftpd.conf的更多配置

http://www.proftpd.org/docs/example-conf.html

07实现proftpd自启动

本节将以proftpd为例从recipe源码的层面介绍如何添加应用程序recipe并实现程序的开机自启动。

proftpd位于源代码仓库layers/meta-openembedded/meta-networking/recipesdaemons/proftpd,目录结构如下。

3b795182-fd65-11ef-9310-92fbcf53809c.png

左右滑动查看完整内容

ubuntu@ubuntu2004:~/renesas/yocto/myir-renesas-yocto$:~/renesas/yocto/layers/meta-op
enembedded/meta-networking/recipes-daemons/proftpd$ 
.
├── files
│ ├── basic.conf.patch
│ ├── build_fixup.patch
│ ├── close-RequireValidShell-check.patch
│ ├── contrib.patch
│ ├── default
│ ├── proftpd-basic.init
│ └── proftpd.service
└── proftpd_1.3.6.bb
1 directory, 8 files

➢proftpd_1.3.6.bb为构建proftpd服务的配方

➢proftpd.service为开机自启动服务

➢proftpd-basic.init为proftpd的启动脚本

proftpd_1.3.6.bb中指定了获取proftpd服务程序的源代码路径以及针对该版本源码的一些补丁文件,如下:

左右滑动查看完整内容

SRC_URI = "ftp://ftp.proftpd.org/distrib/source/${BPN}-${PV}.tar.gz 
file://basic.conf.patch 
file://proftpd-basic.init 
file://default 
file://close-RequireValidShell-check.patch 
file://contrib.patch 
file://build_fixup.patch 
file://proftpd.service 

recipes配方中还指定了proftpd的Task配置任务(do_configure)和安装过程(do_install):

左右滑动查看完整内容

# proftpd uses libltdl which currently makes configuring using
# autotools.bbclass a pain...
do_configure () {
 install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
 install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
 oe_runconf
 cp ${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool ${S}/libtool
}


FTPUSER = "ftp"
FTPGROUP = "ftp"


do_install () {
 oe_runmake DESTDIR=${D} install
 rmdir ${D}${libdir}/proftpd ${D}${datadir}/locale
 [ -d ${D}${libexecdir} ] && rmdir ${D}${libexecdir}
 sed -i '/ *User[ 	]*/s/ftp/${FTPUSER}/' ${D}${sysconfdir}/proftpd.conf
 sed -i '/ *Group[ 	]*/s/ftp/${FTPGROUP}/' ${D}${sysconfdir}/proftpd.conf
 install -d ${D}${sysconfdir}/init.d
 install -m 0755 ${WORKDIR}/proftpd-basic.init ${D}${sysconfdir}/init.d/proftpd
 sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/proftpd
 sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/proftpd
 sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/proftpd
 sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' 
${D}${sysconfdir}/init.d/proftpd


 install -d ${D}${sysconfdir}/default
install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/proftpd
……
}

这两个函数对应BitBake构建过程的config和install任务。

关于任务的更多信息,参见下方链接。

关于任务的更多信息

https://www.yoctoproject.org/docs/3.1.1/mega-manual/mega-manual.html#ref-tasks

当前目标机器采用systemd作为初始化管理子系统systemd是一个Linux系统基础组件的集合,提供了一个系统和服务管理器,运行为PID 1并负责启动其它程序。Yocto项目下使用systemd的配置参见下方链接。(您可复制下方链接至浏览器,或扫描二维码进行查看)

Yocto项目下使用systemd的配置

https://docs.yoctoproject.org/3.1.1/mega-manual/mega-manual.html#selecting-an-initialization-managerproftpd_1.3.6.bb

通过继承systemd.class(具体内容可以查看poky/meta/classes/systemd.bbclass)默认使能了 SYSTEMD_AUTO_ENABLE变量并实现开机自启动,用户自己编写的recipes也可以通过设置变量SYSTEMD_AUTO_ENABLE实现开机自启动,示例如下:

左右滑动查看完整内容

SYSTEMD_AUTO_ENABLE_${PN} = "enable"

其中Proftpd服务的开机自启动服务文件proftpd.service内容如下:

左右滑动查看完整内容

ubuntu@ubuntu2004:~/renesas/yocto/layers/meta-openembedded/meta-networking/recipes-d
aemons/proftpd/files$ cat proftpd.service
[Unit]
Description=proftpd Daemon
After=network.target
[Service]
Type=forking
ExecStart=@SBINDIR@/proftpd -c @SYSCONFDIR@/proftpd.conf
StandardError=syslog
[Install]
WantedBy=default.target

➢After:表示此服务在network启动后再启动。

➢Type:表示启动的方式为forking。

➢ExecStart:表示需要启动的程序,及对应的参数。

如需了解更多关于systemd的信息请查看此网站。

未完待续

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移植
    +关注

    关注

    1

    文章

    407

    浏览量

    29219
  • FTP
    FTP
    +关注

    关注

    0

    文章

    118

    浏览量

    42030
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84767
  • 软件包
    +关注

    关注

    0

    文章

    113

    浏览量

    12089
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Openwrt开发指南 第12章 添加OpenWrt软件包

    OpenWrt是一个比较完善的嵌入式Linux开发平台,在无线路由器应用上已有4000多个软件包。我们可以在其基础上增加软件包,以扩大其应用范围。在OpenWrt中增加软件包极其方便,按照
    的头像 发表于 06-29 09:09 1.2w次阅读

    RT-Thread Studio添加软件包报错怎么解决?

    RT-Thread Studio添加软件包报错ImportError: No module named psutil
    发表于 03-01 08:41

    ENV添加micropython软件包出现异常的原因?

    的python27.dll和platformenv_releasedenvtoolsPython27换一下。结果还是错误?。 没办法了,就行下一步添加micropython软件包。按照教程走出现了这个东西我直接
    发表于 09-12 08:06

    RT-thread studio添加新的软件包和新的文件出错怎么解决?

    从模板工程中,添加新的软件包时,点击同步scons配置至项目出现报错 另外,添加新创文件夹后,点击添加至构建,并没有效果 是否是需要新建Sconscript文件
    发表于 09-19 06:02

    如何使用menuconfig添加配置micro-ros软件包

    请问有没有最新的rtthread移植micro-ros移植使用教程,使用menuconfig添加配置micro-ros软件包
    发表于 09-25 06:37

    RTThread settings添加软件包界面不显示求解

    目前使用出现了两个问题1、客户端莫名其妙的卡死,无响应,必须任务管理器强制停止才行。2、rtthread settings 添加软件包界面不显示,必须按shift+s才会出现,去掉某些软件包但是
    发表于 08-25 14:50

    RT-THREAD studio 2.0.0不能添加软件包能帮忙看看是什么问题吗

    1.电脑联想小新15,intel平台2.windows10专业版64位系统3.问题描述:RT-THREAD studio 2.0.0不能添加软件包4.用两台联想笔记本电脑对比过,一台能够正常添加
    发表于 11-30 10:15

    在rt-thread studio里添加软件包失败怎么解决?

    在rt-thread studio里使用软件包功能,添加软件包之后,点击保存,在项目栏测没有软件包添加
    发表于 02-13 14:14

    RT-Thread软件包定义和使用

    RT-Thread软件包是运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件 。RT-Thread 同时提供了开放的软件包平台,为开发者提供了众多可重用软件包
    的头像 发表于 05-21 11:29 1.2w次阅读
    RT-Thread<b class='flag-5'>软件包</b>定义和使用

    RT-Thread社区上有哪些优秀的软件包

    SX12XX 软件包是基于 semtech 官网 Firmware Drivers V2.1.0代码库的移植实现,目前只支持 SX1278 LoRa设备。该软件包在原代码库功能的基础上,对接 RT-Thread SPI 设备驱动框架,实现参数的配置和数据的读取。
    的头像 发表于 04-03 15:35 8714次阅读

    什么是Linux软件包,如何管理它们

    现代类 Unix 操作系统都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件。而软件通常以的形式存储在仓库中,对软件包的使用
    的头像 发表于 02-06 14:59 2172次阅读

    工控软件包开源分享

    电子发烧友网站提供《工控软件包开源分享.zip》资料免费下载
    发表于 06-25 10:22 4次下载
    工控<b class='flag-5'>软件包</b>开源分享

    RT-Thread在线软件包改为本地软件包的方法

    RT-Thread 的软件包,使用时需要手动通过 ENV 工具 更新到 本地的 packages 目录,并且 packages 目录默认不参与 Git 工程管理,软件包多了,偶尔需要更改软件包本身的一些代码,这就造成了
    的头像 发表于 08-11 15:02 2137次阅读
    RT-Thread在线<b class='flag-5'>软件包</b>改为本地<b class='flag-5'>软件包</b>的方法

    使用pkgs-test工具对软件包进行qemu测试

    pkgs-test是一个可以在github actions上面检查软件包编译情况的工具。除了检查软件包的编译情况pkgs-test目前还添加了qemu运行测试。
    的头像 发表于 09-25 16:19 1349次阅读

    RT-Thread中mymqtt软件包的使用方法

    在上一篇文章 RT-Thread中Lan8720和lwip协议栈的使用的工程基础上添加mymqtt软件包。 使能mqtt example和mqtt test,保存,等待下载更新软件包
    的头像 发表于 10-13 10:44 1842次阅读
    RT-Thread中mymqtt<b class='flag-5'>软件包</b>的使用方法