aria2配置示例

其实面对man的存在,写什么总结完全没有必要,一切宝藏都在manual。不过反正不会有人会读就是了。那我就写一下吧

##基础
首先,aria2或者叫做aria2c,它是一个下载器,嗯。
常用的两种模式是直接下载,比如 aria2c "http://host/file.zip" 这样,当它完成后就退出了,就像wget(估计你们也不知道吧)那样。
另一种就是rpc server模式,特点就是,它启动之后什么都不干,然后等着从rpc接口添加任务,下载完也不退出,而是一直等着。对,就像迅雷干的那样,当然,它不会上传你硬盘上的数据。

因为第一种方式要每次都敲命令,除非像我是原生nix,没有命令行就没法用电脑,估计也没什么用,于是常用的就是第二种。一般启动命令是 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c -D 。但是,其实*这个命令是不好的!不要使用这种启动方式。
首先,用命令方式导致配置不方便修改保存,-D导致无法看到出错信息。

推荐启动方式是使用配置文件 $HOME/.aria2/aria2.conf 。嗯,我知道路由上这个地址是无法修改或者重启后会丢失的,那么你可以放到别的地方,然后 aria2c --conf-path=<PATH> 注意 <PATH> 填完整路径,因为鬼知道这个程序是从那个路径启动的。-D (用于后台执行, 这样ssh断开连接后程序不会退出) 只有在确认OK之后在启动脚本中使用。

以下方案都基于配置文件方式

##图形界面
aria2是没有图形界面的,已知相对好用的图形界面有:

请使用chrome,firefox等现代浏览器访问。这两个东西都可以直接使用,除了看英文不爽以外,有什么必要下载回来使用?(吐槽:难道你们就不觉得webui-aria2的title总是被压成好几行,诡异的配色(对,说的就是那个蓝色背景,深蓝颜色的 Use custom IP and port settings 按钮)不难看吗?)
这两个东西上的配置在重启后都会失效! 使用配置文件保存您的设置

图形界面基本都基于RPC模式,所以一定确定开启了RPC,IP端口可访问,并且在管理器中填写了正确的地址

##配置

请将所有配置置于配置文件中
只有在确认配置无误后再加上 -D 选项
请阅读出错信息!

###RPC
需要1.14及以上版本
http://aria2.sourceforge.net/manual/en/html/aria2c.html#rpc-options

1
2
3
4
5
6
7
8
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
#rpc-listen-port=6800

如果启动时出现 Initializing EpollEventPoll failed. 或相似错误, 在配置中加上 event-poll=select

使用token验证(建议使用,需要1.18.4以上版本,帐号密码方式将在后续版本中停用!)

1
2
# token验证
rpc-secret=secret

在YAAW中使用 http://token:secret@hostname:port/jsonrpc 的地址格式设置secret.

如果需要使用密码验证(需要1.15.2以上,1.18.6以下版本)

1
2
3
4
#用户名
rpc-user=username
#密码
rpc-passwd=passwd

在YAAW中使用 http://username:passwd@hostname:port/jsonrpc 的地址格式设置密码.
对于RPC模式来说, 界面和后端是分离的, 只要给后端设置密码即可. 前端认证什么的是毫无意义的.
如果你比较新潮, 在YAAW中也可以用 ws:// 为前缀,只用websocket连接aria2c, 如果你不知道websocket是什么. 那就算了.

###速度相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=5
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#断开速度过慢的连接
#lowest-speed-limit=0
#验证用,需要1.16.1之后的release版本
#referer=*

###进度保存相关
aria2c只有在正常退出时(ctrl-c), 突然断电是无法保存进度的. 在第一次使用的时候会出现会话文件不存在的错误, 手动创建一个空文件即可. 如果您编写的是自动启动脚本, 在启动aria2前加上 touch aria2.session 这句命令.

1
2
3
4
input-file=/some/where/aria2.session
save-session=/some/where/aria2.session
#定时保存会话,需要1.16.1之后的release版
#save-session-interval=60

###磁盘相关

1
2
3
4
5
6
7
8
9
#文件保存路径, 默认为当前启动位置
dir=/some/where
#文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
#enable-mmap=true
#文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
#所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
file-allocation=prealloc

