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。
02單獨編譯proftpd
左右滑動查看完整內容
PC:~/renesas/yocto/build-remi-1g$ bitbake proftpd
03打包proftpd到文件系統
在conf/local.conf中增加一行語句:
左右滑動查看完整內容
IMAGE_INSTALL_append = " proftpd"
04重新構建鏡像
左右滑動查看完整內容
PC:~/renesas/yocto/build-remi-1g$ bitbake myir-image-full
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} }
普通賬戶
在目標機器上使用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,目錄結構如下。
左右滑動查看完整內容
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文章
394瀏覽量
28575 -
FTP
+關注
關注
0文章
115瀏覽量
41192 -
程序
+關注
關注
117文章
3820瀏覽量
82395 -
軟件包
+關注
關注
0文章
108瀏覽量
11878
原文標題:添加社區軟件包proftpd——RZ MPU工業控制教程連載(63)
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Openwrt開發指南 第12章 添加OpenWrt軟件包
RT-Thread Studio添加軟件包報錯怎么解決?
軟件包怎么使用
RTThread settings添加軟件包界面不顯示求解
RT-THREAD studio 2.0.0不能添加軟件包能幫忙看看是什么問題嗎
RT-Thread 軟件包介紹
RT-Thread軟件包定義和使用

RT-Thread社區上有哪些優秀的軟件包?
什么是Linux軟件包,如何管理它們
RT-Thread在線軟件包改為本地軟件包的方法

使用pkgs-test工具對軟件包進行qemu測試
RT-Thread中mymqtt軟件包的使用方法

評論