注:本文已經增加了一小部分內容,但因爲論壇上修改帖子的排版比較不方便,所以製作成了PDF文檔,大家可以下載了再看。該頁文檔不再更新,只更新附件中的PDF文檔(如果還有內容要增刪的話)。
http://bbs.chinaunix.net/viewthread.php?tid=670780&extra=page%3D1
也可直接從www.bsdchina.org上下載:
http://www.bsdchina.org/articles/openbsd/bibby/bt_server_bibby-2005.12.17.pdf
Author : MichaelBibby ( michaelbibby # gmail.com )
Date : 2005.12.17
歡迎轉載,但請保留以上作者信息。該文的PDF文檔可在論壇下載:
http://bbs.chinaunix.net/viewthread.php?tid=670780&extra=page%3D1
軟件BitTorrent同時提供了tracker和downloader工具,本文要講述的就是使用它來做爲BT Server。
關於BitTorrent,請訪問它的官方主頁:
另:在閱讀本文前,強烈建議看完官方的文檔 -- ‘File Server's Guide':
http://www.bittorrent.com/guide.html
內容:
1:安裝BitTorrent;
2:使用bttrack.py、btdownload*.py、btmaketorrent.py ;
3:修改bttrack.py,獲取PID並將其寫入'/var/run/bttrack.pid';
4:添加'/usr/local/etc/rc.d/bttrack.sh'腳本;
5:修改/etc/rc.conf,爲bttrack.sh添加entry;
詳細步驟:
1:安裝BitTorrent;
BitTorrent已經包含在FB的ports/目錄樹中,建議通過ports安裝。具體位置是:
/usr/ports/net/py-bittorrent
如果不修改Makefile的話,默認會裝上很多東西,比如cario、pygtk等等,有些可能是
你不需要的,那就自動動手吧。
OpenBSD中安裝的BitTorrent比較乾淨,只安裝幾個基本的依賴包。
安裝好後,bttrack.py等工具都放在'/usr/local/bin/'下了。
2:使用bttrack.py、btdownload*.py、btmaketorrent.py ;
①:使用'/usr/local/bin/bttrack.py'做爲Tracker;
一般的用法是:
# bttrack.py --port 6969
--dfile /var/log/bttrack/dlinfo
--allowed_dir /home/torrents
--show_infopage 0
--logfile /var/log/bttrack/bttrack.log
這裏只是加入了幾個常用的參數,更多的參數可以通過不帶參數的'bttrack.py'命令執行得到。
簡單解釋一下幾個參數的含義:
--port 6969
表示bttrack運行在6969端口。所以在做防火牆規則的時候要注意打開它。
--dfile /var/log/bttrack/dlinfo
表示將當前下載信息存儲在'/var/log/bttrack/dlinfo'文件中。
--allowed_dir /home/torrents
表示在服務器上只允許該目錄下的'torrent'文件連接BT Tracker。在非該目錄
下載時會報錯。
--show_infopage 0
表示是否打開info頁面。也就是在訪問服務器的6969端口時能否看到Tracker的當前信息。
--logfile /var/log/bttrack/bttrack.log
表示將Tracker的日誌信息寫入 '/var/log/bttrack/bttrack.log'中。
②:使用'btdownload*.py'上傳/下載;
btdownload*.py實際上指的是兩個下載工具:
/usr/local/bin/btdownloadheadless.py
/usr/local/bin/btdownloadcurses.py
這兩個工具的參數都是一樣的,只是界面不一樣而已(具體的細節,大家一用便知):
$ btdownloadcurses.py --max_upload_rate 0 file.torrent
這是btdownloadheadless.py下載時的截圖:
btdownloadheadless.py 默認是每隔0.5秒便滾動一則信息,圖片中內容就表示完整的一則信息。
可以通過'--display_interval '來指定間隔的時間。如果通過SSH連接上遠程服務器使用這個
命令,間隔的時間越短,就需要傳送越多的數據信息,從服務器傳到你機器上的網絡流量就越大。
btdownloadcurses.py下載時的截圖:
btdownloadcurses.py在下載時不會象btdownloadheadless.py一樣每隔一段時間就滾動顯示一則
信息,它只是動態地顯示進度 'progress'。所以在使用上,個人覺得更舒服些。
這兩個下載工具有一個比較重要的參數:'--max_upload_rate'。
做爲BT Server,上傳給別人的數據當然要控制一下,太小了不行,太大了也需要考慮。默認的
上傳速率是20K/S。顯然,做爲服務器,這個數值是不合適的。
設置爲'0',則表示不限制上傳速率。
③:使用'btmaketorrent.py'製作torrent文件;
實際上,BitTorrent也提供了'btmaketorrentgui.py'工具,這是一個btmaketorrent.py的GUI
實現,使製作torrent文件更爲直觀。但是考慮到服務器上沒有安裝X-Window,所以這裏將它
略去不提。
最簡單和常用的使用是:
$ btmaketorrent.py http://btfans.3322.org:8080/announce file
這裏的'http://btfans.3322.org:8080/announce'表示BT服務器的Tracker地址,也就是通常所
說的'announce url'。強烈建議在製作torrent時,使用域名做爲'announce url',而不是IP。
這裏的'file',可以是一個文件,也可以是以空格隔開的幾個文件,還可以是一個目錄。
另外,btmaketorrent.py還提供了四個選項。其中這兩個最常用到:
--target
是指生成的torrent文件的名稱。
--filesystem_encoding
指的是文件的字符編碼。如果爲空的話,會進行自動檢測。但是如果使用的是
2.3版本以下的python則無法進行自動檢測。
3:修改bttrack.py,獲取PID並將其寫入'/var/run/bttrack.pid';
爲了使bttrack.py能象apache、mysql一樣,在系統啓動時做爲一個daemon程序自動執行,我修改了'/usr/local/bin/bttrack.py'文件,並寫了'/usr/local/etc/rc.d/bttrack.sh'文件來實現這
一功能。修改'/usr/local/bin/bttrack.py'文件是爲了獲得bttrack.py啓動之後的PID,並將PID
寫入'/var/run/bttrack.pid'文件中,這樣便於停止bttrack。
原始的'/usr/local/bin/bttrack.py'文件後半部分是這樣的:
from sys import argv
from BitTorrent.track import track
if __name__ == '__main__':
track(argv[1:])
修改後是這樣的:
from sys import argv
from BitTorrent.track import track
import os
if __name__ == '__main__':
file('/var/run/bttrack.pid', 'w').write(str(os.getpid()))
track(argv[1:])
在此要特別感謝CU Python版的'limodou'大哥,是他幫忙搞定了獲取PID並將其寫入到某個文件的。
4:添加'/usr/local/etc/rc.d/bttrack.sh'腳本;
該腳本使用'bash’作爲語法解釋shell。
在不傳遞參數的情況下,默認行爲是啓動bttrack。另外,象大多數rc腳本一樣,可以向該腳本傳遞
兩個參數:
start | stop
----------- Script : /usr/local/etc/rc.d/bttrack.sh ------------
#!/usr/local/bin/bash
# Author : MichaelBibby ( michaelbibby # gmail.com )
# Date : 2005/12/15
# Purpose : To start '/usr/local/bin/bttrack.py' at system startup.
BTTRACK='/usr/local/bin/bttrack.py'
BTTRACK_ARGS='--port 6969 --dfile /var/log/bttrack/dlinfo --allowed_dir /home/torrents --show_infopage 0 --logfile /var/log/bttrack/bttrack.log'
BTTRACK_PID_FILE='/var/run/bttrack.pid'
BTTRACK_PID=$(cat $BTTRACK_PID_FILE)
function USAGE()
{
echo -e " Usage : $0 [start|stop]"
}
# ---- Main ------
if [ X$# == X0 ]
then
$BTTRACK $BTTRACK_ARGS &
elif [ X$# == X1 ]
then
case $1 in
start) echo -ne "Starting BT tracker ..."
$BTTRACK $BTTRACK_ARGS &
echo -ne " Done."
;;
stop) echo -ne "Stop BT tracker ..."
kill $BTTRACK_PID
echo -ne " Done."
;;
*) USAGE
;;
esac
else
USAGE
fi
# ----- Done ----
-------------- End Script : /usr/local/etc/rc.d/bttrack.sh -------------
5:修改/etc/rc.conf,爲bttrack.sh添加entry;
爲了在系統啓動時執行bttrack,在添加了'/usr/local/etc/rc.d/bttrack.sh'腳本後,還
需要在'/etc/rc.conf'中爲它添加一個entry:
bttrack_enable=”YES”
這樣就OK了。