Mar 31

Kickass Torrents 还没有被取缔的时候,我下载磁力链接的软件是μTorrent,当时 Kickass Torrents 提供订阅功能,然后我在 μTorrent 上添加订阅链接,每天就会自动将我的感兴趣图书源源不断地下载到本地。后来 Kickass Torrents 到了,μTorrent只能在PC机上运行,不能在我的 Raspbery Pi 上运行,而 PC 机的耗电量太大了,所以我改用能在 Raspbery Pi 上运行的 Transmission 下载。Transmission 既可以下载种子,又可以下载磁力链接,但是没有订阅功能,只能一条一条的手动添加磁力链接,所以每当我要下载几十本书的时候就很郁闷。

现在通过 Google,我找到了一个间接的方法,通过 Linux 的 Shell 命令,用 Aria2c 批量将磁力链接转换为种子,再设置 Transmission 自动导入种子。而磁力链接的获取则可以通过爬虫的方式获得,这样就圆满地解决了我的问题。

1.设置 Transmission

mkdir Transmission-Torrents
sudo service transmission-daemon stop
sudo vim /etc/transmission-daemon/settings.json

在 Transmission 设置文件 settings.json 最后面增加/修改以下三项:

"watch-dir": "/home/pi/Transmission-Torrents",
"watch-dir-enabled": true,
"trash-original-torrent-files": true,

保存,启动 Transmission

sudo service transmission-daemon start

2.下载 magnet2torrent
地址:https://github.com/weirdcrap/magnet2torrent

git clone https://github.com/weirdcrap/magnet2torrent
cd magnet2torren
vim magnet2torren

设置 ~/movie-watch 为自己的目录,而我就设置为本目录,即 /home/pi/magnet2torrent
注释掉第33、41行,这样就不会每次自动删除磁力链接文件和生成的种子,我喜欢手动删除它们。修改第39行,系统里面 Aria2c 的地址,我的 Aria2c 是编译安装的,所以地址是 /usr/bin/aria2c。最后还需要提醒一下, Aria2c 必须具有能下载 BT 的功能,如果是自己编译安装的话记得将 BT 的功能加上。

3.开始批量添加磁力链接
启动 Aria2c

sudo aria2c --conf-path=/home/pi/.aria2/aria2.conf -D

添加磁力链接

vim /home/pi/magnet2torrent/1.magnet

在 1.magnet 试着添加几条磁力链接的种子,保存退出。然后运行 magnet2torren 生成种子。

sudo ./magnet2torrent

最后将批量生成的种子复制到 Transmission-Torrents 就行了。Transmission 自动将 种子添加到下载列表的速度非常快。

Mar 30

主路由器 (Router 1) 接入互联网,下面接入两台子路由器:Router 2 和 Router 3。Router 2 和 Router 3的 WAN 端口用网线连接到Router 1的 LAN 端口,两个子路由分别有自己的子网。这样的好处就是三个路由器可以根据需求分别管理,缺点就是管理比较复杂,更不方便的是 Router 2 和 Router 3 可以访问 Router 1 下的设备,如 NAS,Plex 等,但是 Router 1 不能访问 Router 2 和 Router 3 下的设备,这时就需要设置静态路由,实现各子域互通。

1.设置各路由器的静态 IP 地址
Router 1:
WAN IP:ISP Provideed
WAN Subnet:ISP Provideed
LAN IP:192.168.1.1
LAN Sunnet:192.168.1.0/24

Router 2:
WAN IP:192.168.1.2
WAN Subnet:192.168.1.0/24
LAN IP:192.168.2.1
LAN Sunnet:192.168.2.0/24

Router 3:
WAN IP:192.168.1.3
WAN Subnet:192.168.1.0/24
LAN IP:192.168.3.1
LAN Sunnet:192.168.3.0/24

2.设置主路由器
在 Setup->Advanced Routing 页面的 Static Routing 选项下添加内容。
Route Name: Router2
Destination LAN NET: 192.168.2.0
Subnet Mask: 255.255.255.0
Gateway: 192.168.1.2
Interface: LAN/WLAN

