# замена wget на aria2 при emerge

## jodaka

Прочитал про консольную качалку Aria2 (http://aria2.sourceforge.net/). Сия штуковина может качать в несколько потоков, и, что более ценно - одновременно с нескольких разных зеркал (даже смешивая ftp и http)

я так подозреваю - что, если эту софтину прикрутить к emerge вместо wget'a - то скачивание будет происходит заметно веселее :)

кто-нибудь пробовал ? Насколько это реально ?

... я где-то год назад пробовал вместо wget использовать prozilla, но проект загнулся и я вернулся к wget'u

----------

## 046

Моё мнение - загрузка в несколько потоков увеличивает скорость в редких случаях, и обычно только грузит сервера.

Намного лучше бы emerge доработать, чтобы получал следующие пакеты, пока собирается текущий  :Smile: 

----------

## Laitr Keiows

 *046 wrote:*   

> Намного лучше бы emerge доработать, чтобы получал следующие пакеты, пока собирается текущий 

 

Т.е. в make.conf 

```
FEATURES="parallel-fetch"
```

----------

## ba

 *046 wrote:*   

> Моё мнение - загрузка в несколько потоков увеличивает скорость в редких случаях, и обычно только грузит сервера.

 

если у тебя канал достаточно толстый, но сильно забит, то прирост иногда увеличивается в число потков раз :)

а насчет нагрузки на сервера согласен...

----------

## Azik

В make.conf

```
FETCHCOMMAND="/usr/bin/aria2c -s 3 \${URI}"

RESUMECOMMAND="/usr/bin/aria2c -s 3 \${URI}"
```

-s 3 - число потоков для скачивания.

Но это все теория. Второй версии нет пока в portage. Так что проверять на практике будут другие  :Smile: .

Имхо из всех преимуществ aria2 только эти потоки могут быть полезны, остальное не пригодится.

----------

## fank

вот ебилд:

```
# Copyright 1999-2006 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

inherit eutils

DESCRIPTION="aria2 is a download utility with resuming and segmented downloading."

HOMEPAGE="http://aria2.sourceforge.net/"

SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="GPL"

SLOT="0"

KEYWORDS="~x86"

IUSE="ssl tls bittorrent metalink checksum"

RDEPEND="ssl? ( || ( dev-libs/openssl net-libs/gnutls) )

                bittorrent? ( || ( dev-libs/openssl net-libs/gnutls ) )

                metalink? ( >=dev-libs/libxml2-2.6.26 )

                checksum? ( || ( dev-libs/openssl net-libs/gnutls dev-libs/libgcrypt ) ) "

src_compile () {

        econf \

                $(use_enable ssl) \

                $(use_enable tls) \

                $(use_enable bittorrent) \

                $(use_enable metalink) \

                || die

                emake || die

}

src_install () {

        einstall || die "einstall failed"

        dodoc  ABOUT-NLS AUTHORS COPYING INSTALL NEWS README TODO ChangeLog*

}
```

кстати. прога не умеет докачивать файлы   :Confused: 

это серьёзнейший недостаток

----------

## jodaka

 *Azik wrote:*   

> В make.conf
> 
> ```
> FETCHCOMMAND="/usr/bin/aria2c -s 3 \${URI}"
> 
> ...

 

это даже в теории не совсем то, чего бы на самом деле хотелось. Интересно не просто тянуть в 3-5 потоков... но тянуть каждый поток со своего сервера! Вот тогда это уже интересно.

задал вопрос автору по поводу докачки... посмотрим, что он скажет...

----------

## jodaka

 *fank wrote:*   

> кстати. прога не умеет докачивать файлы  :?
> 
> это серьёзнейший недостаток

 

я автору вопрос написал, по поводу докачки - и он ответил:

 *Quote:*   

> 
> 
> Hi, Anton
> 
> Sorry, resume function is not working in 0.6.0 version because of the
> ...

 

добавление: сегодня появилась новая сборка (видимо как раз с починеной докачкой)

----------

## fank

aria2-0.6.0-r1.ebuild:

```
# Copyright 1999-2006 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

inherit eutils

DESCRIPTION="aria2 is a download utility with resuming and segmented downloading."

HOMEPAGE="http://aria2.sourceforge.net/"

SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="GPL"

SLOT="0"

KEYWORDS="~x86"

IUSE="ssl tls bittorrent metalink checksum"

RDEPEND="ssl? ( || ( dev-libs/openssl net-libs/gnutls) )

        bittorrent? ( || ( dev-libs/openssl net-libs/gnutls ) )

        metalink? ( >=dev-libs/libxml2-2.6.26 )

        checksum? ( || ( dev-libs/openssl net-libs/gnutls dev-libs/libgcrypt ) ) "

src_unpack () {

    unpack ${A}

    cd "${S}"

    epatch "${FILESDIR}"/aria2-r1.diff

}

src_compile () {

    econf \

        $(use_enable ssl) \

        $(use_enable tls) \

        $(use_enable bittorrent) \

        $(use_enable metalink) \

        || die

        emake || die

}

src_install () {

    einstall || die "einstall failed"

    dodoc  ABOUT-NLS AUTHORS COPYING INSTALL NEWS README TODO ChangeLog*

}
```

aria2-r1.diff

```
diff -ur aria2-0.6.0/ChangeLog aria2-0.6.0+1/ChangeLog

