Raspberry Pi 的實作 - 下載從 eDonkey / eMule / Kademlia 分享的檔案

by 5/11/2014 0 意見

aMule 的官方網站在 http://www.amule.org/,這是一套電騾或電騾 P2P 下載程式,支援了 Windows、Linux、Mac、Solaris、FreeBSD ...等作業系統,用來下載 「ed2k://」開頭的文字連結。

最後更新日期 -2015/01/15


事前準備

  • Raspberry Pi Type B / B+,Type A 沒有內建網卡,必須自行安裝。
  • Raspbian 作業系統。
  • USB 外接硬碟,請特別注意,由於 Raspberry Pi 的供電不足以推動外接硬碟,所以一定要有獨立電源

開始安裝

  • 可以直接從 Raspbian 套件庫安裝。
    sudo apt-get -y install amule amule-daemon

  • 最後的版本是在 2011/11/26 更新的,完全不需要從原始碼重來一次,不過,若是想自己改些什麼的話,那就自行到 aMule 官網下載 吧。
    wget http://sourceforge.net/projects/amule/files/aMule/2.3.1/aMule-2.3.1.tar.bz2


    接下來將檔案解壓縮。
    tar jxvf aMule-2.3.1.tar.bz2


    解壓縮完畢之後,會出現一個新的目錄,進入這個目錄。
    cd aMule-2.3.1


    開始進行主程式的編譯及安裝。
    ./configure

    make
    && sudo make install

建立設定檔


我們利用 aMule 的背景服務程式 - amule daemon,來幫我們建立基本的設定檔 。
amuled

由於我們是第一次執行,會自動在家目錄產生一個 .aMule 目錄,設定檔都在裡面。

如果要限制使用者必須通過密碼的驗證才能使用,在輸入設定檔裡的密碼欄位時,就必須使用 MD5 編碼過的文字,所以我們要轉換一下我們的密碼。
echo -n 'amule-password' | md5sum | cut -d ' ' -f 1

4c551147a4c6b690fb7ef5ed51752123」,這就是經過 MD5 編碼後的文字別忘了將「amule-password」改成自訂的密碼

先修改 aMule 主設定檔,調整一些必要的參數。
vi ~/.aMule/amule.conf

找到「AcceptExternalConnections」,把 0 改成 1,允許外部網路進行連線。

找到「ECPassword」,貼上剛剛用 MD5 轉換過的密碼。

找到「Language」,後面加上 zh_TW。

找到「WebServer」,將下一行的「Enabled」,把 0 改成 1。

下二行的「 Password」,貼上剛剛用 MD5 轉換過的密碼。

最後,把暫存目錄及下載目錄指定到外接硬碟。
sudo mkdir /mnt/usb
sudo mount /dev/sda1 /mnt/usb
sudo mkdir /mnt/usb/Incoming
sudo mkdir /mnt/usb/Temp
sudo ln -s /mnt/usb/Incoming /home/pi/.aMule/Incoming
sudo ln -s /mnt/usb/Temp /home/pi/.aMule/Temp

如果現在馬上去試著啟動 aMule daemon。
sudo service amule-daemon restart

只會得到「warning」的訊息,原因是尚未設定 aMule daemon 執行服務用的使用者。

接著,我們編輯 amule daemon 的設定檔,設定 AMULED_USER = "pi"。
sudo vi /etc/default/amule-daemon

這時候再重新啟動 aMule daemon 才會成功。
sudo service amule-daemon restart


開啟防火牆的通訊埠


如果 Raspberry Pi 是放在 IP 分享器、無線基地台或防火牆的後面,就算我們安裝好主程式,也將設定檔編輯完成,沒有設定通訊埠轉送 (port forwarding) 時,此時也沒有辦法開始對外連線下載。

aMule 有幾個通訊埠需要開啟,下列是預設的埠號,可參考 eMule 官網的說明
  • 與伺服器連線:      TCP 4661, UDP 4665
  • 用戶端來源交換 : TCP 4662
  • 排隊資訊:             UDP 4672
  • Web UI:               TCP 4711
若不想用預設的通訊埠,可以在設定檔裡修改。決定欲使用的通訊埠後,請依照 IP 分享器、無線基地台或防火牆的操作說明,進行通訊埠的轉送。

這裡以 Tomato Firmware 為例,打開「通訊埠轉送」裡的「基本設定」,我把上面這些通訊埠對應到 Raspberry Pi 的 Private IP 10.0.0.41。



管理下載檔案


由於 aMule daemon 有內建 Web Server,只要用瀏覽器連上 http://x.x.x.x:4711,就可以打開主畫面了。

在 Enter Password 的欄位,輸入先前自訂的密碼「amlue-password」, 就可以進入管理介面了。

我們就拿一個在 eMule 界流傳已久,永久斷頭,絕對不會完檔的「PTT 好友檔」來測試。
ed2k://|file|[PTT]emule_friend.rar|23007826|CF52D1CAD8FFF93CF03DB26DF23260D2|/

把上面這行 ed2k 的連結,貼到畫面最下方的輸入框裡,再點選「Download link」按鈕開始下載。

aMule 就會把這串 ed2k 解析之後,進行下載動作。

連結是被加入了,但是等了很久,為什麼一直找不到來源呢??? 有兩個最大的原因 !!!
  1. 沒有連上任何一台伺服器,也沒有連上 Kad。
  2. 這個連結已經斷種,或是所有來源都下線,暫時沒在供檔。

先看一下最下方的連線狀況,兩個伺服器都是「Not connected」,難怪沒有來源。

首先,馬上檢查一下防火牆的設定, Port Forwarding 的設定是否正確,Raspbian 本機的 iptables 設定是否也開放了。

由於 ed2k 伺服器必須有實體的伺服器存在,而各國政府其實都對這種 P2P 技術沒什麼好感,所以幾乎都被掃光光了。

如果真的要加的話,Gruk.org 的电驴服务器列表 這邊還有一些可連線的清單,不過安全性請自行考量,希望哪天不會在社會版上看到各位的消息。

而 Kad 就沒有這個問題了,它並不需要實體伺服器的存在,可以參閱 維基百科 - Kad 網路;只要 Port Forwarding 的設定是正確的,Kad 會好好的完成它的工作。

至於,斷種的問題,這個就只能求老天了 !!!

ed2k 跟 BT 的玩法不同,BT 不講究上下傳的比例與貢獻度 (除非是玩 PT),所以大多人都是抓完就閃,導致熱門種幾乎可以滿速下載,可是斷種時間超快,而且幾乎沒有人在補種。

ed2k 非常注重貢獻度,早年在網速還在 256K 的時候,光個上傳 1 vs 下載 4 的規則,為了抓個檔案,還要想方設法供熱門檔來衝高貢獻度,但是也因為如此,ed2k 上面的檔案通常可以活得很久。

我自己就曾經遇過,某次找一個四、五年前的大檔案,本來想說兇多吉少,死馬當活馬醫,放著老騾慢慢拖它個兩個禮拜,沒想到真的還是可以完檔,標準的以時間換取空間。


參考資料


更新紀錄

  • 2014/05/11 撰文。
  • 2015/01/15 更新 - 加入了安裝畫面,修正錯誤的內容,加入了 WebUI 的操作方法。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

0 意見 :

張貼留言