高版本为何编译不成功:
在版本比较高的vsftp源码中的Makefile中可能会有这么一句话:
LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now
如可此时交叉编译,虽然可以编译成功,但 file vsftpd 会发现,vsftpd是 shared object,而不是我们想要的executable
scw@scw-VB:~/buildroot-2017.02.3/dl/vsftpd-3.0.3$ file vsftpd
vsftpd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.38, stripped
经过试验发现,把 ( LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now )中的 -pie 去掉就可以编译出我们想要的可执行文件
scw@scw-VB:~/buildroot-2017.02.3/dl/vsftpd-3.0.3$ file vsftpd
vsftpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.38, stripped
(pie :position independent executables)是安卓中的一种保护机制,而我们现在的系统时arm板Linux,所以不需要 -pie
同理 :以后再移植其他软件时,若是发现此类问题,可以采取此种处理机制
在vsftp源码中:
1:vsf_findlibs.sh 文件是vsftp安装包所用到的库路径指定文件
2:builddefs.h文件定义了一些必要的宏定义
3:INSTALL文件列举了必要的安装配置步骤
Step 1) Build vsftpd
Step 2) Satisfy vsftpd pre-requisites(必要步骤)
2a) useradd nobody 添加nobody用户
2b) mkdir /usr/share/empty/ 创建一个目录
2c) mkdir /var/ftp/
useradd -d /var/ftp ftp(创建匿名用户FTP)
chown root.root /var/ftp
chmod og-w /var/ftp
Step 3) Install vsftpd config file(可手动复制)
在用FTP用户登录时,发现ls 无法显示FTP下的内容,虽然FTP用户默认的根目录是、var/tfp,但依然需要在配置文件中手动添加这么一句:anon_root=/var/ftp,然后在ls 就可以显示、var/ftp下的目录或文件。
注:在使用FTP传输数据是一定要注意所要操作的目录的权限问题。