FtpLocate - a better FTP Search Engine

FtpLocate - 建立你自己的 FTP 搜尋引擎

English version
系統介紹

FtpLocate 是一個以 Perl 寫成的 FTP 搜尋引擎, 有下列特點

- 可以索引多個 FTP 站台, 每個 FTP 站台所用的 username, password, 與索引目錄可分別指定
- 速度極快, FtpLocate 使用 Glimpse 進行索引. 在四百萬筆記錄中尋找所要的檔案平均不到 3 秒鐘
- 安裝十分容易
- 提供兩種搜尋方式

對檔案名稱進行搜尋
查詢結果會以站台來分類, 並且離使用者最近的站台的相關結果會最先被顯示出來 (距離的判斷方式是根據 domain name). 除了檔名, 檔案大小與檔案時間外, 如果系統資料庫中找得到檔案說明的話也會一併列出.

對檔案說明進行搜尋
使用者可以在不知道檔案名稱的情況下尋找他所要的檔案. 例如: 以 " windows;ftp;server " 為關鍵字進行查詢可以找到 windows 平台下所有的 ftp server 程式. 顯示結果時, 相同說明的檔案會被放在同一組列出.

- 同時提供 Web 界面版本與文字界面版本, Web 版本是一組CGI 程式, 文字版本則相當於是一簡單的 Web Client, 使用標準的 http 通訊協定與 CGI 程式溝通
- 支援透過三種方式來收集檔案列表

direct
透過將 'ls -lR' 命令傳送到遠端 FTP server 取得其檔案列表
file://path/filename.of.ls-lR
透過取得遠端 FTP server 上的 ls-lR 檔案來得到檔案列表. 支援的 ls-lR 檔案格式有 Z, gz, zip 或 純文字.
網址 http://other.ftplocate/cgi-bin/ftplocate/flserv.pl
透過向其它 FtpLocate server 要求取得其資料庫中的檔案列表, 這種方式特別適合用在所要索引的 ftp server 離你的 FtpLocate server 很遠的情形

註: FtpLocate server 間的檔案列表傳送使用的是標準的 http 協定, 也支援 proxy
只要將 http_proxy 這個環境變數設定成 'http://your_proxy_server:3128/' 即可

- 針對被索引的站台會產生統計資料, 列出各站台的目錄個數, 檔案個數, 容量大小, 平均大小等, 並可根據特定項目排序列出
- 會產生在 Internet 上的 FtpLocate server 的地圖. 每部 FtpLocate server 會向 Master server 註冊自己的網址, 並且由 master server 處取得所有 FtpLocate server 的列表
- 會儲存使用者的查尋結果, 以提高重覆查詢的速度
- 會產生使用者熱門查詢列表, 並且提供一個 fltrain.pl 程式, 能夠在每次重新索引資料後, 將熱門查詢的結果建到快取之中以提高快取擊中率
- 會產生查詢歷史記錄列表
- 查詢結果會以 100 筆資料為一頁分頁輸出, 使用者不必等待大量結果傳送完成即可看到所要的資料
- 為了縮短資料搜集與資料索引所造成的服務暫停的時間, 資料收集與資料索引分別由不同的程式負責. 在資料收集階段, 系統運作不受影響. 只有在資料索引階段系統才會暫停服務.

註: 相對於資料搜集所要花的時間, 資料索引所需的時間很短, 也就是說在大多數時間 FtpLocate 搜尋引擎可以正常對外提供服務.

範例

我們曾經用 Celeron450/256MB RAM 的機器對 TANET 的 27 個 FTP 站臺進行索引,
全部有 924322 個目錄, 3823568 個檔案, 共佔 1064 GB.

從這 27 個 FTP 站台搜集檔案列表所花的時間約為 5 小時, 資料量 410MB
索引這些檔案列表需時 30 分鐘, 索引檔大小共 18MB

在完成檔案列表索引後, 我們利用他取得說明檔的檔案名稱列表.
目前我們的程式認得的說明檔種類有 Linux 的 lsm, FreeBSD 的 package index, Simtel 00index 和 RFC index. 如果說明檔格式不屬於以上幾種, 則程式會試著抓出說明檔中有意義的部份.

搜集說明檔所花時間為 2 小時, 抓回的說明檔資料共佔 34MB
解讀說明檔並建立索引需時 5 分鐘, 索引檔大小共 9 MB

在這個例子中, 大部份的搜尋都可在 3 秒內完成

註: 上例所說的 FtpLocate 搜尋引擎網址在
http://ftp.ee.ncku.edu.tw/cgi-bin/ftplocate/flsearch.pl
http://ftp.ee.ncku.edu.tw/cgi-bin/ftplocate/dsearch.pl
註: http://ftp.ee.ncku.edu.tw 是一個完全 Web 化的 FTP 站台,
80 GB 硬碟, 提供各類 FreeBSD/Linux/Java/Perl/Window/RFC/FAQ 檔案下載
歡迎參觀...:)

