我在想這個系列怎么才算完結(jié)呢?我覺得是當(dāng)我覺得這個小米路由器無論如何也壓榨不出新的功能和價值讓我覺得幸福了,我就讓他完結(jié)。
這次主要想給路由器升級兩個功能。
- 增加 aria2 下載功能
- 增加 Nginx + Mysql + PHP 的整套環(huán)境
原因是方便遠(yuǎn)程下載,另外可以把路由器當(dāng)做一個開發(fā)設(shè)備使用。
Aria2
Aria2是一個類似迅雷的下載工具,但是不同與迅雷的是他不會上傳你硬盤的資料,Aria2 支持多協(xié)議、多來源下載(HTTP/HTTPS、FTP、BitTorrent、Metalink),不喜歡迅雷的可以嘗試。
在 Tomato 上使用 Aria2比較簡單,前面我們已經(jīng)掛載好硬盤并且安裝好了 opkg 我們只要使用 opkg 安裝 Aria2就可以了。
opkg install aria2
安裝好了之前,可以使用如下命令啟動
aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c -D
但是這個啟動方法并不太好,我推薦使用配置文件的方式啟動,一次配置終生受益而且修改方便!下面重點(diǎn)講一下配置文件啟動的方式。
首先我們新建兩個文件aria2.conf,aria2.session這兩個文件一個是配置文件,另一個是下載的信息文件可以方便斷點(diǎn)續(xù)傳。我們分別放在一個相同目錄下,比如/tmp/mnt/sda/
然后是把下面內(nèi)容填入****aria2.conf****
## `#`開頭為注釋內(nèi)容, 選項(xiàng)都有相應(yīng)的注釋說明, 根據(jù)需要修改 ##
## 被注釋的選項(xiàng)填寫的是默認(rèn)值, 建議在需要修改時再取消注釋 ##
## 如果出現(xiàn)`Initializing EpollEventPoll failed.`之類的
## 錯誤提示, 可以取消event-poll選項(xiàng)的注釋 ##
## 文件保存相關(guān) ##
# 文件的保存路徑(可使用絕對路徑或相對路徑), 默認(rèn): 當(dāng)前啟動位置
dir=Aria2Data
# 啟用磁盤緩存, 0為禁用緩存, 需1.16以上版本, 默認(rèn):16M
disk-cache=32M
# 文件預(yù)分配方式, 能有效降低磁盤碎片, 默認(rèn):prealloc
# 預(yù)分配所需時間: none < falloc ? trunc < prealloc
# falloc和trunc則需要文件系統(tǒng)和內(nèi)核支持, NTFS建議使用falloc, EXT3/4建議trunc
file-allocation=falloc
# 斷點(diǎn)續(xù)傳
continue=true
## 下載連接相關(guān) ##
# 最大同時下載任務(wù)數(shù), 運(yùn)行時可修改, 默認(rèn):5
max-concurrent-downloads=5
# 同一服務(wù)器連接數(shù), 添加時可指定, 默認(rèn):1
max-connection-per-server=5
# 最小文件分片大小, 添加時可指定, 取值范圍1M -1024M, 默認(rèn):20M
# 假定size=10M, 文件為20MiB 則使用兩個來源下載; 文件為15MiB 則使用一個來源下載
min-split-size=10M
# 單個任務(wù)最大線程數(shù), 添加時可指定, 默認(rèn):5
split=5
# 整體下載速度限制, 運(yùn)行時可修改, 默認(rèn):0
#max-overall-download-limit=0
# 單個任務(wù)下載速度限制, 默認(rèn):0
#max-download-limit=0
# 整體上傳速度限制, 運(yùn)行時可修改, 默認(rèn):0
#max-overall-upload-limit=0
# 單個任務(wù)上傳速度限制, 默認(rèn):0
#max-upload-limit=0
# 禁用IPv6, 默認(rèn):false
disable-ipv6=true
## 進(jìn)度保存相關(guān) ##
# 從會話文件中讀取下載任務(wù)
input-file=/tmp/mnt/sda/aria2.session
# 在Aria2退出時保存`錯誤/未完成`的下載任務(wù)到會話文件
save-session=/tmp/mnt/sda/aria2.session
# 定時保存會話, 0為退出時才保存, 需1.16.1以上版本, 默認(rèn):0
save-session-interval=60
## RPC相關(guān)設(shè)置 ##
# 啟用RPC, 默認(rèn):false
enable-rpc=true
# 允許所有來源, 默認(rèn):false
rpc-allow-origin-all=true
# 允許非外部訪問, 默認(rèn):false
rpc-listen-all=true
# 事件輪詢方式, 取值:[epoll, kqueue, port, poll, select], 不同系統(tǒng)默認(rèn)值不同
#event-poll=select
# RPC監(jiān)聽端口, 端口被占用時可以修改, 默認(rèn):6800
#rpc-listen-port=6800
## BT/PT下載相關(guān) ##
# 當(dāng)下載的是一個種子(以.torrent結(jié)尾)時, 自動開始BT任務(wù), 默認(rèn):true
#follow-torrent=true
# BT監(jiān)聽端口, 當(dāng)端口被屏蔽時使用, 默認(rèn):6881-6999
listen-port=51413
# 單個種子最大連接數(shù), 默認(rèn):55
#bt-max-peers=55
# 打開DHT功能, PT需要禁用, 默認(rèn):true
enable-dht=false
# 打開IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT網(wǎng)絡(luò)監(jiān)聽端口, 默認(rèn):6881-6999
#dht-listen-port=6881-6999
# 本地節(jié)點(diǎn)查找, PT需要禁用, 默認(rèn):false
#bt-enable-lpd=false
# 種子交換, PT需要禁用, 默認(rèn):true
enable-peer-exchange=false
# 每個種子限速, 對少種的PT很有用, 默認(rèn):50K
#bt-request-peer-speed-limit=50K
# 客戶端偽裝, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 當(dāng)種子的分享率達(dá)到這個數(shù)時, 自動停止做種, 0為一直做種, 默認(rèn):1.0
seed-ratio=0
# 強(qiáng)制保存會話, 話即使任務(wù)已經(jīng)完成, 默認(rèn):false
# 較新的版本開啟后會在任務(wù)完成后依然保留.aria2文件
#force-save=false
# BT校驗(yàn)相關(guān), 默認(rèn):true
#bt-hash-check-seed=true
# 繼續(xù)之前的BT任務(wù)時, 無需再次校驗(yàn), 默認(rèn):false
bt-seed-unverified=true
# 保存磁力鏈接元數(shù)據(jù)為種子文件(.torrent文件), 默認(rèn):false
bt-save-metadata=true
如果你有特別的需求可以根據(jù)上面的說明修改參數(shù)。
然后使用aria2c --conf-path=/tmp/mnt/sda/aria.conf -D啟動即可。
aria 目前沒有自帶的圖形界面,不過有人開發(fā)過界面。
進(jìn)入后修改一下配置:

