嵌入式FTP服务器的移植与配置:VSFTPD-2.0.6移植(目标板mini2440)
2013-07-06 03:54
871 查看
在移植之前首先在虚拟机上ping下开发板,再用开发板ping虚拟机,请保证ping通再做以下工作,其次丢包率如果很高,那就要看DM900网卡移植那篇,进行网卡移植。最终要确保丢包率为0. 不然就算你移植VSFTPD中间没有错误,最后也会出现ftp时连接不上开发板。
(1)解压vsftpd-2.0.6.tar.gz
#tar xvzf vsftpd_2.0.6.tar.gz
(2)交叉编译
需要修改的地方有两处。
第一处是Makefile的CC:
# Makefile for systems with GNU tools
CC = arm-unknown-linux-gnueabi-gcc
就是修改为你自己的交叉编译器。
在/etc/xinetd.d/vsftpd文件中,把disable=no改成YES
还有就是在/etc/vsftpd.conf文件添加listen=yes
第二处是脚本vsf_findlibs.sh。这里主要是牵扯到库libcap的问题。(网上的修改都是更改到交叉编译器的lib文件夹下,发现即使在lib文件夹下面没有,也不影响。判断,这个库是没有必要,直接把这两行注释就可以了。)
# Look for libcap (capabilities)
#locate_library /lib/libcap.so.1 && echo "/lib/libcap.so.1"; //注释掉
#locate_library /usr/lib/libcap.so && echo "-lcap"; //注释掉
改完后,执行make,如动态编译失败结果如下
则下载vsftpd中sysdeputil.c的补丁文件attachment.bin,可用wget命令;(直接编译成功的可跳过这步)
.#patch sysdeputil.c attachment.bin;(attachment.bin的源码附在文章最后,下载不到可以自己建)
再次执行 make 编译成功 结果如下:
由于本文件系统支持这个服务,所以以下蓝色部分可以省略; 查看相关信息;
/*(3)查看依赖及其相应的配置文件
首先,因为是动态链接,查看相应的动态库
把这些库从下拷贝到rootfs的lib下。*/ 库的位置在你的交叉编译工具链目录下用find 命令可找到
第一步工作完成了。
(拷贝库的时候用 cp -d -L 以保留库的链接)
第二步工作,把vsftpd拷贝到rootfs的/usr/sbin或者是/usr/local/sbin下面。
第三步工作就是配置文件vsftpd.conf。
直接修改vsftpd-2.0.6中的vsftpd.conf,修改后拷贝到rootfs的 /etc/vsftpd.conf。
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=077
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
anon_root=/var/ftp
listen=YES
第四步工作就是牵扯到用户问题了。首先有一个本地用户,这样可以通过本地用户进行访问;其次要匿名用户,这就需要ftp用户;还需要有一个nobody用户。
直接拷贝host的/etc/passwd,/etc/group,/etc/shadow。(若在制作yaffs文件系统那步已经拷过,则省去此步骤)。
将 group中内容替换为如下:
root::0:root:
ftp:x:50:
nobody:x:99:
users:x:100:
500:x:500:boa:
501:x:501:armlinux:
这样用户问题就解决了。
第五步工作就是相应的目录需要创建。
支持匿名用户需要创建/var/ftp,在ftp下建立了pub上传目录并设置pub权限为可修改
chmod 777 /ftp/pub。还需要建立/usr/share/empty目录,否则在访问时会出现:
500 OOPS: vsftpd: not found: directory given in ''''secure_chroot_dir'''':/usr/share/empty
这个是与配置选项相关的。
/usr/sbin/vsftpd ---- VSFTPD的主程序(必需)
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd.conf ---- 主配置文件(必需)
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/etc/userconf ------ 指定用户个人配置文件所在的目录
/var/ftp ---- 匿名用户主目录
/var/ftp/pub---- 匿名用户的上传目录
/var/log/vsftpd.log ------- 日志文件
除vsftpd、vsftpd.conf两个文件外,其他文件的需要具体看主配置文件的配置
建立了绿色部分。然后制作映象,烧写到目标板上,
通过standalone模式启动。
先要修改目标板的IP地址
Ifconfig eth0 10.10.70.12 netmask 255.255.255.0
然后起用服务:
[root@xiao sbin]#vsftpd &
在host上测试(hont的IP要和目标板IP在同一网段中):IE中输入ftp://10.10.70.12/ 启动,查看是否运行;
出显FTP服务器共享文件ftp;
FTP服务器的移植成功;
宿主机登陆开发板时
匿名用户登陆用户名 anonymous
密码按回车即可
用ftp向开发板传文件时先cd .. 然后cd pub
put xxx(xxx为宿主机当前目录下你要传给开发板的文件的文件名)
attachment.bin的代码如下
diff -pNur vsftpd-2.0.5.orig/sysdeputil.c vsftpd-2.0.5/sysdeputil.c
--- vsftpd-2.0.5.orig/sysdeputil.c 2006-07-02 15:14:10.000000000 -0700
+++ vsftpd-2.0.5/sysdeputil.c 2006-10-19 23:41:58.000000000 -0700
@@ -155,14 +155,15 @@
#include <sys/capability.h>
#if defined(VSF_SYSDEP_HAVE_CAPABILITIES) && !defined(VSF_SYSDEP_HAVE_LIBCAP)
-#include <linux/unistd.h>
#include <linux/capability.h>
#include <errno.h>
-#include <syscall.h>
-_syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
-/* Gross HACK to avoid warnings - linux headers overlap glibc headers */
-#undef __NFDBITS
-#undef __FDMASK
+#include <sys/syscall.h>
+#include <unistd.h>
+int capset(cap_user_header_t header,
+ cap_user_data_t data)
+{
+ return syscall(SYS_capset, header, data);
+}
#endif /* VSF_SYSDEP_HAVE_CAPABILITIES */
#if defined(VSF_SYSDEP_HAVE_LINUX_SENDFILE) || \
(1)解压vsftpd-2.0.6.tar.gz
#tar xvzf vsftpd_2.0.6.tar.gz
(2)交叉编译
需要修改的地方有两处。
第一处是Makefile的CC:
# Makefile for systems with GNU tools
CC = arm-unknown-linux-gnueabi-gcc
就是修改为你自己的交叉编译器。
在/etc/xinetd.d/vsftpd文件中,把disable=no改成YES
还有就是在/etc/vsftpd.conf文件添加listen=yes
第二处是脚本vsf_findlibs.sh。这里主要是牵扯到库libcap的问题。(网上的修改都是更改到交叉编译器的lib文件夹下,发现即使在lib文件夹下面没有,也不影响。判断,这个库是没有必要,直接把这两行注释就可以了。)
# Look for libcap (capabilities)
#locate_library /lib/libcap.so.1 && echo "/lib/libcap.so.1"; //注释掉
#locate_library /usr/lib/libcap.so && echo "-lcap"; //注释掉
改完后,执行make,如动态编译失败结果如下
则下载vsftpd中sysdeputil.c的补丁文件attachment.bin,可用wget命令;(直接编译成功的可跳过这步)
.#patch sysdeputil.c attachment.bin;(attachment.bin的源码附在文章最后,下载不到可以自己建)
再次执行 make 编译成功 结果如下:
由于本文件系统支持这个服务,所以以下蓝色部分可以省略; 查看相关信息;
/*(3)查看依赖及其相应的配置文件
首先,因为是动态链接,查看相应的动态库
把这些库从下拷贝到rootfs的lib下。*/ 库的位置在你的交叉编译工具链目录下用find 命令可找到
第一步工作完成了。
(拷贝库的时候用 cp -d -L 以保留库的链接)
第二步工作,把vsftpd拷贝到rootfs的/usr/sbin或者是/usr/local/sbin下面。
第三步工作就是配置文件vsftpd.conf。
直接修改vsftpd-2.0.6中的vsftpd.conf,修改后拷贝到rootfs的 /etc/vsftpd.conf。
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=077
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
anon_root=/var/ftp
listen=YES
第四步工作就是牵扯到用户问题了。首先有一个本地用户,这样可以通过本地用户进行访问;其次要匿名用户,这就需要ftp用户;还需要有一个nobody用户。
直接拷贝host的/etc/passwd,/etc/group,/etc/shadow。(若在制作yaffs文件系统那步已经拷过,则省去此步骤)。
将 group中内容替换为如下:
root::0:root:
ftp:x:50:
nobody:x:99:
users:x:100:
500:x:500:boa:
501:x:501:armlinux:
这样用户问题就解决了。
第五步工作就是相应的目录需要创建。
支持匿名用户需要创建/var/ftp,在ftp下建立了pub上传目录并设置pub权限为可修改
chmod 777 /ftp/pub。还需要建立/usr/share/empty目录,否则在访问时会出现:
500 OOPS: vsftpd: not found: directory given in ''''secure_chroot_dir'''':/usr/share/empty
这个是与配置选项相关的。
/usr/sbin/vsftpd ---- VSFTPD的主程序(必需)
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd.conf ---- 主配置文件(必需)
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/etc/userconf ------ 指定用户个人配置文件所在的目录
/var/ftp ---- 匿名用户主目录
/var/ftp/pub---- 匿名用户的上传目录
/var/log/vsftpd.log ------- 日志文件
除vsftpd、vsftpd.conf两个文件外,其他文件的需要具体看主配置文件的配置
建立了绿色部分。然后制作映象,烧写到目标板上,
通过standalone模式启动。
先要修改目标板的IP地址
Ifconfig eth0 10.10.70.12 netmask 255.255.255.0
然后起用服务:
[root@xiao sbin]#vsftpd &
在host上测试(hont的IP要和目标板IP在同一网段中):IE中输入ftp://10.10.70.12/ 启动,查看是否运行;
出显FTP服务器共享文件ftp;
FTP服务器的移植成功;
宿主机登陆开发板时
匿名用户登陆用户名 anonymous
密码按回车即可
用ftp向开发板传文件时先cd .. 然后cd pub
put xxx(xxx为宿主机当前目录下你要传给开发板的文件的文件名)
attachment.bin的代码如下
diff -pNur vsftpd-2.0.5.orig/sysdeputil.c vsftpd-2.0.5/sysdeputil.c
--- vsftpd-2.0.5.orig/sysdeputil.c 2006-07-02 15:14:10.000000000 -0700
+++ vsftpd-2.0.5/sysdeputil.c 2006-10-19 23:41:58.000000000 -0700
@@ -155,14 +155,15 @@
#include <sys/capability.h>
#if defined(VSF_SYSDEP_HAVE_CAPABILITIES) && !defined(VSF_SYSDEP_HAVE_LIBCAP)
-#include <linux/unistd.h>
#include <linux/capability.h>
#include <errno.h>
-#include <syscall.h>
-_syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
-/* Gross HACK to avoid warnings - linux headers overlap glibc headers */
-#undef __NFDBITS
-#undef __FDMASK
+#include <sys/syscall.h>
+#include <unistd.h>
+int capset(cap_user_header_t header,
+ cap_user_data_t data)
+{
+ return syscall(SYS_capset, header, data);
+}
#endif /* VSF_SYSDEP_HAVE_CAPABILITIES */
#if defined(VSF_SYSDEP_HAVE_LINUX_SENDFILE) || \
相关文章推荐
- 嵌入式FTP服务器的移植与配置:VSFTPD-2.0.6移植
- 嵌入式FTP服务器的移植与配置(1):VSFTPD-2.0.6移植
- 嵌入式FTP服务器的移植与配置:VSFTPD-2.0.6移植
- 嵌入式FTP服务器的移植与配置:VSF…
- FTP系列1: VSFTPD-2.0.6移植
- linux centos FTP服务器搭建vsftpd配置
- centos 5 yum安装与配置vsFTPd FTP服务器
- Ubuntu 12 用vsftpd 配置FTP服务器
- vsFTPd-Linux网络安装与配置FTP服务器及Redhat局域网安装的解决办法
- centos_7.0 1503 配置笔记(三)--配置vsftpd FTP服务器
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- Ubuntu 用vsftpd 配置FTP服务器
- RHEL4- FTP服务(三)配置匿名用户访问VSFTPD服务器
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- RHEL5中配置vsftpd搭建FTP服务器
- linux(ftp服务器) vsftpd 配置文件详解
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- Ubuntu 用vsftpd 配置FTP服务器教程详解
- 移植vsftpd FTP服务器到ARM-Linux系统