2007-11-18 19:59:42 +08:00
|
|
|
aria2 - The ultra fast download utility
|
2008-02-26 20:38:45 +08:00
|
|
|
=======================================
|
|
|
|
:Author: Tatsuhiro Tsujikawa
|
|
|
|
:Email: tujikawa_at_users_dot_sourceforge_dot_net
|
2006-02-17 21:35:04 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
Disclaimer
|
|
|
|
----------
|
2006-02-17 21:35:04 +08:00
|
|
|
This program comes with no warranty.
|
|
|
|
You must use this program at your own risk.
|
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
Introduction
|
|
|
|
------------
|
2008-12-02 00:49:23 +08:00
|
|
|
aria2 is a utility for downloading files. The supported protocols are
|
|
|
|
HTTP(S), FTP, BitTorrent, and Metalink. aria2 can download a file from
|
|
|
|
multiple sources/protocols and tries to utilize your maximum download
|
|
|
|
bandwidth. It supports downloading a file from HTTP(S)/FTP and
|
|
|
|
BitTorrent at the same time, while the data downloaded from
|
|
|
|
HTTP(S)/FTP is uploaded to the BitTorrent swarm. Using Metalink's
|
|
|
|
chunk checksums, aria2 automatically validates chunks of data while
|
|
|
|
downloading a file like BitTorrent.
|
2008-02-26 20:38:45 +08:00
|
|
|
|
|
|
|
Here is a list of features.
|
2006-02-17 21:35:04 +08:00
|
|
|
|
2008-07-23 20:40:22 +08:00
|
|
|
* Command-line interface
|
|
|
|
* Download files through HTTP(S)/FTP/BitTorrent
|
|
|
|
* Segmented downloading
|
|
|
|
* Metalink version 3.0 support(HTTP/FTP/BitTorrent)
|
|
|
|
* HTTP/1.1 implementation
|
2006-02-17 21:35:04 +08:00
|
|
|
* HTTP Proxy support
|
|
|
|
* HTTP BASIC authentication support
|
|
|
|
* HTTP Proxy authentication support
|
2008-12-02 00:49:23 +08:00
|
|
|
* Well-known environment variables for proxy: http_proxy, https_proxy,
|
|
|
|
ftp_proxy, all_proxy and no_proxy
|
2008-07-23 20:40:22 +08:00
|
|
|
* HTTP gzip, deflate content encoding support
|
2008-12-02 00:49:23 +08:00
|
|
|
* Verify peer using given trusted CA certificate in HTTPS
|
|
|
|
* Client certificate authentication in HTTPS
|
2008-07-23 20:40:22 +08:00
|
|
|
* Chunked transfer encoding support
|
2008-08-24 00:14:17 +08:00
|
|
|
* Load Cookies from file using the Firefox3 format and the Mozilla/Firefox
|
|
|
|
(1.x/2.x)/Netscape format.
|
2008-07-23 20:40:22 +08:00
|
|
|
* Custom HTTP Header support
|
|
|
|
* Persistent Connections support
|
|
|
|
* FTP through HTTP Proxy
|
|
|
|
* Download/Upload speed throttling
|
|
|
|
* BitTorrent extensions: Fast extension, DHT, PEX, MSE/PSE, Multi-Tracker
|
2008-12-02 00:49:23 +08:00
|
|
|
* Run as a daemon process
|
2008-07-23 20:40:22 +08:00
|
|
|
* Selective download in multi-file torrent/Metalink
|
|
|
|
* Chunk checksum validation in Metalink
|
|
|
|
* Can disable segmented downloading in Metalink
|
|
|
|
* Netrc support
|
|
|
|
* Configuration file support
|
2008-12-02 00:49:23 +08:00
|
|
|
* Download URIs found in a text file or stdin and the destination directory and
|
|
|
|
output filename can be specified optionally
|
2008-07-23 20:40:22 +08:00
|
|
|
* Parameterized URI support
|
2006-02-17 21:35:04 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
Dependency
|
|
|
|
----------
|
|
|
|
|
|
|
|
.External Library Dependency
|
|
|
|
[frame="all", grid="all"]
|
2008-06-29 22:29:36 +08:00
|
|
|
`--------------------`---------------------------
|
|
|
|
features dependency
|
|
|
|
-------------------------------------------------
|
|
|
|
HTTPS GnuTLS or OpenSSL
|
|
|
|
BitTorrent GnuTLS+Libgcrypt or OpenSSL
|
|
|
|
Metalink libxml2 or Expat.
|
|
|
|
Checksum GnuTLS+Libgcrypt or OpenSSL
|
|
|
|
gzip, deflate in HTTP zlib
|
2008-11-18 19:20:53 +08:00
|
|
|
Async DNS C-Ares
|
2008-08-24 00:14:17 +08:00
|
|
|
Firefox3 cookie libsqlite3
|
2008-06-29 22:29:36 +08:00
|
|
|
-------------------------------------------------
|
2006-03-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* configure.in: Added gnutls support. Added several CPP macros.
* m4/openssl.m4: Added.
* src/SocketCore.{h,cc}: Drop const quarifier from writeData(),
readData(), peekData(). Added gnutls support.
* src/HttpDownloadCommand.cc: Removed SleepCommand.h
* src/TrackerWatcherCommand.{h,cc}: Added. This command creates
TrackerInitCommand periodicaly(TorrentMan::minInterval).
* src/TorrentMan.cc: Remove downloadedSize == 0 check from
save().
Instead, added a check for whether setup method has executed
successfully.
* src/TorrentMan.h: Added member vaiable setupComplete. Updated
DEFAULT_ANNOUNCE_INTERVAL and DEFAULT_ANNOUNCE_MIN_INTERVAL to
300.
* src/Makefile.am: Updated.
* src/messageDigest.h: Added. This is a macro calculating SHA1
digest
using whether OpenSSL or gcrypt, depending on the result of
configure
script.
* src/ShaVisitor.{h,cc}: Removed direct dependency on OpenSSL by
using
messageDigest.h.
* src/TorrentAutoSaveCommand.h: Removed unused variable cuid.
* src/PeerListenCommand.cc: Added log about port binded
successfully.
Fixed memory leak.
* src/main.cc: Added gnutls support. Replaced LIB_SSL with
ENABLE_BITTORRENT where they are not related to OpenSSL but
BitTorrent.
Removed instantiation of TrackerInitCommand. Instead,
TrackerWatcherCommand is instantiated and pushed to the command
queue.
* src/InitiateConnectionCommandFactory.cc: Replaced HAVE_LIBSSL
with
ENABLE_SSL.
* src/Request.cc: Replaced HAVE_LIBSSL with ENABLE_SSL.
* src/RequestSlotMan.cc:
(deleteCompletedRequestSlot)
If a piece is already acquired by another command, delete the
request
slots for the piece.
* src/TrackerUpdateCommand.cc:
(execute)
Changed log level of MSG_TRACKER_WARNING_MESSAGE from info to
warn.
Added a check whether peer list is null.
Fixed the bug that causes sending completed event to the tracker
several times.
* src/TrackerInitCommand.cc:
(execute)
Fixed the bug that causes sending completed event to the tracker
several times.
* src/AbstractDiskWriter.{h,cc}: Removed direct dependency on
OpenSSL
by using messageDigest.h.
2006-03-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* PeerConnection.cc: Replaced log message "keep-alive" with
"keep alive".
* PeerInteractionCommand.{h,cc}: Close connection if peer is
choking
localhost long time.
* TorrentMan.cc: When adding new peer with duplicate = true, if
the
number of peer list is equal to or grater than MAX_PEER_LIST,
delete
at most 100 failure entry from the list. If with duplicate =
false,
MAX_PEER_LIST is not checked.
* PeerListenCommand.cc: Fixed the argument order of log message.
2006-03-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* Logger.h: Moved enum LEVEL from SimpleLogger.h to here.
Added warn().
* SimpleLogger.h: Moved enum LEVEL to Logger.h.
Implemented warn().
Defined 2 macros(WRITE_LOG, WRITE_LOG_EX) to avoid duplicated
code.
2006-03-27 22:47:26 +08:00
|
|
|
|
2007-12-14 08:46:32 +08:00
|
|
|
Note;;
|
|
|
|
GNU TLS has precedence over OpenSSL if both libraries are installed.
|
|
|
|
If you prefer OpenSSL, run configure with "--without-gnutls".
|
|
|
|
|
|
|
|
Note;;
|
|
|
|
libxml2 has precedence over Expat if both libraries are installed.
|
|
|
|
If you prefer Expat, run configure with "--without-libxml2".
|
2006-03-21 23:21:11 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
You can disable BitTorrent, Metalink support by providing
|
|
|
|
--disable-bittorrent, --disable-metalink respectively to configure
|
|
|
|
script.
|
2006-07-04 19:44:15 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
In order to enable async DNS support, you need c-ares.
|
2006-08-14 23:19:11 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
* c-ares: http://daniel.haxx.se/projects/c-ares/
|
|
|
|
|
|
|
|
How to build
|
|
|
|
------------
|
2008-12-02 00:49:23 +08:00
|
|
|
In order to build aria2 from the source package, you need following
|
|
|
|
development packages(package name may vary depending on the
|
|
|
|
distribution you use):
|
2007-11-13 20:08:40 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
* libgnutls-dev (Required for HTTPS, BitTorrent, Checksum support)
|
|
|
|
* libgpg-error-dev (Required for BitTorrent, Checksum support)
|
|
|
|
* libgcrypt-dev (Required for BitTorrent, Checksum support)
|
2008-11-18 19:20:53 +08:00
|
|
|
* libc-ares-dev (Required for async DNS support)
|
2007-11-13 20:08:40 +08:00
|
|
|
* libxml2-dev (Required for Metalink support)
|
2008-06-29 22:29:36 +08:00
|
|
|
* libz1g-dev (Required for gzip, deflate decoding support in HTTP)
|
2008-08-24 00:14:17 +08:00
|
|
|
* libsqlite3-dev (Required for Firefox3 cookie support)
|
2007-11-13 20:08:40 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
You can use libssl-dev instead of
|
|
|
|
libgnutls-dev,libgpg-error-dev,libgcrypt-dev:
|
2008-02-26 20:38:45 +08:00
|
|
|
|
|
|
|
* libssl-dev (Required for HTTPS, BitTorrent, Checksum support)
|
2007-11-13 20:08:40 +08:00
|
|
|
|
2007-12-14 08:46:32 +08:00
|
|
|
You can use libexpat1-dev instead of libxml2-dev:
|
2008-02-26 20:38:45 +08:00
|
|
|
|
2007-12-14 08:46:32 +08:00
|
|
|
* libexpat1-dev (Required for Metalink support)
|
|
|
|
|
2007-11-13 20:08:40 +08:00
|
|
|
The build process is fairly standard way for *nix programs:
|
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
-------------
|
2007-11-13 20:08:40 +08:00
|
|
|
$ ./configure
|
|
|
|
$ make
|
2008-02-26 20:38:45 +08:00
|
|
|
-------------
|
2007-11-13 20:08:40 +08:00
|
|
|
|
|
|
|
The executable is aria2c in src directory.
|
|
|
|
|
2008-07-23 20:40:22 +08:00
|
|
|
aria2 uses CppUnit for automated unit testing. To run run the unit test:
|
|
|
|
|
|
|
|
------------
|
|
|
|
$ make check
|
|
|
|
------------
|
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
BitTorrrent
|
|
|
|
-----------
|
|
|
|
About filename
|
|
|
|
~~~~~~~~~~~~~~
|
2006-03-21 23:21:11 +08:00
|
|
|
The filename of the downloaded file is determined as follows:
|
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
single-file mode::
|
2008-12-02 00:49:23 +08:00
|
|
|
If "name" key is present in .torrent file, filename is the value
|
|
|
|
of "name" key. Otherwise, filename is the basename of .torrent
|
|
|
|
file appended by ".file". For example, .torrent file is
|
|
|
|
"test.torrrent", then filename is "test.torrent.file". The
|
|
|
|
directory to store the downloaded file can be specified by -d
|
|
|
|
option.
|
2008-02-26 20:38:45 +08:00
|
|
|
|
|
|
|
multi-file mode::
|
2008-12-02 00:49:23 +08:00
|
|
|
The complete directory/file structure mentioned in .torrent file
|
|
|
|
is created. The directory to store the top directory of
|
|
|
|
downloaded files can be specified by -d option.
|
|
|
|
|
|
|
|
In the default behavior, before download starts, a complete directory
|
|
|
|
structure is created if needed. By default, aria2 opens at most 100
|
|
|
|
files mentioned in .torrent file, directly writes to and reads from
|
|
|
|
these files. The number of files to open simultaneously can be
|
|
|
|
controlled by "--bt-max-open-files" option.
|
|
|
|
|
|
|
|
If "--direct-file-mapping" option set to be false, aria2 creates
|
|
|
|
temporary file in the store directory. The length of this file is the
|
|
|
|
sum of length of the files in .torrent file, so at least 2 times more
|
|
|
|
disk space than the file size itself is required. Writing and reading
|
|
|
|
are done against this file. After download completes, aria2 creates
|
|
|
|
complete directory structure if needed, and copies whole file or a
|
|
|
|
part of it to the destination.
|
2006-03-24 19:59:18 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
DHT
|
|
|
|
~~~
|
2008-12-02 00:49:23 +08:00
|
|
|
As of release 0.13.0, aria2 supports DHT. By default, the routing
|
|
|
|
table is saved to $HOME/.aria2/dht.dat.
|
2008-02-26 20:38:45 +08:00
|
|
|
|
2008-10-06 16:35:52 +08:00
|
|
|
Other things should be noted
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2008-12-02 00:49:23 +08:00
|
|
|
* -o option is used to change the filename of .torrent file itself,
|
|
|
|
not a filename of a file in .torrent file.
|
|
|
|
* The port numbers that aria2 uses by default are 6881-6999 for TCP
|
|
|
|
and UDP.
|
|
|
|
* aria2 doesn't configure port-forwarding automatically. Please
|
|
|
|
configure your router or firewall manually.
|
|
|
|
* The maximum number of peers is 55. This limit may be exceeded when
|
|
|
|
download rate is low. This download rate can be adjusted using
|
|
|
|
--bt-request-peer-speed-limit option.
|
|
|
|
* As of release 0.10.0, aria2 stops sending request message after
|
|
|
|
selective download completes.
|
2006-07-04 19:44:15 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
Metalink
|
|
|
|
--------
|
2008-12-02 00:49:23 +08:00
|
|
|
The current implementation supports HTTP(S)/FTP/BitTorrent. The other
|
|
|
|
P2P protocols are ignored.
|
2006-07-04 19:44:15 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
For checksum checking, MD5, SHA1, SHA256 are supported. If multiple
|
|
|
|
hash algorithms are provided, aria2 uses SHA1. If checksum checking is
|
|
|
|
failed, aria2 doesn't retry the download and just exits with non-zero
|
|
|
|
return code.
|
2006-07-04 19:44:15 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
The supported user preferences are version, language, location,
|
|
|
|
protocol and os.
|
2007-01-28 22:18:35 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
If chunk checksums are provided in Metalink file, aria2 automatically
|
|
|
|
validates chunks of data during download. This behavior can be turned
|
|
|
|
off by a command-line option.
|
2007-03-28 00:38:11 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
If signature is included in a Metalink file, aria2 saves it as a file
|
|
|
|
after the completion of the download. The filename is download
|
|
|
|
filename + ".sig". If same file already exists, the signature file is
|
|
|
|
not saved.
|
2008-07-23 20:40:22 +08:00
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
netrc
|
|
|
|
-----
|
2008-12-02 00:49:23 +08:00
|
|
|
netrc support is enabled by default for HTTP(S)/FTP. To disable netrc
|
|
|
|
support, specify -n command-line option. Your .netrc file should have
|
|
|
|
correct permissions(600).
|
2007-03-28 00:38:11 +08:00
|
|
|
|
2008-10-06 16:35:52 +08:00
|
|
|
SERVER PERFORMANCE PROFILE
|
|
|
|
--------------------------
|
2008-12-02 00:49:23 +08:00
|
|
|
This section describes the format of server performance profile. The
|
|
|
|
file is plain text and each line has several NAME=VALUE pair,
|
|
|
|
delimited by comma. Currently following NAMEs are recognized:
|
2008-10-06 16:35:52 +08:00
|
|
|
|
|
|
|
host::
|
|
|
|
Hostname of the server. Required.
|
|
|
|
|
|
|
|
protocol::
|
|
|
|
Protocol for this profile, such as ftp, http. Required.
|
|
|
|
|
|
|
|
dl_speed::
|
2008-12-02 00:49:23 +08:00
|
|
|
The average download speed observed in the previous download in
|
|
|
|
bytes per sec. Required.
|
2008-10-06 16:35:52 +08:00
|
|
|
|
|
|
|
last_updated::
|
2008-12-02 00:49:23 +08:00
|
|
|
Last contact time in GMT with this server, specified in the seconds
|
|
|
|
from the Epoch. Required.
|
2008-10-06 16:35:52 +08:00
|
|
|
|
|
|
|
status::
|
2008-12-02 00:49:23 +08:00
|
|
|
ERROR is set when server cannot be reached or out-of-service or
|
|
|
|
timeout occurred. Otherwise, OK is set.
|
2008-10-06 16:35:52 +08:00
|
|
|
|
2008-12-02 00:49:23 +08:00
|
|
|
Those fields must exist in one line. The order of the fields is not
|
|
|
|
significant. You can put pairs other than above but they are simply
|
|
|
|
ignored.
|
2008-10-06 16:35:52 +08:00
|
|
|
|
|
|
|
An example is follow:
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
host=localhost, protocol=http, dl_speed=32000, last_updated=1222491640, status=OK
|
|
|
|
host=localhost, protocol=ftp, dl_speed=0, last_updated=1222491632, status=ERROR
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
2008-02-26 20:38:45 +08:00
|
|
|
Configuration file
|
|
|
|
------------------
|
2008-12-02 00:49:23 +08:00
|
|
|
Configuration file must be placed under $HOME/.aria2 and must be named
|
|
|
|
as aria2.conf. In each line, there is 1 parameter whose syntax is
|
|
|
|
name=value pair, where name is the long command-line option name
|
|
|
|
without '--' prefix. The lines beginning '#' are treated as comments.
|
2007-03-28 00:38:11 +08:00
|
|
|
|
2007-03-29 00:13:36 +08:00
|
|
|
Example:
|
2008-02-26 20:38:45 +08:00
|
|
|
--------------------------------------
|
2007-03-28 00:38:11 +08:00
|
|
|
# sample configuration file for aria2c
|
|
|
|
listen-port=60000
|
|
|
|
seed-ratio=1.0
|
|
|
|
max-upload-limit=40K
|
2008-02-26 20:38:45 +08:00
|
|
|
---------------------------------------
|