替換為你的路由器 ip 即可。
這樣你就可以使用 Aria2了。更多的方法可以參考以下內(nèi)容:
Aria2 源碼/程序下載
配置示例下載
Windows 懶人包下載
YAAW 搭配腳本
迅雷離線
Chrome Extension: ThunderLixianAssistant
UserScript: ThunderLixianExporter
旋風(fēng)離線
UserScript: XuanFengEx
UserScript: LixianExporter
百度網(wǎng)盤
Chrome Extension: BaiduExporter
Firefox Addons: BaiduExporter
UserScript: BaiduPanDownloadHelper
其他腳本
Chrome Extension: 添加到aria2
Nginx + Mysql + PHP
這套環(huán)境是比較標(biāo)準(zhǔn)的開發(fā)環(huán)境。Tomato 是可以完美支持這套環(huán)境的。下面講下如何配置安裝。
首先還是需要使用 opkg安裝一系列環(huán)境支持。
opkg update
opkg install php5 php5-mod-gd php5-mod-session php5-mod-pdo php5-mod-pdo-mysql php5-mod-mysql php5-mod-mcrypt php5-mod-mbstring php5-fastcgi php5-cgi php5-mod-xml php5-mod-ctype php5-mod-curl php5-mod-exif php5-mod-ftp php5-mod-iconv php5-mod-json php5-mod-sockets php5-mod-sqlite3 php5-mod-tokenizer php5-mod-zip
以上組件可以選擇性安裝,如果你的路由器存儲夠就一步到位,不夠的話就安裝****php5 php-cgi php-mod-mysql****
安裝以下必備組件。
opkg install mysql-server nginx spawn-fcgi zoneinfo-core zoneinfo-asia shadow-groupadd shadow-useradd
這樣就完成了所有的必備組件的安裝,后面就需要配置所有的內(nèi)容。
首先建立一個 Nginx 的網(wǎng)站目錄并給他單開一個用戶組 www。
mkdir /tmp/mnt/sda/www
groupadd www
useradd -g www www
chown -R www:www /tmp/mnt/sda/web
然后修改 Nginx 配置:
vi /opt/etc/nginx/nginx.conf
修改為:
user www www;
worker_processes 1;
#pid /var/run/nginx.pid;
#error_log /var/log/nginx_error.log;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
access_log off;
include vhost.conf;
}
添加****vhost.conf****文件:
vi /opt/etc/nginx/vhost.conf
內(nèi)容為:
server {
listen 80;
server_name localhost;
root /tmp/mnt/sda/web;
index index.html index.htm index.php default.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~* ^.+\.php(\/.*)*$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
修改****fastcgi_params****文件,解決Nginx文件類型錯誤解析漏洞。
vi /opt/etc/nginx/fastcgi_params
為
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 403;
}
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
到這 Nginx 的配置就完成了!
接下來開始配置 Mysql!
- 配置 Mysql
創(chuàng)建默認(rèn)的數(shù)據(jù)庫
/opt/bin/mysql_install_db --force - 啟動mysql
/opt/etc/init.d/S70mysqld start - 輸入如下命令創(chuàng)建mysql的密碼
/opt/bin/mysqladmin -u root password xxxxxx - 登陸數(shù)據(jù)庫
mysql -u root -p
連接上mysql之后,創(chuàng)建數(shù)據(jù)庫。這樣數(shù)據(jù)庫也初始化配置完畢了。
最后是 PHP 的相關(guān)配置!
修改 ****php.ini****文件
vi /opt/etc/php.ini
做一下修改
short_open_tag = on #將該選項(xiàng)修改為 on
#doc_root = "/mnt/www" #將該選項(xiàng)注釋
#將以下選線注釋消除
extension=ctype.so
extension=curl.so
extension=gd.so
extension=mbstring.so
extension=mcrypt.so
extension=mysql.so
extension=pdo.so
extension=pdo_mysql.so
extension=session.so
extension=sockets.so
extension=tokenizer.so
extension=xml.so
#將一下選線注釋消除并修改為該值
[Date]
date.timezone = Asia/Shanghai
啟動****spawn-fcgi****
/opt/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 2 -f /opt/bin/php-cgi
啟動****Nginx****
/opt/etc/init.d/S80nginx start
這樣整個配置就完成了!
為了驗(yàn)證是否成功,進(jìn)入****/tmp/mnt/sda/web****目錄下面新建一個文件為****index.php****
echo "<?php phpinfo(); ?>" > index.php
然后在瀏覽器打開你的路由器 ip 例如:192.168.1.1 如果顯示如下頁面表示一切運(yùn)行正常!

接下來就是開始你的 『LNMP』學(xué)習(xí)之旅了!
尾聲
整個過程中 Mysql 的啟動,踩了一個坑,Nginx 無法顯示 phpinfo 的信息是第二個坑。給出以下建議
- 不輸入mysql_install_db –force的話會報一個錯誤
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/opt/var/run/mysqld.sock’ - 界面顯示403錯誤請一定查詢目錄的權(quán)限是不是****www****!
- 老的配置文件記得備份!