CentOS 6.4 中 Vsftpd 解決中文亂碼過程
原創(chuàng)【51CTO專稿】我單位因為操作系統(tǒng)升級,導(dǎo)致前期部署FTP應(yīng)用服務(wù)器產(chǎn)生的應(yīng)用數(shù)據(jù)采用Windows客戶端訪問服務(wù)器出現(xiàn)亂碼。后經(jīng)管理員采用源碼方式編譯安裝將問題解決,現(xiàn)將解決方法進(jìn)行總結(jié),希望能為那些UTF-8與GBK不兼容而頭疼的系統(tǒng)管理員們有所幫助。
一、系統(tǒng)簡介:單位前期FTP使用REDHAT公司提供的RHEL5.5操作系統(tǒng),升級后操作系統(tǒng)為CentOS6.4。
二、亂碼解決過程
1、首先使用 rpm -e vsftpd卸載系統(tǒng)安裝的默認(rèn)VSFTPD應(yīng)用服務(wù)器:
- [root@localhost ~]# rpm -e vsftpd
2、從http://vault.centos.org/6.3/updates/Source/SPackages/網(wǎng)站下載vsftpd-2.2.2-11.el6_3.1.src.rpm 源碼包。
3、使用 rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm 對該包進(jìn)行安裝:
- [root@localhost birdofprey]# rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm
安裝過程中系統(tǒng)會提示類似如下錯誤:
- warning: vsftpd-2.2.2-11.el6_3.1.src.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
- 1:vsftpd warning: user mockbuild does not exist - using root
- ########################################### [100%]
- warning: user mockbuild does not exist - using root
- warning: group mockbuild does not exist - using root
- warning: user mockbuild does not exist - using root
- warning: group mockbuild does not exist - using root
- warning: user mockbuild does not exist - using root
- warning: group mockbuild does not exist - using root
此時需要使用adduser mockbuild命令創(chuàng)建mockbuild用戶:
- [root@localhost birdofprey]# adduser mockbuild
4、重新使用rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm 對該包進(jìn)行安裝:
- [root@localhost birdofprey]# rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm
- warning: vsftpd-2.2.2-11.el6_3.1.src.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
- 1:vsftpd ########################################### [100%]
5、使用命令 cd /root/ rpmbuild/SOURCES/vsftpd/SOURCES進(jìn)入vsftpd源碼包目錄,并使用tar -zxvf vsftpd-2.2.2.tar.gz解壓vsftpd-2.2.2.tar.gz源碼包:
- [root@localhost SOURCES]# tar -zxvf vsftpd-2.2.2.tar.gz
6、使用命令cd vsftdp-2.2.2進(jìn)入vsfftpd-2.2.2源碼目錄:
- [root@localhost SOURCES]# cd vsftpd-2.2.2
7、使用命令vi features.c修改 features.c文件;將行內(nèi)容為:vsf_cmdio_write_raw(p_sess, " UTF8\r\n");
- 修改為://vsf_cmdio_write_raw(p_sess, " UTF8\r\n")。
8、使用命令vi opts.c修改 opts.c文件;
- 將handle_opts函數(shù)修改成如下:
- void
- handle_opts(struct vsf_session* p_sess)
- {
- str_upper(&p_sess->ftp_arg_str);
- //if (str_equal_text(&p_sess->ftp_arg_str, "UTF8 ON"))
- //{
- //vsf_cmdio_write(p_sess, FTP_OPTSOK, "Always in UTF8 mode.");
- //}
- //else
- //{
- //vsf_cmdio_write(p_sess, FTP_BADOPTS, "Option not understood.");
- //}
- }
9、返回上層目錄并使用 tar -zcvf vsftpd-2.2.2.tar.gz vsftpd-2.2.2/命令重新壓縮vsftpd-2.2.2.tar.gz文件:
- [root@localhost SOURCES]# tar -zcvf vsftpd-2.2.2.tar.gz vsftpd-2.2.2/
我們使用ls -命令可以看到列表中vsftpd-2.2.2.tar.gz文件創(chuàng)建時間已經(jīng)為當(dāng)前創(chuàng)建時間,如下所示:
-rw-rw-r--. 1 mockbuild mockbuild 186982 5月 3 15:39 vsftpd-2.2.2.tar.gz -rw-r--r--. 1 mockbuild mockbuild 2828 2月 13 00:06 vsftpd-2.2.2-uint-uidgid.patch -rw-r--r--. 1 mockbuild mockbuild 1640 2月 13 00:06 vsftpd-2.2.2-v6only.patch -rw-r--r--. 1 mockbuild mockbuild 514 2月 13 00:06 vsftpd-close-std-fds.patch -rwxr-xr-x. 1 mockbuild mockbuild 338 2月 13 00:06 vsftpd_conf_migrate.sh -rw-r--r--. 1 mockbuild mockbuild 125 2月 13 00:06 vsftpd.ftpusers -rwxr-xr-x. 1 mockbuild mockbuild 2824 2月 13 00:06 vsftpd.init -rw-r--r--. 1 mockbuild mockbuild 335 2月 13 00:06 vsftpd.pam -rw-r--r--. 1 mockbuild mockbuild 361 2月 13 00:06 vsftpd.user_list -rw-r--r--. 1 mockbuild mockbuild 345 2月 13 00:06 vsftpd.xinetd
10、進(jìn)入源碼包下的 SPECS目錄,并使用rpmbuild -bb vsftpd.spec命令生成vsftpd-2.2.2-11.el6.1.x86_64.rpm:
- [root@localhost SPECS]# rpmbuild -bb vsftpd.spec
此時因為系統(tǒng)缺少依賴包會報如下錯誤:
error: Failed build dependencies: libcap-devel is needed by vsftpd-2.2.2-11.el6.1.x86_64 tcp_wrappers-devel is needed by vsftpd-2.2.2-11.el6.1.x86_64
我們可以從CentOS6.4安裝盤中找到如下RPM軟件包進(jìn)行手動安裝,包名如下:
libattr-2.4.44-7.el6.i686.rpm libcap-devel-2.16-5.5.el6.x86_64.rpm libattr-2.4.44-7.el6.x86_64.rpm tcp_wrappers-devel-7.6-57.el6.i686.rpm libattr-devel-2.4.44-7.el6.i686.rpm tcp_wrappers-devel-7.6-57.el6.x86_64.rpm libattr-devel-2.4.44-7.el6.x86_64.rpm tcp_wrappers-libs-7.6-57.el6.i686.rpm libcap-2.16-5.5.el6.i686.rpm tcp_wrappers-libs-7.6-57.el6.x86_64.rpm libcap-2.16-5.5.el6.x86_64.rpm vsftpd-2.2.2-11.el6_3.1.src.rpm libcap-devel-2.16-5.5.el6.i686.rpm
11、將以上各包使用rpm -ivh *.rpm -force --nodeps命令進(jìn)行強(qiáng)制安裝:
- [root@localhost rpm]# rpm -ivh *.rpm --force --nodeps
- warning: libattr-2.4.44-7.el6.i686.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
- Preparing... ########################################### [100%]
- 1:libattr ########################################### [ 8%]
- 2:libcap ########################################### [ 17%]
- 3:tcp_wrappers-libs ########################################### [ 25%]
- 4:libattr ########################################### [ 33%]
- 5:libcap ########################################### [ 42%]
- 6:tcp_wrappers-libs ########################################### [ 50%]
- 7:tcp_wrappers-devel ########################################### [ 58%]
- 8:libcap-devel ########################################### [ 67%]
- 9:libattr-devel ########################################### [ 75%]
- 10:tcp_wrappers-devel ########################################### [ 83%]
- 11:libcap-devel ########################################### [ 92%]
- 12:libattr-devel ########################################### [100%]
12、再次使用rpmbuild -bb vsftpd.spec對vsftpd-2.2.2-11.el6.1.x86_64.rpm包重新進(jìn)行編譯:
- [root@localhost SPECS]# rpmbuild -bb vsftpd.spec
13、進(jìn)入x86_64目錄,此時可以看到該目錄下已經(jīng)生成相關(guān)RPM包:
命令模式如下:
- [root@localhost RPMS]# cd x86_64/
- [root@localhost x86_64]# ls
- vsftpd-2.2.2-11.el6.1.x86_64.rpm vsftpd-debuginfo-2.2.2-11.el6.1.x86_64.rpm
14、重新安裝進(jìn)行過源碼修改的vsftpd應(yīng)用服務(wù)器組件包:
- [root@localhost x86_64]# rpm -ivh vsftpd-2.2.2-11.el6.1.x86_64.rpm
- Preparing... ########################################### [100%]
- 1:vsftpd ########################################### [100%]
15、CentOS6.4修改系統(tǒng)默認(rèn)字符集:
- [root@localhost /]# vi /etc/sysconfig/i18n
- 將原文件修改為如下內(nèi)容:
- #LANG="zh_CN.UTF-8"
- LANG="zh_CN.GB18030"
- SUPPORTED="zh_CN.GB18030:zh_CN:zh:zh_CN.GB2312:en_US.UTF-8:en_US:en"
- SYSFONT="latarcyrheb-sun16"
此時所有修改工作已經(jīng)完成,重起FTP應(yīng)用服務(wù)器之后我們在windows系統(tǒng)中使用IE瀏覽器以及前期應(yīng)用軟件進(jìn)行測試中文亂碼問題消失。該解決辦法同樣適用于RHEL6系列操作系統(tǒng)中存在的VSFTPD于windows客戶端字符集兼容原因?qū)е碌膩y碼問題。
相關(guān)RPM包整理:vsftpd-2.2.2-11.el6.3.1.src.rpm.tar.bz2
【聲明】本文作者:解寶琦、荊斌,陜西安康市安康車務(wù)段電算室的助工。本文在51CTO系統(tǒng)頻道首發(fā),轉(zhuǎn)載請注明作者和出處。