Route Name: Router3
Destination LAN NET: 192.168.3.0
Subnet Mask: 255.255.255.0
Gateway: 192.168.1.3
Interface: LAN/WLAN

3.设置两台子路由器
在Setup->Advanced Routing 页面的 Static Routing 选项下添加内容。
其中在 Router2 下添加:
Route Name: Router3
Destination LAN NET: 192.168.3.0
Subnet Mask: 255.255.255.0
Gateway: 192.168.1.3
Interface: LAN/WLAN

其中在 Router3 下添加:
Route Name: Router2
Destination LAN NET: 192.168.2.0
Subnet Mask: 255.255.255.0
Gateway: 192.168.1.2
Interface: LAN/WLAN

并且,在Setup->Advanced Routing 页面下,将 ‘Gateway’ 改成 ‘Router’ 模式,即将网管模式改成路由模式。

4.设置 Router2 和 Router3 的防火墙
在 Administration->Commands 页面下 添加防火墙的命令,然后让路由器开机自动运行。代码类似于

# Allow everything to be forwarded through the router (simple but do not use on routers directly connected to the internet)
iptables -I FORWARD -j ACCEPT

其中在 Router2 的防火墙应设置为

# Allow Router2 to forward traffic from Router1 and Router3's subnets
iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD -s 192.168.3.0/24 -j ACCEPT

其中在 Router3 的防火墙应设置为

# Allow Router3 to forward traffic from Router1 and Router2's subnets
iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD -s 192.168.2.0/24 -j ACCEPT

也可以在 Router1 上设置

# Allow the entire 192.168.0.0/16 block to be forwarded through the router
iptables -I FORWARD -s 192.168.0.0/16 -j ACCEPT

如果嫌命令行设置太麻烦,还有直接粗暴的方法:直接关闭 Router2 和 Router3 的防火墙,但是关闭路由器的防火墙后可能会有安全问题。

最后就是重启路由器,使上述设置生效。

参考资料:https://www.dd-wrt.com/wiki/index.php/Linking_Subnets_with_Static_Routes

Mar 20

