vsFTP server 移植到DavinCi

                                      vsFTP server 移植到 DavinCi

+-----------------------------------------------------------------------------+
                                              
第一部分 文档说明  
+-----------------------------------------------------------------------------+

1
作用
############
   
如果要在网络中建立一个文件的集中位置,为用户提供访问,那就一定非FTP 莫属了,它也是Internet 上历史悠久的通信协议,在跨平台的集成上,FTP 可说是最稳定且使用最方便的重要工具,而在煤炭车辆智能分型记录仪项目中,设备采用嵌入式系统结构,内置FTP 服务器,抓拍机会向FTP 服务器上传数据文件,车辆数目以及分类记录。因此本文档说明如何移植vsFTP 服务器到DaVinCi 处理器的MontaVista Linux 系统。

2
版权
############
   
版权: 西安XX 科技有限责任公司
 
3
组织与作者
############
3.1
组织
============
   
研发一部
 
3.2
作者
============
3.2.1
作者
------------
   
姓名: 方长存
   
维护版本: 0.1
 
4
产生时间
############
   
时间: 2010-03-25
 
5
版本
############
   
版本: 0.1
 
6
修订过程
############
6.1
0
============
6.1.1
0.1
------------
   
说明文档的组成, 基本格式, 以及编辑工具以及文档要求.
 
+-----------------------------------------------------------------------------+
                                          
第二部分 文档正文
+-----------------------------------------------------------------------------+
1.
下载源码包并解压
############
1.1
下载
============
  
vsftpd 官方网站:http://vsftpd.beasts.org/ 下载vsftpd-2.1.0.tar.bz2 源码包,使用当前的最新版本:vsftpd-2.1.0
  
将下载到的文件放在当前用户有权访问的路径下,比如/opt 目录下。
  
1.2
解压
============
[fang@fang opt]$ tar –jxvf vsftpd-2.1.0.tar.bz2
[fang@fang opt]$ cd vsftpd-2.1.0/
 
