Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1347761
  • 博文数量: 244
  • 博客积分: 10311
  • 博客等级: 上将
  • 技术积分: 3341
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-14 21:50
文章分类

全部博文(244)

文章存档

2013年(6)

2012年(5)

2011年(16)

2010年(11)

2009年(172)

2008年(34)

分类: LINUX

2008-11-21 09:42:39

移植vsftpd FTP服务器到ARM-Linux系统

一、下载并解压
 
 vsftpd 官方网站: 
 使用当前的最新版本:vsftpd-2.0.6。

[tekkamanninja@Tekkaman-Ninja tarball_for_ftp]$ tar xjvf vsftpd-2.0.6.tar.bz2
[tekkamanninja@Tekkaman-Ninja tarball_for_ftp]$ cd vsftpd-2.0.6


二、交叉编译(for ARM-Linux)
 
需要修改两处地方。
第一处是Makefile的交叉编译器路径:

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ kwrite Makefile
 
# Makefile for systems with GNU tools
CC     =
    /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc

 
第二处是软件源码根目录下的脚本vsf_findlibs.sh。这是因为libcap库的问题。上一次移植我没有成功就是卡在了这里!!网上的修改都是更改到交叉编译器的lib文件夹下,发现即使在lib文件夹下面没有,也不影响。我在网上的提问与那篇文章的作者回复如下:
 

# re: 嵌入式FTP服务器的移植
您好!我正在移植基于ARM 的Linux下的ftp服务程序。尚未成功,看了您的文章,很受启发。在实际操作中,libcap库的移植出了问题,希望能得到您的帮助。提供一下libcap库的移植文档,谢谢!
E-mail:tekkamanninja@163.com
QQ:78027228
tekkamanninja 评论于 2008-02-20 08:33  回复  更多评论   


