Raspberry Pi 的實作 - 下載用 HTTP、BT、Magnet、Metalink 分享的檔案

by 4月 30, 2014 4 意見        


aria2 的官方網站在 http://aria2.sourceforge.net/,這是一套支援多重協定、多重來源、輕量化的命令列下載工具,它支援了 HTTP、HTTPS、FTP、BiTorrent、 Magnet、Metalink 等多種的協定,可以透過內建的 JSON-RPC 及 XML-RPC 介面來進行遠端操作。

支援多種作業系統,Windows x86 / x64、Mac OS、Linux,連 Andriod 也有支援。

最後更新日期 - 2015/09/13


事前準備

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

開始安裝

  • 直接從 Raspbian 套件庫進行安裝。
    sudo apt-get -y install aria2

     
  • 要用最新版本的話,可以從 Aria2 官網下載,目前版號是 1.18.8。
    wget http://sourceforge.net/projects/aria2/files/stable/aria2-1.18.8/aria2-1.18.8.tar.gz

    將檔案解壓縮。
    tar zxvf aria2-1.18.8.tar.gz

    解壓縮完畢之後,進入剛產生的目錄。
    cd aria2-1.18.8

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

    這個步驟大約需要快二個小時,請耐心等待。
    make && sudo make install

建立設定檔


新增 aria2 的設定檔。
vi /home/pi/aria2.conf

設定參數可以參考 Aria2 官方說明,裡面有洋洋灑灑的數十個參數,下面是我的設定檔,已依照官方說明的段落編排,提供給各位參考。

其中,紅色的參數一定要依實際環境:硬碟掛載的目錄、通訊埠、網路頻寬等資料做適當的修改。
########## 我是分隔線 ##########
## Basic Options ##
# 下載目錄
dir=/mnt/usb
# 進度紀錄
input-file=/mnt/usb/.aria2/aria2.session
# 同時進行任務數
max-concurrent-downloads=5
# 斷線續傳
continue=true

## HTTP/FTP Options ##
# 最低停止速度下限
lowest-speed-limit=10K
# 同伺服器最大連線數
max-connection-per-server=10
# 多點下載的單一分塊最小容量
min-split-size=10M
# 以遠端時間為準
remote-time=true
# 多點下載數量
split=5

## HTTP Specific Options ##
# 修改特徵碼
user-agent=uTorrent/2210(25130)
# 支援 GZip
http-accept-gzip=true

## FTP Specific Options ##
# PASV 模式
ftp-pasv=true

## BitTorrent Specific Options ##
# 啟用本地端的種子來源
bt-enable-lpd=true
# 強制加密
bt-require-crypto=true
# 小於指定速度,就自動提高可請求的連線數
bt-request-peer-speed-limit=200K
# 持續一段時間速度=0 就停止下載
bt-stop-timeout= 180
# DHT 埠
enable-dht=true
# IPv4 DHT 路由表檔案
dht-file-path=/mnt/usb/.aria2/dht.dat
# IPv4 DHT 的通訊埠
dht-listen-port=6881-6999
# IPv4 DHT 進入點
dht-entry-point=router.utorrent.com:6881
# *.torrent 儲存到記憶體,然後自動開始下載
follow-torrent=mem
# BT 的通訊埠
listen-port=6881-6999
# 總上傳速度
max-overall-upload-limit=30K
# 單檔最大上傳速度
max-upload-limit=0
# Specify the prefix of peer ID
peer-id-prefix=-UT2210-
# 分享率
seed-ratio=10.0
# 做種時間(分)
seed-time=10080

## Metalink Specific Options ##
# *.meta4, *.metalink 儲存到記憶體,然後自動開始下載
#follow-metalink=mem

## RPC Options ##
# 啟用 RPC
enable-rpc=true
# Add Access-Control-Allow-Origin header field with value * to the RPC response.
rpc-allow-origin-all=true
# 監聽來自所有網路介面連入的 JSON-RPC/XML-RPC 請求
rpc-listen-all=true
# RPC 的通訊埠
rpc-listen-port=6800
# RPC 加密的 Token
#rpc-secret=<TOKEN>

## Advanced Options ##
# you can proceed but some download progress will be lost.
allow-piece-length-change=true
# 以背景服務模式執行
daemon=false
# 停用 IPv6 支援
disable-ipv6=true
# 硬碟快取
disk-cache=32M
# Map files into memory.
enable-mmap=false
# Specify the method for polling events.
event-poll=epoll
# 磁碟空間預先分配
file-allocation=falloc
# 總下載速度
max-overall-download-limit=10M
# 單檔最大下載速度
max-download-limit=0
# 小於指定大小的檔案,不預先分配磁碟空間
no-file-allocation-limit=5M
# 錯誤及未完成的檔案下載記錄
save-session=/mnt/usb/.aria2/aria2.session
# 每 n 秒儲存一次檔案下載記錄
save-session-interval=60
########## 我是分隔線 ##########