2.
交叉编译(for DaVinCi
############
2.1
修改两个文件:
============
2.1.1
修改Makefile,Makefile 规则中的编译器修改为自己DaVinCi 架构上的编译器:
------------
即修改CC 这一行的gcc 为自己DaVinCi 架构上的交叉编译器arm_v5t_le-gcc ,。
修改文件前先备份初始文件,以便在出错时对比和恢复:
[fang@fang vsftpd-2.1.0]$ cp Makefile Makefile.bak
[fang@fang vsftpd-2.1.0]$ vi Makefile
将文件中
CC = gcc
这一行修改为:
CC = /opt/arm/v5t_le/bin/arm_v5t_le-gcc
(此为编译器的绝对路径)
保存退出即可。

2.1.2
修改vsf_findlibs.sh
------------
在这个文件中将所用的库都改为你所使用编译器里面的库
我用到了两个库:libpamlibcap
我所使用的编译器所在路径为/opt/arm/v5t_le/bin/arm_v5t_le-gcc
其中这个编译器的库在/opt/arm/v5t_le/target/lib/opt/arm/v5t_le/target/usr/lib 这两个目录里面:
首先,找到libpam 库所在位置:
# Look for PAM (done weirdly due to distribution bugs (e.g. Debian) or the
# crypt library.
if find_func pam_start sysdeputil.o; then
  locate_library /opt/arm/v5t_le/target/lib/libpam.so.0 && echo "/opt/arm/v5t_le/target/lib/libpam.so.0";
  locate_library /opt/arm/v5t_le/target/usr/lib/libpam.so && echo "-lpam";
locate_librarylibpam 库改为你自己所在的路径,我这里是/opt/arm/v5t_le/target/lib//opt/arm/v5t_le/target/usr/lib/

接下来,找到libcap 库所在位置:
# Look for libcap (capabilities)
#if locate_library /arm/v5t_le/target/usr/lib/libcap.so.1; then echo "/arm/v5t_le/target/usr/lib/libcap.so.1";
#else
  locate_library /arm/v5t_le/target/usr/lib/libcap.so && echo "-lcap";
locate_library /arm/v5t_le/target/lib/libcap.so && echo "-lcap";
#fi
locate_librarylibcap 库改为你自己所在的路径,我这里是仅是/opt/arm/v5t_le/target/usr/lib/
   
2.2
执行动态编译:
============
2.2.1.
执行make 命令进行动态编译:
------------
[fang@fang vsftpd-2.1.0]$ make

2.2.2.
编译成功后的说明
------------
若编译成功,则在当前目录即/opt/vsftpd-2.1.0/ 下会生成vsftpd 可执行文件

3.
处理动态库依赖并拷贝所需文件到板子
############
3.1
查看vsftpd 所依赖的库
============
[fang@fang vsftpd-2.1.0]$ ../arm/v5t_le/bin/arm_v5t_le-readelf -d vsftpd
这条命令运行后我的显示如下:
Dynamic section at offset 0x161b4 contains 26 entries:
  Tag        Type                          Name/Value
  0x00000001 (NEEDED)                     Shared library: [libpam.so.0]
  0x00000001 (NEEDED)                     Shared library: [libcap.so.1]
  0x00000001 (NEEDED)                     Shared library: [libc.so.6]
  0x0000000c (INIT)                       0x9a30
  0x0000000d (FINI)                       0x1ae18
  0x00000019 (INIT_ARRAY)                 0x261a8
  0x0000001b (INIT_ARRAYSZ)               4 (bytes)
  0x0000001a (FINI_ARRAY)                 0x261ac
  0x0000001c (FINI_ARRAYSZ)               4 (bytes)
  0x00000004 (HASH)                       0x81fc
  0x00000005 (STRTAB)                     0x8fa0
  0x00000006 (SYMTAB)                     0x8660
  0x0000000a (STRSZ)                      1319 (bytes)
  0x0000000b (SYMENT)                      16 (bytes)
  0x00000015 (DEBUG)                      0x0
  0x00000003 (PLTGOT)                     0x262ac
  0x00000002 (PLTRELSZ)                   1048 (bytes)
  0x00000014 (PLTREL)                     REL
  0x00000017 (JMPREL)                     0x9618
  0x00000011 (REL)                        0x9610
  0x00000012 (RELSZ)                      8 (bytes)
  0x00000013 (RELENT)                     8 (bytes)
  0x6ffffffe (VERNEED)                    0x95f0
  0x6fffffff (VERNEEDNUM)                 1
  0x6ffffff0 (VERSYM)                     0x94c8
  0x00000000 (NULL)                       0x0
由此可看出所依赖的库为libpam.so.0libcap.so.1libc.so.6 ,需将这3个库拷贝到板子根目录下的lib 目录下。

.2 拷贝依赖库到板子的具体操作如下:
============
.2.1 telnet 登录板子:
------------
[fang@fang vsftpd-2.1.0]$ telnet 192.168.0.10
显示如下:
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.

MontaVista(R) Linux(R) Professional Edition 4.0 (0501140)
Linux/armv5tejl 2.6.10_mvl401-davinci_evm_gsv

192.168.0.199 login:
(输入用户名root
Password:
(输入密码:xx_admin
Linux 192.168.4.74 2.6.10_mvl401-davinci_evm #46 Fri Jul 11 01:17:42 CST 2008 armv5tejl GNU/Linux

Welcome to MontaVista(R) Linux(R) Professional Edition 4.0 (0501140).

[email protected]:~#
出现以上信息说明已经成功登录

.2. 2 将以上3个库(在/opt/arm/v5t_le/target/usr/lib )拷贝到板子根目录下的lib 目录下:
------------
必要解释:
首先,查看这3个库文件:
[root@fang vsftpd-
vsFTPd 服务器初学者指南(欢迎大家参与补充)》   http://www.linuxsir.org/main/?q=node/152#6

VSFTPD 服务器安装配置》http://debian.linuxsir.org/doc/inthedebianway/vsftpd/index.html2.1.0]# cd /opt/arm/v5t_le/target/usr/lib/
[root@fang lib]# ls -l libcap.so.1
lrwxrwxrwx. 1 fang fang 14 2010-03-25 17:43 libcap.so.1 -> libcap.so.1.10

[root@fang lib]# cd /opt/arm/v5t_le/target/lib/
[root@fang lib]# ls -l libpam.so.0
lrwxrwxrwx. 1 fang fang 14 2010-03-25 17:43 libpam.so.0 -> libpam.so.0.76

[root@fang lib]# ls -l libc.so.6
lrwxrwxrwx. 1 fang fang 13 2010-03-25 17:43 libc.so.6 -> libc-2.3.3.so
由此可看出:
/opt/arm/v5t_le/target/lib/
下面的libpam.so.0 实际上是该目录下libpam.so.0.76 的一个符号链接,
/opt/arm/v5t_le/target/usr/lib/
下面的libcap.so.1 实际上是该目录下libcap.so.1.10 的一个符号链接,
/opt/arm/v5t_le/target/lib/
下面的libc.so.6 实际上是该目录下libc-2.3.3.so 的一个符号链接,
故拷贝时须拷贝原始库文件。
[email protected]:~# scp -rp [email protected]:/opt/arm/v5t_le/target/lib/libpam.so.0.76 /lib
[email protected]:~# scp -rp [email protected]:/opt/arm/v5t_le/target/usr/vsftpd.conflib/libcap.so.1.10 /lib
[email protected]:~# scp -rp [email protected]:/opt/arm/v5t_le/target/lib/libc-2.3.3.so /lib

.3 同时拷贝可执行程序vsftpd 和配置文件vsftpd.conf 到板子文件系统相应位置下
============
[email protected]:~# scp -rp [email protected]:/opt/vsftpd-2.1.0/vsftpd
 /usr/sbin
[email protected]:~# scp -rp [email protected]:/opt/vsftpd-2.1.0/vsftpd.conf /etc

. 修改相应的配置文件
############
在将vsftpdvsftpd.conf 文件拷贝到板子上之后我们就需要来修改这个配置文件了。
煤炭记录仪板子vsftpd.conf 文件具体修改以下内容:
[email protected]:~# vi /etc/vsftpd.conf
ftp_username=ftp       
        (添加此行)
local_enable=YES       
         (去掉此行前面的# ,本地帐户能够登陆)
write_enable=YES       
         (去掉此行前面的# ,本地帐户登陆后有权删除和修改文件)
local_umask=000    
            ( 去掉此行前面的# 并将077 改为000 修改,FTP 上本地的文件权限,默认是077
dirmessage_enable=YES  
         (去掉此行前面的# ,切换目录时,显示目录下.message 的内容)
xferlog_std_format=YES     
       ( 去掉此行前面的#
ascii_upload_enable=YES    
       ( 去掉此行前面的# ,启用上传的ASCII 传输方式)
ascii_download_enable=YES           (
去掉此行前面的# ,启用下载的ASCII 传输方式)
listen_port=21                 
   ( 添加此行,定FTP 服务器监听的端口号, 此选项在standalone 模式下生效, 默认:21
local_root=/media/ftp_share        
(添加此行)
secure_chroot_dir=/media/ftp_share 
(添加此行)
chroot_local_user=YES        
    (添加此行,将所有用户限定在ftp 的家目录内)
修改完后保存退出即可。

.vsftpd 建创建目录和用户。
############
创建ftp 家目录:
[email protected]:/etc#mkdir /media/ftp_share 
修改文件的权限: 
[email protected]:/etc#chmod 755 /media/ftp_share 

首先有一个本地用户,这样可以通过本地用户进行访问;其次要匿名登陆,需要ftp 用户(具体用户名和配置文件有关);
[email protected]:/etc#useradd -g ftp –d media/ftp_share –s /bin/sh test         
[email protected]:/etc#passwd test                                
Enter new UNIX password:
(输入ftp 用户test 的密码:test                             
Retype new UNIX password:
(再次确认密码:test                               
passwd: password updated successfully                  

查看/etc/passwd 文件,会看到我们刚创建的ftp 用户
[email protected]:/etc# cat passwd
会看到显示的信息中包含该行:
test:x:1000:14::/media/ftp_share:/bin/sh

6.1
、配置并启动vsFTP 服务器
############
系统启动时会调用/etc/rc.d/rc3.d/ 中的文件,据此启动相应的服务,它们都是链接文件,
链接到/etc/init.d/ 中的一个启动脚本(shell 脚本)vsftpd
在这个脚本里面写了vsftpd 服务器的启动关闭等执行情况,启动关闭的命令是在这个脚本里面书写。
现在建立一个开机启动的链接文件:
/etc/rc.d/rc3.d/ 目录下执行:
[email protected]:/etc/rc.d/rc3.d# ln –s ../init.d/vsftpd S60vsftpd
这样在启动系统的时候就可以自动启动ftp 服务器了。

+-----------------------------------------------------------------------------+
|                        
第三部分 文档参考                                   |
+-----------------------------------------------------------------------------+
1
书籍参考
##########
vsFTPd 服务器初学者指南》   http://www.linuxsir.org/main/?q=node/152#6

VSFTPD 服务器安装配置》  http://debian.linuxsir.org/doc/inthedebianway/vsftpd/index.html
 
2
文档参考
##########
《移植vsftpd FTP 服务器到ARM-Linux 系统(煤炭项目)》

 

 

你可能感兴趣的:(server,FTP服务器,文档,library,makefile,编译器)