1. 程式人生 > >[經驗技巧] 路由mini安裝OpenWRT源的Transmission外掛,實現PT下載(需SSH)

[經驗技巧] 路由mini安裝OpenWRT源的Transmission外掛,實現PT下載(需SSH)

經過研究發現,基於OpenWRT的小米路由器系統是支援OpenWRT源中的ipk外掛包的,通過opkg命令來安裝,前提是找到對應CPU架構的源。硬碟版板塊已經有人成功找到並安裝OpenWRT的源,但mini與硬碟版的CPU架構不同,不能使用硬碟版的源。最終,我成功找到的小米路由器mini可用的OpenWRT源。

首先感謝諸多網友的文章教程,正是參考了他們的成果才有了我今天的成果。主要參考了以下但不限於這些:
http://bbs.xiaomi.cn/thread-9701693-1-1.html
http://www.cnblogs.com/swordzj/archive/2012/12/30/2839788.html
http://bbs.xiaomi.cn/thread-9827624-1-1.html

http://bbs.xiaomi.cn/thread-10171076-1-1.html

再放一張最終的執行效果圖:


下面進入正題,其中補充說明的部分可以不看。

【一、安裝】


首先,當然要SSH到小米路由器mini下。

補充說明:
在安裝過程中我遇到了儲存空間不足的問題,通過“df -h”命令,可以檢視檔案系統的空間使用情況。發現內部/data儲存空間總共只有1MB,而ipk外掛包預設都是安裝到/data下的,空間完全不夠用啊。因此,我決定將外掛都安裝到USB儲存裝置中,也就是行動硬碟或優盤。官方外掛不也是安裝到USB儲存裝置中嗎,這還有個好處是可以有效阻止硬碟自動休眠導致PT下載失敗,當然也可能減少硬碟壽命,有利有弊。我曾經將ipk外掛安裝到/tmp記憶體中,PT下載時就遇到了這樣的問題,也可能不是硬碟自動休眠導致的,/tmp空間雖然大,但每次重啟都會丟失,需要重新安裝,安裝到USB儲存裝置就不會丟失。
  1. [email protected]:~# df -h
  2. Filesystem                Size      Used Available Use% Mounted on
  3. rootfs                   10.5M     10.5M         0 100% /
  4. /dev/root                10.5M     10.5M         0 100% /
  5. tmpfs                    61.4M      2.4M     59.0M   4% /tmp
  6. tmpfs                   512.0K         0    512.0K   0% /dev
  7. /dev/mtdblock7            1.0M    752.0K    272.0K  73% /data
  8. /dev/mtdblock7            1.0M    752.0K    272.0K  73% /etc
  9. tmpfs                    61.4M      2.4M     59.0M   4% /userdisk/sysapiht tpd
  10. /dev/root                 1.0M    752.0K    272.0K  73% /mnt
  11. /dev/mtdblock7            1.0M    752.0K    272.0K  73% /mnt
  12. /dev/sda1               931.5G    614.8G    316.7G  66% /extdisks/sda1
複製程式碼

1. 修改OpenWRT源地址


vi編輯/etc/opkg.conf,修改首行後面的地址為“http:// downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base”,在最後一行新增“dest usb /extdisks/sda1/opkg”。
  1. [email protected]:~# vi /etc/opkg.conf
  2. src/gz attitude_adjustment http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
  3. dest root /data
  4. dest ram /tmp
  5. lists_dir ext /data/var/opkg-lists
  6. option overlay_root /data
  7. dest usb /extdisks/sda1/opkg
複製程式碼 更新源:
  1. [email protected]:~# opkg update