掛載 USB 外接硬碟,這邊用的分割區位置是 /dev/sda1,掛載的目錄是 /mnt/usb,檔案系統是 ext4。
sudo mkdir /mnt/usb
sudo mount -t ext4 /dev/sda1 /mnt/usb

手動建立 .aria2 設定檔目錄及相關檔案
sudo chown -R pi:pi /mnt/usb
mkdir /mnt/usb/.aria2

touch /mnt/usb/.aria2/aria2.session


執行主程式


設定檔編輯完成後,就可以測試它了,如果沒有出現任何錯誤訊息的話,請按「Ctrl + C」中斷。
aria2c --conf-path=/home/pi/aria2.conf


接著,將它設定成一個可以背景啟動的服務。
sudo vi /etc/init.d/aria2
########## 我是分隔線 ##########
#!/bin/sh
### BEGIN INIT INFO
# Provides:          aria2
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Aria2 Downloader
### END INIT INFO

USER=pi
CONF=/home/pi/aria2.conf

case "$1" in
  start)
    echo "Starting aria2c service"
    umask 0002
    su - $USER -c "aria2c --conf-path=$CONF -D"
    echo "done !"
    ;;
  stop)
    echo "Stopping aria2c service"
    sudo killall -w aria2c
    echo "done !"
    ;;
  restart)
    echo "Restarting aria2c service"
    sudo killall -w aria2c
    umask 0002
    su - $USER -c "aria2c --conf-path=$CONF -D"
    echo "done !"
    ;;
  *)
    echo "$0 {start|stop|restart}"
    ;;
  esac
exit

########## 我是分隔線 ##########

設定執行權限
sudo chmod +x /etc/init.d/aria2

測試服務是否可以正常啟動
sudo service aria2 restart

讓 aria2 在開機之後自動啟動
sudo update-rc.d aria2 defaults


開啟防火牆的通訊埠


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

aria2 有幾個通訊埠需要開啟,下列是預設的埠號:
  • RPC Port: TCP 6800
  • BT Port: TCP 6811 ~ 6999
  • DHT Port: TCP 6881 ~ 6999
若不想用預設的通訊埠,可以在設定檔裡修改。決定欲使用的通訊埠後,請依照 IP 分享器、無線基地台或防火牆的操作說明,進行通訊埠的轉送。

這裡以 Tomato Firmware 為例,打開「通訊埠轉送」裡的「基本設定」,我把上面這些通訊埠對應到 Raspberry Pi 的 Private IP,另外還開了 80 Port,因為等等要增加 Web 管理介面。


安裝管理介面


由於 aria2 只是提供命令列的指令,若想用圖型介面來操作,就要進行 Web 管理介面的安裝。

YAAW 畫面比較簡潔,webui-aria2 比較詳細,視個人喜好或需求下去決定用哪一套,甚至可以兩套都安裝,只要放在不同的網頁目錄即可。

這裡使用 Nginx 來提供 Web Service,介面選擇 webui-aria2,請參閱 Raspberry Pi 的實作 - 用 Nginx 架設網頁伺服器

先下載 webui-aria2。
wget https://github.com/ziahamza/webui-aria2/archive/master.zip

解壓縮檔案。
unzip master.zip

搬到 Nginx 的根目錄。
mv webui-aria2-master aria2
sudo mv aria2 /usr/share/nginx/www


開始下載檔案


處理好 Web 介面之後,只要用瀏覽器連上 http://x.x.x.x/aria2,就可以打開主畫面了。

我們就拿 CentOS 7 的種子檔 (torrent) 來測試,先連上 CentOS 的官網,找到 下載 的位置。

下載種子檔。

回到 Web 介面,點選「Add」-「By Torrents」。

點選「瀏覽」按鈕,將種子檔載入,再按「Start」按鈕開始下載。

這時就會開始下載工作了,最後能做的事就是 ...... 耐心的等待 !!!


異常處理



參考資料


更新紀錄

  • 2014/04/30 撰文。
  • 2015/01/14 調整文章內容,加入安裝畫面,並加入 Web 介面的安裝方法。
  • 2015/09/13 根據 Pilla 技術宅 的實測, 將 mmap 參數從 true 改成 false。

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

IT 技術家 - 創站部落客

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

4 則留言 :

  1. 默認apt-get安裝版本太舊,不支持定時保存進度,來試試新版。

    回覆刪除
    回覆
    1. 是啊,
      不管任何一個 Linux 發行版的官方套件庫,通常都不會收錄最新的版本,
      真的只能自己去抓 source code 來編譯。

      刪除
  2. 很多時候BT需要多一點時間
    建議把 bt-stop-timeout 設為 0

    回覆刪除
    回覆
    1. 這是個好建議,
      我會醬子設定的原因是因為我主力抓的都是熱門種,如果不是的話,的確要像你所說的做一下調整。

      刪除