--- aria2-0.6.0/ChangeLog       2006-07-04 15:13:12.000000000 +0300

+++ aria2-0.6.0+1/ChangeLog     2006-07-06 21:09:19.000000000 +0300

@@ -1,3 +1,32 @@

+2006-07-07  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>

+

+       To fix the bug that .aria2 file is not saved if downloading is stopped

+       by the errors:it results that aria2 can not resume downloading:

+

+       * src/main.cc

+       (normalDownload): Added the call to save().

+       (main): Added the deletion of the elements in 'reserved'.

+

+       To fix log:

+

+       * src/PeerInteraction.cc

+       (receiveHandshake): Fixed log.

+

+       To improve the download performance just a little bit:

+

+       * src/TorrentMan.cc

+       (getPeer): Return nullPeer if connections is greater than

+       MAX_PEER_UPDATE.

+

+2006-07-05  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>

+

+       To improve download performance in BitTorrent:

+

+       * src/TorrentMan.cc

+       (getPeer): Check the number of connections. Return nullPeer if

+       it is greater than MAX_PEER_UPDATE.

+       This code was originally here, but was removed in 0.5.1.

+

 2006-07-04  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>

         To improve the conditional compilation:

diff -ur aria2-0.6.0/src/main.cc aria2-0.6.0+1/src/main.cc

--- aria2-0.6.0/src/main.cc     2006-07-04 14:44:15.000000000 +0300

+++ aria2-0.6.0+1/src/main.cc   2006-07-06 21:02:38.000000000 +0300

@@ -323,6 +323,8 @@

     downloadedFilename = e->segmentMan->getFilePath();

     success = true;

   } else {

+    e->segmentMan->save();

+    e->segmentMan->diskWriter->closeFile();

     printDownloadAbortMessage();

   }

   e->cleanQueue();

@@ -743,6 +745,7 @@

     normalDownload(requests, reserved, op, dir, ufilename, downloadedFilename);

     for_each(requests.begin(), requests.end(), Deleter());

+    for_each(reserved.begin(), reserved.end(), Deleter());

     requests.clear();

   }

 #ifdef ENABLE_METALINK

@@ -787,6 +790,7 @@

                                  downloadedFilename);

     for_each(requests.begin(), requests.end(), Deleter());

+    for_each(reserved.begin(), reserved.end(), Deleter());

     requests.clear();

     if(success) {

diff -ur aria2-0.6.0/src/PeerInteraction.cc aria2-0.6.0+1/src/PeerInteraction.cc

--- aria2-0.6.0/src/PeerInteraction.cc  2006-06-22 18:26:18.000000000 +0300

+++ aria2-0.6.0+1/src/PeerInteraction.cc        2006-07-06 21:02:38.000000000 +0300

@@ -310,7 +310,7 @@

   }

   if(handshakeMessage->isFastExtensionSupported()) {

     peer->setFastExtensionEnabled(true);

-    logger->info("CUID#%d - Fast extension enabled.");

+    logger->info("CUID#%d - Fast extension enabled.", cuid);

   }

   return handshakeMessage;

 }

diff -ur aria2-0.6.0/src/TorrentMan.cc aria2-0.6.0+1/src/TorrentMan.cc

--- aria2-0.6.0/src/TorrentMan.cc       2006-06-24 20:26:07.000000000 +0300

+++ aria2-0.6.0+1/src/TorrentMan.cc     2006-07-06 21:02:38.000000000 +0300

@@ -130,6 +130,9 @@

 }

 Peer* TorrentMan::getPeer() const {

+  if(connections > MAX_PEER_UPDATE) {

+    return Peer::nullPeer;

+  }

   for(Peers::const_iterator itr = peers.begin(); itr != peers.end(); itr++) {

     Peer* p = *itr;

     if(p->cuid == 0 && p->error < MAX_PEER_ERROR) {

```

----------

## Azik

А почему бы сразу не в bugzill'у? Ebuild работает? Если автор не против, пропихну туда, там как раз новая aria2 (в багзилле 0.5.0) рассматривается: https://bugs.gentoo.org/show_bug.cgi?id=134540

----------

## jodaka

собственно уже пару дней гоняю его тестов ради на одной машинке. Качает. Шустро. Но нужного мне изначально эффекта (закачки разных сегментов с разных зеркал) штатными средствами, насколько я могу судить, не достичь.

Посему видимо нужно написать какой-нибудь враппер, который сначала у emerge спросит список зеркал, а потом первые несколько зеркал скормит aria2c. В общем-то -- плевое дело. Если сегодня на работе будет свободное время - напишу и затестирую  :Smile: 

...я её когда просто из исходников собрал - сам бинарник 7.5 Мб вышел. Видимо по умолчанию он с дебагом собирается ?   :Confused: 

----------

## Azik

А это ебилдом приложенным попробуй собарть, сделаешь два дела сразу  :Smile: . Нужно протестировать и сценарий сборки.

----------

## Azik

Тээкс, оттестил наконец сам, вот готовый ebuild от меня - https://bugs.gentoo.org/attachment.cgi?id=91225

Сам баг: https://bugs.gentoo.org/show_bug.cgi?id=134540

Жду откликов.

----------