###BT相关
http://aria2.sourceforge.net/manual/en/html/aria2c.html#bittorrent-specific-options

1
2
3
4
5
6
7
8
9
10
11
12
#启用本地节点查找
bt-enable-lpd=true
#添加额外的tracker
#bt-tracker=<URI>,…
#单种子最大连接数
#bt-max-peers=55
#强制加密, 防迅雷必备
#bt-require-crypto=true
#当下载的文件是一个种子(以.torrent结尾)时, 自动下载BT
follow-torrent=true
#BT监听端口, 当端口屏蔽时使用
#listen-port=6881-6999

aria2亦可以用于PT下载, 下载的关键在于伪装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#不确定是否需要,为保险起见,need more test
enable-dht=false
bt-enable-lpd=false
enable-peer-exchange=false
#修改特征
user-agent=uTorrent/2210(25130)
peer-id-prefix=-UT2210-
#修改做种设置, 允许做种
seed-ratio=0
#保存会话
force-save=true
bt-hash-check-seed=true
bt-seed-unverified=true
bt-save-metadata=true
#定时保存会话,需要1.16.1之后的某个release版本(比如1.16.2)
#save-session-interval=60

##常见问题
###Internal server error
手动访问你的JSON-RPC地址 http://hostname:port/jsonrpc?jsoncallback=1 如果没有返回, 请确认aria2是否启动以及连通性. 如果aria2在路由器后或没有公网IP, 请做好端口映射.

###如何使用迅雷离线

http://binux.github.com/ThunderLixianExporter/
安装后, 在迅雷离线的右上角的设置中设置RPC地址.
提供chrome插件: https://chrome.google.com/webstore/detail/thunderlixianassistant/eehlmkfpnagoieibahhcghphdbjcdmen

###如何使用旋风离线(QQ离线)
http://userscripts.org/scripts/show/142624安装脚本后, 在旋风离线页面使用.

###如何安装aria2
我也不知道, 看你的box上有什么开源包管理器之类的东西, 有什么用什么. 如果没有, google之, 如果没有, 放弃吧.

迅雷随便下

本来这个漏洞在loli.lu关闭的时候就已经被发现,并且也告知了相关人员,而且我一度认为这个漏洞是有意留下的。后来经+李草木提起,发现为数众多的迅雷云点播破解依旧用的是这个漏洞。既然要玩,就要玩票大的。

  • 任意地址,任意类型,立即提取下载链接
  • 管开坑,不管填
  • 您可能需要登陆一个迅雷账号(不需要VIP)

再也不会听不完电台了——萌否电台播放列表

一直不爽萌否电台的播放器,跳歌一首首跳太慢,mp3加载不了直接挂掉。想听个一百多首歌的电台不是时间不够,就是听到一半挂掉了。

于是,我有一个愿望,听完一次这个电台!。于是就有了这货

screenshot

代码依旧在github上,这里有一个书签,在播放页点一下即可使用:

javascript:void((function(){var d=document;var s=d.createElement('script');s.src='https://raw.github.com/gist/4087765/playlist.js';s.id='binux_js';d.body.appendChild(s)})())

#google你个sb

由于 #google你个sb 的原因,我的整个账号被disable了。任何与这个账号相关的包括但不限于:

  • 各种方式登陆
  • 各种服务
  • 各种同步失效
  • 向此邮箱发信=>被退信

都无法使用,能用的:

  • google code、chrome store上的项目能访问
  • app engine上的程序在运行

这已经是一周之前的事情了,期间无数次发信,论坛求助,没有收到任何回复。不过鉴于一年前起,所有账号都开始使用@binux.me进行注册,所有密码都使用lastpass接管,并且还是有挺多服务是允许修改邮箱的。一周之内竟然没有太大影响,只要我不忘记邮箱密码,应该就没问题。

###永远不要相信免费(包括google)
这是我领悟到的第一个道理。在disable的开始几天,我每天都发信,每天都幻想google会如何回复,会不会直接拒绝恢复账号。一个周末过去了,我发现我错了,非常严重的错了。那个“与我们联系”页面完全如同一个静态页面,无论你提交什么,它都会杉杉有礼地告诉你,“您的信息已收到”。然后,就没有然后了。