複製程式碼 補充說明:
從地址中可以看出“ramips”就是小米路由器mini的CPU架構,而“mt7620a”正是小米路由器mini的CPU型號。這個源地址正是安裝OpenWRT外掛包的關鍵。其中有兩個地址:
http:// downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
http:// downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages
“packages”結尾的源中才包含Transmission等應用,而“base”結尾的源中包含執行這些應用所需的基礎庫,因此我們先使用base源地址,安裝基礎庫。
最後新增一行“dest usb /extdisks/sda1/opkg”的目的是告知opkg外掛安裝命令增加一個外掛安裝目錄,也就是USB儲存裝置中的opkg目錄下(opkg目錄是我在USB儲存裝置中新建的目錄)。以後使用opkg命令安裝外掛時使用“opkg -d usb install ...”來安裝到USB儲存裝置中。

再補充說明:
如果你先用packages源地址試圖直接安裝Transmission,會提示缺少依賴的外掛包:
  1. [email protected]:~# opkg -d usb install transmission-daemon
  2. Installing transmission-daemon (2.84-1) to usb...
  3. Downloading http:// downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages/transmission-daemon_2.84-1_ramips_24kec.ipk.
  4. Collected errors:
  5. * satisfy_dependencies_for: Cannot satisfy the following dependencies for transmission-daemon:
  6. *      libc *  libcurl *       libopenssl *    libpthread *    libevent2 *    librt *
  7. * opkg_install_cmd: Cannot install package transmission-daemon.
複製程式碼 由此可以,需要先用base源地址安裝libc、libcurl、libopenssl、libpthread、libevent2、librt這些依賴的基礎外掛包。下面就來安裝它們。

2. 安裝Transmission所需的基礎外掛包


其中,libc無法通過“opkg -d usb install libc”來直接安裝,只能手動下載後安裝它。

首先進入到一個能夠下載檔案的目錄,可以是/tmp臨時目錄,但我用/extdisks/sda1/opkg目錄,下載後可以以後留用:
  1. [email protected]:~# cd /tmp
  2. 或者
  3. [email protected]:~# mkdir /extdisks/sda1/opkg
  4. [email protected]:~# cd /extdisks/sda1/opkg/
複製程式碼 下載libc基礎外掛包(它的地址可以通過在瀏覽器中開啟base源地址,搜尋“libc”找到):
  1. [email protected]:/extdisks/sda1/opkg# wget http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/libc_0.9.33.2-1_ramips_24kec.ipk
複製程式碼 安裝它(它會自動安裝依賴的libgcc包):
  1. [email protected]:/extdisks/sda1/opkg# opkg -d usb install libc_0.9.33.2-1_ramips_24kec.ipk
複製程式碼 安裝Transmission所依賴的其他外掛包,可以一起安裝:
  1. [email protected]:/extdisks/sda1/opkg# opkg -d usb install libcurl libevent2 libopenssl libpthread librt
複製程式碼 補充說明:
可以通過命令“opkg download libgcc libcurl libevent2 libopenssl libpthread librt libpolarssl zlib”一次性下載所有依賴的包到本地以後留用。
可以通過命令“opkg list-installed”列出當前安裝的外掛包:
  1. [email protected]:/extdisks/sda1/opkg# opkg list-installed
  2. libc - 0.9.33.2-1
  3. libcurl - 7.38.0-1
  4. libevent2 - 2.0.21-1
  5. libgcc - 4.8-linaro-1
  6. libopenssl - 1.0.1j-1
  7. libpolarssl - 1.3.8-2
  8. libpthread - 0.9.33.2-1
  9. librt - 0.9.33.2-1
  10. zlib - 1.2.8-1
複製程式碼

3. 安裝Transmission外掛包


首先要改成packages源地址,並更新源:
  1. [email protected]:/extdisks/sda1/opkg# vi /etc/opkg.conf
  2. src/gz attitude_adjustment http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages
  3. dest root /data
  4. dest ram /tmp
  5. lists_dir ext /data/var/opkg-lists
  6. option overlay_root /data
  7. dest usb /extdisks/sda1/opkg
  8. [email protected]:/extdisks/sda1/opkg# opkg update
複製程式碼 安裝Transmission的兩個元件:transmission-daemon(核心程式),transmission-web(網頁控制中心)
  1. [email protected]:/extdisks/sda1/opkg# opkg -d usb install transmission-daemon
  2. [email protected]:/extdisks/sda1/opkg# opkg -d usb install transmission-web
