rTorrent:體積小、速度快、不亂碼,可加掛 Web 介面的 P2P 軟體

rTorrent:體積小、速度快、不亂碼,可加掛 Web 介面的 P2P 軟體

不只架站作資料庫,也可當作 P2P 爆衝下載兇器!

  為了建構自用的 Linux 多功能伺服器,阿寶花了一些時間在網路上搜尋熱心的大大們留下來的精華內容,像是 IP 分享功能、DHCP 自動配發 IP、網站伺服器架設…等。而在 P2P 方面的應用阿寶找到了 "rTorrent" 這套具備多項優點的軟體,在實際安裝、使用過後發現非常符合自己的需要,想與朋友一同分享。

rTorrent 具備以下特點:

  • 體積小:除了能在一般 PC 上運作之外,網路上也可以找到在 nas 上安裝、運作的文章,對硬體的要求不高。
  • 頻寬利用率高:以阿寶自己使用 Hinet 光世代 20m/2m 的環境可以跑出接近實際頻寬極限的 2.1MB/s 速度,如果放在像是宿網或是出租套房等多人共用網路的環境下又沒作頻寬管理的話,肯定會被罵到爆吧 XD。
  • 支援 UTF-8 編碼:中日韓四地的文字格式都能正確顯示,不用在下載完畢後看著像是亂碼般的檔名還要回想一下拖了什麼檔案回來。
  • 支援 DHT(Distributed Hash Table) 協定:早期 P2P 下載是透過「中央伺服器儲存的方式」將各節點所擁有的檔案資料儲存起來,此作法除了會讓伺服器很容易遭受攻擊,而且伺服器如果因為某些原因而停止運作也會讓正在下載中的檔案無法下載完畢,成為斷頭檔案。

    DHT 的作法是將檔案下載資訊打散到各個節點當中,各節點在多分擔一點運算資源的前提下就能確保檔案下載資訊完整,毋需很多使用者作為種子身份也能確保檔案順利下載不斷頭。詳細內容請參考維基百科:http://zh.wikipedia.org/zh-tw/分散式雜湊表。
  • 透過第三方支援,實現 Web 操作:如果朋友也跟阿寶一樣想用瀏覽器就能操作 P2P 軟體,rTorrent 也能做到,還可以很美型哦!

 

用rTorrent,Linux平台也可以是P2P高速下載機!

運作環境準備及安裝

  在 Linux 系統上裝軟體大致有「原始碼編譯安裝」與「透過套件安裝」兩種方式,前者可以依自己的環境加入或是刪除部分功能,而且通常最新的版本都會以此種方式發佈;後者則是在安裝同時一併檢查相關軟體的匹配性,將有需要一起安裝的套件通通拉進來一次搞定。本文為了安裝方便主要採用前者,也讓有興趣體驗 rTorrent 的朋友能夠裝上最新版本,使用最多的功能。

  首先我們要確認「apache網頁伺服器」已經安裝且正常啟動,另外還得啟用「Samba檔案分享服務」方便上傳種子及傳輸抓好的檔案內容。阿寶在寫這篇文章時是在自己架設的 CentOS 5.4(x86) 平台下安裝,且使用 yum 服務安裝接下來編譯程式所需的環境及輔助程式,其他 Linux 套件的安裝流程應不會有太大差距。

  以下的操作大部分均需要用 root 身份執行,如果需要以一般使用者身份進行時會另外說明。

Phase 1:系統環境設定

Step 1:下載編譯程式時所需要的環境。

yum install gcc gcc-c++ ncurses ncurses-devel screen

Step 2:下載並安裝apache的mod_scgi模組

wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/5/i386/mod_scgi-1.13-1.el5.i386.rpm
rpm -ivh mod_scgi-1.13-1.el5.i386.rpm

Step 3:用文字編輯器修改「/etc/httpd/conf.d/scgi.conf」檔案,在第 08 行將:

# SCGIMount /dynamic/ 127.0.0.1:4000

改成

SCGIMount /RPC2 127.0.0.1:5000

Step 4:在瀏覽器網址列輸入以下 URL,下載 xmlrpc-c 原始碼檔案。

http://sourceforge.net/projects/xmlrpc-c/files/Xmlrpc-c%20Super%20Stable/1.06.38/xmlrpc-c-1.06.38.tgz/download

Step 5:編譯及安裝 xmlrpc-c,讓 rTorrent(0.75版以後)也能透過第三方程式以瀏覽器操控。

