14.7.3添加社區(qū)軟件包proftpd
通常我們的應(yīng)用還需要實(shí)現(xiàn)開機(jī)自啟動(dòng),這些也可以在配方中實(shí)現(xiàn)。下面以一個(gè)稍微復(fù)雜一點(diǎn)的FTP服務(wù)應(yīng)用為例說明如何使用Yocto構(gòu)建包含特定應(yīng)用的生產(chǎn)鏡像,這里的FTP服務(wù)程序采用的是開源的Proftpd,各個(gè)版本源碼位于ftp://ftp.proftpd.org/distrib/source/。
本節(jié)重點(diǎn)描述如何移植FTP服務(wù)到目標(biāo)機(jī)器中的方法。通過搜索當(dāng)前源代碼倉庫發(fā)現(xiàn)Yocto項(xiàng)目中已經(jīng)存在proftpd的配方,只是沒有添加的系統(tǒng)鏡像中。下面詳細(xì)描述具體的移植過程。
01查找Yocto的proftpd配方
bitbake -s | grep proftpd
注:這里可以看到Y(jié)octo項(xiàng)目中已經(jīng)存在proftpd配方,版本為1.3.6-r0。
02單獨(dú)編譯proftpd
左右滑動(dòng)查看完整內(nèi)容
PC:~/renesas/yocto/build-remi-1g$ bitbake proftpd
03打包proftpd到文件系統(tǒng)
在conf/local.conf中增加一行語句:
左右滑動(dòng)查看完整內(nèi)容
IMAGE_INSTALL_append = " proftpd"
04重新構(gòu)建鏡像
左右滑動(dòng)查看完整內(nèi)容
PC:~/renesas/yocto/build-remi-1g$ bitbake myir-image-full
05燒錄新鏡像
系統(tǒng)構(gòu)建完成之后,需重新燒錄鏡像并查看proftpd服務(wù)是否運(yùn)行:
左右滑動(dòng)查看完整內(nèi)容
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賬戶權(quán)限配置
這里補(bǔ)充說明一下FTP的賬戶設(shè)置。FTP客戶端有三種類型登錄賬戶,分別為匿名賬戶,普通賬戶和root賬戶。
匿名賬戶
用戶名默認(rèn)為ftp,不需要設(shè)置密碼,用戶登錄后可以查看系統(tǒng)/var/lib/ftp目錄下的內(nèi)容,默認(rèn)沒有寫權(quán)限。
由于系統(tǒng)默認(rèn)不存在/var/lib/ftp目錄,所以需要用戶在目標(biāo)機(jī)器上創(chuàng)建一個(gè)目錄/var/lib/ftp。
為了盡量不修改meta-openembbed,我們可以通過為proftpd recipes添加Append文件“proftpd_1%.bbappend”來實(shí)現(xiàn)/var/lib/ftp目錄的創(chuàng)建。
首先需要在meta-myir-remi/recipes-common/recipes-devtools/目錄下新建一個(gè)proftpd文件夾,之后進(jìn)入文件夾,新建一個(gè)proftpd_1%.bbappend文件。加入下面這段task安裝任務(wù),保存退出至構(gòu)建目錄。然后重復(fù)之前章節(jié)添加應(yīng)用的步驟,重新構(gòu)建鏡像文件進(jìn)行測試。
左右滑動(dòng)查看完整內(nèi)容
do_install_append() { install -m 755 -d ${D}/var/lib/${FTPUSER} chown ftp:ftp ${D}/var/lib/${FTPUSER} }
普通賬戶
在目標(biāo)機(jī)器上使用useradd和passwd命令可以創(chuàng)建普通用戶,并設(shè)置用戶密碼之后,客戶端也可以使用該普通賬戶登錄到該用戶的HOME目錄。
如果需要在編譯鏡像時(shí)包含普通用戶,可以參照以下鏈接添加普通用戶,然后重新構(gòu)建鏡像文件,具體方法這里不再描述。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
添加普通用戶
https://docs.yoctoproject.org/3.1.1/mega-manual/mega-manual.html#ref-classes-useradd
root賬戶
如果需要開放root賬戶登錄FTP服務(wù)器,需要先修改 /etc/proftpd.conf文件,在文件中增加一行配置 "RootLogin on"。與此同時(shí),也需要為root賬戶設(shè)置密碼,重啟proftpd服務(wù)之后,客戶端也可以使用root賬戶登錄到目標(biāo)機(jī)器上。
左右滑動(dòng)查看完整內(nèi)容
root@myir-remi-1g:/# systemctl restart proftpd
注意:修改/etc/proftpd.conf使能root賬戶登錄僅用于測試目的,關(guān)于/etc/proftpd.conf的更多配置,參見下方鏈接。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
關(guān)于/etc/proftpd.conf的更多配置
http://www.proftpd.org/docs/example-conf.html
07實(shí)現(xiàn)proftpd自啟動(dòng)
本節(jié)將以proftpd為例從recipe源碼的層面介紹如何添加應(yīng)用程序recipe并實(shí)現(xiàn)程序的開機(jī)自啟動(dòng)。
proftpd位于源代碼倉庫layers/meta-openembedded/meta-networking/recipesdaemons/proftpd,目錄結(jié)構(gòu)如下。
左右滑動(dòng)查看完整內(nèi)容
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為構(gòu)建proftpd服務(wù)的配方
?proftpd.service為開機(jī)自啟動(dòng)服務(wù)
?proftpd-basic.init為proftpd的啟動(dòng)腳本
proftpd_1.3.6.bb中指定了獲取proftpd服務(wù)程序的源代碼路徑以及針對該版本源碼的一些補(bǔ)丁文件,如下:
左右滑動(dòng)查看完整內(nèi)容
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配置任務(wù)(do_configure)和安裝過程(do_install):
左右滑動(dòng)查看完整內(nèi)容
# 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 …… }
這兩個(gè)函數(shù)對應(yīng)BitBake構(gòu)建過程的config和install任務(wù)。
關(guān)于任務(wù)的更多信息,參見下方鏈接。
關(guān)于任務(wù)的更多信息
https://www.yoctoproject.org/docs/3.1.1/mega-manual/mega-manual.html#ref-tasks
當(dāng)前目標(biāo)機(jī)器采用systemd作為初始化管理子系統(tǒng)systemd是一個(gè)Linux系統(tǒng)基礎(chǔ)組件的集合,提供了一個(gè)系統(tǒng)和服務(wù)管理器,運(yùn)行為PID 1并負(fù)責(zé)啟動(dòng)其它程序。Yocto項(xiàng)目下使用systemd的配置參見下方鏈接。(您可復(fù)制下方鏈接至瀏覽器,或掃描二維碼進(jìn)行查看)
Yocto項(xiàng)目下使用systemd的配置
https://docs.yoctoproject.org/3.1.1/mega-manual/mega-manual.html#selecting-an-initialization-managerproftpd_1.3.6.bb
通過繼承systemd.class(具體內(nèi)容可以查看poky/meta/classes/systemd.bbclass)默認(rèn)使能了 SYSTEMD_AUTO_ENABLE變量并實(shí)現(xiàn)開機(jī)自啟動(dòng),用戶自己編寫的recipes也可以通過設(shè)置變量SYSTEMD_AUTO_ENABLE實(shí)現(xiàn)開機(jī)自啟動(dòng),示例如下:
左右滑動(dòng)查看完整內(nèi)容
SYSTEMD_AUTO_ENABLE_${PN} = "enable"
其中Proftpd服務(wù)的開機(jī)自啟動(dòng)服務(wù)文件proftpd.service內(nèi)容如下:
左右滑動(dòng)查看完整內(nèi)容
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:表示此服務(wù)在network啟動(dòng)后再啟動(dòng)。
?Type:表示啟動(dòng)的方式為forking。
?ExecStart:表示需要啟動(dòng)的程序,及對應(yīng)的參數(shù)。
如需了解更多關(guān)于systemd的信息請查看此網(wǎng)站。
未完待續(xù)
-
移植
+關(guān)注
關(guān)注
1文章
392瀏覽量
28510 -
FTP
+關(guān)注
關(guān)注
0文章
112瀏覽量
41080 -
程序
+關(guān)注
關(guān)注
117文章
3817瀏覽量
82168 -
軟件包
+關(guān)注
關(guān)注
0文章
108瀏覽量
11845
原文標(biāo)題:添加社區(qū)軟件包proftpd——RZ MPU工業(yè)控制教程連載(63)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Openwrt開發(fā)指南 第12章 添加OpenWrt軟件包
RT-Thread Studio添加軟件包報(bào)錯(cuò)怎么解決?
軟件包怎么使用
RTThread settings添加軟件包界面不顯示求解
RT-THREAD studio 2.0.0不能添加軟件包能幫忙看看是什么問題嗎
在rt-thread studio里添加軟件包失敗怎么解決?
RT-Thread 軟件包介紹
RT-Thread軟件包定義和使用

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

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

評論