
aria2 构建与使用完全指南从源码编译、跨平台交叉编译到 BitTorrent/Metalink 实战【免费下载链接】aria2aria2 is a lightweight multi-protocol multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.项目地址: https://gitcode.com/gh_mirrors/ar/aria2aria2 是一款轻量级、支持多协议与多来源的命令行下载工具本指南以仓库内的 doc/manual-src/pt/README.rst 官方手册葡萄牙语版为骨架系统梳理其功能特性、依赖选择、Linux/Windows/Android 三种平台的编译方式并深入讲解 BitTorrent、Metalink、netrc 与 WebSocket 等核心特性的配置要点。读完本文你将掌握 aria2 从获取源码、配置构建到日常下载实战的完整技能并能理解底层源码对这些能力的具体支撑。aria2 是什么aria2 是一个文件下载实用工具支持 HTTP、HTTPS、FTP、BitTorrent 与 Metalink 五种协议/格式。它可以同时从多个来源、多个协议下载同一个文件并尽可能榨取最大带宽支持 GNU/Linux、macOS、Windows、Android 等多种平台。它能在下载 HTTP/HTTPS/FTP/BitTorrent 数据的同时将这些数据即时分享上传给 BitTorrent swarm也可以让你边下载边观看影片。通过 Metalink 提供的分块校验值aria2 还能自动校验 BitTorrent 各分块chunk的数据完整性。当前仓库对应 aria2 1.37.0见 configure.ac 中的AC_INIT声明。功能特性清单官方手册列出的核心能力包括命令行接口HTTP / HTTPS / FTP / BitTorrent 下载分段下载split downloadMetalink 版本 4RFC 5854支持HTTP、FTP、BitTorrentMetalink 版本 3 支持HTTP、FTP、BitTorrentMetalink/HTTPRFC 6249支持HTTPHTTP/1.1 实现HTTP 代理支持HTTP BASIC 认证支持HTTP 代理认证支持完整的代理环境变量支持http_proxy、https_proxy、ftp_proxy、all_proxy、no_proxyHTTP gzip / deflate 内容编码支持HTTPS 下使用受信证书对端进行校验HTTPS 下客户端证书认证处理Chunked分块传输编码支持从 Firefox 3、Chromium/Google Chrome、Mozilla/Firefox/IcedWeasel1.x/2.x/Netscape 格式的 Cookie 文件加载 Cookie将 Cookie 保存为 Mozilla 3、Firefox1.x/2.x、Chromium、Netscape 格式文件自定义/修改 HTTP 请求头持久连接Keep-Alive支持通过 HTTP 代理访问 FTP下载/上传速度控制带宽管理BitTorrent 扩展快速连接Fast Extension、DHT、PEX、MSE/PSE、多 TrackerBitTorrent Web-Seedingaria2 会对一个分块发起多个范围请求以减少请求重叠并支持指定大小的流水线pipeline请求BitTorrent 本地对等发现LPD已完成的 BitTorrent 下载目录结构可更新或重命名JSON-RPC基于 HTTP 与 WebSocket与 XML-RPC 接口daemon 模式运行多文件 torrent/Metalink 的选择性下载Metalink 分块校验Metalink 禁用分段下载netrc 支持配置文件支持从文本文件或标准输入读取 URI 下载并支持可选的输出文件指定参数化 URI区间等支持IPv6 支持获取源码源码托管在版本仓库中克隆到本地即可获得全部源码$ git clone https://gitcode.com/gh_mirrors/ar/aria2克隆完成后aria2 的源码文件会出现在当前目录中。仓库根目录下包含 configure.ac、Makefile.am顶层构建脚本、src核心 C 源码、testCppUnit 单元测试以及 doc多语言文档等关键部分。功能与依赖对照构建 aria2 前需要按所需功能准备对应的依赖库官方手册给出了完整对照表功能依赖HTTPSGnuTLS 或 OpenSSLBitTorrentlibnettle libgmp 或 libgcrypt 或 OpenSSLMetalinklibxml2 或 ExpatChecksum校验libnettle 或 libgcrypt 或 OpenSSLHTTP 的 gzip、deflatezlib异步 DNSC-AresFirefox3/Chromium Cookielibsqlite3XML-RPClibxml2 或 Expat基于 WebSocket 的 JSON-RPClibnettle 或 libgcrypt 或 OpenSSL加密/XML 库的优先级与强制指定若 libxml2 与 Expat 同时安装libxml2 优先想用 Expat 则执行./configure --without-libxml2。若 GnuTLS 与 OpenSSL 同时安装GnuTLS 优先想用 OpenSSL 则执行./configure --without-gnutls --with-openssl。若 libnettle 与 libgcrypt 同时安装libnettle 优先想用 libgcrypt 则执行./configure --without-libnettle --with-libgcrypt。注意若最终选择 OpenSSL 而非 GnuTLS则 libnettle 与 libgcrypt 均不会被使用。可选用的 SSL/加密库组合共有五种libgcryptlibnettleOpenSSLGnuTLS libgcryptGnuTLS libnettle这些选项在 configure.ac 中均有对应的ARIA2_ARG_WITHOUT/ARIA2_ARG_DISABLE声明例如--disable-bittorrent与--disable-metalink可分别关闭 BitTorrent 与 Metalink 支持。启用异步 DNS 需要 c-ares 库。从源码构建安装开发依赖包以 Debian/Ubuntu 系为例构建前需安装以下开发包包名因发行版而异libgnutls-devHTTPS、BitTorrent、Checksum 支持所需nettle-devBitTorrent、Checksum 支持所需libgmp-devBitTorrent 支持所需libc-ares-dev异步 DNS 支持所需libxml2-devMetalink 支持所需zlib1g-devHTTP gzip/deflate 解码支持所需libsqlite3-devFirefox3/Chromium Cookie 支持所需也可以用libgcrypt-dev替代nettle-dev与libgmp-devlibgpg-error-devBitTorrent、Checksum 支持所需libgcrypt-devBitTorrent、Checksum 支持所需还可以用libssl-dev一揽子替代libgnutls-dev、nettle-dev、libgmp-dev、libgpg-error-dev、libgcrypt-devlibssl-devHTTPS、BitTorrent、Checksum 支持所需也可以用libexpat1-dev替代libxml2-devlibexpat1-devMetalink 支持所需部分发行版可能需要pkg-config来检测上述库。对于 Fedora 发行版需要以下软件包gcc、gcc-c、kernel-devel、libgcrypt-devel、libxml2-devel、openssl-devel生成 configure 脚本并编译如果源码来自 git 仓库需要先执行autoreconf -i生成 configure 脚本及其它构建辅助脚本$ autoreconf -i最简单的编译方式是直接执行 configure 脚本它会自动检测可用库默认启用全部功能$ ./configure需要静态链接时传入ARIA2_STATICyes该变量在 configure.ac 中通过AC_ARG_VAR声明$ ./configure ARIA2_STATICyes配置完成后执行make编译$ make编译产物为src目录下的aria2c可执行文件。交叉编译 Windows 二进制可参考下文Windows 交叉编译Android 二进制参考Android 交叉编译。HTTPS 证书校验与 CA 证书配置从 1.1.0 版本起aria2 默认校验 HTTPS 服务器的证书。若编译时使用了 OpenSSL 或包含gnutls_certificate_set_x509_system_trust()函数的新版 GnuTLS并且库被正确配置为可定位系统 CA 证书存储aria2 会在启动时自动加载这些证书否则建议通过--with-ca-bundle显式指定 CA 证书文件路径该选项定义于 configure.ac$ ./configure --with-ca-bundle/etc/ssl/certs/ca-certificates.crt $ make以 Debian 为例CA 证书文件位于/etc/ssl/certs/ca-certificates.crt由 ca-certificates 包提供不同发行版路径可能不同。若不指定--with-ca-bundle访问 HTTPS 服务器时会因无法校验证书而报错。此时可改用 aria2 运行期选项--ca-certificate指定证书文件若完全没有安装证书最后的手段是使用--check-certificatefalse关闭证书校验。bash 补全的安装位置默认情况下名为aria2c的 bash 补全脚本会安装到$prefix/share/doc/aria2/bash_completion目录。可通过--with-bashcompletiondir修改安装目录默认值在 configure.ac 中定义为$docdir/bash_completion。补全脚本本体位于 doc/bash_completion/aria2c安装规则见 doc/Makefile.am。运行单元测试aria2 使用 CppUnit 进行自动化单元测试测试代码位于 test 目录执行$ make checkWindows 交叉编译本节描述如何在 Debian Linux 上使用 mingw-w64 交叉编译器为 Windows 构建二进制。基本思路是先编译并安装好依赖库然后通过--host选项并指定CPPFLAGS、LDFLAGS、PKG_CONFIG_LIBDIR等变量进行交叉编译。为降低配置成本仓库提供了mingw-config包装脚本见 mingw-config用于生成官方 Windows 构建。该脚本假定以下依赖库已为交叉编译完成编译/安装c-aresopensslexpatsqlite3zlibcppunit脚本支持两个环境变量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 位 Windows 二进制$ HOSTx86_64-w64-mingw32 ./mingw-config脚本内部实际调用的配置选项可见 mingw-config使用--with-libcares、--with-libexpat、--with-sqlite3、--with-libz、--with-libgmp、--with-libssh2并关闭 GnuTLS、OpenSSL、libxml2、libgcrypt、libnettle 与 NLS同时启用ARIA2_STATICyes静态链接。configure 也会对 MinGW 目标自动附加-lws2_32、-lgdi32等 Windows 系统库及 ASLR/NX 兼容标志见 configure.ac。Android 交叉编译本节描述如何在 Debian Linux 上使用 Android NDK 交叉编译 aria2。android-config脚本见 android-config用于配置 Android 构建假定以下库已为交叉编译构建c-aresopensslexpat编译这些依赖库时务必禁用共享库、只启用静态库因为 aria2 将只使用静态库进行链接。Android NDK 自带 zlib因此无需另行编译 zlib。android-config还假定Android NDK 安装在环境变量$ANDROID_HOME指定的位置且已按 NDK 的docs/STANDALONE-TOOLCHAIN.html配置好自定义 toolchain依赖库安装在$ANDROID_HOME/usr/local下。运行android-config和android-make前务必确保$ANDROID_HOME指向正确路径。先执行android-config生成构建配置再执行android-make编译源码。从脚本内容看android-config它同时要求$NDK环境变量使用aarch64-linux-android目标、LLVM 工具链启用 OpenSSL、Expat、c-ares、zlib、libssh2并以-fPIE -pie与-static-libstdc链接$ANDROID_HOME未设置时脚本会直接报错退出。aria2 在 Android 设备上的使用aria2 是一个轻量级、多协议、多来源的命令行下载工具可在 Android 的终端模拟器中运行支持 HTTP、HTTPS、FTP、BitTorrent 与 Metalink 下载。注意aria2不是Android Java 应用而是用 C 编写的原生命令行程序使用它不需要 root 权限。正因如此需要先在 Android 上安装一个终端模拟器可从应用市场安装或自行编译。安装步骤将aria2c可执行文件复制到设备的/mnt/sdcard。启动 Android 终端模拟器。创建目录mkdir /data/data/jackpal.androidterm/aria2。写入可执行文件cat /mnt/sdcard/aria2c /data/data/jackpal.androidterm/aria2/aria2c。赋予执行权限chmod 744 /data/data/jackpal.androidterm/aria2/aria2c。在终端模拟器中添加以下初始化命令设置 HOME 并进入目录export HOME/data/data/jackpal.androidterm/aria2; cd $HOME退出终端模拟器。重新启动终端模拟器。运行./aria2c -v验证安装。使用注意事项官方说明中该可执行文件由 android-ndk-r8d 构建静态链接了 openssl 1.0.1e、expat 2.1.0 与 c-ares 1.9.1。由于 Android 没有/etc/resolv.confc-ares异步 DNS 解析器默认被禁用而很多场景下名称解析较慢因此建议启用 c-ares并用--async-dns-server显式指定 DNS 服务器该选项在源码中由 src/AsyncNameResolverMan.cc 读取并设置给解析器--async-dns --async-dns-servergetprop meu.dns1,getprop meu.dns2为避免每次使用 aria2c 都重复输入这些参数可以准备如下 shell 脚本保存后记得用chmod 744赋予执行权限并将meu.dns1、meu.dns2替换为真实 DNS 服务器#!/system/bin/sh /data/data/jackpal.androidterm/aria2c \ --async-dns \ --async-dns-servergetprop meu.dns1,getprop meu.dns2 \ $已知问题由于 Android 没有/dev/stdout-l-日志输出到标准输出在 Android 上不可用。某些情况下终端模拟器会停止刷新控制台看起来像 aria2c 冻结了实际上 aria2c 仍在正常运行。生成文档aria2 的文档使用 Sphinx 构建构建配置见 doc/manual-src/pt/Makefile.am其SPHINXBUILD sphinx-build、BUILDDIR _builddoc/manual-src/Makefile.am 表明支持 en、ru、pt 三种语言。构建文档前需要安装 Sphinx。手册页也可用make man重新生成若已过时。文档支持多种格式输出包括 html、latexpdf、epub、devhelp、latex、htmlhelp 等。例如构建 HTML 文档$ make html生成结果位于源码目录下的_build子目录。例如将 aria2 源码解压到/home/usuario/aria2/则生成文档位于/home/usuario/aria2/doc/manual-src/pt/_build/pt表示语言目录目前支持en、pt、ru。生成 PDF 使用make latexpdf需确保 LaTeX 所需的字体等依赖已就绪。Sphinx 的检测在 configure.ac 中通过AC_PATH_PROGS([SPHINXBUILD], [sphinx-build])完成若未安装 Sphinx构建系统会退化为生成占位 man 页并提示安装 sphinx见 doc/manual-src/pt/Makefile.am。BitTorrent 使用详解文件命名规则下载文件的命名取决于 torrent 文件的模式单文件模式若 .torrent 文件中有name键则文件名为该键的值否则文件名基于 .torrent 文件名加上.file后缀。例如 .torrent 文件名为brasil.torrent则下载文件名为brasil.torrent.file。存储目录可用-d选项指定。多文件模式将完整创建 .torrent 中声明的目录/文件结构。基础目录可用-d选项指定。下载开始前会先创建所需的完整目录结构。默认情况下 aria2 会打开 .torrent 中声明的至少 100 个文件并直接进行读写同时打开的最大文件数可通过--bt-max-open-files控制。DHTaria2 支持 DHT。默认情况下IPv4 DHT 路由表保存在$HOME/.aria2/dht.datIPv6 DHT 路由表保存在$HOME/.aria2/dht6.dat。相关选项dht-file-path/dht-file-path6在 src/prefs.cc 与 src/OptionHandlerFactory.cc 中定义默认值由util::getDHTFile()生成。aria2 使用同一个端口号同时监听 IPv4 与 IPv6 的 DHT。UDP Tracker当 IPv4 DHT 启用时UDP Tracker 也会被启用其端口号与 DHT 共享可用--dht-listen-port修改src/OptionHandlerFactory.cc 中该选项默认值为6881-6999端口范围 1024 至 65535。其它重要信息-o选项用于修改输出文件名但它不会改变 .torrent 文件内部声明的文件名要改变 torrent 内的文件名需使用--index-out。aria2 用于 TCP 与 UDP 的默认端口范围为6881-6999--listen-port默认值同样为6881-6999见 src/OptionHandlerFactory.cc。aria2不会自动配置端口转发需要手动配置路由器或防火墙。每个 torrent 的最大对等连接数为55当下载速率很低时该上限可能被超出可通过--bt-request-peer-speed-limit调整触发该上限的下载速率阈值。自 0.10.0 版本起选择性下载完成后 aria2 不再发送新的请求消息。Metalink 使用详解当前实现支持 HTTP、HTTPS、FTP 与 BitTorrent 协议的 Metalink 下载其它 P2P 协议会被忽略支持 Metalink4 与 Metalink 3.0 两种文档版本。校验算法支持 md5、sha-1、sha-224、sha-256、sha-384、sha-512。若提供多种哈希算法aria2 会选择最稳健的一种。若校验彻底失败aria2 不会继续下载并以非零退出码结束。用户偏好支持 version、language、locale、protocol 与 operating system 等偏好项。分块校验若 Metalink 文件中提供了分块chunk校验值aria2 会在下载过程中自动校验数据分块该行为可通过命令行选项关闭。签名文件若 Metalink 文件中包含签名证书aria2 会在下载完成后将签名保存为文件文件名加.sig后缀若同名文件已存在则不会保存。metaurl 聚合在 Metalink4 多文件 torrent 场景中metalink:metaurl元素可能出现多个相同 torrent 引用。由于 aria2 不会同时下载两个相同 torrent它会把引用同一 BitTorrent metaurl 的metalink:file元素归组从同一个 BitTorrent swarm 下载。这主要出现在多文件 torrent 做文件选择时与所选文件共享同一分块、但未出现在 Metalink 文档中的相邻文件也会一并下载并创建。相对 URI若metalink:url或metalink:metaurl元素中指定了相对 URIaria2 以 Metalink 文件自身的 URI 作为基准解析若 Metalink 文件是从本地磁盘读取的则使用--metalink-base-uri选项的值作为基准该选项在 src/Context.cc 中被用于解析 Metalink 查询。若该选项未指定相对 URI 将被忽略。Metalink/HTTP本实现利用relduplicate链接。aria2 会解析Digest响应头字段并校验其摘要值是否与其他来源一致若有差异则断开连接。aria2 还会在下载结束后用该摘要值执行校验。aria2 能够识别geo值可通过--metalink-location覆盖你偏好的位置值。netrc 支持netrc 支持默认对 HTTP、HTTPS 与 FTP 启用可通过命令行选项-n禁用。注意.netrc文件必须具有正确的权限600。WebSocketaria2 内置的 WebSocket 服务器实现了 RFC 6455 规范所支持的协议版本为 13。小结从 doc/manual-src/pt/README.rst 可以看到aria2 的工程实践围绕多协议、多来源、最大化带宽利用展开Linux 上一条./configure make即可获得全功能构建Windows 与 Android 则分别由 mingw-config 与 android-config 两个脚本封装交叉编译细节BitTorrent 的 DHT/UDP Tracker/端口管理、Metalink 的校验与聚合、netrc 认证以及 WebSocket 远程控制构成了它作为命令行下载工具的核心价值。对每个功能感兴趣的读者都可以在 src 下的对应源码与 test 下的测试用例中找到更底层的实现证据。【免费下载链接】aria2aria2 is a lightweight multi-protocol multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.项目地址: https://gitcode.com/gh_mirrors/ar/aria2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考