永远不要相信有什么免费的东西,即使他是google提供的。一个产品如果对你来说是免费的,这意味着你根本不是他们的客户,你只是他们的商品。他们从你这里拿走他们想要的隐私,然后卖给他们的客户。他们在乎的是大数量的用户,在乎的是他们的客户,一两个的用户他们根本不在乎。一旦你变得和其他用户不一样,他们会做的不过是抛弃你,就像那些残次的商品一样。

当有一天,他们终止了你的服务,没有警告,不负责任(这已经写在协议里了哦,亲)。然后,什么都没有了。你原以为所有的,创造的,购买的。没有了,都没有了。假如你用着chromebook,16G硬盘,云。。呵呵(有比“呵呵”更好的词吗?!)

###鸡蛋不要放在一个篮子里
这个google账号我已经用了7年,我注册时gmail还没有开始内测(这有另一个悲剧:因为我的账号早于gmail注册,开通gmail时,我惊讶的发现我的用户名不能用于gmail,必须另取一个。于是,我一开始注册的用户名占用了我的常用用户名,得到一个永远收不到任何信件的地址。这个问题直到7年之后的今天,也没有人想要去解决。)。我所有的服务都和它绑定在一起:

  • 我不再能收到gmail信件
  • 无法取回google+上都加了谁
  • 与原来的联系人聊天还要重新发送邀请
  • 不能看到自己网站的统计数据
  • 不能访问docs上的文档
  • chrome strore上的插件不再更新
  • app engine上的代码拿不下来
  • reader里面30w的阅读记录
  • 手机同步,购买的应用
  • chrome数据同步,openid登陆的网站

都是一个账号。好吧,不过是再也不能贴出2005年的搜索记录罢了。

###少于三个备份的数据是不存在的
云同步,云备份安全吗?这就是一个活生生的例子。云服务不过是使用权而已,什么你的还是你的,这仅限于它存在的情况下,不存在于你自己控制的,拥有所有权的永久存储设备上的数据都是不存在的!而且,为了防止存储设备损坏,至少要三个备份,分别存放于大于1千米范围外的地方。

云同步,云备份看起来多么美好。自家的硬盘有可能:

  • 使用时间过长,挂
  • 不小心清空,挂
  • 高空坠落,挂
  • 产品品质,挂

但是,比起不知道谁执行了rm /,不知道哪个机房电力供应故障,不知道什么时候倒闭。自家的硬盘至少挂得清清白白,挂也挂在自己手上,挂了也是自家的坏硬盘


总之,google你个sb,我跟你没玩!

我已经在考虑写一个自动提交与我们联系的脚本,每天一发,直到google玩完,要么我玩完。

从wordpress迁移到jekyll

又到月末了,这一个月还没写blog呢。。虽然这段时间发生了很多事

  • 做了一个外包
  • 回了一趟家
  • 公司要搬家了

不过因为沉迷了半个月的D3,一个月的WOW,人变懒了。再加上wordpress的html写作方式搞得我非常没有写blog的欲望,一直想迁移到jekyll用markdown来写。为了每个月写一篇blog的目标,于是下决心迁移。。

由于jekyll太简单了,工具又少,不能立即使用,于是用jekyllbootstrap作为基础。另一个热门的选择是Octopress

不过这两都太jekyll了,于是把原来wordpress的主题以前迁移了过来。

迁移准备

首先,迁移评论,在使用wordpress时就开始准备,把评论导入disqus,然后用disqus替换wordpress的评论系统,工作了一周没有问题之后开始迁移。

安装

安装jekyll本地环境,参照https://github.com/mojombo/jekyll/wiki/install即可。为了语法高亮,把Pygments也装上

安装JB,跟着jekyllbootstrap首页上的Zero to Hosted Jekyll Blog in 3 Minutes做就好了

迁移

将wordpress内容导出成xml文件

将xml变成markdown:https://github.com/thomasf/exitwp

开始使用

jekyll --server 然后访问本地 http://localhost:4000/ 看看效果。
因为用了jekyllbootstrap,可以去 http://themes.jekyllbootstrap.com/ 选择主题安装

