本程序不提供任何担保。
您必须自行承担使用此程序的风险。
aria2 是一款文件下载工具。支持的协议包括HTTP(S)、FTP、SFTP、BitTorrent 和 Metalink。aria2 可以从多个来源/协议下载文件,并尝试最大程度地利用您的下载带宽。它支持同时从HTTP(S)/FTP/SFTP 和 BitTorrent 下载文件,同时从 HTTP(S)/FTP/SFTP 下载的数据会上传到 BitTorrent集群。使用 Metalink 的块校验和,aria2 会在下载文件(例如 BitTorrent)时自动验证数据块。
项目页面位于https://aria2.github.io/。
http_proxy
、https_proxy
、ftp_proxy
、all_proxy
和 no_proxy
WEB-Seeding <http://getright.com/seedtorrent.html>
_。我们的源代码维护在 Github 上:
https://github.com/aria2/aria2
要获取最新的源代码,请运行以下命令:
$ git clone https://github.com/aria2/aria2.git
这将在您的当前目录中创建一个 aria2 目录,并将源文件
存储在那里。
features | dependency |
---|---|
HTTPS | OSX or GnuTLS or OpenSSL or Windows |
SFTP | libssh2 |
BitTorrent | None. Optional: libnettle+libgmp or libgcrypt |
or OpenSSL (see note) | |
Metalink | libxml2 or Expat. |
Checksum | None. Optional: OSX or libnettle or libgcrypt |
or OpenSSL or Windows (see note) | |
gzip, deflate in HTTP | zlib |
Async DNS | C-Ares |
Firefox3/Chromium cookie | libsqlite3 |
XML-RPC | libxml2 or Expat. |
JSON-RPC over WebSocket | libnettle or libgcrypt or OpenSSL |
.. 注意::
如果同时安装了两个库,libxml2 的优先级高于 Expat。如果您更喜欢 Expat,请在 configure 中使用“--without-libxml2”参数。
.. 注意::
在 Apple OSX 上,系统级 SSL/TLS 支持将是首选。因此,该平台上不需要 GnuTLS 或 OpenSSL。如果您想要禁用此行为,请在 configure 中使用“--without-appletls”参数。
如果同时安装了两个库,GnuTLS 的优先级高于 OpenSSL。如果您更喜欢 OpenSSL,请在 configure 中使用“--without-gnutls”和“--with-openssl”参数。
在 Windows 上,有基于 Windows 原生 SSL 功能 (Schannel) 的 SSL 实现可用,因此,该平台不需要 GnuTLS 或 OpenSSL。如果您想要禁用此行为,请在 configure 中使用“--without-wintls”参数。
.. 注意::
在 Apple OSX 上,除非 aria2 配置了“--without-appletls”,否则将优先使用操作系统级别的校验和支持。
如果两个库都安装了,libnettle 的优先级高于 libgcrypt。
如果您更喜欢 libgcrypt,请使用“--without-libnettle --with-libgcrypt”运行 configure。如果选择 OpenSSL 而不是 GnuTLS,则不会使用 libnettle 和 libgcrypt。
如果没有安装任何可选依赖项,则将使用仅支持 md5 和 sha1 的内部实现。
在 Windows 上,有基于 Windows 原生功能的 SSL 实现可用,
并且将优先使用,除非 aria2 配置了“--without-wintls”。
用户可以为 SSL 和加密库选择以下配置之一:
您可以通过在 configure 脚本中分别提供 --disable-bittorrent
和 --disable-metalink
来禁用 BitTorrent 和 Metalink 支持。
要启用异步 DNS 支持,您需要 c-ares。
aria2 主要使用 C++ 编写。最初,它基于 C++98/C++03 标准特性编写。我们现在正在将 aria2 迁移到 C++11 标准。当前的源代码需要支持 C++11 的编译器。对于 g++ 和 clang 等知名编译器,必须支持 -std=c++11 或 -std=c++0x 标志。
要从源码包构建 aria2,您需要以下开发包(包名称可能因您使用的发行版而异):
您可以使用 libgcrypt-dev 代替 nettle-dev 和 libgmp-dev:
您可以使用 libssl-dev 代替 libgnutls-dev、nettle-dev、libgmp-dev、libgpg-error-dev 和 libgcrypt-dev:
libssl-dev(HTTPS、BitTorrent、校验和支持必需)
您可以使用 libexpat1-dev 代替 libxml2-dev:
libexpat1-dev(Metalink 支持必需)
在 Fedora 上,您需要以下软件包:gcc、gcc-c++、kernel-devel、libgcrypt-devel、libxml2-devel、openssl-devel、gettext-devel 和 cppunit
如果您从 git 仓库下载了源代码,则必须安装以下软件包才能获取 autoconf 宏:
并运行以下命令生成 configure 脚本和其他构建程序所需的文件:
$ autoreconf -i
此外,您还需要 Sphinx <http://sphinx-doc.org/>
_ 来构建手册页。
如果您正在为 Mac OS X 构建 aria2,请查看
makerelease-osx.mk GNU Make 文件。
构建 aria2 的最快方法是首先运行 configure 脚本:
$ ./configure
要构建静态链接的 aria2,请使用 ARIA2_STATIC=yes
命令行选项:
$ ./configure ARIA2_STATIC=yes
配置完成后,运行 make
来编译程序:
$ make
请参阅交叉编译 Windows 二进制文件以创建 Windows 二进制文件。请参阅交叉编译 Android 二进制文件以创建 Android 二进制文件。
configure 脚本会检查可用的库,并启用尽可能多的功能(默认未启用的实验性功能除外)。
从 1.1.0 版本开始,aria2 默认检查 HTTPS 服务器的证书。如果您使用 OpenSSL 或最新版本的 GnuTLS(包含 gnutls_certificate_set_x509_system_trust() 函数)进行构建,并且库已正确配置以定位系统级 CA 证书存储,则 aria2 将在启动时自动加载这些证书。如果不是这种情况,我建议提供 CA 包文件的路径。例如,在 Debian 中,CA 包文件的路径为“/etc/ssl/certs/ca-certificates.crt”(在 ca-certificates 包中)。这可能会因您的发行版而异。您可以使用 --with-ca-bundle 选项将其提供给 configure 脚本:
$ ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt'
$ make
如果没有 --with-ca-bundle 选项,您将在访问 HTTPS 服务器时遇到错误,因为没有 CA 证书包就无法验证证书。在这种情况下,您可以使用 aria2 的 --ca-certificate 选项指定 CA 证书包文件。如果您尚未安装 CA 证书包文件,那么最后的解决办法是使用 --check-certificate=false 禁用证书验证。
使用原生 OSX (AppleTLS) 和/或 Windows (WinTLS) 实现将自动使用系统证书存储,因此 --with-ca-bundle 并非必需,并且在使用这些实现时将被忽略。
默认情况下,名为 aria2c 的 bash_completion 文件安装到目录 $prefix/share/doc/aria2/bash_completion。要更改文件的安装目录,请使用 --with-bashcompletiondir 选项。
执行 make 后,可执行文件位于 src/aria2c。
aria2 使用 CppUnit 进行自动化单元测试。运行单元测试:
$ make check
本节将介绍如何在 Debian Linux 上使用 mingw-w64 (http://mingw-w64.org/doku.php) 交叉编译器构建 Windows 二进制文件。MinGW (http://www.mingw.org/) 可能无法构建 aria2。
构建 Windows 二进制文件最简单的方法是使用 Dockerfile.mingw。请参阅 Dockerfile.mingw 如何构建二进制文件。如果您无法使用 Dockerfile,请继续阅读以下段落。
基本上,在编译并安装依赖库后,只需传递适当的 --host 选项并指定 CPPFLAGS、LDFLAGS 和 PKG_CONFIG_LIBDIR 变量进行配置即可进行交叉编译。为了方便起见并降低我们自己的开发成本,我们提供了一种更简单的方法来配置构建设置。
mingw-config 脚本是 mingw-w64 的配置脚本包装器。我们使用它来创建官方的 Windows 构建版本。此脚本假定已构建以下用于交叉编译的库:
可以调整一些环境变量来更改构建设置:
HOST
交叉编译以构建在主机上运行的程序。默认为 i686-w64-mingw32。要构建 64 位二进制文件,请指定 x86_64-w64-mingw32。
PREFIX
依赖库安装目录的前缀。默认为/usr/local/$HOST
。-I$PREFIX/include
将添加到CPPFLAGS
。-L$PREFIX/lib
将添加到LDFLAGS
。 $PREFIX/lib/pkgconfig
将被设置为PKG_CONFIG_LIBDIR
。
例如,要构建 64 位二进制文件,请执行以下操作:
$ HOST=x86_64-w64-mingw32 ./mingw-config
如果您需要使用 --enable-libaria2
的 libaria2 dll,则不要使用ARIA2_STATIC=yes
,并准备外部库的 DLL 版本。
在本节中,我们将介绍如何在 Debian Linux 上使用 Android NDK 交叉编译器构建 Android 二进制文件。
在撰写本文时,Android NDK r21e 应该可以编译 aria2,并且不会出现错误。
android-config
脚本是 Android 构建的配置脚本包装器。我们使用它来创建官方的 Android 构建。此脚本假设已构建以下用于交叉编译的库:
构建上述库时,请确保禁用共享库并仅启用静态库。我们将静态链接这些库。
android-config
假设已定义 $ANDROID_HOME
和 $NDK
环境变量。我们目前使用 Android NDK r21e。$NDK
应指向Android NDK 的目录。构建工具位于$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/
下。
所有依赖库都必须安装在
$ANDROID_HOME/usr/local
下。
完成 android-config
后,运行 make
来编译源代码。
关于文件名,下载文件的文件名确定如下:
单文件模式
如果 .torrent 文件中存在“name”键,则文件名为“name”键的值。否则,文件名为 .torrent 文件的基本名称加上“.file”。例如,.torrent 文件的名称为“test.torrent”,则文件名为“test.torrent.file”。下载文件的存储目录可以通过 -d 选项指定。
多文件模式
.torrent 文件中提到的完整目录/文件结构已创建。下载文件的顶层目录可以通过 -d 选项指定。
下载开始前,如有需要,会创建一个完整的目录结构。默认情况下,aria2 最多打开 .torrent 文件中提到的 100 个文件,并直接写入和读取这些文件。同时打开的文件数量可以通过 --bt-max-open-files 选项控制。
DHT
aria2 支持兼容主流的 DHT。默认情况下,IPv4 DHT 的路由表保存在“XDG_CACHE_HOME/aria2/dht6.dat”中,非“HOME/.aria2/dht6.dat”中存在文件。aria2 使用相同的端口号来监听 IPv4 和 IPv6 DHT。
UDP 跟踪器
启用 IPv4 DHT 时,UDP 跟踪器支持也启用。UDP 跟踪器的端口号与 DHT 共享。使用“--dht-listen-port”选项可以更改端口号。
其他注意事项
-o
选项用于更改 .torrent 文件本身的文件名,而不是 .torrent 文件中某个文件的文件名。为此,请使用--index-out
选项。--bt-request-peer-speed-limit
选项调整此下载速率。当前实现支持 HTTP(S)/FTP/SFTP/BitTorrent。其他 P2P 协议将被忽略。Metalink4 (RFC 5854) 和 Metalink 3.0 版本文档均受支持。
校验和验证支持 md5、sha-1、sha-224、sha-256、sha-384 和 sha-512。如果提供了多种哈希算法,aria2 将使用更强大的算法。如果整个文件校验和验证失败,aria2 不会重试下载,而是直接退出并返回非零返回码。
支持的用户首选项包括版本、语言、位置、协议和操作系统。
如果 Metalink 文件中提供了块校验和,aria2 会在下载过程中自动验证数据块。此行为可以通过命令行选项关闭。
如果 Metalink 文件包含签名,aria2 会在下载完成后将其保存为文件。文件名为下载文件名 + “.sig”。如果相同的文件已存在,则不保存签名文件。
在 Metalink4 中,metalink:metaurl 元素中可能出现多文件种子文件。由于 aria2 无法同时下载两个相同的种子文件,因此 aria2 会将具有相同 BitTorrent metaurl 的文件分组到 metalink:file 元素中,并从单个 BitTorrent 集群中下载它们。这基本上是一个带有文件选择的多文件种子下载,因此也会创建不在 Metalink 文档中但与所选文件共享同一片段的相邻文件。
如果在 metalink:url 或 metalink:metaurl 元素中指定了相对 URI,aria2 会使用 Metalink 文件的 URI 作为基准 URI 来解析相对 URI。如果在从本地磁盘读取的 Metalink 文件中找到相对 URI,aria2 会使用 --metalink-base-uri 选项的值作为基准 URI。如果未指定此选项,则相对 URI 将被忽略。
当前实现仅使用 rel=duplicate 链接。aria2 理解摘要标头字段,并检查其是否与其他来源的摘要值匹配。如果不同,则断开连接。下载完成后,aria2 还会使用此摘要值执行校验和验证。aria2 可以识别地理位置值。要告诉 aria2 您首选哪个位置,可以使用 --metalink-location 选项。
HTTP(S)/FTP/SFTP 默认启用 netrc 支持。如需禁用 netrc 支持,请指定 -n 命令行选项。您的 .netrc 文件应具有正确的权限 (600)。
aria2 中嵌入的 WebSocket 服务器实现了 RFC 6455 中定义的规范,支持的协议版本为 13。
libaria2 是一个 C++ 库,为客户端代码提供 aria2 功能。目前,libaria2 默认不构建。要启用 libaria2,请使用 --enable-libaria2 配置选项。默认情况下,仅构建共享库。要构建静态库,也请使用 --enable-static 配置选项。请参阅 libaria2 文档,了解如何使用 API。