FreeBSD 使用 vsftpd 的亂碼問題

這是一個困擾我已久的問題,使用 FileZilla 去連 ftp 時偶爾就會跑出亂碼來。明明 FreeBSD, vsftpd, FileZilla 三者都有支援 utf8 的編碼,但就不知道為什麼還會出這種問題。其實我一度以為是 vsftpd 太機車了所以跟別人格格不入,但這單純只是我的猜測而已。

以前都是在 FileZilla 的站台設定裡面強制使用 utf8 來解決這個問題,但是昨天在幫別人測試 ftp 時,卻發現他們家的 vsftpd 不需要強制使用 utf8,FileZilla就可以正常的偵測到要使用 utf8 !發現這個情況以後我開始找原因,首先看看是不是設定檔哪裡沒設定好,但卻發現他用的設定檔裡面也沒有什麼特別不一樣的,跟我用的差不多。難不成是 vsftpd 偏心嗎?在 CentOS 上面就乖乖的開啟 utf8 ,在 FreeBSD 上就搗亂。

連上朋友的 ftp 以後,可以看見他的 feat 回應是:

然後這是我的:

為什麼硬生生的少了最後的 utf8 啊!?為了這個問題,我去Google了半天都找不到原因,看起來也沒什麼人遇到類似問題。心情非常不愉快,所以就跑去看 vsftpd 的原始碼到底是怎麼回事。

首先就從 feat 的部份查起,feat 指令的回應是在 features.c 裡面,可以看到下列程式碼:

OK,看樣子 tunable_convert_charset_enable 這個變數決定了 feat 裡面有沒有包含 utf8。接著就查這個變數的底,看到底怎麼來的。在 parseconf.c 裡面看到這行:

哦,原來要在設定檔裡面設置 convert_charset_enable=1 就可以了。

設定好以後再試一次看看,還是沒有 -ㄦ- …繼續翻 code 。

接著在 main.c 裡面看到這個:

這下總算抓到了,原來要在設定檔裡面同時存在著 local_charset 與 convert_charset_enable 才可以。最後在 vsftpd.conf 裡增加下面這兩行就搞定了:

雖然問題解決了很高興,但這過程還真是曲折啊….

Win32 安裝 openssl 及 vc6 設定

網路上找得到一些編譯成DLL的, 但這邊要做的是static library, 也就是將openssl包進exe中不依賴DLL

1. 安裝ActivePerl

http://www.activestate.com/activeperl/downloads

2. 下載OpenSSL
http://www.openssl.org/source/

3. 將OpenSSL解壓縮到C:\
我這邊使用的是1.0.1c, 所以路徑是C:\openssl-1.0.1c

4. 打開cmd.exe, 執行 perl Configure, prefix是openssl要安裝的目錄, 並不是指下載來的source
cd c:\openssl-1.0.1c
perl Configure VC-WIN32 no-asm –prefix=c:/openssl/
ms\do_ms

5. 這時openssl已經準備好編譯了, 接續上面的cmd, 執行指令
nmake -f ms\nt.mak

6. 若過程順利, 沒有出現錯誤訊息, 即可進行安裝
nmake -f ms\nt.mak install

7. 設定vc6:
Tools -> Options -> Directories -> Show directories for: Include files
add: C:\openssl\include

Tools -> Options -> Directories -> Show directories for: Library files
add: C:\openssl\lib

** 錯誤:
a. 找不到 in6_addr?
編輯 C:\openssl-1.0.1c\apps\s_cb.c 並加入以下程式:
struct in6_addr {
union {
u_char Byte[16];
u_short Word[8];
} u;
};

b. 找不到nmake?
在cmd執行:
“c:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT”

spoofile – 幫你產生塞空間用的圖片, 以取得 Dropbox 5G 容量

Dropbox這幾天推出新功能, 只要下載Beta版的Dropbox, 然後透過新功能匯入5G的相片或影片, 就可以幫你的Dropbox容量增加5G!
詳情參考這邊的教學跟說明 : Dropbox 推新 Photo Import 功能,還送你最多 5GB 空間

網路上教學的文章很多, 所以這篇不是要教大家怎樣安裝跟使用, 而是要教大家怎樣快速的湊滿5G的相片或影片! 這邊有一個自己弄的小工具spoofile, 可以從單一檔案複製出5G的檔案! 由於Dropbox他會比對檔案是否相同, 相同的檔案他就不會再匯入了, 所以單純的複製檔案是沒用的, 而spoofile在複製的同時還會小小地改動一下檔案內容, 讓Dropbox以為這是不同的檔案, 就會乖乖的匯入.