快捷键 说明
Cmd + N 新建文件
Cmd + O 打开文件
Cmd + W 关闭文件
Cmd + Shift + T 打开最近关闭文件
Cmd + S 保存
Cmd + Shift + S 另存为
Cmd + Alt + S 全保存
Shift + Cmd + N 打开新窗口
Shift + Cmd + W 关闭窗口
NA 恢复到上一次保存时状态
Cmd + Z 撤销
Cmd + Y 或者 Cmd + Shift + Z 反撤销
Cmd + U 软撤销
Shift + Cmd + U 反软撤销
Cmd + Shift + V 保持缩进粘贴
Alt + Cmd + V 从剪切板中粘贴
Cmd + ] 缩进
Cmd + [ 取消缩进
Control + Cmd + ↑ 行上移
Control + Cmd + ↓ 行下移
Shift + Cmd + D 行复制
Shift + Control + K 行删除
Cmd + J 合并下一行
Cmd + / 行注释
Alt + Cmd + / 块注释
Shift + Cmd + Enter 行前插入一行
Cmd + Enter 行后插入一行
Cmd + Delete 删除本行光标前面的内容
Control + D 向后删除
Control + K 删除本行光标后面的内容
Control + T 和后一个字符调换
Alt + Cmd + . 补全标签
Cmd + Shift + W 用 p 标签包裹文字
Shift + Cmd + A 逐层选中父级标签包含的内容
Cmd + K , Cmd + Space 设置标记
Cmd + K , Cmd + A 选择当前光标到标记处的内容
Cmd + K , Cmd + W 删除当前光标到标记处的内容
Cmd + K , Cmd + G 清除标记
Cmd + Y 在光标当前位置粘贴最近一次剪切的内容
Alt + Cmd + ] 逐层折叠代码
Alt + Cmd + [ 展开代码
Cmd + K , Cmd + Y 展开所有代码
Cmd + K , Cmd + 1 一级折叠代码
Cmd + K , Cmd + num {num}级折叠代码
Cmd + K , Cmd + T 折叠标签属性
Cmd + K , Cmd + U 大写转换
Cmd + K , Cmd + L 小写转化
Alt + Cmd + Q 指定一行长度,然后将文本重新排序
Cmd + Space 显示补全
F5 对选中(或所有)行进行排序
Cmd + F5 对选中(或所有)行进行排序,区分大小写
Alt + Cmd + T 特殊字符选择
NA 选中(或所有)行的打乱、反转、去重 多重选择的排序、排序(区分大小写)、反转、去重和打乱
Cmd + Shift + L 将选中的块变成为多个光标选中每一行
Control + Shift + ↑ 选中上一行同一位置(冲突!改为 Alt + ↑)
Control + Shift + ↓ 选中下一行同一位置(冲突!改为 Alt + ↓)
ESC 恢复当个光标
Cmd + A 全选
Cmd + L 选中光标所在行
Cmd + D 选中光标所在单词
Cmd + Shift + Space 逐层向上选择块内容
Shift + Control + M 逐层向上选中括号内的内容
Cmd + Shift + J 逐层向上选中相同缩进的内容
Cmd + Shift + A 逐层向上选中便签内容
NA 反向选择 选中整段
Cmd + F 查找
Cmd + G 查找下一个
Cmd + Shift + G 查找上一个
Cmd + I 增量查找
Alt + Cmd + F 替换
Alt + Cmd + E 替换下一个
Alt + Cmd + G 快速查找
Control + Cmd + G 快速查找并选中全部
Cmd + D 同时选中下一个匹配项
Cmd + E 将选中的内容用于查找
Shift + Cmd + E 将选中的内容用于替换
Shift + Cmd + F 在文件夹中查找
F4 (文件夹查找)查找下一个
Shift + F4 (文件夹查找)查找上一个
Cmd + K , Cmd + B 显示(隐藏)侧边栏
Control + ` 打开控制台
Cmd + Control + F 全屏模式
Cmd + Shift + Control + F 无扰模式
Alt + Cmd + 1 单一布局
Alt + Cmd + 2 两列布局
Alt + Cmd + 3 三列布局
Alt + Cmd + 4 四列布局
Alt + Shift + Cmd + 2 两行布局
Alt + Shift + Cmd + 3 三行布局
Alt + Cmd + 5 田形布局
Cmd + K , Cmd + ↑ 移动文件到新的一组
Cmd + K , Cmd + Shift + ↑ 新建一组视图
Cmd + K , Cmd + ↓ 关闭一组视图
Cmd + K , Cmd + → 光标移动到下一组视图
Cmd + K , Cmd + ← 光标移动到上一组视图
Cmd + K , Cmd + Shift + → 文件移动到下一组视图
Cmd + K , Cmd + Shift + ← 文件移动到上一组视图
F6 拼写检查
Cmd + P 文件跳转
Cmd + R 函数(符号)跳转
Cmd + Shift + R 在工程文件夹中函数(符号)跳转
Alt + Cmd + ↓ 跳转到文件中定义改函数的地方
Control + G 行跳转
Control + - 光标位置后退
Control + Shift + - 光标位置前进
Alt + Cmd + → 下一个文件
Alt + Cmd + ← 上一个文件
Control + Tab (按访问顺序)上一个文件
Control + Shift + Tab (按访问顺序)下一个文件
Alt + Cmd + ↑ switch header/implementation
Control + L 滚动到光标所在位置
Control + Alt + ↑ 向下滚动
Control + Alt + ↓ 向下滚动一行
Cmd + F2 添加或者删除标签
F2 移动下一个标签
Shift + F2 移动到上一个标签
Shift + Cmd + F2 清除所有标签
Control + M 在匹配的括号之间跳转
NA 选中所有标签
Cmd + Shift + P 命令窗口
Cmd + B 编译
Cmd + C 取消编译
Control + Q 开始(结束)录制宏
Control + Shift + Q 执行宏
Cmd + Control + P 项目之间切换

Jan 20

1.下载 DD-WRT固件文件
buffalo-to-dd-wrt_webflash-MULTI.bin
http://dd-wrt.com/routerdb/de/download/Buffalo/WHR-G300N/v2/buffalo-to-dd-wrt_webflash-MULTI.bin

whr-g300nv2-firmware-MULTI.bin
http://dd-wrt.com/routerdb/de/download/Buffalo/WHR-G300N/v2/whr-g300nv2-firmware-MULTI.bin

2.刷入 buffalo-to-dd-wrt_webflash-MULTI.bin 固件
路由器通电,任意LAN口接PC。打开浏览器输入http://192.168.11.1,用户名root,密码为空。进入路由器管理界面。
点击“更新Air Station固件”,开始第一遍刷固件。用buffalo-to-dd-wrt_webflash-MULTI.bin。等待进度条结束,按住路由器Reset 15秒,然后用浏览器访问http://192.168.1.1(注意:这时地址已经变化了)。然后设置管理员用户名与密码。

3.刷入 whr-g300nv2-firmware-MULTI.bin 固件
选择“Administration” -> “Firmware Upgrade”, 这次用whr-g300nv2-firmware-MULTI.bin刷。等待刷新结束,再次Rest。再用浏览器访问http://192.168.1.1并设置管理员用户名与密码。

以上两步一定要保证路由器刷新过程中不可断电,也不要关闭浏览器!

参考资料:
1.http://www.tuicool.com/articles/6Fr6ru
2.http://blog.csdn.net/heiheihoho/article/details/8041956

Dec 21

1.Aria2 源码下载
http://sourceforge.net/projects/aria2/files/stable/

2.安装必须的库文件

sudo apt-get install gcc c++ autoconf automake libcppunit-dev  autopoint openssl libtool sphinx-common sphinxsearch libgcrypt11-dev libxml2-dev pkg-config

3.编译安装

tar zxvf aria2-1.17.tar.gz  
cd aria2-1.17.1  
./configure ARIA2_STATIC=yes --enable-bittorrent --enable-metalink

如果编译不能通过,可以删掉 ARIA2_STATIC=yes 选项:

./configure --enable-bittorrent --enable-metalink
make
sudo make install

4.添加启动脚本
/etc/init.d/aria2

#!/bin/sh  
  
### BEGIN INIT INFO  
# Provides:          aria2  
# Required-Start:  
# Required-Stop:  
# Default-Start:  
# Default-Stop:  
# Short-Description: aria2  
### END INIT INFO  
  
case $1 in  
        start)  
                touch /etc/aria2/session.txt  
                /usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf -D  
                ;;  
        stop)  
                killall aria2c  
                ;;  
        *)  
                echo "Usage: /etc/init.d/aria2 {start|stop}"  
                exit 1  
                ;;  
esac  
exit 0

5.增加启动项

sudo update-rc.d aria2 defaults

6.添加 Aria2 配置文件

enable-rpc=true  
rpc-allow-origin-all=true  
rpc-listen-all=true  
rpc-listen-port=6800  
#event-poll=select  
disable-ipv6=true  
  
max-concurrent-downloads=2  
continue=true  
max-connection-per-server=5  
min-split-size=10M  
split=5  
max-overall-download-limit=0  
max-download-limit=0  
max-overall-upload-limit=15k  
max-upload-limit=15k  
#lowest-speed-limit=0  
#referer=*  
input-file=/etc/aria2/session.txt  
save-session=/etc/aria2/session.txt  
save-session-interval=30  
dir=/nas/aria2  
disk-cache=16M  
enable-mmap=true  
  
file-allocation=none  
force-save=true   
  
follow-torrent=true  
bt-hash-check-seed=true  
bt-seed-unverified=true  
bt-save-metadata=true  
#bt-request-peer-speed-limit=2M  
bt-save-metadata=true  
#seed-time=10  
seed-ratio=0.1  
   
log=/etc/aria2/aria2.log  
log-level=error  
max-download-result=50