Remote System Explorer之FTP移植(vsftpd)
Remote System Explorer之FTP移植
openssh自带Sftp Server,但移植到开发板上时无法启动,所以只能移植其他的FTP服务器,经过一番搜索后确定使用vsftpd。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用。它还可以移植到嵌入式Linux中,我们可以把开发板当作一个FTP服务器。
编译vsftpd程序
1. 获得源码包:vsftpd-2.1.2.tar.gz
2. 解压,进入源码目录:
tar xzvf vsftpd-2.1.2.tar.gz
cd vsftpd-2.1.2
3. 修改Makefile,指定交叉编译器:
CC = arm-linux-gcc
4. make
编译时会出现错误,跟libcap.so有关
修改vsf_findlibs.sh:
45-53行注释掉:
修改配置文件vsftpd.conf
需要用到哪一项,就把这一项前面的注释‘#’去掉,这里给出一个示例:
anonymous_enable=YES
no_anon_password=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
ls_recurse_enable=YES
listen=YES
listen_port=21
把修改后的vsftpd.conf文件放到根文件系统的/etc/vsftpd目录下,否则运行里会出错:500 OOPS vsftpd: cannot open config
创建必要的帐号、目录
1. 建立FTP目录:
mkdir -p /var/ftp/pub
因为ftp目录不能开启所有权限,所以建一个pub目录加上所有权限,用来传输文件
mkdir -p /usr/share/empty
程序运行所用到的目录
2. 改变目录权限
chown root:root /var/ftp
chmod 755 /var/ftp
cd /var/ftp
chmod 777 pub
3. 添加帐号(如果系统中有,就不用添加)
useradd nobody
useradd -d /var/ftp ftp
在开发板上运行vsftpd
把制作好的文件系统下载到开发板上,在后台运行程序:
vsftpd /etc/vsftpd/vsftpd.conf&
也可以把它写入启动脚本,vsftpd后面的参数就是要使用的配置文件
注意:如果以vsftpd &这种方式来启动vsftpd ,vsftpd 使用的是默认配置文件,而不是/etc/vsftpd/vsftpd.conf,切记!
程序运行后可能出会现错误:
500 OOPS: could not bind listening IPv4 socket
解决方法:
1. 复制vsftpd源码目录下的xinetd.d文件夹到文件系统/etc目录下,里面有一个文件vsftpd,修改其内容:disable = yes。
2. 可能是已经启动了vsftpd,端口已被占用,再次启动vsftpd就会报错,可以先杀死vsftpd进程,再启动。
连接
之后便可在DS-5中创建FTP连接。
附上openssh的编译过程,今后会一直留心openssh Sftp Server的移植或其他Sftp Server的移植。
libz前面已经编译过了,下边列出openssl和openssh的编译过程。
编译openssl:
tar zxvf openssl-1.0.0.tar.gz
cd openssl-1.0.0
./Configure --prefix=~/sftp/pack/openssl os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc
make;make install
编译openssh:
tar zxvf openssh-5.3p1.tar.gz
cd openssh-5.3p1/
./configure --host=arm-linux --prefix=/home/phil/sftp/pack/openssh --disable-strip --with-libs --with-zlib=/home/phil/sftp/pack/zlib --with-ssl-dir=/home/phil/sftp/pack/openssl --disable-etc-default-login CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc AR=/usr/local/arm/3.4.1/bin/arm-linux-ar
make
不要make install
注意:1)因为openssh链接的是zlib动态库,所以编译zlib时要加--shared
2)--with-zlib必须用绝对路径,--prefix有的可以用~,但openssh要求--prefix必须用绝对路径
安装
(1) 将 openssh-5.5p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下
(2) 再copy scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 到目标板/usr/local/bin目录下
copy sftp-server ssh-keysign 到/usr/local/libexec
(3) 在目标板下:
mkdir -p /usr/local/etc/
然后将openssh下的sshd_config,ssh_config 拷贝到该目录下
mkdir -p /var/run; mkdir -p /var/empty/sshd
chmod 755 /var/empty
(4)在主机上:
ssh-keygen -t rsa1 -f ssh_host_key -N ""
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
将生存的 ssh_host_* 4个文件copy到目标板的 /usr/local/etc/目录下
(5) 添加用户:
将主机上 /etc/目下的 passwd, shadow, group 三个文件copy到目标板的 /etc目录下, 同时记得将passwd的最后 /bin/bash 该为 /bin/sh
其实可以删除不需要的一些用户。
这一步也可以这样,在目标板的passwd中添加sshd用户:
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
在shadow中也添加对应的项就行了:
sshd:!:14069:0:99999:7:::
测试
sshd在开发板上能启动,通过DS-5也能连接上,但:Sftp Server在开发板上启动时没有反应。通过PS查看进程,没有找到相应的进程,这个
问题先留着,慢慢解决!!!
欢迎讨论交流。
更多推荐
所有评论(0)