系統需求

- 一般的 Unix 作業系統
- Perl 5.004 或更新版本
- Apache 或是其他可以執行 CGI 的 Web 伺服器
- Glimpse 4.1 (一個由 cs.arizona.edu 發展的極佳索引工具)

註: FtpLocate 當初是在 FreeBSD 3.1 版, Perl 5.00502, Apache 1.3.4 和 Glimpse 4.1下發展的

程式下載

- 最新版本
ftplocate-2.01.tar.gz
- 舊版本
ftp://ftp.ee.ncku.edu.tw/pub/ftplocate/

檔案說明

- install.pl
自動安裝程式

文件

- readme.zhtw.html
中文 readme
- readme.english.html
英文 readme
- help.zhtw.html
中文求助訊息檔
- help.english.html
英文求助訊息檔

系統檔

- config.site
最重要的檔案, 指明要 FtpLocate 進行索引的 ftp 站臺
- config
定義所有的系統重要參數
- lang.zhtw
中文訊息定義檔
- lang.english
英文訊息定義檔
- flmodule.pl
含有所有的副程式模組

資料收集與索引程式

- indexer.sh
一個用來啟動資料收集與索引的 shell script, 主要是用在 crontab 中
- flcollect.pl
自各個 FTP 收集檔案列表
- flindex.pl
對檔案列表進行索引
- dcollect.pl
自各個 FTP 收集各種說明檔
- dindex.pl
解析說明檔內容, 並進行索引
- flfilter.pl
配合 glimpse 使用, 被 flindex.pl 所使用的程式r
- fltrain.pl
搜尋引擎訓練程式, 用來將熱門字查詢結果建到快取中

搜尋引擎 CGI 程式

- flsearch.pl
FtpLocate 檔名搜尋引擎
- dsearch.pl
FtpLocate 說明搜尋引擎

其他 CGI 程式

- flsummary.pl
產生各個 FTP server 的相關統計表
- flmap.pl
產生各個 FtpLocate server 相關資訊列表
- fltop.pl
產生熱門查詢關鍵字列表
- flhistory.pl
產生查詢歷史記錄列表

文字版 client 程式

- ftplocate
文字版 client 程式

記錄檔 (由安裝程式建立)

- log.system
FtpLocate 系統記錄檔, 含有資料收集與索引的記錄
- log.user
FtpLocate 使用記錄檔, 含有使用者查詢的記錄
- log.map
各個 FtpLocate 分布資訊記錄檔

資料目錄 (由安裝程式建立)

- filelist
各個 Ftp 檔案列表存放目錄
- desc
各類說明檔儲存目錄
- cache
查詢結果快取暫存區 (在每次資料重整後會自動清除)

安裝步驟

- 將 ftplocate-2.xx.tar.gz 解開, 切換到解開來的目錄 ftplocate-2.xx 中
- 執行安裝程式 './install.pl', 安裝程式會檢查所有的系統需求, 並且替您決定大部份的設定值
- 修改 'config.site' 這個檔案, 指定要 FtpLocate 進行索引的 Ftp 站台
- 執行 indexer.sh 進行資料收集與資料索引
- 使用瀏覽器測試你的 Ftp 搜尋引擎...:)

疑難排解

如果安裝時遇到問題, 您可以

- 檢查系統 CGI 的運作是否正常
- 確定 config 檔案中, $TMPDIR 與 $CACHEDIR 所代表的目錄有足夠的空間
- 檢查 $CACHEDIR 的目錄權限, 它必須要能讓 CGI 的使用者寫入
- 檢查 $CMD_ 開頭的變數所指向的外部程式路徑是否正確
- 查看 log.system 的內容

版次變動

- 2.01
檔案列表來源關鍵字由 "file" 改成 "file://...", 並支援 Z 與 zip 格式
修正一個 dcollect 的錯誤, 這個錯誤會造成 ftpget 失敗
修正 maplist 相關功能
修正 domainname 相關功能
- 2.00
更模組化的設計
新增自動安裝程式
可以指定各個 Ftp 站台所要用 username, password 與索引目錄
檔案列表現在可以來自 direct, file 或是其它 FtpLocate server
新增地圖功能, 能夠顯示其它 FtpLocate server 的資訊
文字版 server 改成 CGI 程式, 文字版 client 現在動作其實像是一個簡單的 Web browser
修正資料收集時的 ftp timeout 問題
修正使用者查詢時的 DNS timeout 問題
- 1.50
支援說明搜尋
在列出檔案時顯示相關說明
使用 glimpse 建立索引
- 1.00
第一版

未來改進

- 支援更多的說明檔格式
- 同時搜尋多台 FtpLocate server
- 更好的 server 選擇方法

歡迎對我們提出建議或指教

國立成功大學 電機系
分散系統實驗室
tung@turtle.ee.ncku.edu.tw
02/20/2000