# re: 嵌入式FTP服务器的移植
不知道你们怎么都要这个libcap库,按照步骤做就可以了,我也没有这个库文件
zz 评论于 2008-02-25 09:14  回复  更多评论   

 
根据CalmArrow( http://blog.chinaunix.net/u/21948/showart.php?id=504050)判断,这个库是没有必要的,直接把这两行注释就可以了。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ kwrite vsf_findlibs.sh
# Look for libcap (capabilities)
# locate_library /lib/libcap.so.1 && echo "/lib/libcap.so.1";
# locate_library /usr/lib/libcap.so && echo "-lcap";

 
上一次我居然没有试试就放弃了,值得检讨。后来CalmArrow 发现了这个问题,通知了我。我晕,我怎么没想到!!在这里感谢CalmArrow ,并对他的钻研和实验精神表示敬佩!
 
不过我觉得不能因为libcap库不需要就不去交叉编译他(也许以后需要),libcap库的交叉编译(需要一定技巧)可以锻炼一下ARM-Linux的交叉编译技能,有空一定试试!

改完后,执行make,动态编译就成功了。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ make

 
三、处理动态库依赖及其相应的配置文件
 
   (1)因为是动态编译,查看相应的动态库。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ file vsftpd
vsftpd: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, stripped
[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf -d vsftpd

Dynamic section at offset 0x130e4 contains 25 entries:
  Tag Type Name/Value
 0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
 0x00000001 (NEEDED) Shared library: [libdl.so.2]
 0x00000001 (NEEDED) Shared library: [libnsl.so.1]
 0x00000001 (NEEDED) Shared library: [libresolv.so.2]
 0x00000001 (NEEDED) Shared library: [libutil.so.1]
 0x00000001 (NEEDED) Shared library: [libc.so.6]

 0x0000000c (INIT) 0x97b4
 0x0000000d (FINI) 0x17efc
 0x00000004 (HASH) 0x8128
 0x00000005 (STRTAB) 0x8d78
 0x00000006 (SYMTAB) 0x8548
 0x0000000a (STRSZ) 1245 (bytes)
 0x0000000b (SYMENT) 16 (bytes)
 0x00000015 (DEBUG) 0x0
 0x00000003 (PLTGOT) 0x231d4
 0x00000002 (PLTRELSZ) 952 (bytes)
 0x00000014 (PLTREL) REL
 0x00000017 (JMPREL) 0x93fc
 0x00000011 (REL) 0x93cc
 0x00000012 (RELSZ) 48 (bytes)
 0x00000013 (RELENT) 8 (bytes)
 0x6ffffffe (VERNEED) 0x935c
 0x6fffffff (VERNEEDNUM) 2
 0x6ffffff0 (VERSYM) 0x9256
 0x00000000 (NULL) 0x0
[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$

 
    把需要的动态库文件(我是从/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib中)拷贝到rootfs的/lib下。
 
(2)把vsftpd拷贝到rootfs中。
我的是拷贝到了/usr/sbin下。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ cp vsftpd /home/tekkamanninja/working/nfs/rootfs/usr/sbin/

(3)配置文件vsftpd.conf。

我是直接将vsftpd-2.0.6/vsftpd.conf拷贝到了rootfs的 /etc中

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ cp vsftpd.conf /home/tekkamanninja/working/nfs/rootfs/etc/

然后我对配置文件进行了修改,实现本地和匿名的文件上传和下载。(暂不考虑安全问题,只为实现其基本功能),具体修改不再赘述,提供我的vsftpd.conf文件,你可以直接使用!

文件: vsftpd.rar
大小: 1KB
下载: 下载

(4)为vsftpd建创建用户。

首先有一个本地用户,这样可以通过本地用户进行访问;其次要匿名用户,需要ftp用户(具体用户明和配置文件有关);至于nobody用户我没有创建照样可用。

[root@~]#adduser -g user ftp
Changing password for ftp
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
Enter new password:
Bad password: too short.

Warning: weak password (continuing).
Re-enter new password:
passwd[785]: password for `ftp' changed by user `root'
Password changed.

(5)创建必须的目录:/usr/share/empty,否则在访问时会出现:

500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/usr/share/empty

这个与的配置选项相关的。因为默认情况下 secure_chroot_dir为/usr/share/empty。在我的 vsftpd.conf文件中,并没有配置secure_chroot_dir。

[root@~]#mkdir /usr/share
[root@~]#mkdir /usr/share/empty

经过以上配置,用本地和匿名登录都成功了,本地和匿名传输文件也成功,(与的配置选项相关)。这只是初步工作,实现其基本功能。对于配置问题(如安全设置)请参考vstfpd的使用和配置的资料,这里不再赘述。给出以下连接方便学习:
《vsFTPd 服务器初学者指南(欢迎大家参与补充)》  

《VSFTPD 服务器安装配置》


这里只介绍我遇到的一个问题(其它问题看以上两个资料或google):

当我一开始用匿名登录时,会出现:

500 OOPS: vsftpd: refusing to run with writable anonymous root

解决方法:

但注意:使用我的配置方法:ftp用户的家目录(也就是匿名登录的根目录)并非/var/ftp,而是/home/ftp

[root@~]#cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
httpd:x:500:500:user:/home/httpd:/bin/sh
boa:x:501:501:user:/home/boa:/bin/sh
lighttpd:x:502:502:user:/home/lighttpd:/bin/sh
ftp:x:503:503:user:/home/ftp:/bin/sh

所以修正这个错误,应该用下面的办法:

[root@localhost ~]# chown root:root /home/ftp
[root@localhost ~]# chmod 755 /home/ftp

以下是我在fedora 7下用gFTP时的截图:一张是root登录,一张是匿名登录。

文件: 截图.rar
大小: 240KB
下载: 下载

回目录 为嵌入式Linux系统添加FTP服务

发表于: 2008-03-26,修改于: 2008-03-26 17:43,已浏览1040次,有评论0条 推荐 投诉


网友评论
网友: 本站网友 时间:2008-03-28 16:30:12 IP地址:125.33.192.★
你好,我用的交叉编译器是2.95.3,做第二步的make的时候,提示错误:privops.c :58 parse erro before 'double',不知道你编译的时候,有没有这种错误?希望能交流下。。。

Blog作者的回复:
按文章里做是不会出错的,应该是编译器的问题。试试3.4.1


网友: 本站网友 时间:2008-06-03 19:33:18 IP地址:61.237.235.★
你好,我按照你的步驟做了之後,在ARM板上用vsftpd &開啟服務器,然後在PC機終端下輸入ftp 192.168.x.x,結果顯示:
[root@egg ~]# ftp 192.168.1.55
Connected to 192.168.1.55.
500 OOPS: vsftpd: cannot locate user specified in 'ftp_username':ftp
ftp>
連接不上,請問你遇到過這樣的問題麽?可能是哪裏錯了?

网友: 本站网友 时间:2008-06-05 16:45:18 IP地址:61.237.235.★
你好,看了你的这篇文章,非常感谢你能将自己的成果分享给大家,我按你的步骤做了,但用主机ftp arm板时,出现如下信息:
ftp 192.168.1.55

Connected to 192.168.1.55.

500 OOPS: vsftpd: cannot locate user specified in 'ftp_username':ftp

ftp> 
意思应该是找不到arm板上的ftp用户,但实际上我已经用adduser建这个用户了,而且在/etc/passwd文件中也可以看到相应的ftp用户信息。另外,我在vsftpd.conf中设置ftp_username为其它用户时,出现的信息也是不能locate。      
       还有,我在用chown root:root /home/ftp时出现下列错误:
chown:unknown group name:root
而用chown root  /home/ftp时就变成了:
chown:unknown user name:root
但实际上passwd中已经有root用户了,而且用su命令切换时也是没有问题的,但用chown命令时就出错。
我在想出现这两个问题,是不是都因为系统没有识别出用户?搞了很久,也没有解决,急盼博主您能帮我们看看,非常感谢!!!!
阅读(9317) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~