tar zxvf xmlrpc-c-1.06.38.tgz
cd xmlrpc-c-1.06.38
./configure
make
make install

Phase 2:安裝 rTorrent 執行環境與程式設定

Step 1:下載 rTorrent 關連套件及 rTorrent 程式

cd /usr/src
wget http://curl.haxx.se/download/curl-7.20.0.tar.gz
wget http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.0/libsigc++-2.0.18.tar.gz
wget http://www.openssl.org/source/openssl-1.0.0.tar.gz
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.6.tar.gz
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.6.tar.gz

Step 2:編譯並安裝 rTorrent 關連套件,因為有相依關係請按照以下的順序安裝。

curl:

tar zxvf  tar zxvf curl-7.20.0.tar.gz
cd curl-7.20.0c
./configure --prefix=/usr
make
make install

libsigc++-2.0:

tar zxvf libsigc++-2.0.18.tar.gz
cd libsigc++-2.0.18
./configure --prefix=/usr
make
make install

openssl:

tar zxvf openssl-1.0.0.tar.gz
cd openssl-1.0.0
./config --prefix=/usr
make
make install

Step 3:編譯及安裝 libtorrent (rTorrent 會用到的 P2P 相關函式庫) 以及 rTorrent 程式。

libtorrent:

tar zxvf libtorrent-0.12.6.tar.gz
cd libtorrent-0.12.6
./configure --prefix=/usr
make
make install

rTorrent 編譯及安裝,並支援 xmlrpc-c:

tar zxvf rtorrent-0.8.6.tar.gz
cd rtorrent-0.8.6
PKG_CONFIG_PATH="/usr/lib/pkgconfig"
 ./configure --prefix=/usr --with-xmlrpc-c
make
make install

Step 4:接著請在自己的家目錄下(例如/home/abokuo)建立名為「.rtorrent.rc」的檔案,作為 rTorrent 執行時的細部設定。

#/ ----------------------------------------
#/ rTorrent 設定檔
#/ 檔名:.rtorrent.rc(隱藏檔,前面有點)
#/ 存放位置:~ (使用者家目錄)
#/ ----------------------------------------

#/ 每torrent最小/最大連接數
min_peers = 50
max_peers = 200

#/ 每 torrent 最大上傳數
max_uploads = 2

#/ 上傳和下載速度限制,設0=無限制(單位 KBps)
download_rate = 0
upload_rate = 128

#/ 隨機 port 範圍
#/ 範例:port_range = 6890-6999
port_range = 15000-15000

#/ 下載檔名編碼
encoding_list = UTF-8

#/ 下載檔案存放目錄,請依情況修改
directory = /home/abokuo/p2p/downloads

#/ torrent 存放目錄 和 排程設定
session = /home/abokuo/p2p/session