rake post title="asdfasdf" 新建文章

rake page name="adsfasdf/asdf" 新建页面

然后就是用任何编辑器开始编写了

对了,发现maruku对于解析有中文的list,比如开头的那个,有bug,而且github的效果和本地是不完全一样的。。即使是markdown也问题多多啊。。

上传github

把整个git项目push上去就好,不过后来发现_site文件夹是不需要的,github会自己重新生成一遍。这样就不需要每次都几千行改动了。

运行于百度云平台的Python网页代理

最近看到好多求BAE邀请的帖子,至少现在免费,于是也去求了一个,然后顺带开了python权限。
随便看了下python环境,版本够新,该有的库和框架也比较齐全,fetchurl接口完全封装在内置库中,至少比起GAE来说,迁移成本低多了。沙盒也是恰到好处的感觉,初步感觉不错。
提供的服务也涉及各个方面,云存储,数据库,cache,队列该有的都有了。
fetch taskqueue能fetchurl和离线下载(支持最大4G,10小时下载)体现了百度的特色吧,感觉眼前一亮,虽然已经有百度网盘提供类似服务,但是作为开发平台,也能作出一些有意思的应用。
消息服务自带1000条短信1W封邮件每月。

不过,百度依然体现了没有设计师的特色,界面和各个服务的开发包各不相同。。

由于BAE政策和稳定性尚不明朗,不打算在上面做能够保存数据的应用。
于是,做一个网页代理吧

http://pyproxy.duapp.com/https://github.com/binux

其他API:

http://pyproxy.duapp.com/rewrite/http://www.baidu.com/
使用这个地址访问会将页面上的url都加上代理的前缀

http://pyproxy.duapp.com/allow_origin/http://httpbin.duapp.com/ip
用于ajax跨域读取,比如这样:
您的IP是: 请自行查看源码

不得不说,百度网速也太不怎么样了吧。。
第一次写网页代理,地址改写还真麻烦,xmlhttprequest好歹是拦截了,js动态加载的元素就算了。。

附上rewrite代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# vim: set et sw=4 ts=4 sts=4 ff=unix fenc=utf8:
# Author: Binux<[email protected]>
# http://binux.me
# Created on 2012-09-06 22:22:21

import urlparse
import re

xmlhttprequest = '''XMLHttpRequest.prototype._open=XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(m,u,a,us,p) {
var proxyurl='%s', baseurl='%s', a=document.createElement('a');
a.href=u;u=a.href.replace(proxyurl,'');u=proxyurl+(u.indexOf('http')==0?u:baseurl+u);
if(console&&console.log){console.log("XMLHTTPRequest:",u);}
return this._open(m,u,a,us,p);
}'''
http_re = re.compile("https?://", re.I)
href_re1 = re.compile("((href|src|action)\s*=\s*\"([^\"<>]+)\")", re.I)
href_re2 = re.compile("((href|src|action)\s*=\s*\'([^\'<>]+)\')", re.I)
href_re3 = re.compile("((href|src|action)\s*=\s*([^\'\"\s<>]+))", re.I)
xmlhttprequest_re = re.compile("<script", re.I)
def rewrite(proxyurl, baseurl, content):
#content = http_re.sub(proxyurl+"\g<0>", content)
for all, href, url in href_re1.findall(content):
rewrited_url = urlparse.urljoin(baseurl, url)
if not rewrited_url.startswith(proxyurl) and rewrited_url.startswith("http"):
content = content.replace(all, '%s="%s%s"' % (href, proxyurl, rewrited_url))
for all, href, url in href_re2.findall(content):
rewrited_url = urlparse.urljoin(baseurl, url)
if not rewrited_url.startswith(proxyurl) and rewrited_url.startswith("http"):
content = content.replace(all, '%s=\'%s%s\'' % (href, proxyurl, rewrited_url))
for all, href, url in href_re3.findall(content):
rewrited_url = urlparse.urljoin(baseurl, url)
if not rewrited_url.startswith(proxyurl) and rewrited_url.startswith("http"):
content = content.replace(all, '%s="%s%s"' % (href, proxyurl, rewrited_url))
content = content.replace("</title>", "</title><script>%s</script>" % xmlhttprequest % (proxyurl, urlparse.urljoin(baseurl, "/")), 1)
return content