使用方法:
1. 先按照上面連結的教學安裝好Dropbox Beta版
2. 下載spoofile之後解壓縮
3. 找一張樣本圖片或影片, 我是到網路上隨便找一張桌布下載
4. 然後開一個新資料夾, 把spoofile跟第二點的樣本圖片(影片)一起丟進新資料夾裡
5. 拖曳樣本圖片(影片)到spoofile上面
拖曳

6. 開始複製圖檔, 會跑滿5G, 請耐心等待程式跑完
正在跑

7. 建立好的圖檔們, 一起放進隨身碟或記憶卡
一堆做好的圖

8. 最後, 退出你的隨身碟或記憶卡, 然後從新插入電腦, 讓Dropbox自動抓取裡面的檔案!

這樣子5G的空間就輕鬆到手了! 確認空間長大以後就可以把製造出來的這些檔案都刪掉嘍!

檔案下載:
spoofile – 幫你產生塞空間用的圖片

更新 vsftpd 2.3.5 注意事項

使用vsftpd這麼久, 已經不是第一次更新完就不正常運作了, 但畢竟就是看上他強調的安全性, 也只能接受這一些些不便.

第一個問題, FileZilla連線時出現錯誤訊息:

翻了一下Change log, 兇手就是這一項:

說是因為安全性問題, 所以當使用chroot功能時, 根目錄不可有寫入的權限. 所以網路上有些人就真的把寫入權限拿掉了, 但是如果ftp是給許多人使用的, 若他們沒辦法上傳檔案到自己的根目錄, 那會被抱怨到翻掉吧…

所以我的解法是安裝vsftpd-ext, 然後在vsftpd.conf裡加上這一行:

在 vsftpd 3 版以後, 不需要安裝 ext 的版本了, 但設定名稱有點不同:

第二個問題, FileZilla使用SSL連線時出現錯誤:

修改vsftpd.conf, 加上這一行:

附註1:
在FreeBSD, vsftpd-ext似乎沒有正確的讀取到原本的設定檔, FileZilla出現錯誤訊息:

只好自己修一下rc script, 修改 /usr/local/etc/rc.d/vsftpd, 原本的內容:

加上一行, 順序要對:

mysql installation

FreeBSD 安裝mysql筆記:

mysql5.5:

安裝時, 編譯選項需要修改Makefile:

然後複製設定檔:

加入設定:

參考:

http://blog.tinlans.org/2011/04/08/freebsd-%E5%9C%A8-mysql55-serverclient-%E6%94%B9%E7%94%A8-cmake-%E5%BB%BA%E7%BD%AE%E5%BE%8C%E6%9F%90%E4%BA%9B%E7%B7%A8%E8%AD%AF%E9%81%B8%E9%A0%85%E7%84%A1%E6%B3%95%E5%82%B3%E9%81%9E/

perlbrew – 幫你安裝及管理多種版本的Perl

Perl用久了, 總是有機會遇到這種情況, 就是你需要另一個版本的Perl
不管是要安裝新程式, 要除錯, 要測試, 或是你只是想玩玩
想安裝新版Perl又不想動到原本運作得很好的版本, 有了perlbrew就變得很簡單了

perlbrew的安裝, 參考 http://search.cpan.org/dist/App-perlbrew/lib/App/perlbrew.pm
請確認你有安裝curl, 然後執行以下命令:

這樣子perlbrew就安裝好了, 接著你可以使用以下命令將perlbrew加入你的$PATH中
或是將此命令加到~/.bashrc中, 就可以不用每次都執行此指令

要怎麼知道有哪些版本可以安裝呢? 使用 perlbrew available 命令:

看得出來從古老的版本到新版本都有, 由於我現有的版本是5.8.8, 所以來安裝5.10.1試試看
使用 perlbrew install perl-5.10.1 來安裝, 也可以偷懶只打版本號 perlbrew install 5.10.1:

在這個畫面會一直停留到安裝好為止, 安裝時間視硬體設備而定, 我想十幾分鐘跑不掉
所以想要知道安裝進度的話, 就另開一個終端機, 使用這個指令看進度:

若是需要調整一些選項, 可以在 perlbrew install 後面加上 -D -U -A 等等參數
例如我需要Perl支援thread跟64bit等等的, 就這樣用:

等安裝好了以後, 我們可以用 perl -v 來確認現在跑的是什麼版本:

目前跑的是5.8.8, 使用 perlbrew switch來切換:

你看, 馬上就變成 5.10.1 了, 真是簡單又方便

當需要測試多個版本時, perlbrew還允許你一次讓所有的版本都執行同樣的指令:

這真是太神奇了阿滋

perlbrew 主要的指令有:

另外,這篇介紹也蠻詳細的:http://www.openfoundry.org/tw/tech-column/8514-perlbrew-perl-installation-management-tool