#/ 放在此目錄的中的torrent會自動加入列表,請依情況修改位置
schedule = watch_directory,5,5,load_start=/home/abokuo/p2p/torrents/*.torrent

#/ DHT 開關
dht = on

#/ DHT port (預設為 6881)
dht_port = 15000
scgi_port = 127.0.0.1:5000

#/ Enable removal for all downloads added from this watch directory.
#/ 讓存放在此目錄的種子所下載的檔案都能被刪除
schedule = watch_directory,5,5,"load_start=/home/abokuo/p2p/torrents/*.torrent,d.set_custom1=1"

#/ Erase data files when a download is removed that still has custom2 set.
#/ 一旦刪除「下載列表」中的種子,就同時刪除下載的檔案
on_erase = rm_files,"branch=d.get_custom1=,\"execute={rm,-rf,--,$d.get_base_path=}\""

Step 5:利用 screen 程式讓 rTorrent 在背景執行,同時請記得幫 rTorrent 開啟對應的通訊埠。

su abokuo(請改成一般使用者的id)
screen
rtorrent

  啟動 rTorrent 程式後按下「Ctrl + a」與「Ctrl + d」就能讓 rTorrent 在背景執行,要回到 rTorrent 請輸入:

screen –r

  rTorrent 設定檔會以隱藏檔方式存在,如果在像是「檔案管理員」之類程式看不到的話請記得開啟「顯示隱藏檔」的設定。有關「.rtorrent.rc」的更多細部設定可以參考 http://libtorrent.rakshasa.no/wiki/RTorrentCommonTasks(英文)。

開機就啟動rTorrent

  我們還可以將以下的內容存成「rtorrent.sh」檔案,將其賦予「可執行」屬性後加入「/etc/rc.local」檔案中,就能在系統開機的同時啟動 rTorrent。檔案內容如下:

#/!/bin/sh

case "$1" in
  start)
        echo -n "Starting rtorrent"
        su - abokuo -c "screen -A -d -m -S rtorrent /usr/bin/rtorrent" &
        echo "."
        ;;
  stop)
        echo -n "Stopping rtorrent"
        ppid=`ps ax | grep "/usr/bin/rtorrent" | grep -v grep | grep -v screen | awk '{ print $1 }'`
        kill ${ppid}
        echo "."
        ;;
  restart)

        echo -n "Restarting rtorrent"
        ppid=`ps ax | grep "/usr/bin/rtorrent" | grep -v grep | grep -v screen | awk '{ print $1 }'`
        kill ${ppid}
        sleep 1
        su - abokuo -c "screen -A -m -d -S rtorrent /usr/bin/rtorrent" &
        echo "."
        ;;
  *)
        echo "Usage: {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

  需要更動的地方有:

  • 第06及第21行:abokuo請改成自己所設定的一般使用者id。
  • 第06, 11, 18, 21行:rTorrent的位置(/usr/bin/rtorrent)請按自己的情況更改路徑,如果無法在開機流程中順利啟動rTorrent多半是因為程式路徑有誤。

  之後請記得將「rtorrent.sh」賦予「可執行」屬性:

chmod +x (rtorrent.sh的路徑)/rtorrent.sh

  最後在「/etc/rc.local」檔案中加上以下的內容就能在開機的同時載入 rTorrent囉!

su - abo -c "screen -fa -d -m rtorrent"
#/start rtorrent
(rtorrent.sh的路徑)/rtorrent.sh start

 

rTorrent在終端接介面時的畫面(引用自網友小浮萍的《rTorrent畫面與功能使用教學》)

 

rTorrent操作方式簡介

  只要將種子檔案放到剛才設定檔定義的目錄中,不一會 rTorrent 就會把它加入下載任務中,透過像是 putty 或是 pietty 程式,就能以遠端操作方式在終端機模式下操作 rTorrent。透過鍵盤就能操作 rTorrent 各項功能,比較常用的功能項目如下表所示:
 

 

命令
說明
Ctrl + q
關閉程式
注意:如果按照前述內容透過 screen 程式將 rTorrent 置於背景模式執行的話,請先按 Ctrl+a 之後再按 Ctrl+q。
↑/↓
選擇項目上/下
返回之前一頁
a | s | d
增加全域最大上傳的速度,級距為 1/5/50 KB。
A | S | D
增加全域最大下載的速度,級距為 1/5/50 KB。
z | x | c
減少全域最大上傳的速度,級距為 1/5/50 KB。 
Z | X | C
減少全域最大下載的速度,級距為 1/5/50 KB。
+ | -
改變種子下載的優先權,記有 auto(自動)/low(低)/off(關)/high(高)四種模式

 

  詳細的鍵盤操作方式可以參考網友小浮萍的《rTorrent畫面與功能使用教學》:http://www.orz101.com/rtorrent/userguide?

如果我說rTorrent可以透過瀏覽器操作,你會不會打我?(逃)

  在 rTorrent 官網頁面上同時也列出了第三方開發的應用程式,讓使用者也能透過瀏覽器操作 rTorrent。以筆者實際安裝過後發現「rutorrent」在操作介面與 Windows 上面同樣標榜「短小精悍」的「utorrent」相當接近;「wtorrent」則有漂亮的介面及種子詳細內容檢視功能。兩者操作介面都有正體中文顯示,朋友可以擇一安裝,兩個都裝也是沒有問題的。

用網頁遙控rTorrent:rutorrent篇

  先下載 rutorrent,網址是「http://rutorrent.googlecode.com/files/rutorrent-3.0.tar.gz。將檔案解壓縮之後會得到名為「rutorrent」的資料夾,將其上傳至 apache 伺服器的網頁路徑下,然後在瀏覽器網址列輸入:

http://(apache伺服器網址)/rutorrent

  就可以透過 rutorrent 操作 rTtorrent 囉!


在安全性與方便性的考量下,筆者建議以一般使用者登入後再執行rTorrent,下載下來的檔案可以透過Samba作複製/搬移/刪除等動作。

幫rutorrent上鎖

  完成上述步驟後只要透過瀏覽器就能將種子丟給 rTorrent 下載,也可以瀏覽下載進度。不過!只要知道網址的情況下誰都可以看到正在下載什麼東西(羞)……。我們可以透過 apache 的驗證功能為 rutorrent 的目錄資料夾上鎖,讓輸入網址的使用者必須輸入正確的登入資訊後才能瀏覽。

  請先確認 apache 伺服器已經正確運作並且有載入「mod_auth」模組,接下來請以 root 權限執行以下動作:

Step 1:在終端機模式下輸入以下內容,其中「/home/abokuo/html/rutorrent」請改成rutorrent的存放目錄,最後面的「abokuo」請改成網頁認證時要輸入的使用者名稱。

htpasswd –c /home/abokuo/html/rutorrent/htpasswd abokuo

Step 2:請輸入認證時所要輸入的密碼,再輸入一次作為確認。

Step 3:請更改 apache 的設定檔,以 CentOS 的情況預設是「/etc/httpd/conf/httpd.conf」,請在最後面加入以下內容:

<Location /rutorrent>
AuthName "Private" #引號內的內容會顯示成認證時的顯示抬頭
AuthType Basic
AuthBasicProvider file
AuthUserFile /home/abokuo/html/rutorrent/htpasswd #這裡請以絕對路徑方式改成rutorrent所在的目錄
Require user abokuo #與Step 1的使用者名稱相同
</Location>

這裡所提到的「使用者名稱」與「認證時的密碼」與 Linux 系統中既有的使用者帳號資訊沒有關係。


Step 4:將上述內容存檔後重新啟動 apache 伺服器讓更改內容生效。

service httpd restart

   上鎖後,輸入 rutorrent 所在的網址就會出現認證訊息,不用擔心下載內容給人看光光囉。

幫rutorrent所在的網頁目錄上鎖,讓下載進度保密。

用網頁遙控rTorrent:wutorrent篇

Step 1:在終端機模式下透過 yum 服務安裝 sqlite 簡易資料庫程式讓 wtorrent 使用:

yum install sqlite

Step 2:請在瀏覽器網址列輸入:http://www.wtorrent-project.org/trac/changeset/latest/trunk/?old_path=%2F&format=zip,下載最新版本的 wtorrent 程式後,將其解開後會得到名為「wtorrent」的資料夾。

Step 3:修改安裝檔案內容:把 wtorrent 資料夾中位於 "lib\cls" 底下的 "Web.cls.php",在第 85 行將 "$this->_lang = 'en';" 更改成 "$this->_lang = 'zh_TW';",程式安裝介面就會是正體中文顯示囉。

Step 4:將 "wtorrent" 資料夾上傳至 apache 網頁伺服器的網頁文件目錄下,在瀏覽器網址列輸入以下內容進行 wtorrent 安裝動作:

http://(apache伺服器網址)/wtorrent/install.php

wtorrent安裝畫面

  1. 將語言設定成「zh_TW」,讓 wtorrent 的操作介面能以正體中文顯示。
  2. 把預設下載存放資料夾改成先前和「.rtorrent.rc」設定檔中相同的下載路徑(例如/home/abokuo/p2p/downloads)。
  3. 右方請輸入之後認證時所使用的使用者名稱以及密碼。

  輸入完後請先選擇「測試設定」看看一切是否正確,如果顯示的訊息正常就可以選擇「保存設定」將設定內容儲存,同時不要忘記將「install.php」檔案刪除。之後朋友就可以透過輸入「http://(apache伺服器網址)/wtorrent/」使用 wtorrent。

wtorrent採用AJAX技術,P2P下載也可以很有型!

一點遺珠之憾

  雖然可以透過瀏覽器介面將種子上傳給 rTorrent 進行下載動作,不過大概因為目錄權限的關係,以瀏覽器介面上傳種子的下載任務,之後得透過手動方式刪除下載好的檔案…(透過 Samba 將種子放在指定資料夾後產生的下載任務,能夠在刪除的同時順便清掉相關檔案) 如果有朋友知道解決的方法還請不吝透過回應功能分享,感激不盡^^。

參考資料:

文章作者:A-Bo Lee
作者大頭照

居住在臺灣的 Joomler,期望以程式設計、開放原碼推廣活動收入養活一家老小。
35 歲後改姓李,id 作為曾為郭姓的證明。
FFXI:Abokuo@Sylph鯖、よろしくです。

看完文章有什麼想法嗎?利用下面表單告訴作者吧

請先閱讀
服務條款隱私權政策,送出回應意即同意前述文件。標記 * 欄位請務必填寫,電子郵件信箱僅作驗證使用,不會顯示在回應中。