Rtorrent failing

Since some of the last pacman upgrades rtorrent started to behave strangely, after downloading a file, when hash check is performed, rtorrent  displays :
bad CRC check consider using 'safe_sync'
while safe_sync = yes is explicity declared in .rtorrent.cf
this didnt happen before

delphinen wrote:
sessy wrote:kernel patch: http://marc.theaimsgroup.com/?l=linux-k … 714084&w=2
Thanks. Any idea how to apply this patch, or it should be better to wait for the next kernel release?
I knew how to patch in my Gentoo days, but don't even want to think about it now, sry
2.6.20-rc3 already has the fix: http://kerneltrap.org/node/7529

Similar Messages

  • [build fails] rtorrent-svn + xmlrpc-c-svn + w3c-libwww

    I have been trying to set up rtorrent with the wtorrent webclient. For that I need rtorrent-svn which depends on xmlrpc-c-svn that depends on w3c-libwww , all this from the AUR. Unfortunately w3c-libwww fails to build and I get this error:
    ../src/.libs/libwwwfile.so: undefined reference to `HTDir_new'
    ../src/.libs/libwwwfile.so: undefined reference to `HTDir_addElement'
    ../src/.libs/libwwwfile.so: undefined reference to `HTDir_free'
    collect2: ld returned 1 exit status
    make[3]: *** [libapp_2] Error 1
    make[3]: Leaving directory `/tmp/yaourt-tmp-flako/aur-w3c-libwww/w3c-libwww/src/w3c-libwww-5.4.0/Library/Examples'
    make[2]: *** [all-recursive] Error 1
    make[2]: Leaving directory `/tmp/yaourt-tmp-flako/aur-w3c-libwww/w3c-libwww/src/w3c-libwww-5.4.0/Library'
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/tmp/yaourt-tmp-flako/aur-w3c-libwww/w3c-libwww/src/w3c-libwww-5.4.0'
    make: *** [all-recursive-am] Error 2
    ==> ERROR: Build Failed.
    Aborting...
    I tried compiling the w3c-libwww package myself, but when I then try to compile xmlrpc-c i get errors again. I don't know what I should do to get rtorrent with wtorrent working, any help would be appreciated...

    Solved!
    Add into PKGBUILD this line:
    env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
    after this line:
    ./configure --prefix=/usr

  • Rtorrent hash check fails every time

    I have rTorrent 0.7.1 / libTorrent 0.11.1 installed. After downloading any torrent, rtorrent does the hash check and it fails every time. I restart it, it does the hash check again and then resumes the download from 90%+
    Do I do something wrong? Is there a setting I miss?

    There were problems with rtorrent and kernel 2.6.19. Have you updated to 2.6.20 yet?
    -edit-
    Actually, I'm not sure whether it was fixed in 2.6.20.
    Last edited by lucke (2007-03-13 22:10:31)

  • Just another rtorrent ui mod

    hi, I have been working on just another rtorrent ui mod, it's mainly inspired from rtorrent-mod by karabaja4 - thanks to him :-)
    I am sorry, I haven't made any package yet (need to study for it as never done before). I am attaching a patch for now, apply it from src directory like below.
    highlights:
    1 - colored more elements (tracker lists, chunks, files list, transferring chunks list etc)
    2 - a bit different ui
    3 - almost everything done lowercase (I like it like that, sorry if you don't like it)
    pwd should be rtorrent/src/rtorrent-0.9.3/src
    patch -p1 < ui-rtorrent-mod.patch
    Patch:
    diff -rupN src/display/canvas.cc src-custom/display/canvas.cc
    --- src/display/canvas.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/canvas.cc 2013-06-06 01:54:59.338119016 +0530
    @@ -5,12 +5,12 @@
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation; either version 2 of the License, or
    // (at your option) any later version.
    +//
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    +//
    // You should have received a copy of the GNU General Public License
    // along with this program; if not, write to the Free Software
    // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    @@ -95,10 +95,21 @@ void
    Canvas::initialize() {
    if (m_isInitialized)
    return;
    +
    m_isInitialized = true;
    initscr();
    +
    + /* colors */
    + start_color();
    + use_default_colors();
    + init_pair(1, COLOR_RED, -1);
    + init_pair(2, COLOR_YELLOW, -1);
    + init_pair(3, COLOR_GREEN, -1);
    + init_pair(4, COLOR_BLUE, -1);
    + init_pair(5, COLOR_MAGENTA, -1);
    + init_pair(6, COLOR_CYAN, -1);
    +
    raw();
    noecho();
    nodelay(stdscr, TRUE);
    @@ -110,7 +121,7 @@ void
    Canvas::cleanup() {
    if (!m_isInitialized)
    return;
    +
    m_isInitialized = false;
    noraw();
    diff -rupN src/display/utils.cc src-custom/display/utils.cc
    --- src/display/utils.cc 2012-02-14 09:02:01.000000000 +0530
    +++ src-custom/display/utils.cc 2013-06-06 01:54:59.338119016 +0530
    @@ -53,6 +53,8 @@
    #include <torrent/data/file_manager.h>
    #include <torrent/download/resource_manager.h>
    #include <torrent/peer/client_info.h>
    +#include <torrent/peer/connection_list.h>
    +#include <torrent/peer/peer_list.h>
    #include "core/download.h"
    #include "core/manager.h"
    @@ -98,9 +100,9 @@ print_hhmmss_local(char* first, char* la
    char*
    print_ddhhmm(char* first, char* last, time_t t) {
    if (t / (24 * 3600) < 100)
    - return print_buffer(first, last, "%2id %2i:%02i", (int)t / (24 * 3600), ((int)t / 3600) % 24, ((int)t / 60) % 60);
    + return print_buffer(first, last, "%2id %2i:%02i |", (int)t / (24 * 3600), ((int)t / 3600) % 24, ((int)t / 60) % 60);
    else
    - return print_buffer(first, last, "--d --:--");
    + return print_buffer(first, last, "--d --:-- |");
    char*
    @@ -129,26 +131,53 @@ print_address(char* first, char* last, c
    char*
    print_download_title(char* first, char* last, core::Download* d) {
    - return print_buffer(first, last, " %s", d->info()->name().c_str());
    + first = print_buffer(first, last, "%s ", d->info()->name().c_str());
    +
    + return first;
    +}
    +
    +char *
    +print_download_title_extra(char* first, char* last, core::Download* d) {
    + if (d->is_hash_checking()) {
    + first = print_buffer(first, last, "| checking hash %3i%%",
    + (d->download()->chunks_hashed() * 100) / d->download()->file_list()->size_chunks());
    + } else if (d->tracker_list()->has_active_not_scrape()) {
    + torrent::TrackerList::iterator itr =
    + std::find_if(d->tracker_list()->begin(), d->tracker_list()->end(),
    + std::mem_fun(&torrent::Tracker::is_busy_not_scrape));
    + char status[128];
    +
    + (*itr)->get_status(status, sizeof(status));
    + first = print_buffer(first, last, "| connecting to %s %s",
    + (*itr)->url().c_str(), status);
    + } else if (!d->message().empty()) {
    + first = print_buffer(first, last, "| %s", d->message().c_str());
    + } else {
    + *first = '\0';
    + }
    +
    + return first;
    char*
    print_download_info(char* first, char* last, core::Download* d) {
    if (!d->download()->info()->is_open())
    - first = print_buffer(first, last, "[CLOSED] ");
    + first = print_buffer(first, last, "stop | ");
    else if (!d->download()->info()->is_active())
    - first = print_buffer(first, last, "[OPEN] ");
    + first = print_buffer(first, last, "open | ");
    + else if (!d->is_done())
    + first = print_buffer(first, last, "load | ");
    else
    - first = print_buffer(first, last, " ");
    + first = print_buffer(first, last, "---- | ");
    if (d->is_done())
    - first = print_buffer(first, last, "done %10.1f MB", (double)d->download()->file_list()->size_bytes() / (double)(1 << 20));
    + first = print_buffer(first, last, "done %8.1f mb", (double)d->download()->file_list()->size_bytes() / (double)(1 << 20));
    else
    - first = print_buffer(first, last, "%6.1f / %6.1f MB",
    + first = print_buffer(first, last, "%6.1f/%6.1f mb",
    (double)d->download()->bytes_done() / (double)(1 << 20),
    (double)d->download()->file_list()->size_bytes() / (double)(1 << 20));
    - first = print_buffer(first, last, " Rate: %5.1f / %5.1f KB Uploaded: %7.1f MB",
    + first = print_buffer(first, last, " | rate: %4.1f/%5.1f kb | uploaded: %5.1f mb |",
    (double)d->info()->up_rate()->rate() / (1 << 10),
    (double)d->info()->down_rate()->rate() / (1 << 10),
    (double)d->info()->up_rate()->total() / (1 << 20));
    @@ -157,24 +186,19 @@ print_download_info(char* first, char* l
    first = print_buffer(first, last, " ");
    first = print_download_percentage_done(first, last, d);
    - first = print_buffer(first, last, " ");
    + first = print_buffer(first, last, " | ");
    first = print_download_time_left(first, last, d);
    - } else {
    - first = print_buffer(first, last, " ");
    - first = print_buffer(first, last, " [%c%c R: %4.2f",
    - rpc::call_command_string("d.tied_to_file", rpc::make_target(d)).empty() ? ' ' : 'T',
    - rpc::call_command_value("d.ignore_commands", rpc::make_target(d)) == 0 ? ' ' : 'I',
    - (double)rpc::call_command_value("d.ratio", rpc::make_target(d)) / 1000.0);
    + first = print_buffer(first, last, " peers: %i(%i)",
    + (int)d->download()->connection_list()->size(),
    + (int)d->download()->peer_list()->available_list_size());
    if (d->priority() != 2)
    - first = print_buffer(first, last, " %s", rpc::call_command_string("d.priority_str", rpc::make_target(d)).c_str());
    + first = print_buffer(first, last, " | %s", rpc::call_command_string("d.priority_str", rpc::make_target(d)).c_str());
    + }
    if (!d->bencode()->get_key("rtorrent").get_key_string("throttle_name").empty())
    - first = print_buffer(first, last , " %s", rpc::call_command_string("d.throttle_name", rpc::make_target(d)).c_str());
    - first = print_buffer(first, last , "]");
    + first = print_buffer(first, last , " | %s", rpc::call_command_string("d.throttle_name", rpc::make_target(d)).c_str());
    if (first > last)
    throw torrent::internal_error("print_download_info(...) wrote past end of the buffer.");
    @@ -182,48 +206,48 @@ print_download_info(char* first, char* l
    return first;
    -char*
    -print_download_status(char* first, char* last, core::Download* d) {
    - if (d->is_active())
    - else if (rpc::call_command_value("d.hashing", rpc::make_target(d)) != 0)
    - first = print_buffer(first, last, "Hashing: ");
    - else if (!d->is_active())
    - first = print_buffer(first, last, "Inactive: ");
    - if (d->is_hash_checking()) {
    - first = print_buffer(first, last, "Checking hash [%2i%%]",
    - (d->download()->chunks_hashed() * 100) / d->download()->file_list()->size_chunks());
    - } else if (d->tracker_list()->has_active_not_scrape()) {
    - torrent::TrackerList::iterator itr =
    - std::find_if(d->tracker_list()->begin(), d->tracker_list()->end(),
    - std::mem_fun(&torrent::Tracker::is_busy_not_scrape));
    - char status[128];
    - (*itr)->get_status(status, sizeof(status));
    - first = print_buffer(first, last, "Tracker[%i:%i]: Connecting to %s %s",
    - (*itr)->group(), std::distance(d->tracker_list()->begin(), itr), (*itr)->url().c_str(), status);
    - } else if (!d->message().empty()) {
    - first = print_buffer(first, last, "%s", d->message().c_str());
    - } else {
    - *first = '\0';
    - if (first > last)
    - throw torrent::internal_error("print_download_status(...) wrote past end of the buffer.");
    - return first;
    +char*
    +print_download_status(char* first, char* last, core::Download* d) {
    + if (d->is_active())
    + ;
    + else if (rpc::call_command_value("d.hashing", rpc::make_target(d)) != 0)
    + first = print_buffer(first, last, "hashing: ");
    + else if (!d->is_active())
    + first = print_buffer(first, last, "inactive: ");
    +
    + if (d->is_hash_checking()) {
    + first = print_buffer(first, last, "checking hash [%2i%%]",
    + (d->download()->chunks_hashed() * 100) / d->download()->file_list()->size_chunks());
    +
    + } else if (d->tracker_list()->has_active_not_scrape()) {
    + torrent::TrackerList::iterator itr =
    + std::find_if(d->tracker_list()->begin(), d->tracker_list()->end(),
    + std::mem_fun(&torrent::Tracker::is_busy_not_scrape));
    + char status[128];
    +
    + (*itr)->get_status(status, sizeof(status));
    + first = print_buffer(first, last, "tracker[%i:%i]: connecting to %s %s",
    + (*itr)->group(), std::distance(d->tracker_list()->begin(), itr), (*itr)->url().c_str(), status);
    +
    + } else if (!d->message().empty()) {
    + first = print_buffer(first, last, "%s", d->message().c_str());
    +
    + } else {
    + *first = '\0';
    + }
    +
    + if (first > last)
    + throw torrent::internal_error("print_download_status(...) wrote past end of the buffer.");
    +
    + return first;
    +}
    char*
    print_download_time_left(char* first, char* last, core::Download* d) {
    uint32_t rate = d->info()->down_rate()->rate();
    if (rate < 512)
    - return print_buffer(first, last, "--d --:--");
    + return print_buffer(first, last, "--d --:-- |");
    time_t remaining = (d->download()->file_list()->size_bytes() - d->download()->bytes_done()) / (rate & ~(uint32_t)(512 - 1));
    @@ -233,10 +257,9 @@ print_download_time_left(char* first, ch
    char*
    print_download_percentage_done(char* first, char* last, core::Download* d) {
    if (!d->is_open() || d->is_done())
    - //return print_buffer(first, last, "[--%%]");
    - return print_buffer(first, last, " ");
    + return print_buffer(first, last, " ");
    else
    - return print_buffer(first, last, "[%2u%%]", (d->download()->file_list()->completed_chunks() * 100) / d->download()->file_list()->size_chunks());
    + return print_buffer(first, last, "%2u%%", (d->download()->file_list()->completed_chunks() * 100) / d->download()->file_list()->size_chunks());
    char*
    @@ -260,23 +283,23 @@ print_client_version(char* first, char*
    char*
    print_status_info(char* first, char* last) {
    if (!torrent::up_throttle_global()->is_throttled())
    - first = print_buffer(first, last, "[Throttle off");
    + first = print_buffer(first, last, "[throttle off");
    else
    - first = print_buffer(first, last, "[Throttle %3i", torrent::up_throttle_global()->max_rate() / 1024);
    + first = print_buffer(first, last, "[throttle %3i", torrent::up_throttle_global()->max_rate() / 1024);
    if (!torrent::down_throttle_global()->is_throttled())
    - first = print_buffer(first, last, "/off KB]");
    + first = print_buffer(first, last, "/off kb]");
    else
    - first = print_buffer(first, last, "/%3i KB]", torrent::down_throttle_global()->max_rate() / 1024);
    + first = print_buffer(first, last, "/%3i kb]", torrent::down_throttle_global()->max_rate() / 1024);
    - first = print_buffer(first, last, " [Rate %5.1f/%5.1f KB]",
    + first = print_buffer(first, last, " [rate %4.1f/%5.1f kb]",
    (double)torrent::up_rate()->rate() / 1024.0,
    (double)torrent::down_rate()->rate() / 1024.0);
    - first = print_buffer(first, last, " [Port: %i]", (unsigned int)torrent::connection_manager()->listen_port());
    + first = print_buffer(first, last, " [port: %i]", (unsigned int)torrent::connection_manager()->listen_port());
    if (!rak::socket_address::cast_from(torrent::connection_manager()->local_address())->is_address_any()) {
    - first = print_buffer(first, last, " [Local ");
    + first = print_buffer(first, last, " [local ");
    first = print_address(first, last, torrent::connection_manager()->local_address());
    first = print_buffer(first, last, "]");
    @@ -285,7 +308,7 @@ print_status_info(char* first, char* las
    throw torrent::internal_error("print_status_info(...) wrote past end of the buffer.");
    if (!rak::socket_address::cast_from(torrent::connection_manager()->bind_address())->is_address_any()) {
    - first = print_buffer(first, last, " [Bind ");
    + first = print_buffer(first, last, " [bind ");
    first = print_address(first, last, torrent::connection_manager()->bind_address());
    first = print_buffer(first, last, "]");
    @@ -295,24 +318,24 @@ print_status_info(char* first, char* las
    char*
    print_status_extra(char* first, char* last) {
    - first = print_buffer(first, last, " [U %i/%i]",
    + first = print_buffer(first, last, " [u %i/%i]",
    torrent::resource_manager()->currently_upload_unchoked(),
    torrent::resource_manager()->max_upload_unchoked());
    - first = print_buffer(first, last, " [D %i/%i]",
    + first = print_buffer(first, last, " [d %i/%i]",
    torrent::resource_manager()->currently_download_unchoked(),
    torrent::resource_manager()->max_download_unchoked());
    - first = print_buffer(first, last, " [H %u/%u]",
    + first = print_buffer(first, last, " [h %u/%u]",
    control->core()->http_stack()->active(),
    control->core()->http_stack()->max_active());
    - first = print_buffer(first, last, " [S %i/%i/%i]",
    + first = print_buffer(first, last, " [s %i/%i/%i]",
    torrent::total_handshakes(),
    torrent::connection_manager()->size(),
    torrent::connection_manager()->max_size());
    - first = print_buffer(first, last, " [F %i/%i]",
    + first = print_buffer(first, last, " [f %i/%i]",
    torrent::file_manager()->open_files(),
    torrent::file_manager()->max_open_files());
    diff -rupN src/display/utils.h src-custom/display/utils.h
    --- src/display/utils.h 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/utils.h 2013-06-06 01:54:59.331452368 +0530
    @@ -66,6 +66,7 @@ char* print_ddhhmm(char* first, ch
    char* print_ddmmyyyy(char* first, char* last, time_t t);
    char* print_download_title(char* first, char* last, core::Download* d);
    +char* print_download_title_extra(char* first, char* last, core::Download* d);
    char* print_download_info(char* first, char* last, core::Download* d);
    char* print_download_status(char* first, char* last, core::Download* d);
    char* print_download_time_left(char* first, char* last, core::Download* d);
    diff -rupN src/display/window_download_chunks_seen.cc src-custom/display/window_download_chunks_seen.cc
    --- src/display/window_download_chunks_seen.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/window_download_chunks_seen.cc 2013-06-06 02:04:03.243342326 +0530
    @@ -66,7 +66,7 @@ WindowDownloadChunksSeen::redraw() {
    if (m_canvas->height() < 3 || m_canvas->width() < 18)
    return;
    - m_canvas->print(2, 0, "Chunks seen: [C/A/D %i/%i/%.2f]",
    + m_canvas->print(2, 0, "chunks seen: [c/a/d %i/%i/%.2f]",
    (int)m_download->download()->peers_complete() + m_download->download()->file_list()->is_done(),
    (int)m_download->download()->peers_accounted(),
    std::floor(m_download->distributed_copies() * 100.0f) / 100.0f);
    @@ -74,15 +74,16 @@ WindowDownloadChunksSeen::redraw() {
    const uint8_t* seen = m_download->download()->chunks_seen();
    if (seen == NULL || m_download->download()->file_list()->bitfield()->empty()) {
    - m_canvas->print(2, 2, "Not available.");
    + m_canvas->print(2, 2, "not available.");
    return;
    if (!m_download->is_done()) {
    - m_canvas->print(36, 0, "X downloaded missing queued downloading");
    - m_canvas->print_char(50, 0, 'X' | A_BOLD);
    - m_canvas->print_char(61, 0, 'X' | A_BOLD | A_UNDERLINE);
    - m_canvas->print_char(71, 0, 'X' | A_REVERSE);
    + m_canvas->print(36, 0, " downloaded missing queued downloading");
    + m_canvas->print_char(36, 0, 'x' | COLOR_PAIR(3));
    + m_canvas->print_char(50, 0, 'x' | COLOR_PAIR(1));
    + m_canvas->print_char(61, 0, 'x' | A_UNDERLINE);
    + m_canvas->print_char(71, 0, 'x' | COLOR_PAIR(6));
    *m_focus = std::min(*m_focus, max_focus());
    @@ -109,15 +110,15 @@ WindowDownloadChunksSeen::redraw() {
    chtype attr;
    if (bitfield->get(chunk - seen)) {
    - attr = A_NORMAL;
    + attr = COLOR_PAIR(3);
    } else if (itrTransfer != transferChunks.end() && (uint32_t)(chunk - seen) == (*itrTransfer)->index()) {
    if (std::find_if((*itrTransfer)->begin(), (*itrTransfer)->end(), std::mem_fun_ref(&torrent::Block::is_transfering)) != (*itrTransfer)->end())
    - attr = A_REVERSE;
    + attr = COLOR_PAIR(1);
    else
    - attr = A_BOLD | A_UNDERLINE;
    + attr = A_UNDERLINE;
    itrTransfer++;
    } else {
    - attr = A_BOLD;
    + attr = COLOR_PAIR(6);
    m_canvas->print_char(attr | rak::value_to_hexchar<0>(std::min<uint8_t>(*chunk, 0xF)));
    diff -rupN src/display/window_download_list.cc src-custom/display/window_download_list.cc
    --- src/display/window_download_list.cc 2012-02-14 09:02:01.000000000 +0530
    +++ src-custom/display/window_download_list.cc 2013-06-06 01:54:59.331452368 +0530
    @@ -71,7 +71,7 @@ WindowDownloadList::redraw() {
    if (m_view == NULL)
    return;
    - m_canvas->print(0, 0, "%s", ("[View: " + m_view->name() + "]").c_str());
    + m_canvas->print(0, 0, "%s", ("[view: " + m_view->name() + "]").c_str());
    if (m_view->empty_visible() || m_canvas->width() < 5 || m_canvas->height() < 2)
    return;
    @@ -81,7 +81,7 @@ WindowDownloadList::redraw() {
    Range range = rak::advance_bidirectional(m_view->begin_visible(),
    m_view->focus() != m_view->end_visible() ? m_view->focus() : m_view->begin_visible(),
    m_view->end_visible(),
    - m_canvas->height() / 3);
    + (m_canvas->height() - 1) / 3);
    // Make sure we properly fill out the last lines so it looks like
    // there are more torrents, yet don't hide it if we got the last one
    @@ -89,21 +89,54 @@ WindowDownloadList::redraw() {
    if (range.second != m_view->end_visible())
    ++range.second;
    - int pos = 1;
    + int pos = 2;
    while (range.first != range.second) {
    char buffer[m_canvas->width() + 1];
    char* last = buffer + m_canvas->width() - 2 + 1;
    + int title_length;
    + //do not print on last lines if cannot show whole torrent
    + if (pos >= (m_canvas->height() - 1))
    + break;
    +
    + // print title
    print_download_title(buffer, last, *range.first);
    - m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
    - print_download_info(buffer, last, *range.first);
    - m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
    + m_canvas->print(0, pos, "%c %s", range.first == m_view->focus() ? '>' : ' ', buffer);
    + title_length = strlen(buffer);
    + if ((*range.first)->is_done()) {
    + m_canvas->set_attr(2, pos, (title_length), A_BOLD, 3);
    + } else {
    + m_canvas->set_attr(2, pos, (title_length), A_BOLD, 2);
    + }
    + //print title extra
    + print_download_title_extra(buffer, last, *range.first);
    +
    + //do not let title extra get off screen
    + buffer[m_canvas->width() - title_length - 2] = '\0';
    + m_canvas->print((title_length + 2), pos++, "%s", buffer);
    - print_download_status(buffer, last, *range.first);
    - m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
    + print_download_info(buffer, last, *range.first);
    + m_canvas->print(0, pos, " %s", buffer);
    + if (!(*range.first)->info()->is_open()) {
    + //closed
    + m_canvas->set_attr(2, pos, 4, A_BOLD, 1);
    + } else if (!(*range.first)->info()->is_active()) {
    + //paused
    + m_canvas->set_attr(2, pos, 4, A_BOLD, 2);
    + } else {
    + //active
    + m_canvas->set_attr(2, pos, 4, A_BOLD, 3);
    + }
    +
    + if ((*range.first)->is_done()) {
    + //finished
    + m_canvas->set_attr(9, pos, 16, A_BOLD, 3);
    + }
    + m_canvas->set_attr(28, pos, (strlen(buffer) - 26), A_NORMAL, 6);
    + pos++;
    + pos++;
    ++range.first;
    diff -rupN src/display/window_download_statusbar.cc src-custom/display/window_download_statusbar.cc
    --- src/display/window_download_statusbar.cc 2012-02-14 09:02:01.000000000 +0530
    +++ src-custom/display/window_download_statusbar.cc 2013-06-06 01:54:59.328119043 +0530
    @@ -68,7 +68,7 @@ WindowDownloadStatusbar::redraw() {
    print_download_info(buffer, last, m_download);
    m_canvas->print(0, 0, "%s", buffer);
    - snprintf(buffer, last - buffer, "Peers: %i(%i) Min/Max: %i/%i Slots: U:%i/%i D:%i/%i U/I/C/A: %i/%i/%i/%i Unchoked: %u/%u Failed: %i",
    + snprintf(buffer, last - buffer, "peers: %i(%i) min/max: %i/%i slots: u:%i/%i d:%i/%i u/i/c/a: %i/%i/%i/%i unchoked: %u/%u failed: %i",
    (int)m_download->download()->connection_list()->size(),
    (int)m_download->download()->peer_list()->available_list_size(),
    (int)m_download->download()->connection_list()->min_size(),
    diff -rupN src/display/window_download_transfer_list.cc src-custom/display/window_download_transfer_list.cc
    --- src/display/window_download_transfer_list.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/window_download_transfer_list.cc 2013-06-06 01:54:59.331452368 +0530
    @@ -65,7 +65,7 @@ WindowDownloadTransferList::redraw() {
    const torrent::TransferList* transfers = m_download->download()->transfer_list();
    - m_canvas->print(2, 0, "Transfer list: [Size %i]", transfers->size());
    + m_canvas->print(2, 0, "transfer list: [size %i]", transfers->size());
    torrent::TransferList::const_iterator itr = transfers->begin();
    @@ -74,7 +74,7 @@ WindowDownloadTransferList::redraw() {
    // prettify this. (This is a very subtle hint)
    for (unsigned int y = 1; y < m_canvas->height() && itr != transfers->end(); ++y, ++itr) {
    - m_canvas->print(0, y, "%5u [P: %u F: %u]", (*itr)->index(), (*itr)->priority(), (*itr)->failed());
    + m_canvas->print(0, y, "%5u [p: %u f: %u]", (*itr)->index(), (*itr)->priority(), (*itr)->failed());
    // Handle window size.
    for (torrent::BlockList::const_iterator bItr = (*itr)->begin(), bLast = (*itr)->end(); bItr != bLast; ++bItr) {
    @@ -89,7 +89,7 @@ WindowDownloadTransferList::redraw() {
    chtype attr = A_NORMAL;
    if (bItr->is_finished()) {
    - attr = A_REVERSE;
    + attr = COLOR_PAIR(3);
    id = key_id(bItr->leader()->const_peer_info());
    } else if (bItr->is_transfering()) {
    diff -rupN src/display/window_file_list.cc src-custom/display/window_file_list.cc
    --- src/display/window_file_list.cc 2012-02-14 09:02:01.000000000 +0530
    +++ src-custom/display/window_file_list.cc 2013-06-06 01:54:59.338119016 +0530
    @@ -154,9 +154,9 @@ WindowFileList::redraw() {
    unsigned int pos = 0;
    - int filenameWidth = m_canvas->width() - 16;
    + int filenameWidth = m_canvas->width() - 18;
    - m_canvas->print(0, pos++, "Cmp Pri Size Filename");
    + m_canvas->print(0, pos++, "cmp pri size filename");
    while (pos != m_canvas->height()) {
    iterator itr = entries[first];
    @@ -164,17 +164,17 @@ WindowFileList::redraw() {
    if (itr == iterator(fl->end()))
    break;
    - m_canvas->set_default_attributes(itr == m_element->selected() ? is_focused() ? A_REVERSE : A_BOLD : A_NORMAL);
    + m_canvas->set_default_attributes(itr == m_element->selected() ? is_focused() ? COLOR_PAIR(3) : A_NORMAL : A_NORMAL);
    if (itr.is_empty()) {
    - m_canvas->print(0, pos, "%*c%-*s", 16, ' ', filenameWidth, "EMPTY");
    + m_canvas->print(0, pos, "%*c%-*s", 18, ' ', filenameWidth, "empty");
    } else if (itr.is_entering()) {
    - m_canvas->print(0, pos, "%*c %ls", 16 + itr.depth(), '\\',
    - itr.depth() < (*itr)->path()->size() ? wstring_width((*itr)->path()->at(itr.depth()), filenameWidth - itr.depth() - 1).c_str() : L"UNKNOWN");
    + m_canvas->print(0, pos, "%*c %ls", 18 + itr.depth(), '\\',
    + itr.depth() < (*itr)->path()->size() ? wstring_width((*itr)->path()->at(itr.depth()), filenameWidth - itr.depth() - 1).c_str() : L"unknown");
    } else if (itr.is_leaving()) {
    - m_canvas->print(0, pos, "%*c %-*s", 16 + (itr.depth() - 1), '/', filenameWidth - (itr.depth() - 1), "");
    + m_canvas->print(0, pos, "%*c %-*s", 18 + (itr.depth() - 1), '/', filenameWidth - (itr.depth() - 1), "");
    } else if (itr.is_file()) {
    torrent::File* e = *itr;
    @@ -185,7 +185,7 @@ WindowFileList::redraw() {
    case torrent::PRIORITY_OFF: priority = "off"; break;
    case torrent::PRIORITY_NORMAL: priority = " "; break;
    case torrent::PRIORITY_HIGH: priority = "hig"; break;
    - default: priority = "BUG"; break;
    + default: priority = "bug"; break;
    m_canvas->print(0, pos, "%3d %s ", done_percentage(e), priority);
    @@ -193,19 +193,19 @@ WindowFileList::redraw() {
    int64_t val = e->size_bytes();
    if (val < (int64_t(1000) << 10))
    - m_canvas->print(8, pos, "%5.1f K", (double)val / (int64_t(1) << 10));
    + m_canvas->print(8, pos, " %5.1f k ", (double)val / (int64_t(1) << 10));
    else if (val < (int64_t(1000) << 20))
    - m_canvas->print(8, pos, "%5.1f M", (double)val / (int64_t(1) << 20));
    + m_canvas->print(8, pos, " %5.1f m ", (double)val / (int64_t(1) << 20));
    else if (val < (int64_t(1000) << 30))
    - m_canvas->print(8, pos, "%5.1f G", (double)val / (int64_t(1) << 30));
    + m_canvas->print(8, pos, " %5.1f g ", (double)val / (int64_t(1) << 30));
    else
    - m_canvas->print(8, pos, "%5.1f T", (double)val / (int64_t(1) << 40));
    + m_canvas->print(8, pos, " %5.1f t ", (double)val / (int64_t(1) << 40));
    - m_canvas->print(15, pos, "%*c %ls", 1 + itr.depth(), '|',
    - itr.depth() < (*itr)->path()->size() ? wstring_width((*itr)->path()->at(itr.depth()), filenameWidth - itr.depth() - 1).c_str() : L"UNKNOWN");
    + m_canvas->print(17, pos, "%*c %ls", 1 + itr.depth(), '|',
    + itr.depth() < (*itr)->path()->size() ? wstring_width((*itr)->path()->at(itr.depth()), filenameWidth - itr.depth() - 1).c_str() : L"unknown");
    } else {
    - m_canvas->print(0, pos, "BORK BORK");
    + m_canvas->print(0, pos, "bork bork");
    m_canvas->set_default_attributes(A_NORMAL);
    diff -rupN src/display/window_http_queue.cc src-custom/display/window_http_queue.cc
    --- src/display/window_http_queue.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/window_http_queue.cc 2013-06-06 01:54:59.328119043 +0530
    @@ -70,7 +70,7 @@ WindowHttpQueue::redraw() {
    m_canvas->erase();
    - m_canvas->print(0, 0, "Http [%i]", m_queue->size());
    + m_canvas->print(0, 0, "http [%i]", m_queue->size());
    unsigned int pos = 10;
    Container::iterator itr = m_container.begin();
    diff -rupN src/display/window_input.cc src-custom/display/window_input.cc
    --- src/display/window_input.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/window_input.cc 2013-06-06 01:54:59.338119016 +0530
    @@ -49,7 +49,7 @@ WindowInput::redraw() {
    m_canvas->print(0, 0, "%s> %s", m_title.c_str(), m_input != NULL ? m_input->c_str() : "<NULL>");
    if (m_focus)
    - m_canvas->set_attr(m_input->get_pos() + 2 + m_title.size(), 0, 1, A_REVERSE, COLOR_PAIR(0));
    + m_canvas->set_attr(m_input->get_pos() + 2 + m_title.size(), 0, 1, A_BOLD, 3);
    diff -rupN src/display/window_peer_list.cc src-custom/display/window_peer_list.cc
    --- src/display/window_peer_list.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/window_peer_list.cc 2013-06-06 01:54:59.334785692 +0530
    @@ -68,16 +68,16 @@ WindowPeerList::redraw() {
    int x = 2;
    int y = 0;
    - m_canvas->print(x, y, "IP"); x += 16;
    - m_canvas->print(x, y, "UP"); x += 7;
    - m_canvas->print(x, y, "DOWN"); x += 7;
    - m_canvas->print(x, y, "PEER"); x += 7;
    - m_canvas->print(x, y, "CT/RE/LO"); x += 10;
    - m_canvas->print(x, y, "QS"); x += 6;
    - m_canvas->print(x, y, "DONE"); x += 6;
    - m_canvas->print(x, y, "REQ"); x += 6;
    - m_canvas->print(x, y, "SNUB"); x += 6;
    - m_canvas->print(x, y, "FAILED");
    + m_canvas->print(x, y, "ip"); x += 16;
    + m_canvas->print(x, y, "up"); x += 7;
    + m_canvas->print(x, y, "down"); x += 7;
    + m_canvas->print(x, y, "peer"); x += 7;
    + m_canvas->print(x, y, "ct/re/lo"); x += 10;
    + m_canvas->print(x, y, "qs"); x += 6;
    + m_canvas->print(x, y, "done"); x += 6;
    + m_canvas->print(x, y, "req"); x += 6;
    + m_canvas->print(x, y, "snub"); x += 6;
    + m_canvas->print(x, y, "failed");
    ++y;
    diff -rupN src/display/window_title.cc src-custom/display/window_title.cc
    --- src/display/window_title.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/display/window_title.cc 2013-06-06 01:54:59.338119016 +0530
    @@ -47,7 +47,9 @@ WindowTitle::redraw() {
    m_canvas->erase();
    m_canvas->print(std::max(0, ((int)m_canvas->width() - (int)m_title.size()) / 2 - 4), 0,
    - "*** %s ***", m_title.c_str());
    + "--- %s ---", m_title.c_str());
    + m_canvas->set_attr((((int)m_canvas->width() - (int)m_title.size()) / 2 - 4), 0, 3, A_BOLD, 1);
    + m_canvas->set_attr(((((int)m_canvas->width() - (int)m_title.size()) / 2) + (int)m_title.size() + 1), 0, 3, A_BOLD, 1);
    diff -rupN src/display/window_tracker_list.cc src-custom/display/window_tracker_list.cc
    --- src/display/window_tracker_list.cc 2012-04-10 18:16:51.000000000 +0530
    +++ src-custom/display/window_tracker_list.cc 2013-06-06 01:54:59.331452368 +0530
    @@ -65,7 +65,7 @@ WindowTrackerList::redraw() {
    torrent::TrackerList* tl = m_download->tracker_list();
    torrent::TrackerController* tc = m_download->tracker_controller();
    - m_canvas->print(2, pos, "Trackers: [Key: %08x] [%s %s %s]",
    + m_canvas->print(2, pos, "trackers: [key: %08x] [%s %s %s]",
    tl->key(),
    tc->is_requesting() ? "req" : " ",
    tc->is_promiscuous_mode() ? "prom" : " ",
    @@ -99,7 +99,7 @@ WindowTrackerList::redraw() {
    else
    state = " ";
    - m_canvas->print(0, pos++, "%s Id: %s Counters: %uf / %us (%u) %s S/L/D: %u/%u/%u (%u/%u)",
    + m_canvas->print(0, pos++, "%s id: %s counters: %uf / %us (%u) %s s/l/d: %u/%u/%u (%u/%u)",
    state,
    rak::copy_escape_html(tracker->tracker_id()).c_str(),
    tracker->failed_counter(),
    @@ -114,13 +114,13 @@ WindowTrackerList::redraw() {
    if (range.first == *m_focus) {
    - m_canvas->set_attr(4, pos - 2, m_canvas->width(), is_focused() ? A_REVERSE : A_BOLD, COLOR_PAIR(0));
    - m_canvas->set_attr(4, pos - 1, m_canvas->width(), is_focused() ? A_REVERSE : A_BOLD, COLOR_PAIR(0));
    + m_canvas->set_attr(4, pos - 2, m_canvas->width(), is_focused() ? A_BOLD : A_NORMAL, 3);
    + m_canvas->set_attr(4, pos - 1, m_canvas->width(), is_focused() ? A_BOLD : A_NORMAL, 3);
    if (tracker->is_busy()) {
    - m_canvas->set_attr(0, pos - 2, 4, A_REVERSE, COLOR_PAIR(0));
    - m_canvas->set_attr(0, pos - 1, 4, A_REVERSE, COLOR_PAIR(0));
    + m_canvas->set_attr(0, pos - 2, 4, A_BOLD, 2);
    + m_canvas->set_attr(0, pos - 1, 4, A_BOLD, 2);
    range.first++;
    diff -rupN src/ui/download.cc src-custom/ui/download.cc
    --- src/ui/download.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/ui/download.cc 2013-06-06 01:54:59.404785502 +0530
    @@ -109,22 +109,22 @@ inline ElementBase*
    Download::create_menu() {
    ElementMenu* element = new ElementMenu;
    - element->push_back("Peer list",
    + element->push_back("peer list",
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_focus), DISPLAY_PEER_LIST),
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_menu), DISPLAY_PEER_LIST));
    - element->push_back("Info",
    + element->push_back("info",
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_focus), DISPLAY_INFO),
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_menu), DISPLAY_INFO));
    - element->push_back("File list",
    + element->push_back("file list",
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_focus), DISPLAY_FILE_LIST),
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_menu), DISPLAY_FILE_LIST));
    - element->push_back("Tracker list",
    + element->push_back("tracker list",
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_focus), DISPLAY_TRACKER_LIST),
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_menu), DISPLAY_TRACKER_LIST));
    - element->push_back("Chunks seen",
    + element->push_back("chunks seen",
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_focus), DISPLAY_CHUNKS_SEEN),
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_menu), DISPLAY_CHUNKS_SEEN));
    - element->push_back("Transfer list",
    + element->push_back("transfer list",
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_focus), DISPLAY_TRANSFER_LIST),
    sigc::bind(sigc::mem_fun(this, &Download::activate_display_menu), DISPLAY_TRANSFER_LIST));
    @@ -149,41 +149,41 @@ Download::create_info() {
    // Get these bindings with some kind of string map.
    - element->push_column("Name:", te_command("d.name="));
    - element->push_column("Local id:", te_command("d.local_id_html="));
    - element->push_column("Info hash:", te_command("d.hash="));
    - element->push_column("Created:", te_command("cat=$convert.date=$d.creation_date=,\" \",$convert.time=$d.creation_date="));
    + element->push_column("name:", te_command("d.name="));
    + element->push_column("local id:", te_command("d.local_id_html="));
    + element->push_column("info hash:", te_command("d.hash="));
    + element->push_column("created:", te_command("cat=$convert.date=$d.creation_date=,\" \",$convert.time=$d.creation_date="));
    element->push_back("");
    - element->push_column("Directory:", te_command("d.directory="));
    - element->push_column("Base Path:", te_command("d.base_path="));
    - element->push_column("Tied to file:", te_command("d.tied_to_file="));
    - element->push_column("File stats:", te_command("cat=$if=$d.is_multi_file=\\,multi\\,single,\" \",$d.size_files=,\" files\""));
    + element->push_column("directory:", te_command("d.directory="));
    + element->push_column("base Path:", te_command("d.base_path="));
    + element->push_column("tied to file:", te_command("d.tied_to_file="));
    + element->push_column("file stats:", te_command("cat=$if=$d.is_multi_file=\\,multi\\,single,\" \",$d.size_files=,\" files\""));
    element->push_back("");
    - element->push_column("Chunks:", te_command("cat=(d.completed_chunks),\" / \",(d.size_chunks),\" * \",(d.chunk_size),\" (\",(d.wanted_chunks),\")\""));
    - element->push_column("Priority:", te_command("d.priority="));
    - element->push_column("Peer exchange:", te_command("cat=$if=$d.peer_exchange=\\,enabled\\,disabled,\\ ,"
    + element->push_column("chunks:", te_command("cat=(d.completed_chunks),\" / \",(d.size_chunks),\" * \",(d.chunk_size),\" (\",(d.wanted_chunks),\")\""));
    + element->push_column("priority:", te_command("d.priority="));
    + element->push_column("peer exchange:", te_command("cat=$if=$d.peer_exchange=\\,enabled\\,disabled,\\ ,"
    "$if=$d.is_pex_active=\\,active\\,$d.is_private=\\,private\\,inactive,"
    "\\ (,$d.size_pex=,/,$d.max_size_pex=,)"));
    - element->push_column("State changed:", te_command("convert.elapsed_time=$d.state_changed="));
    + element->push_column("state changed:", te_command("convert.elapsed_time=$d.state_changed="));
    element->push_back("");
    - element->push_column("Memory usage:", te_command("cat=$convert.mb=$pieces.memory.current=,\" MB\""));
    - element->push_column("Max memory usage:", te_command("cat=$convert.mb=$pieces.memory.max=,\" MB\""));
    - element->push_column("Free diskspace:", te_command("cat=$convert.mb=$d.free_diskspace=,\" MB\""));
    - element->push_column("Safe diskspace:", te_command("cat=$convert.mb=$pieces.sync.safe_free_diskspace=,\" MB\""));
    + element->push_column("memory usage:", te_command("cat=$convert.mb=$pieces.memory.current=,\" MB\""));
    + element->push_column("max memory usage:", te_command("cat=$convert.mb=$pieces.memory.max=,\" MB\""));
    + element->push_column("free diskspace:", te_command("cat=$convert.mb=$d.free_diskspace=,\" MB\""));
    + element->push_column("safe diskspace:", te_command("cat=$convert.mb=$pieces.sync.safe_free_diskspace=,\" MB\""));
    element->push_back("");
    - element->push_column("Connection type:", te_command("cat=(d.connection_current),\" \",(if,(d.accepting_seeders),"",\"no_seeders\")"));
    - element->push_column("Choke heuristic:", te_command("cat=(d.up.choke_heuristics),\", \",(d.down.choke_heuristics),\", \",(d.group)"));
    - element->push_column("Safe sync:", te_command("if=$pieces.sync.always_safe=,yes,no"));
    - element->push_column("Send buffer:", te_command("cat=$convert.kb=$network.send_buffer.size=,\" KB\""));
    - element->push_column("Receive buffer:", te_command("cat=$convert.kb=$network.receive_buffer.size=,\" KB\""));
    + element->push_column("connection type:", te_command("cat=(d.connection_current),\" \",(if,(d.accepting_seeders),"",\"no_seeders\")"));
    + element->push_column("choke heuristic:", te_command("cat=(d.up.choke_heuristics),\", \",(d.down.choke_heuristics),\", \",(d.group)"));
    + element->push_column("safe sync:", te_command("if=$pieces.sync.always_safe=,yes,no"));
    + element->push_column("send buffer:", te_command("cat=$convert.kb=$network.send_buffer.size=,\" KB\""));
    + element->push_column("receive buffer:", te_command("cat=$convert.kb=$network.receive_buffer.size=,\" KB\""));
    // TODO: Define a custom command for this and use $argument.0 instead of looking up the name multiple times?
    - element->push_column("Throttle:", te_command("branch=d.throttle_name=,\""
    + element->push_column("throttle:", te_command("branch=d.throttle_name=,\""
    "cat=$d.throttle_name=,\\\" [Max \\\","
    "$convert.throttle=$throttle.up.max=$d.throttle_name=,\\\"/\\\","
    "$convert.throttle=$throttle.down.max=$d.throttle_name=,\\\" KB] [Rate \\\","
    @@ -192,10 +192,10 @@ Download::create_info() {
    "cat=\"global\""));
    element->push_back("");
    - element->push_column("Upload:", te_command("cat=$convert.kb=$d.up.rate=,\" KB / \",$convert.xb=$d.up.total="));
    - element->push_column("Download:", te_command("cat=$convert.kb=$d.down.rate=,\" KB / \",$convert.xb=$d.down.total="));
    - element->push_column("Skipped:", te_command("cat=$convert.kb=$d.skip.rate=,\" KB / \",$convert.xb=$d.skip.total="));
    - element->push_column("Preload:", te_command("cat=$pieces.preload.type=,\" / \",$pieces.stats_preloaded=,\" / \",$pieces.stats_preloaded="));
    + element->push_column("upload:", te_command("cat=$convert.kb=$d.up.rate=,\" KB / \",$convert.xb=$d.up.total="));
    + element->push_column("download:", te_command("cat=$convert.kb=$d.down.rate=,\" KB / \",$convert.xb=$d.down.total="));
    + element->push_column("skipped:", te_command("cat=$convert.kb=$d.skip.rate=,\" KB / \",$convert.xb=$d.skip.total="));
    + element->push_column("preload:", te_command("cat=$pieces.preload.type=,\" / \",$pieces.stats_preloaded=,\" / \",$pieces.stats_preloaded="));
    element->set_column_width(element->column_width() + 1);
    diff -rupN src/ui/download_list.cc src-custom/ui/download_list.cc
    --- src/ui/download_list.cc 2012-03-13 17:40:49.000000000 +0530
    +++ src-custom/ui/download_list.cc 2013-06-06 01:54:59.404785502 +0530
    @@ -221,12 +221,12 @@ DownloadList::activate_display(Display d
    // Set title.
    switch (displayType) {
    case DISPLAY_DOWNLOAD_LIST:
    - control->ui()->window_title()->set_title("rTorrent " VERSION "/" +
    + control->ui()->window_title()->set_title("rtorrent-custom " VERSION "/" +
    std::string(torrent::version()) + " - " +
    rpc::call_command_string("session.name"));
    break;
    case DISPLAY_LOG:
    - control->ui()->window_title()->set_title("Log");
    + control->ui()->window_title()->set_title("log");
    break;
    default: break;
    diff -rupN src/ui/element_download_list.cc src-custom/ui/element_download_list.cc
    --- src/ui/element_download_list.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/ui/element_download_list.cc 2013-06-06 01:54:59.404785502 +0530
    @@ -59,7 +59,7 @@ ElementDownloadList::ElementDownloadList
    m_window(NULL),
    m_view(NULL) {
    - receive_change_view("main");
    + receive_change_view("name");
    if (m_view == NULL)
    throw torrent::internal_error("View \"main\" must be present to initialize the main display.");
    @@ -153,7 +153,7 @@ ElementDownloadList::receive_command(con
    m_view->set_last_changed();
    } catch (torrent::input_error& e) {
    - lt_log_print(torrent::LOG_WARN, "Command failed: %s", e.what());
    + lt_log_print(torrent::LOG_WARN, "command failed: %s", e.what());
    return;
    diff -rupN src/ui/element_file_list.cc src-custom/ui/element_file_list.cc
    --- src/ui/element_file_list.cc 2012-01-19 15:48:01.000000000 +0530
    +++ src-custom/ui/element_file_list.cc 2013-06-06 01:54:59.408118826 +0530
    @@ -86,19 +86,19 @@ element_file_list_create_info() {
    element->set_column(1);
    element->set_interval(1);
    - element->push_back("File info:");
    + element->push_back("file info:");
    element->push_back("");
    - element->push_column("Filename:", te_command("fi.filename_last="));
    + element->push_column("filename:", te_command("fi.filename_last="));
    element->push_back("");
    - element->push_column("Size:", te_command("if=$fi.is_file=,$convert.xb=$f.size_bytes=,---"));
    - element->push_column("Chunks:", te_command("cat=$f.completed_chunks=,\" / \",$f.size_chunks="));
    - element->push_column("Range:", te_command("cat=$f.range_first=,\" - \",$f.range_second="));
    + element->push_column("size:", te_command("if=$fi.is_file=,$convert.xb=$f.size_bytes=,---"));
    + element->push_column("chunks:", te_command("cat=$f.completed_chunks=,\" / \",$f.size_chunks="));
    + element->push_column("range:", te_command("cat=$f.range_first=,\" - \",$f.range_second="));
    element->push_back("");
    - element->push_column("Queued:", te_command("cat=\"$if=$f.is_create_queued=,create\",\" \",\"$if=$f.is_resize_queued=,resize\""));
    - element->push_column("Prioritize:", te_command("cat=\"$if=$f.prioritize_first=,first\",\" \",\"$if=$f.prioritize_last=,last\""));
    + element->push_column("queued:", te_command("cat=\"$if=$f.is_create_queued=,create\",\" \",\"$if=$f.is_resize_queued=,resize\""));
    + element->push_column("prioritize:", te_command("cat=\"$if=$f.prioritize_first=,first\",\" \",\"$if=$f.prioritize_last=,last\""));
    element->set_column_width(element->column_width() + 1);
    diff -rupN src/ui/element_peer_list.cc src-custom/ui/element_peer_list.cc
    --- src/ui/element_peer_list.cc 2012-04-09 12:09:14.000000000 +0530
    +++ src-custom/ui/element_peer_list.cc 2013-06-06 01:54:59.404785502 +0530
    @@ -106,24 +106,24 @@ ElementPeerList::create_info() {
    element->set_column(1);
    element->set_interval(1);
    - element->push_back("Peer info:");
    + element->push_back("peer info:");
    element->push_back("");
    - element->push_column("Address:", te_command("cat=$p.address=,:,$p.port="));
    - element->push_column("Id:", te_command("p.id_html="));
    - element->push_column("Client:", te_command("p.client_version="));
    - element->push_column("Options:", te_command("p.options_str="));
    - element->push_column("Connected:", te_command("if=$p.is_incoming=,incoming,outgoing"));
    - element->push_column("Encrypted:", te_command("if=$p.is_encrypted=,yes,$p.is_obfuscated=,handshake,no"));
    + element->push_column("address:", te_command("cat=$p.address=,:,$p.port="));
    + element->push_column("id:", te_command("p.id_html="));
    + element->push_column("client:", te_command("p.client_version="));
    + element->push_column("options:", te_command("p.options_str="));
    + element->push_column("connected:", te_command("if=$p.is_incoming=,incoming,outgoing"));
    + element->push_column("encrypted:", te_command("if=$p.is_encrypted=,yes,$p.is_obfuscated=,handshake,no"));
    element->push_back("");
    - element->push_column("Snubbed:", te_command("if=$p.is_snubbed=,yes,no"));
    - element->push_column("Done:", te_command("p.completed_percent="));
    - element->push_column("Rate:", te_command("cat=$convert.kb=$p.up_rate=,\\ KB\\ ,$convert.kb=$p.down_rate=,\\ KB"));
    - element->push_column("Total:", te_command("cat=$convert.kb=$p.up_total=,\\ KB\\ ,$convert.kb=$p.down_total=,\\ KB"));
    + element->push_column("snubbed:", te_command("if=$p.is_snubbed=,yes,no"));
    + element->push_column("done:", te_command("p.completed_percent="));
    + element->push_column("rate:", te_command("cat=$convert.kb=$p.up_rate=,\\ KB\\ ,$convert.kb=$p.down_rate=,\\ KB"));
    + element->push_column("total:", te_command("cat=$convert.kb=$p.up_total=,\\ KB\\ ,$convert.kb=$p.down_total=,\\ KB"));
    element->set_column_width(element->column_width() + 1);
    - element->set_error_handler(new display::TextElementCString("No peer selected."));
    + element->set_error_handler(new display::TextElementCString("no peer selected."));
    return element;
    enjoy !!

    a screenshot !!

  • In rtorrent is there a maximum torrent size?

    So I'm trying to add a torrent to rtorrent, and it say "Reading torrent file failed:" followed by the name of the torrent I selected.  I made sure things like permissions and whatnot are set correctly.
    Now, the thing is this is a *very* big torrent.  The .torrent file itself is 116k.  It described close to 200gigs of data, with thousands of files.  Is this just too big for rtorrent?  I couldn't find any documentation on what the limits are, but given the size I see that as an option.
    I took a look at the file and it doesn't *seem* to be corrupt, but I'm no expert on the torrent format.  If there isn't a maximum size though I'll just assume that's what it is.

    pyroscope wrote:100k isn't big, and if you say rtorrent, you mean rutorrent?!
    Nope he means rtorrent. rutorrent is just a front-end for rtorrent anyway.

  • [Solved] rtorrent won't use .rtorrent.rc after update.

    After upgrading rtorrent it will not tolerate empty lines in the .rtorrent.rc and it will not read my download directory or schedule directories.
    At command line it says: rtorrent: Error in option file: ~/.rtorrent.rc:16: Junk at end of input.
    Here's my .rtorrent.rc:
    # This is an example resource file for rTorrent. Copy to
    # ~/.rtorrent.rc and enable/modify the options as needed. Remember to
    # uncomment the options you wish to enable.
    # Maximum and minimum number of peers to connect to per torrent.
    #min_peers = 40
    #max_peers = 100
    # Same as above but for seeding completed torrents (-1 = same as downloading)
    #min_peers_seed = 10
    #max_peers_seed = 50
    # Maximum number of simultanious uploads per torrent.
    #max_uploads = 15
    # Global upload and download rate in KiB. "0" for unlimited.
    #download_rate = 0
    #upload_rate = 0
    # Default directory to save the downloaded torrents.
    directory =/home/edgar/down/
    #Default session directory. Make sure you don't run multiple instance
    # of rtorrent using the same session directory. Perhaps using a
    # relative path?
    #session = ./session
    # Watch a directory for new torrents, and stop those that have been
    # deleted.
    schedule = watch_directory,5,5,load_start=/home/edgar/*.torrent
    schedule = untied_directory,5,5,stop_untied=/home/edgar/*.torrent
    #Close torrents when diskspace is low.
    #schedule = low_diskspace,5,60,close_low_diskspace=100M
    # Stop torrents when reaching upload ratio in percent,
    # when also reaching total upload in bytes, or when
    # reaching final upload ratio in percent.
    # example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
    #schedule = ratio,60,60,stop_on_ratio=200,200M,2000
    # The ip address reported to the tracker.
    #ip = 127.0.0.1
    #ip = rakshasa.no
    # The ip address the listening socket and outgoing connections is
    # bound to.
    #bind = 127.0.0.1
    #bind = rakshasa.no
    # Port range to use for listening.
    #port_range = 6890-6999
    # Start opening ports at a random position within the port range.
    #port_random = no
    # Check hash for finished torrents. Might be usefull until the bug is
    # fixed that causes lack of diskspace not to be properly reported.
    #check_hash = no
    # Set whetever the client should try to connect to UDP trackers.
    #use_udp_trackers = yes
    # Alternative calls to bind and ip that should handle dynamic ip's.
    #schedule = ip_tick,0,1800,ip=rakshasa
    #schedule = bind_tick,0,1800,bind=rakshasa
    # Encryption options, set to none (default) or any combination of the following:
    # allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
    # The example value allows incoming encrypted connections, starts unencrypted
    # outgoing connections but retries with encryption if they fail, preferring
    # plaintext to RC4 encryption after the encrypted handshake
    # encryption = allow_incoming,enable_retry,prefer_plaintext
    # Enable peer exchange (for torrents not marked private)
    # peer_exchange = yes
    # Do not modify the following parameters unless you know what you're doing.
    # Hash read-ahead controls how many MB to request the kernel to read
    # ahead. If the value is too low the disk may not be fully utilized,
    # while if too high the kernel might not be able to keep the read
    # pages in memory thus end up trashing.
    #hash_read_ahead = 10
    # Interval between attempts to check the hash, in milliseconds.
    #hash_interval = 100
    # Number of attempts to check the hash while using the mincore status,
    # before forcing. Overworked systems might need lower values to get a
    # decent hash checking rate.
    #hash_max_tries = 10
    # Max number of files to keep open simultaniously.
    #max_open_files = 128
    # Number of sockets to simultaneously keep open.
    #max_open_sockets = <no default>
    # Example of scheduling commands: Switch between two ip's every 5
    # seconds.
    #schedule = "ip_tick1,5,10,ip=torretta"
    #schedule = "ip_tick2,10,10,ip=lampedusa"
    # Remove a scheduled event.
    #schedule_remove = "ip_tick1"
    Thanks,
    Ash
    Last edited by Ashren (2007-09-10 18:20:38)

    I don't know if this was ever fixe but mine works just fine and i am using the one from pacman, and this is my config
    http://libtorrent.rakshasa.no/browser/t … rev=latest

  • Daemon script fails -- no log entries. [SOLVED]

    Greetings.
    A daemon script I got for rTorrent I got from this page, fails to start
    No entries show up in dmesg or any logs in /var. I've compared the script to a couple others, but see noe obvious differences that would indicate why the script should fail.
    The user and app dir is correct.
    What am I missing?
    Thanks.
    Last edited by zfsd (2010-01-15 20:46:10)

    Ah.. bullocks - seems like I missed the part about dtach. Doh!

  • Archiso build failing due to dbus and dbus-core conflict

    I am trying to build an ISO with archiso (releng), and even after running
    pacman -R dbus
    and
    pacman -Syu
    the build fails with the following error:
    [root@sados releng]# ./build.sh -N SadOS -V 1.0 -L SADOS_1.0 -v build single
    [mkarchiso] INFO: Configuration settings
    [mkarchiso] INFO: Command: init
    [mkarchiso] INFO: Architecture: i686
    [mkarchiso] INFO: Working directory: work/i686
    [mkarchiso] INFO: Installation directory: arch
    [mkarchiso] INFO: Pacman config file: work/i686/pacman.conf
    [mkarchiso] INFO: Configuration settings
    [mkarchiso] INFO: Command: install
    [mkarchiso] INFO: Architecture: i686
    [mkarchiso] INFO: Working directory: work/i686
    [mkarchiso] INFO: Installation directory: arch
    [mkarchiso] INFO: Pacman config file: work/i686/pacman.conf
    [mkarchiso] INFO: Packages: memtest86+ mkinitcpio-nfs-utils nbd
    [mkarchiso] INFO: These packages are already installed, skipping.
    [mkarchiso] INFO: Configuration settings
    [mkarchiso] INFO: Command: install
    [mkarchiso] INFO: Architecture: i686
    [mkarchiso] INFO: Working directory: work/i686
    [mkarchiso] INFO: Installation directory: arch
    [mkarchiso] INFO: Pacman config file: work/i686/pacman.conf
    [mkarchiso] INFO: Packages: arch-install-scripts b43-fwcutter btrfs-progs crda darkhttpd ddrescue dhclient dialog dmraid dnsmasq dnsutils dosfstools elinks ethtool fsarchiver gnu-netcat gptfdisk grml-zsh-config grub-bios haveged hdparm ipw2100-fw ipw2200-fw irssi lftp lilo linux-atm mc mtools nfs-utils nilfs-utils nmap ntfs-3g ntfsprogs ntp openconnect openssh openvpn partclone parted partimage pptpclient rfkill rp-pppoe rsync smartmontools speedtouch sudo tcpdump testdisk usb_modeswitch vpnc wget wireless_tools wpa_actiond wvdial xl2tpd zd1211-firmware zsh abiword abiword-plugins aircrack-ng alsaplayer arch-firefox-search archiso ario audacious audacity aurphan autoconf automake autotrace avogadro-git bash binutils bison bittwist bleachbit blender bluez burp bzip2 ccd2iso ccsm cdrtools chaosreader cheese clonezilla compiz-decorator-gtk compiz-manager compizconfig-backend-gconf conky coreutils cowpatty crashtest cronie cryptsetup dbus ddrescue device-mapper dhcpcd dia dictd diffutils dosbox dosfstools driftnet e2fsprogs ekiga electricsheep elinks emerald-themes ettercap exo fakeroot fcgi festival festival-english festival-us file filesystem filezilla findutils firefox flamerobin flashplugin flex fluidsynth font-bh-ttf foremost fortune-mod frei0r-plugins ftplib fwknop fyre garcon gawk gcc gcc-libs gdm geany geany-plugins gedit gedit-plugins gerix-wifi-cracker-ng gettext ghex gimp gimp-dbp gimp-gap gksu glibc gnofract4d gparted grep grsync grub-bios gthumb gtk-aurora-engine gtk-recordmydesktop gtk2-xfce-engine gtk3-xfce-engine guake gucharmap guifications gvfs-afc gzip hasciicam heirloom-mailx hexcurse htop idesk inetutils inkscape iproute2 iputils irssi java3d jfsutils johnny-git jre7-openjdk kismet less libdvdcss libgoom2 libmysqlclient libtool licenses lighttpd links linux logrotate lvm2 lynx m4 macchanger make makehuman man-db man-pages mandelbulber mdadm menumaker meshlab mktorrent mlocate mpd mplayer mypaint nano ncdu ncftp ncmpcpp netcfg network-manager-applet networkmanager nmap nss-myhostname obconf obkey oblogout obmenu openbox openbox-themes openssh orage os-prober oxygen-gtk2 oxygen-icons p7zip pacman paraview pastebinit patch pciutils pcmciautils perl php php-cgi pidgin pidgin-encryption pidgin-gfire pidgin-hotkeys pidgin-musictracker pidgin-otr pkg-config povray ppp procps-ng projectm psmisc pyqt python-distribute python2-distribute qwt reiserfsprogs ristretto rrdtool rsnapshot rtorrent safecopy screen sed shadow sitecopy skype slim slim-themes smbclient sox spideroak sslsniff sslsniffer steghide stress structuresynth sudo sweethome3d sysfsutils syslinux systemd-sysvcompat tar tcpdump tcpick terminal terminator testdisk texinfo thc-hydra thunar thunar-archive-plugin thunar-media-tags-plugin thunar-volman tightvnc tk tmux tomboy traceroute transmission-cli transmission-gtk ttf-cheapskate ttf-dejavu ttf-droid ttf-freefont ttf-gentium ttf-inconsolata ttf-liberation ttf-linux-libertine tumbler unetbootin unionfs-fuse usbutils util-linux vi videosnarf vim vlc vte3 wget which wicd wireshark-cli wireshark-gtk wtf x11vnc xaos xcursor-bluecurve xcursor-themes xf86-input-evdev xf86-input-joystick xf86-input-keyboard xf86-input-mouse xf86-input-synaptics xf86-input-vmmouse xf86-input-void xf86-input-wacom xf86-video-ark xf86-video-ast xf86-video-ati xf86-video-cirrus xf86-video-dummy xf86-video-fbdev xf86-video-geode xf86-video-glint xf86-video-i128 xf86-video-intel xf86-video-mach64 xf86-video-mga xf86-video-modesetting xf86-video-neomagic xf86-video-nouveau xf86-video-nv xf86-video-openchrome xf86-video-r128 xf86-video-savage xf86-video-siliconmotion xf86-video-sis xf86-video-tdfx xf86-video-trident xf86-video-v4l xf86-video-vesa xf86-video-vmware xf86-video-voodoo xfburn xfce4-appfinder xfce4-artwork xfce4-battery-plugin xfce4-clipman-plugin xfce4-cpufreq-plugin xfce4-cpugraph-plugin xfce4-datetime-plugin xfce4-dict xfce4-diskperf-plugin xfce4-eyes-plugin xfce4-fsguard-plugin xfce4-genmon-plugin xfce4-mailwatch-plugin xfce4-mixer xfce4-mount-plugin xfce4-mpc-plugin xfce4-netload-plugin xfce4-notes-plugin xfce4-notifyd xfce4-panel xfce4-power-manager xfce4-quicklauncher-plugin xfce4-screenshooter xfce4-sensors-plugin xfce4-session xfce4-settings xfce4-smartbookmark-plugin xfce4-systemload-plugin xfce4-taskmanager xfce4-time-out-plugin xfce4-timer-plugin xfce4-verve-plugin xfce4-wavelan-plugin xfce4-weather-plugin xfce4-xkb-plugin xfconf xfdesktop xfsprogs xfwm4 xfwm4-themes xorg-bdftopcf xorg-docs xorg-font-util xorg-fonts-100dpi xorg-fonts-75dpi xorg-fonts-encodings xorg-iceauth xorg-luit xorg-mkfontdir xorg-mkfontscale xorg-server xorg-sessreg xorg-setxkbmap xorg-smproxy xorg-x11perf xorg-xauth xorg-xbacklight xorg-xcmsdb xorg-xcursorgen xorg-xdpyinfo xorg-xdriinfo xorg-xev xorg-xgamma xorg-xhost xorg-xinput xorg-xkbcomp xorg-xkbevd xorg-xkbutils xorg-xkill xorg-xlsatoms xorg-xlsclients xorg-xmodmap xorg-xpr xorg-xprop xorg-xrandr xorg-xrdb xorg-xrefresh xorg-xset xorg-xsetroot xorg-xvinfo xorg-xwd xorg-xwininfo xorg-xwud xosd xprobe2 xsane xscreensaver youtube-dl
    [mkarchiso] INFO: Installing packages to 'work/i686/root-image/'...
    :: Synchronizing package databases...
    testing is up to date
    core is up to date
    extra is up to date
    community-testing is up to date
    community is up to date
    custom is up to date
    warning: bash-4.2.039-1 is up to date -- skipping
    warning: bzip2-1.0.6-4 is up to date -- skipping
    warning: coreutils-8.20-1 is up to date -- skipping
    warning: cronie-1.4.9-1 is up to date -- skipping
    warning: cryptsetup-1.5.1-1 is up to date -- skipping
    warning: skipping target: ddrescue
    warning: device-mapper-2.02.98-3 is up to date -- skipping
    warning: diffutils-3.2-1 is up to date -- skipping
    warning: skipping target: dosfstools
    warning: e2fsprogs-1.42.6-1 is up to date -- skipping
    warning: skipping target: elinks
    warning: file-5.11-1 is up to date -- skipping
    warning: filesystem-2012.12-1 is up to date -- skipping
    warning: findutils-4.4.2-4 is up to date -- skipping
    warning: gawk-4.0.1-1 is up to date -- skipping
    warning: gcc-libs-4.7.2-2 is up to date -- skipping
    warning: gettext-0.18.1.1-4 is up to date -- skipping
    warning: glibc-2.16.0-5 is up to date -- skipping
    warning: grep-2.14-1 is up to date -- skipping
    warning: skipping target: grub-bios
    warning: gzip-1.5-1 is up to date -- skipping
    warning: heirloom-mailx-12.5-3 is up to date -- skipping
    warning: inetutils-1.9.1-4 is up to date -- skipping
    warning: iproute2-3.6.0-2 is up to date -- skipping
    warning: iputils-20121126-1 is up to date -- skipping
    warning: skipping target: irssi
    warning: jfsutils-1.1.15-3 is up to date -- skipping
    warning: less-451-1 is up to date -- skipping
    warning: licenses-2.9-1 is up to date -- skipping
    warning: linux-3.6.9-1 is up to date -- skipping
    warning: logrotate-3.8.2-2 is up to date -- skipping
    warning: lvm2-2.02.98-3 is up to date -- skipping
    warning: man-db-2.6.3-1 is up to date -- skipping
    warning: man-pages-3.44-1 is up to date -- skipping
    warning: mdadm-3.2.6-1 is up to date -- skipping
    warning: nano-2.2.6-2 is up to date -- skipping
    warning: netcfg-3.0-1 is up to date -- skipping
    warning: skipping target: nmap
    warning: nss-myhostname-0.3-3 is up to date -- skipping
    warning: skipping target: openssh
    warning: pacman-4.0.3-5 is up to date -- skipping
    warning: pciutils-3.1.10-1 is up to date -- skipping
    warning: pcmciautils-018-4 is up to date -- skipping
    warning: perl-5.16.2-1 is up to date -- skipping
    warning: ppp-2.4.5-5 is up to date -- skipping
    warning: procps-ng-3.3.5-1 is up to date -- skipping
    warning: psmisc-22.19-1 is up to date -- skipping
    warning: reiserfsprogs-3.6.21-4 is up to date -- skipping
    warning: sed-4.2.1-4 is up to date -- skipping
    warning: shadow-4.1.5.1-2 is up to date -- skipping
    warning: skipping target: sudo
    warning: sysfsutils-2.1.0-8 is up to date -- skipping
    warning: syslinux-4.06-1 is up to date -- skipping
    warning: systemd-sysvcompat-196-2 is up to date -- skipping
    warning: tar-1.26-2 is up to date -- skipping
    warning: skipping target: tcpdump
    warning: skipping target: testdisk
    warning: texinfo-4.13a-7 is up to date -- skipping
    warning: usbutils-006-1 is up to date -- skipping
    warning: util-linux-2.22.1-3 is up to date -- skipping
    warning: vi-1:050325-3 is up to date -- skipping
    warning: skipping target: wget
    warning: which-2.20-5 is up to date -- skipping
    warning: xfsprogs-3.1.8-2 is up to date -- skipping
    resolving dependencies...
    looking for inter-conflicts...
    :: dbus and dbus-core are in conflict. Remove dbus-core? [y/N]
    error: unresolvable package conflicts detected
    error: failed to prepare transaction (conflicting dependencies)
    :: dbus and dbus-core are in conflict
    Help, please? Thanks.

    aesiris wrote:Did you add dbus-core inside releng/packages.* ?
    If yes, remove it and leave only dbus
    No, neither of them were in packages.i686. I even tried adding dbus to that file to see if it would help, but it didn't change the error message.
    It seems like archiso is installing some core files before it installs my custom packages, and maybe that is where the problem lies, but I really have no idea.

  • [Solved]rTorrent freeze at startup

    Hello, my rTorrent freezes on startup when it checks the files. Not does it just freeze but it completely disconnects my internet connection and a reboot of both modem and computer are required. I can start up a new torrent and it will work fine but if I start it up with a torrent thats already started it does this. I haven't the slightest.
    Heres my .rtorrent.rc:
    # This is an example resource file for rTorrent. Copy to
    # ~/.rtorrent.rc and enable/modify the options as needed. Remember to
    # uncomment the options you wish to enable.
    # Maximum and minimum number of peers to connect to per torrent.
    #min_peers = 5
    #max_peers = 20
    # Same as above but for seeding completed torrents (-1 = same as downloading)
    #min_peers_seed = 10
    #max_peers_seed = 50
    # Maximum number of simultanious uploads per torrent.
    #max_uploads = 15
    # Global upload and download rate in KiB. "0" for unlimited.
    download_rate = 295
    upload_rate = 43
    # Default directory to save the downloaded torrents.
    #directory = ./
    # Default session directory. Make sure you don't run multiple instance
    # of rtorrent using the same session directory. Perhaps using a
    # relative path?
    session = ~/.session
    # Watch a directory for new torrents, and stop those that have been
    # deleted.
    #schedule = watch_directory,5,5,load_start=./watch/*.torrent
    #schedule = untied_directory,5,5,stop_untied=
    # Close torrents when diskspace is low.
    #schedule = low_diskspace,5,60,close_low_diskspace=100M
    # Stop torrents when reaching upload ratio in percent,
    # when also reaching total upload in bytes, or when
    # reaching final upload ratio in percent.
    # example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
    #schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"
    # The ip address reported to the tracker.
    #ip = 127.0.0.1
    #ip = rakshasa.no
    # The ip address the listening socket and outgoing connections is
    # bound to.
    #bind = 127.0.0.1
    #bind = rakshasa.no
    # Port range to use for listening.
    #port_range = 6890-6999
    # Start opening ports at a random position within the port range.
    #port_random = no
    # Check hash for finished torrents. Might be usefull until the bug is
    # fixed that causes lack of diskspace not to be properly reported.
    #check_hash = no
    # Set whetever the client should try to connect to UDP trackers.
    #use_udp_trackers = yes
    # Alternative calls to bind and ip that should handle dynamic ip's.
    #schedule = ip_tick,0,1800,ip=rakshasa
    #schedule = bind_tick,0,1800,bind=rakshasa
    # Encryption options, set to none (default) or any combination of the following:
    #allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
    # The example value allows incoming encrypted connections, starts unencrypted
    # outgoing connections but retries with encryption if they fail, preferring
    # plaintext to RC4 encryption after the encrypted handshake
    encryption = allow_incoming,enable_retry,prefer_plaintext
    # Enable DHT support for trackerless torrents or when all trackers are down.
    # May be set to "disable" (completely disable DHT), "off" (do not start DHT),
    # "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
    # The default is "off". For DHT to work, a session directory must be defined.
    #dht = auto
    # UDP port to use for DHT.
    # dht_port = 6881
    # Enable peer exchange (for torrents not marked private)
    # peer_exchange = yes
    # Do not modify the following parameters unless you know what you're doing.
    # Hash read-ahead controls how many MB to request the kernel to read
    # ahead. If the value is too low the disk may not be fully utilized,
    # while if too high the kernel might not be able to keep the read
    # pages in memory thus end up trashing.
    #hash_read_ahead = 10
    # Interval between attempts to check the hash, in milliseconds.
    #hash_interval = 100
    # Number of attempts to check the hash while using the mincore status,
    # before forcing. Overworked systems might need lower values to get a
    # decent hash checking rate.
    #hash_max_tries = 10
    Last edited by pharcyde (2009-03-22 16:35:55)

    atordo wrote:Don't know about rtorrent but I'd try to limit the number of simultaneous connections (max_peers, etc). That's usually what "kills" the modems.
    That seemed to do the trick for now.

  • Rtorrent with DHT patch

    Hey guys, I've been using rtorrent recently. The only thing I missed was DHT to get more peers when seeds were low.
    Fortunately I discovered a patch on rtorrent's trac website that adds DHT capability to rtorrent. I've tested it and it's been working well for me.
    It's quite a substantial patch, written by Josef Drexler. It's available with description here: http://tk.ttdpatch.net/~jdrexler/dht/.
    It appears that Josef updates the patch quite regularly, it applies cleanly to recent rtorrent svn versions.
    The patch contains patches for both rtorrent, and the libtorrent library, so it needs to be split as we build those separately on arch.
    If anyone wants to use rtorrent with DHT, just make packages from the following PKGBUILDs:
    edit: I've edited this post to address the problems fwojciec had. I've now added the complete working PKGBUILDs.
    The easiest solution to compile problems is to use revision 992 of libtorrent and revision 995 of rtorrent which is what the PKGBUILDs below do, so they should work no problem.
    I believe I found the original PKGBUILDs elsewhere on the forum, apparently contributed by swogs, and just modified them to apply the DHT patch.
    If you're curious, the sed lines grab the needed part of the patch for each PKGBUILD.
    libtorrent PKGBUILD:
    # Contributor: swogs <hugin0>
    pkgname=libtorrent-svn
    pkgver=992
    pkgrel=1
    pkgdesc=""
    arch=('i686')
    url="http://libtorrent.rakshasa.no/"
    depends=('libsigc++2.0' 'openssl')
    makedepends=('subversion')
    conflicts=('libtorrent')
    provides=('libtorrent')
    source=(http://tk.ttdpatch.net/~jdrexler/dht/dht.diff)
    md5sums=(9f6195e58846e3284aac6be135f6910d)
    _svntrunk=svn://rakshasa.no/libtorrent/trunk/libtorrent
    _svnmod=libtorrent
    build() {
    cd $startdir/src
    svn co $_svntrunk -r $pkgver
    sed -n '/Index: libtorrent/,$p' dht.diff | patch -Np0 || return 1 # Apply DHT patch
    cd $_svnmod
    ./autogen.sh
    msg "SVN checkout done or server timeout"
    msg "Starting make..."
    ./configure --prefix=/usr
    make || return 1
    make DESTDIR=$startdir/pkg/ install
    # vim:syntax=sh
    rtorrent PKGBUILD:
    # Contributor: swogs <hugin0>
    pkgname=rtorrent-svn
    pkgver=995
    pkgrel=1
    pkgdesc=""
    arch=('i686')
    url="http://libtorrent.rakshasa.no/"
    depends=('libtorrent-svn' 'curl')
    makedepends=('subversion')
    conflicts=('rtorrent')
    provides=('rtorrent')
    source=('dhtrt.diff')
    md5sums=('b85fb1533070c437a117eb577102a7c6')
    _svntrunk=svn://rakshasa.no/libtorrent/trunk/rtorrent
    _svnmod=rtorrent
    build() {
    cd $startdir/src
    svn co $_svntrunk -r $pkgver
    patch -Np0 -i dhtrt.diff || return 1 # DHT patch
    cd $_svnmod
    ./autogen.sh
    msg "SVN checkout done or server timeout"
    msg "Starting make..."
    ./configure --prefix=/usr
    make || return 1
    make DESTDIR=$startdir/pkg/ install
    # vim:syntax=sh
    The modified PKGBUILDs will generate packages with DHT support. One thing you can consider doing is
    to eliminate the md5sums so the PKGBUILD will still work if Josef updates the patch. Right now, if the patch is changed
    the package will fail to build since the checksum won't match.
    Also, although the patch works on rtorrent-svn version 995, it only works on libtorrent-svn version 992.
    So use makepkg to build the libtorrent PKGBUILD; versionpkg will try to build version 995 and fail.
    After installing the packages, add this to your ~/.rtorrent.rc:
    # Enable DHT support for trackerless torrents or when all trackers are down.
    # May be set to "disable" (completely disable DHT), "off" (do not start DHT),
    # "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
    # The default is "off". For DHT to work, a session directory must be defined.
    dht = auto
    # UDP port to use for DHT.
    dht_port = 6881
    I have DHT set to auto, and changed the dht_port to coincide with my forwarded ports.
    There are explanations of how DHT works with rtorrent in the link to the patch I provided above.
    When you start up rtorrent you'll see a message like this at the bottom:
    (19:23:50) Starting DHT server on port 30010
    and periodically under active torrents:
    Tracker[2:2]: Connecting to dht:// [Announcing: 5/8 nodes replied]
    Okay, so hope someone finds this useful, let me know if there are (any more) problems.
    Last edited by veek (2007-10-28 16:27:27)

    Hey fwojciec, thanks for pointing out those issues.
    I forgot I didn't find the original PKGBUILDs in AUR, and as you discovered they were on the forum.
    In addition, I forgot that I had to make a patch (besides the DHT patch) to get revision 992 of rtorrent  to compile.
    The patch solved some issues with includes related to sigc++.
    In any case, rtorrent 995 builds no problem.
    I've updated my original post to include the entire PKGBUILDs for both libtorrent and rtorrent. They should both build no problem.
    Sorry to make you do all that unnecessary work
    Last edited by veek (2007-10-28 16:30:09)

  • Systemd, tmux and rTorrent

    Hello.
    I finally found some time to migrate to systemd. Almost everything went smooth, there is only one thing I can't figure out. I want to run rtorrent in dedicated tmux session as user (not root). With initscripts basically it was enough to run
    su - kaz -c 'tmux new-session -d -s rtorrent rtorrent' &> /dev/null
    in /etc/rc.d/rtorrent and add rtorrent to DAEMONS array.
    In systemd I've tried to write my own .service file and run systemctl enable rtorrent.service. That's what I have in /etc/systemd/system/rtorrent.service:
    [Unit]
    Description=rTorrent for kaz
    [Service]
    ExecStart=/usr/bin/tmux new-session -d -s rtorrent rtorrent
    Type=oneshot
    User=kaz
    [Install]
    WantedBy=multi-user.target
    And it even works when I run systemctl start rtorrent.service (I have new session with rtorrent in tmux), but it doesn't after reboot. The output of systemctl status rtorrent.service is the same right after reboot and after manually starting rtorrent.service (except the time and PID of course):
    [kaz@Dmitrij system]$ systemctl status rtorrent.service
    rtorrent.service - rTorrent for kaz
    Loaded: loaded (/etc/systemd/system/rtorrent.service; enabled)
    Active: inactive (dead) since Wed, 15 Aug 2012 17:32:38 +0200; 16min ago
    Process: 408 ExecStart=/usr/bin/tmux new-session -d -s rtorrent rtorrent (code=exited, status=0/SUCCESS)
    CGroup: name=systemd:/system/rtorrent.service
    [kaz@Dmitrij system]$
    Does tmux depend on anything to run? Some variables maybe?
    And it would be great if I could get systemd to restart rtorrent when it exits, but I'm not sure how to do that...
    Last edited by kazuldur (2012-08-15 16:06:49)

    cngn wrote:
    You need Type=oneshot. Type=forking will prevent you from using multiple tmux sessions. Try this: first run 'tmux new -s test -d'. Then start your session 'systemctl start rt@user'. Then run 'tmux ls'.
    space@arch ~ :( $ cat /etc/systemd/system/[email protected]
    [Unit]
    Description=Start tmux in detached session
    [Service]
    Type=forking
    KillMode=none
    User=%I
    ExecStart=/usr/bin/tmux new-session -s %u -d
    ExecStop=/usr/bin/tmux kill-session -t %u
    [Install]
    WantedBy=multi-user.target
    space@arch ~ $ tmux ls
    failed to connect to server
    space@arch ~ :( $ tmux new -s test -d && tmux ls
    test: 1 windows (created Sun May 5 19:36:33 2013) [144x39]
    space@arch ~ $ sudo systemctl start tmux@space
    space@arch ~ $ tmux ls
    test: 1 windows (created Sun May 5 19:36:33 2013) [144x39]
    space@arch ~ $
    Thanks for that, I did not notice that. However now I get something weird, if I already had a tmux session running, this simply merges the new windows into it (at least that it what is looks like from htop)
    PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
    1 root 20 0 32772 3560 1944 S 0.0 0.0 0:02.77 /sbin/init
    29363 hans 20 0 18228 1820 1268 S 0.0 0.0 0:00.38 ├─ tmux new-session -d -s test
    30787 hans 20 0 16252 2732 1684 S 0.0 0.0 0:00.01 │ ├─ -bash
    30512 hans 20 0 189M 28044 6364 S 0.0 0.2 0:00.35 │ ├─ /usr/bin/irssi
    30520 hans 20 0 189M 28044 6364 S 0.0 0.2 0:00.00 │ │ └─ /usr/bin/irssi
    30508 hans 20 0 434M 160M 5220 S 0.0 1.3 0:01.76 │ └─ /usr/bin/rtorrent
    30521 hans 20 0 434M 160M 5220 S 0.0 1.3 0:00.00 │ ├─ /usr/bin/rtorrent
    30511 hans 20 0 434M 160M 5220 S 0.0 1.3 0:00.00 │ └─ /usr/bin/rtorrent
    but if I go to the user and do 'tmux list-sessions', its shows 2 sessions:
    $ tmux list-sessions
    rt: 2 windows (created Sun May 5 19:50:46 2013) [80x23]
    test: 1 windows (created Sun May 5 19:19:20 2013) [80x23]
    I'll read up a bit more on tmux (i think this might be a tmux related, and not something to do with systemd).

  • Rtorrent: issue with DL large files ( 4GB) to NTFS

    Using latest rtorrent/rutorrent:  every time I DL a large >4GB file with rtorrent to the NTFS drive it shows it downloading the whole file MB by MB, but when I go to hash check (via rutorrent), there's only a partial percentage DLded.  Say if I DL a 4.36 GB .mkv file, I hash check and only 10% is done ~400MB or about 6 minutes of the video.
    Oddly:
    If I do ls -l --block-size=MB, the file shows normal 4GB+ size.
    If I do ls -s, file appears to be only a few hundred MB.
    If I DL to my root ext4 drive, there's no issue unless I change the save path of the torrent in rutorrent and elect for the files to be moved to the NTFS drive.
    I've transferred large files with 'cp' from another NTFS to this NTFS with no issue.
    I thought the problem was rutorrent plugin autotools, but I removed it from my plugins folder and the problem persists.
    Permissions:
    I have all the relevant directories in /etc/php.ini open_basedir:  the user/session, the mounted drive, and /srv/http/rutorrent
    I did #chown -R http:http /srv/http/rutorrent
    http is a member of the group with NTFS drive access
    the rutorrent/tmp directory is changed to be within /srv/http/rutorrent
    This is a pesky issue that I didn't have with my last arch install using the same general set up.
    I DL to an NTFS formatted drive and mount it the same way I did before: ntfs-3g defaults,auto,uid=XXXX,gid=XXXX,dmask=027,fmask=037
    My rtorrent user is the uid (owner) and is in the group that has access to the drive (along with my audio server user and http)
    I run rtorrent in screen as the rtorrent user
    I imagine this is an issue with rutorrent?
    Any tips before I reformat the whole 4TB to ext4?
    EDIT:  the issue is definitely isolated to rtorrent.  I manually added large size torrent using rtorrent, it completed.  I then hash checked (in rtorrent) and again only ~10% was shown as complete.
    EDIT2:  It is most definitely not a permissions issue.  Tried this again without mount permissions options and the same thing happens.
    Last edited by beerhoof (2015-01-30 22:05:57)

    I'm afraid I don't understand the question.
    7.2 now correctly parses the Canon XF .CIF sidecar files to determine whether the media is supposed to be spanned or not.  This has been a feature request that has been finally addressed to work correctly.
    (It also was there in 7.1 & previous, but had limitations:  the performance wasn't as good, there had been issues in the past with audio pops at cut points, and it required that the Canon XF folder structure remain intact, ie if you copied the media to a flattened folder structure, it would fail to do the spanning correctly.)
    If you are looking for a means to disable the automatic spanning, simply removing the .CIF files will achieve that.  Although i'm not sure I understand why you're looking to do that.  Most people *want* spanning to happen automatically, otherwise you're forced to manually sync spanned media segments by hand. 

  • [Solved] rtorrent unable to stablish connection with trackers

    # This is an example resource file for rTorrent. Copy to
    # ~/.rtorrent.rc and enable/modify the options as needed. Remember to
    # uncomment the options you wish to enable.
    # Maximum and minimum number of peers to connect to per torrent.
    #min_peers = 40
    max_peers = 34
    # Same as above but for seeding completed torrents (-1 = same as downloading)
    #min_peers_seed = 10
    max_peers_seed = 34
    # Maximum number of simultanious uploads per torrent.
    max_uploads = 5
    # Global upload and download rate in KiB. "0" for unlimited.
    download_rate = 100
    upload_rate = 26
    # Default directory to save the downloaded torrents.
    directory = /home/chariabidis/downloads
    # Default session directory. Make sure you don't run multiple instance
    # of rtorrent using the same session directory. Perhaps using a
    # relative path?
    session = /home/chariabidis/.session
    # Watch a directory for new torrents, and stop those that have been
    # deleted.
    schedule = watch_directory,5,5,load_start=/home/chariabidis/downloads/*.torrent
    #schedule = untied_directory,5,5,stop_untied=
    # Close torrents when diskspace is low.
    #schedule = low_diskspace,5,60,close_low_diskspace=100M
    # Stop torrents when reaching upload ratio in percent,
    # when also reaching total upload in bytes, or when
    # reaching final upload ratio in percent.
    # example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
    #schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"
    # The ip address reported to the tracker.
    #ip = 127.0.0.1
    #ip = rakshasa.no
    # The ip address the listening socket and outgoing connections is
    # bound to.
    #bind = 127.0.0.1
    #bind = rakshasa.no
    # Port range to use for listening.
    port_range = 49999-49999
    # Start opening ports at a random position within the port range.
    #port_random = no
    # Check hash for finished torrents. Might be usefull until the bug is
    # fixed that causes lack of diskspace not to be properly reported.
    #check_hash = no
    # Set whetever the client should try to connect to UDP trackers.
    #use_udp_trackers = yes
    # Alternative calls to bind and ip that should handle dynamic ip's.
    #schedule = ip_tick,0,1800,ip=rakshasa
    #schedule = bind_tick,0,1800,bind=rakshasa
    # Encryption options, set to none (default) or any combination of the following:
    # allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
    # The example value allows incoming encrypted connections, starts unencrypted
    # outgoing connections but retries with encryption if they fail, preferring
    # plaintext to RC4 encryption after the encrypted handshake
    encryption = allow_incoming,enable_retry,prefer_plaintext
    # Enable DHT support for trackerless torrents or when all trackers are down.
    # May be set to "disable" (completely disable DHT), "off" (do not start DHT),
    # "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
    # The default is "off". For DHT to work, a session directory must be defined.
    # dht = auto
    # UDP port to use for DHT.
    # dht_port = 6881
    # Enable peer exchange (for torrents not marked private)
    # peer_exchange = yes
    # Do not modify the following parameters unless you know what you're doing.
    # Hash read-ahead controls how many MB to request the kernel to read
    # ahead. If the value is too low the disk may not be fully utilized,
    # while if too high the kernel might not be able to keep the read
    # pages in memory thus end up trashing.
    #hash_read_ahead = 10
    # Interval between attempts to check the hash, in milliseconds.
    #hash_interval = 100
    # Number of attempts to check the hash while using the mincore status,
    # before forcing. Overworked systems might need lower values to get a
    # decent hash checking rate.
    #hash_max_tries = 10
    The proper message I recieve is:
    Tracker: [Couldn't connect to server]
    I've tried several torrents from several trackers, and other torrent downloading programs too. rTorrent seems to be the only one with this problem.
    Is there something I'm passing by in my network configuration?
    I
    Last edited by JMO (2011-03-08 00:35:44)

    Well I don't really know an answer, but what I can say is that I get these messages all the time, but rtorrent downloads the stuff nonetheless.

  • RTorrent behavior with external drive as storage

    Hi.
    I've moved my rTorrent storage directory to external drive and despite everything seem to work (I can download and upload) there is one problem...
    When I start rTorrent (configured as tmux service) and my external drive is not mounted, then I have to restart rTorrent having storage directory mounted (it's obvious). But is strange for me is that rTorrent starts to download everything from the very beginning while actually files on disk have already their final size. I noticed that triggering hash recheck helps (after recheck is done I can simply seed my torrents) - but it's not so cool to trigger hash recheck every time on 100 GB of files.
    .rtorrent.rc
    # This is an example resource file for rTorrent. Copy to
    # ~/.rtorrent.rc and enable/modify the options as needed. Remember to
    # uncomment the options you wish to enable.
    # Maximum and minimum number of peers to connect to per torrent.
    #min_peers = 40
    #max_peers = 100
    # Same as above but for seeding completed torrents (-1 = same as downloading)
    #min_peers_seed = 10
    #max_peers_seed = 50
    # Maximum number of simultanious uploads per torrent.
    #max_uploads = 15
    max_downloads_global = 3
    max_uploads_global = 30
    # Global upload and download rate in KiB. "0" for unlimited.
    #download_rate = 0
    #upload_rate = 0
    # Default directory to save the downloaded torrents.
    directory = /home/kuba/torrents
    # Default session directory. Make sure you don't run multiple instance
    # of rtorrent using the same session directory. Perhaps using a
    # relative path?
    session = /home/kuba/.session
    # Watch a directory for new torrents, and stop those that have been
    # deleted.
    schedule = watch_directory,5,5,load_start=./watch/*.torrent
    schedule = untied_directory,5,5,stop_untied=
    # Close torrents when diskspace is low.
    schedule = low_diskspace,5,60,close_low_diskspace=200M
    # The ip address reported to the tracker.
    #ip = 127.0.0.1
    #ip = rakshasa.no
    # The ip address the listening socket and outgoing connections is
    # bound to.
    #bind = 127.0.0.1
    #bind = rakshasa.no
    # Port range to use for listening.
    #port_range = 6890-6999
    port_range = 49164-49164
    # Start opening ports at a random position within the port range.
    #port_random = no
    # Check hash for finished torrents. Might be usefull until the bug is
    # fixed that causes lack of diskspace not to be properly reported.
    #check_hash = no
    # Set whether the client should try to connect to UDP trackers.
    #use_udp_trackers = yes
    # Alternative calls to bind and ip that should handle dynamic ip's.
    #schedule = ip_tick,0,1800,ip=rakshasa
    #schedule = bind_tick,0,1800,bind=rakshasa
    # Encryption options, set to none (default) or any combination of the following:
    # allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
    # The example value allows incoming encrypted connections, starts unencrypted
    # outgoing connections but retries with encryption if they fail, preferring
    # plaintext to RC4 encryption after the encrypted handshake
    # encryption = allow_incoming,enable_retry,prefer_plaintext
    # Enable DHT support for trackerless torrents or when all trackers are down.
    # May be set to "disable" (completely disable DHT), "off" (do not start DHT),
    # "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
    # The default is "off". For DHT to work, a session directory must be defined.
    # dht = auto
    # UDP port to use for DHT.
    # dht_port = 6881
    # Enable peer exchange (for torrents not marked private)
    # peer_exchange = yes
    color_inactive_fg = 4
    color_dead_fg = 1
    color_active_fg = 3
    color_finished_fg = 2
    [email protected]
    [Unit]
    Description=rTorrent
    Requires=network.target local-fs.target
    [Service]
    Type=forking
    KillMode=none
    User=%I
    ExecStart=/usr/bin/tmux new-session -s rt -n rtorrent -d rtorrent
    ExecStop=/usr/bin/tmux send-keys -t rt:rtorrent C-q
    WorkingDirectory=/home/%I/
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    storage directory as symlink from home dir
    lrwxrwxrwx 1 kuba users 41 02-22 22:03 torrents -> /run/media/kuba/ExtStorage/stuff/torrents/
    lsblk
    sdb 8:16 0 298,1G 0 disk
    ├─sdb1 8:17 0 40G 0 part
    ├─sdb2 8:18 0 4G 0 part
    └─sdb3 8:19 0 254,1G 0 part /run/media/kuba/ExtStorage
    Last edited by jakub (2015-02-23 22:18:50)

    Great hint. Works really well. Now rTorrent service is not starting when storage directory is not mounted thus no hash rechecking is required. It helps a lot. So only nice thing to have now would be to add the service autostart in case the .mount unit is active (changes state from inactive to active actually, which will happen when I turned on my laptop without having USB drive connected / fstab configured)
    if anyone wants to know how final [email protected] looks like, this it the file:
    [Unit]
    Description=rTorrent
    Requires=network.target local-fs.target run-media-kuba-ExtStorage.mount
    [Service]
    Type=forking
    KillMode=none
    User=%I
    ExecStart=/usr/bin/tmux new-session -s rt -n rtorrent -d rtorrent
    ExecStop=/usr/bin/tmux send-keys -t rt:rtorrent C-q
    WorkingDirectory=/home/%I/
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    Last edited by jakub (2015-02-23 22:18:29)

  • Rtorrent 0.7.9 & libtorrent 0.11.9

    I'm wondering where to get rtorrent v. 0.7.9 and libtorrent v. 0.11.9. These versions are the newes stable versions of rtorrent and libtorrent.
    I have allready tried: pacman -Syu, pacman -Sy rtorrent and pacman -Sy libtorrent, but the newest version is rt 0.7.7 and libt 0.11.7:(:mad:
    Tjololo

    It's not really a step by step, I guess, but I can give you an overview of how the whole abs thing works. Basically, every package you install in your system is created by a script called a PKGBUILD. This scripts contains information about where all the source tarballs, patches, etc that a package needs to build are located on the internet, as well as the process required to build the package. Running the command "makepkg" in a directory with a PKGBUILD will download all of the source files, and build the package and then tarball it all up in a package that is ready to install. When ABS (Arch Build System) is run, it will fetch all of the current PKGBUILDs for all of the packages in the repos that you have specified in /etc/abs.conf. If you want to modify a package, it's as simple as grabbing the PKGBUILD for your package, updating the relevant information inside the script, and then running makepkg in the directory for it.
    Ok, so I lied. Here's kind of a step by step of how I would rebuild a package. It's probabily the easiest way to show how things work.
    1: Run ABS. This will update all of the PKGBUILDs stored in cvs
    2: Copy the PKGBUILD (and anything else in the rtorrent abs folder) for rtorrent to the directory you want to work in. I created the directory /var/abs/local, and then chmod'd it to belong to my user. I make subdirectorys in here for anything I'm building to keep things tidy.  So my case I'd now have
    /var/abs/local/rtorrent/PKGBUILD
    /var/abs/local/rtorrent/rtorrent.install
    /var/abs/local/rtorrent/rtorrent.patch
    In this case there's also a patch to be applied to the source (although I didn't actually see it being applied anywhere in the PKGBUILD, so it might be unnecessary) and a .install file that also are stored in the abs tree. The .install file is where you can define statements to be shown to the user when they install the package.
    3: Edit the PKGBUILD.  This can be the hard part if the build process has changed for the new version of a package. I'm not on my arch computer right now so I can't try it my self, but updating this file might be as easy as changing
    pkgver=0.7.7
    to
    pkgver=0.7.9
    4:Run makepkg. If everything is ok in the PKGBUILD, makepkg will run through the build and spit out a finished package for you.
    In the case of rtorrent, you may need to upgrade the PKGBUILD for libtorrent first if it's a dependency. I haven't looked at the PKGBUILD for it, but the process will be generally the same as described above. Hope that was helpful!
    EDIT: I forgot to mention, if you change the version number of a package like that, it also changes which source tarball is downloaded. This means that the md5sums listed at the bottom of the PKGBUILD are now out of date and makepkg will fail. You can either download the source yourself and update the md5 with the output of the  "md5sum" program or you can comment out the last two lines of the PKGBUILD. This last behavior can be dangerous if you're downloading from a (potentially) hostile mirror, but if you're downloading from a trusted source it *should* be ok.
    Last edited by barebones (2007-12-13 20:38:04)

Maybe you are looking for

  • ISE 1.2 Restore Issue

    ISE 1.2 (on vm) creates a backup file without error.  I can use the file to restore a clean ISE installation (same release) without error.  However, the ISE application server process is not running.   "Reload" or "App Start" do not restart the ISE p

  • Can't install APE8 in MAC OS

    Hello, I have downloaded the trial version of Photoshop Elements 8 for Mac OS. I have a Mac Book Pro with Leopard. I've tried to install it but at the end of the installation I always get an error saying installation found a problem. When I click mor

  • How to add save button in ButtonControl.vm same as submit button?

    Hi, I want to add save button in ButtonControl.vm and also need to save the current page data into siebel using the save button. how to add type,name and how to get event handler in java for the input type for save

  • External password store alias length issue

    Environment: HP8420-11i PA-RISC64 UNIX SQLPLUS Problem: wallets for external passwords with an alias over seven (7) bytes in length is throwing an ORA-01017 error. Six (6) bytes or less function properly. Is this a known issue/bug? Thank you in advan

  • Windows Server 2012 R2 Connection Broker migration

    Hi All, I'm in the process of a VMware to Hyper-V migration and whilst in the process rather than migrating the 2012 RDS VM's over to Hyper-V I have decided to setup a bunch of 2012 R2 VMs. My original setup was 1 x Windows Server 2012 VM running RDS