複製程式碼 至此安裝結束,下面來配置和啟動Transmission。

【二、配置和啟動】


1. 因為我們不是預設安裝到/data,而是按照到USB儲存裝置,所以執行下面這個命令新增“TRANSMISSION_WEB_HOME”環境變數,來告知Transmission網頁控制檯的所在目錄:
  1. [email protected]:/extdisks/sda1/opkg# export TRANSMISSION_WEB_HOME=/extdisks/sda1/opkg/usr/share/transmission/web/
複製程式碼 2. 啟動並生成預設的配置目錄(我將配置目錄同樣制定到USB儲存裝置中):
  1. # /extdisks/sda1/opkg/usr/bin/transmission-daemon -g /extdisks/sda1/opkg/transmission-daemon
複製程式碼 3. 編輯Transmission的配置檔案,其中"download-dir"是預設下載到的目錄,而"rpc-port"是網頁控制檯所用的埠,預設是9091:
  1. [email protected]:/extdisks/sda1/opkg# vi /extdisks/sda1/opkg/transmission-daemon/settings.json
  2. 修改以下:
  3.     "download-dir": "/extdisks/sda1/Downloads", 
  4.     "rpc-port": 9876,
  5.     "rpc-whitelist-enabled": false, 
  6. 如果要設定使用者名稱和密碼登陸(注意保留引號,感謝segafans分享方法):
  7.     "rpc-authentication-required": true,
  8.     "rpc-password": "密碼",
  9.     "rpc-username": "使用者名稱",
複製程式碼 補充說明:
修改埠的原因在於預設埠9091已經被系統佔用,名為“plugincenter”(外掛中心?)的程式:
  1. [email protected]:/extdisks/sda1# netstat -lpa | grep 9091
  2. tcp        0      0 localhost:9091          0.0.0.0:*               LISTEN      8099/plugincenter
複製程式碼 4. 重啟Transmission使修改後的配置生效:
  1. [email protected]:/extdisks/sda1/opkg# killall -HUP transmission-daemon
複製程式碼

【三、配置防火牆】


1. 編輯防火牆配置檔案,在檔案最後新增以下內容:
  1. [email protected]:/extdisks/sda1/opkg# vi /etc/config/firewall
  2. 新增以下:
  3. config rule 'transmission_web'
  4.         option src 'wan'
  5.         option dest_port '9876'
  6.         option proto 'tcp'
  7.         option target 'ACCEPT'
  8.         option name 'transmission mgmt from wan'
  9. config rule 'transmission_peer_tcp'
  10.         option src 'wan'
  11.         option dest_port '51413'
  12.         option proto 'tcp'
  13.         option target 'ACCEPT'
  14.         option name 'transmission incoming tcp'
  15. config rule 'transmission_peer_udp'
  16.         option src 'wan'
  17.         option dest_port '51413'
  18.         option proto 'udp'
  19.         option target 'ACCEPT'
  20.         option name 'transmission incoming udp'
複製程式碼 2. 重啟防火牆使配置生效:
  1. [email protected]:/extdisks/sda1/opkg# /etc/init.d/firewall restart
複製程式碼 至此,你可以在瀏覽器中輸入地址“192.168.31.1:9876”來訪問Transmission的網頁控制檯(出於習慣,我把路由器地址改成了192.168.1.1)。

每次重啟路由器都需要SSH到路由器下,執行下面兩個命令:
  1. # export TRANSMISSION_WEB_HOME=/extdisks/sda1/opkg/usr/share/transmission/web/
  2. # /extdisks/sda1/opkg/usr/bin/transmission-daemon -g /extdisks/sda1/opkg/transmission-daemon
複製程式碼 我曾嘗試讓其自啟動,通過將這兩行命令新增到/etc/rc.local中的“exit 0”之前,但失敗了。可能是因為在啟動指令碼執行時,USB儲存裝置還沒準備好。如果有誰成功實現自啟動就好了。