https://gist.github.com/3663115

迅雷离线地址导出器——ThunderLixianExporter

按照计划,将loli.lu的导出功能带到官方原生界面上了。毕竟无论什么工具,都不如官方的稳定,方便。
虽然有一个Userscript的油猴脚本,但是实际上主要代码是直接插入到页面中的。。等稳定了,有时间了再做成完全的本地版吧。

功能特性:

* 迅雷离线原生界面

* 链接导出,aria2/wget下载命令导出,下载器导出文件,aria2 JSON-RPC支持

* 可以关闭不用的功能

* 统一的接口方便添加更多的下载方式

油猴脚本: ThunderLixianExporter.user.js

项目地址: http://binux.github.com/ThunderLixianExporter/

从LOLI.LU直接添加资源到ARIA2

loli.lu已关闭!
如需使用迅雷会员功能,请购买迅雷会员服务
如需在OSX,Linux环境下下载迅雷离线,请参阅ThunderLixianExporter

首先参照YAAW以RPC模式启动ARIA2,保证YAAW能正常工作。

在LOLI.LU中随便点开一个一个资源 > 批量下载。右键点击 自定义,填入以下脚本(注意需要替换JSONRPC_PATH,和YAAW中的一样):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function to_aria2(taskname, links, cookie) {
$.getScript("https://raw.github.com/gist/3116833/aria2jsonrpc.js", function() {
var aria2 = new ARIA2("<your rpc path>");
$.each(links, function(i, n) {
aria2.addUri(n.url, {out: n.title, header: 'Cookie: '+cookie});
});
});

var str = "";
str += "taskname = "+taskname+"\n";
str += "cookie = "+cookie+"\n";
str += "==========================\n";
$.each(links, function(i, n) {
str += "links["+i+"].title = "+n.title+"\n";
});
return str;
}

点击保存,点自定义,到YAAW中看是否添加成功了吧。

aria2 + web前端 部署指南

更新了openwrt的固件版本之后,我的wr703n上的aria2终于可以开启rpc模式了。然后就是WNR3500L到货,虽然不能装openwrt,但是有optware一样ok。
虽然他们的平台各不相同,但是因为YAAW是没有依赖的,实际上都是分为三步:

  1. 挂载U盘

  2. 安装aria2

  3. 打开YAAW

非常简单没有压力。

=============================================

第一步:挂载U盘

openwrt: http://wiki.openwrt.org/zh-cn/doc/howto/usb.storage

dd-wrt: 刷一个带USB的固件,固件中自动mount到/opt

tomato: 刷一个带USB的固件,固件中自动mount到/opt

第二步:安装aria2

openwrt: opkg update && opkg install aria2

dd-wrt: wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O - | tr -d '\r' > /tmp/optware-install.sh && sh /tmp/optware-install.sh && ipkg-opt update && ipkg-opt install aria2

tomato: http://tomatousb.org/tut:optware-installation

启动命令: aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c

如果没有问题的话,可以将 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c -D 加入开机启动

如果有问题的话,看输出的提示,有可能要加入--event-poll=select什么的参数

第三步:打开YAAW

点击demo,在扳手处填入path: http://<ip_of_your_route>:6800/jsonrpc, 保存

=============================================
一些有用的aria2参数

-i <file> 导入从loli.lu导出的aria2文件

-j <num> 同时下载数限制,由于路由和总带宽限制,建议设为3(默认5)

-x <num> 同一个服务器的同时链接数,建议为5-10(默认1)

-k <size> 文件最小分片,文件最多的线程数取决于能分出多少片,当文件小于最小分片大小时,只能开出一个线程,建议为2M(默认20M)

-s <num> 一个文件最多用几个线程下载,建议为8-10(默认5)

–file-allocation <none,prealloc,falloc> 文件预分配,如果USB设备是U盘,SD卡,预分配浪费时间,建议为none(默认prealloc)

更多参数请访问 Aria2 Manual