修改 aria2 源码,提高单文件下载最大线程数


一、前言

aria2 默认情况下只支持单文件最多 16 线程下载,感觉还是有些少的。

本文将教大家如何通过修改 aria2 的源码并编译新的程序来提高单文件下载的最大线程数。

说明
• 由于各人的系统环境各不相同,所以无法保证一次就能编译成功。如果编译出现错误,建议使用 Docker 搭建一个全新的系统环境再进行编译,具体方法这里就不赘述了。


二、编译环境

  • 操作系统:CentOS 7.8.2003
  • glibc 版本:2.17
  • GCC 版本:4.8.5

三、准备工作

3.1 创建临时目录并进入

说明
• 该目录用于暂时存放交叉编译所需的各种文件及源码,在编译完成后可自行删除。

执行以下命令:

mkdir /tmp/aria2-comp && cd /tmp/aria2-comp

3.2 下载 aria2 源码包

执行以下命令:

wget https://github.com/aria2/aria2/releases/download/release-1.35.0/aria2-1.35.0.tar.gz && \
tar -xf aria2-1.35.0.tar.gz

3.3 下载依赖软件的源码包

3.3.1 Zlib

执行以下命令:

wget https://zlib.net/zlib-1.2.11.tar.gz && \
tar -xf zlib-1.2.11.tar.gz 

3.3.2 Mbed TLS

执行以下命令:

wget https://tls.mbed.org/download/mbedtls-2.14.1-gpl.tgz && \
tar -xf mbedtls-2.14.1-gpl.tgz

3.3.3 Expat

执行以下命令:

wget https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.bz2 && \
tar -xf expat-2.2.9.tar.bz2

3.3.4 SQLite

执行以下命令:

wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz && \
tar -xf sqlite-autoconf-3300100.tar.gz 

3.3.5 c-ares

执行以下命令:

wget https://c-ares.haxx.se/download/c-ares-1.15.0.tar.gz && \
tar -xf c-ares-1.15.0.tar.gz 

3.3.6 libssh

执行以下命令:

wget https://github.com/libssh2/libssh2/releases/download/libssh2-1.9.0/libssh2-1.9.0.tar.gz && \
tar -xf libssh2-1.9.0.tar.gz

3.3.7 OpenSSL

执行以下命令:

wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz && \
tar -xf openssl-1.1.1d.tar.gz

四、修改 aria2 源码

请使用 vim 之类的文本编辑器打开 /tmp/aria2-comp/aria2/src/OptionHandlerFactory.cc

打开之后搜索 TEXT_MAX_CONNECTION_PER_SERVER(大概在 441 行左右),将下面的 16 改为您想要的最大线程数。

修改完成后效果如图(我改成了 64,不要太贪心!):

修改完成后记得保存文件。


五、编译 & 安装 aria2

5.1 编译依赖

5.1.1 Zlib

执行以下命令:

cd /tmp/aria2-comp/zlib-1.2.11/ && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ ./configure --prefix=/tmp/aria2-comp --static && \
make && \
make install

5.1.2 Mbed TLS

执行以下命令:

cd /tmp/aria2-comp/mbedtls-2.14.1/ && \
sed -i "s/DESTDIR=\/usr\/local/DESTDIR=\/tmp\/aria2-comp/g" Makefile && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ LDFLAGS=-static make install

5.1.3 Expat

执行以下命令:

cd /tmp/aria2-comp/expat-2.2.9/ && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ ./configure --prefix=/tmp/aria2-comp --enable-static=yes --enable-shared=no && \
make && \
make install

5.1.4 SQLite

执行以下命令:

cd /tmp/aria2-comp/sqlite-autoconf-3300100/ && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ ./configure --prefix=/tmp/aria2-comp --enable-static --enable-shared && \
make && \
make install

5.1.5 c-ares

执行以下命令:

cd /tmp/aria2-comp/c-ares-1.15.0/ && \
./buildconf && \
./configure --prefix=/tmp/aria2-comp --enable-static=yes --enable-shared=no --enable-libgcc && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ make && \
make install

5.1.6 libssh

执行以下命令:

cd /tmp/aria2-comp/libssh2-1.9.0/ && \
./buildconf && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ ./configure --prefix=/tmp/aria2-comp --without-libgcrypt --without-wincng --enable-static --disable-shared --with-crypto=mbedtls --with-libmbedcrypto-prefix=/tmp/aria2-comp --includedir=/tmp/aria2-comp/include --libdir=/tmp/aria2-comp/lib/ --disable-examples-build && \
make && \
make install

5.1.7 OpenSSL

执行以下命令:

cd /tmp/aria2-comp/openssl-1.1.1d/ && \
LD_LIBRARY_PATH=/tmp/aria2-comp/lib/ ./config --prefix=/tmp/aria2-comp shared zlib zlib-dynamic -D_GNU_SOURCE -D_BSD_SOURCE --with-zlib-lib=/tmp/aria2-comp/lib --with-zlib-include=/tmp/aria2-comp/include && \
make && \
make install INSTALLTOP=/tmp/aria2-comp OPENSSLDIR=/tmp/aria2-comp/ssl

5.2 指定系统根证书文件的位置

在编译 aria2 的时候我们需要指定一下系统根证书文件的位置,以便在下载 HTTPS 链接的时候验证服务器身份。

一般 Linux 系统的根证书文件位于 /etc/ssl/certs/ca-bundle.crt/etc/ssl/certs/ca-certificates.crt

如果都找不到的话建议直接上网搜索该操作系统根证书文件的位置。

确定根证书文件的位置之后,执行以下命令:

export CACERT=<根证书文件位置>

5.3 编译 aria2

执行以下命令:

cd /tmp/aria2-comp/aria2-1.35.0/ && \
autoreconf -i && \
./configure --prefix=/tmp/aria2-comp --disable-nls --without-gnutls --with-openssl --without-libxml2 --with-libz --with-libz-prefix=/tmp/aria2-comp --with-libexpat --with-libexpat-prefix=/tmp/aria2-comp --with-slite3 --with-sqlite3-prefix=/tmp/aria2-comp --with-libcares --with-libcares-prefix=/tmp/aria2-comp --with-ca-bundle=$CACERT LDFLAGS="-L/tmp/aria2-comp/lib" ARIA2_STATIC=yes && \
make && \
make install

5.4 压缩生成的二进制文件(可选)

执行以下命令:

strip /tmp/aria2-comp/bin/aria2c && \
upx /tmp/aria2-comp/bin/aria2c

5.5 安装二进制文件

这里把 aria2 二进制文件安装到 /usr/bin/

mv /tmp/aria2-comp/bin/aria2c /usr/bin/

六、测试

运行 aria2 时可以通过指定参数 --max-connection-per-server=<线程数> --split=<线程数> 来设置单文件下载最大线程数。

这里我们将最大线程数设置为 64,下一个 CentOS 8 的 ISO 试试:

可以看到,CN 后面的数字为 64,表示当前下载的线程数为 64。测试通过!

说明
• 有些服务器或上网设备可能会限制连接线程数导致出不了效果,出现这种情况建议更换下载文件或更换网络环境尝试(当然了前提是线程数不能大得太过分)。

发表评论

电子邮件地址不会被公开。