unworkable: BitTorrent-Client für die Konsole und benutzbar

Eure guten Vorsätze für das neue Jahr? Meine, oder besser gesagt einer davon, sind: Auch mal was Kurzes schreiben. 🙂 Ich habe in letzter Zeit zu viele Ideen und eine davon war der Frage nachzugehen, was es denn sonst noch so für die Konsole an BitTorrent-Programmen gibt.
Zugegebenerweise an rTorrent kommt niemand vorbei. Ich bin nach wie vor überzeugt und fasziniert von diesem Programm. Es hat alles, was man sich von einem BitTorrent-Client wünschen kann und es kommt dazu noch mit dieser schicken Ncurses-Oberfläche.
rTorrent 2013
Übrigens enthält dieses Bild einen versteckten Fingerzeig auf ein anderes cooles Projekt. 🙂
Wieso sollte man sich also von rTorrent abwenden, wenn man eine tastengesteuerte Menüführung, mehrere Übersichtsseiten und zahllose Informationen praktisch zum Nulltarif geboten bekommt, will heißen, nichts was einen selbst 10 Jahre alten Rechner ins Schwitzen bringen könnte.
Noch mehr Minimalismus. Unworkable ist praktisch der Gegenansatz zu aria2. Während letzteres auch HTTP-, HTTPS-, FTP-, BitTorrent-Protokolle und ebenso Metalink beherrscht, konzentriert sich unworkable ausschließlich auf eine Sache - BitTorrent.

Bedienung?

unworkable Pfad zur Torrent-Datei
Kein Ncurses. Jedoch kann unworkable natürlich auch seeden. Standardmäßig jedoch werden eingehende BitTorrent-Verbindungen unterbunden und müssen erst mit der -p Option freigeschaltet werden. Das erhöht ein wenig die Sicherheit und trägt noch mehr zum minimalistischen Charme bei. Wer also nur ein BitTorrent-Programm für die Konsole sucht, das einzig und allein auf einen Zweck getrimmt ist und sehr ressourcenschonend ist, findet hier alles was er braucht.

rTorrent: Multiple watch-Ordner und fertige Downloads managen

Wenn wir heute schon beim Thema sind, möchte ich an dieser Stelle noch auf einen Tipp aus dem Wiki von Arch Linux zum Thema rTorrent hinweisen. Ich wusste, dass rTorrent verschiedene Ordner auf Torrents überwachen konnte. Mit einer weiteren Einstellung lassen sich die heruntergeladenen Dateien nach einem bestimmten Download/Upload-Verhältnis dann in vorher definierte Ordner verschieben.
Was mir jedoch fehlte, war die Möglichkeit einen schon fertigen Download nach einer Weile erneut zu seeden, indem ich lediglich den Torrent in den "watch"-Ordner kopierte und dann die komplette Datei von rTorrent automatisch erkannt und entsprechend verschoben wurde. Problematisch ist bei diesem Client jedoch, dass eine 100% fertige Datei, auf die rTorrent nachträglich aufmerksam gemacht wird, nicht automatisch verschoben werden kann. Dachte ich bis vor kurzem.
Für dieses spezielle Problem gibt es aber seit Version 0.8.6 eine Lösung. Ich bin mir nicht sicher, ob der Patch damals schon Eingang in Debian Squeeze gefunden hat, mit der aktuellen 0.8.9 Version in Unstable funktioniert es aber prächtig.
In der .rtorrent.rc sollten folgende Zeilen zu dem schon vorgestellten Setup hinzugefügt werden und ggf. meine alte system.method Zeile deaktiviert werden.

schedule = watch_directory_1,10,10,"load_start=~/downloads/watch/*.torrent,d.set_custom1=~/downloads/fertig/"
schedule = watch_directory_2,10,10,"load_start=~/downloads/watch/linux/*.torrent,d.set_custom1=~/downloads/fertig/Linux/"
system.method.insert=checkdirs1,simple,"not="$equal={d.get_custom1=,d.get_base_path=}""
system.method.insert=movecheck1,simple,"and={checkdirs1=,d.get_complete=,d.get_custom1=}"
system.method.insert=movedir1,simple,"d.set_directory=$d.get_custom1=;execute=mv,-u,$d.get_base_path=,$d.get_custom1=;d.set_custom1=;d.stop=;d.start="
system.method.set_key=event.download.hash_done,move_hashed1,"branch={$movecheck1=,movedir1=}"

Die Konfiguration scheint auf den ersten Blick etwas kryptisch zu sein, im Prinzip macht sie aber nur folgendes:
Zeile 1+2: Hier werden zwei verschiedene Ordner auf neue Torrents überwacht. Sobald hier ein neues Torrent hin verschoben wird und rTorrent läuft, beginnt automatisch der Download/Upload-Vorgang. Nach der Fertigstellung wird das Ergebnis je nach dem in welchem Ordner die Torrents gespeichert wurden, nach ~/downloads/fertig/ oder ~/downloads/fertig/Linux/ gespeichert.
Zeile 4: Überprüft ob das Torrent sich schon im Ziel Ordner befindet (false) oder eben woanders liegt (true).
Zeile 5: Überprüft ob das Torrent zu 100% komplett ist, der Wert aus Zeile 4 true zurückliefert und die Variable custom1 (der Zielpfad) existiert.
Zeile 6: Auf Basis der Ergebnisse aus Zeile 4+5 wird die fertige Datei in den Zielordner verschoben, rTorrent erkennt, dass das geschehen ist und verteilt den Download ab sofort aus dem neuen Zielordner.
Zeile 7: Wenn ein Torrent gehasht wird und in Ordnung ist, wird Zeile 6 ausgeführt. Zeile 7 ist also wichtig, falls eine Überprüfung des Torrents stattfindet. Alle Zeilen davor funktionieren auch, wenn kein Hashing mehr notwendig ist.
Mit diesen Zeilen kann ich also ein fertiges Linux ISO in den "todo"-Ordner verschieben und rTorrent erkennt an dem Ort der Torrent-Datei, wohin diese fertige Datei verschoben werden muss und seedet danach entsprechend meiner Einstellung weiter.

Erkenntnisse bei 16 MB RAM und weniger

Er ist nicht vergessen, nur etwas ruhiger ist es um ihn geworden. In der Zwischenzeit hat er einen neuen Platz neben meinem Router gefunden, um nun direkt mit Hilfe einer PCMCIA zu LAN-Karte ins Netz zu gehen. Ab und an probiere ich ein paar Programme und Einstellungen aus um herauszufinden, was tatsächlich möglich und vor allem sinnvoll ist bei einem 16 Jahre alten, Toshiba 220cs, Laptop. Zwar ist 16 MB RAM weit davon entfernt ein komfortables Polster zu sein, doch verhalten sich einige Konsolenprogramme nicht anders als auf einem Core-Duo-Rechner.
Nach wie vor benutze ich Slitaz in der Minimalinstallation und das winzige KolibriOS als Dual-Boot System. Zwischendurch hatte ich Slitaz zwar auch schon wieder von Grund auf neu aufgespielt, aber am Ende rettet das Image vom Jahresanfang immer noch den Tag.
Wenn ihr zu den Leuten gehört, die elektronische Geräte bei längerer Nichtbenutzung komplett vom Stromnetz trennen, solltet ihr nach dem Wiederanfahren unbedingt einen Blick in das BIOS werfen. Bei Problemen mit der PCMCIA Karte kann es passiert sein, dass die ausgelaugte CMOS-Batterie nicht mehr genug Energie zur Verfügung stellt, um die richtigen Einstellungen zu speichern.
RAM. Zwar rede ich immer von 16 MB RAM, htop zeigt mir aber lediglich nur 10 MB an. Vermutlich wird Speicher durch eingebaute Hardware reserviert, weswegen am Ende für die tatsächliche Ausführung weniger RAM zur Verfügung steht. Htop ist aber nicht das einzige Programm, das diesen Wert anzeigt. Auch KolibriOS signalisiert hier den gleichen Wert. Trotzdem ist es erstaunlich, was ein minimales Slitaz an Arbeitsspeicher benötigt und dabei dennoch alle Hardwaretreiber geladen hat.

WLAN. Das WLAN in Betrieb zu nehmen, war auf dem 220cs noch nie ein Problem. Obwohl 1996 die meisten Laptops noch nicht bereit waren für die mobilen Ansprüche des Internetzeitalters (mit dem 220cs kann man sich Hanteltraining sparen), ist es ohne weiteres möglich seine PCMCIA-Karte mit WPA in Betrieb zu nehmen. Leider nimmt diese drahtlose Funktion einige MB in Anspruch. Wenn man also den Rechner sowieso nur zur Hause für einen bestimmten Zweck nutzen möchte, ist eine PCMCIA zu LAN Karte vorzuziehen. Die beiden von 3com erfüllen nicht nur ihren Zweck, sondern haben auch Freie Linuxtreiber.
Rtorrent. Keine Frage ist Rtorrent die bevorzugte Lösung, wenn man BitTorrent von der Konsole aus bedienen möchte. Mit dem geringen Verbrauch an Systemressourcen und dem intuitiven Ncurses-Interface kann man nicht viel falsch machen. Obwohl RAM hier ein wichtiger Flaschenhals ist, sollte man I/O nicht unterschätzen. So alte Laptops haben meist keine sehr schnelle Festplatte, USB 1.0 war zu dieser Zeit noch eine Seltenheit und versucht man gleichzeitig mehrere Torrents über WLAN zu verteilen, hat man die besten Voraussetzungen geschaffen, um dem System die Grenzen aufzuzeigen. Der Umstieg auf eine LAN-Verbindung hat bei mir zwar deutlich geholfen, dennoch muss man die Bandbreite bei der Übertragung drosseln, damit der Laptop weiterhin bedienbar bleibt. In Rtorrent sollte deswegen die Anzahl der maximalen Peers begrenzt werden und gleichzeitig für den Download eine Grenze gezogen werden. Global 300 kb/s war ein vernünftiger Zahlenwert.
Musik. Nachdem ich die richtigen Audioeinstellungen gefunden hatte, ließ sich ohne weiteres Musik mit cmus abspielen, dass ich mit Hilfe von tazpkg von einem Debian- in ein Slitazpaket umgewandelt habe. Ob die abgespielten Klänge aber als Hörgenuß bezeichnet werden dürfen, lasse ich an dieser Stelle mal offen. Hier muss man wohl die Schuld bei der Soundkarte suchen. Lauter Krach immer, Äolsharfe gleiche Klänge eher nein.
SSH. Normalerweise benutze ich SSH nicht nur zur Fernadministration, sondern auch zum Einhängen entfernter Dateisysteme mit sshfs. Diese Methode scheint bei dem Toshiba 220cs ziemlich instabil zu sein, weswegen möglicherweise der Versuch lohnt Dateien mit Hilfe von NFS freizugeben. Auf jeden Fall ist Dropbear der geeignete Ersatz für OpenSSH, wenn die Ressourcen begrenzt sind.
Lighttpd. Ich erwähnte schon bei der Vorstellung von Ideen, was man mit alten Computern machen kann, dass ein hauseigener Webserver unter Umständen ein guter Verwendungszweck für einen alten Rechner sein kann. Als leichtgewichtige Variante bietet sich hier Lighttpd an, der sich bei Slitaz problemlos installieren und mit /etc/init.d/lighttpd start auch sofort in Betrieb nehmen lässt. Dauerhaft wird der Dienst in der /etc/rcS.conf unter RUN_DAEMONS eingetragen. Danach nur noch mit dem Browser auf die lokale Adresse surfen und man kann sich von den Fähigkeiten von Lighttpd überzeugen.

Prinzipiell funktionieren viele textbasierte Programme wie auf einem brandneuen Modell. Egal ob es der IRC Chat ist, der Terminplaner für die Konsole oder das E-Mail-Programm. Wunder darf man aber nicht erwarten. Insbesondere lassen sich nicht alle Programme parallel ausführen und umfangreiche Editoren wie Vim verhalten sich zeitweise recht träge.
Für die Zukunft stehen noch FreeDOS und Crux auf dem Testplan. Ersteres um herauszufinden, welche Möglichkeiten ein weiteres Nicht-Linux, aber Freies Betriebssystem, bietet und letzteres, weil es einen speziellen i585-Port zur Verfügung stellt und dazu noch äußerst anpassbar ist.

Effizient und schnell: rtorrent, screen und elinks

Heute möchte ich rtorrent, einen kleinen und sehr effizienten Bittorrent Client vorstellen und wie man ihn bequem aus der Ferne mit ssh kontrollieren kann. Im Zusammenspiel mit dem Terminal Multiplexer screen sind rtorrent und der Textbrowser elinks eine komfortable Lösung, um einen Bittorrent Client fernzusteuern, schnell und einfach neue Torrents hinzuzufügen und gleichzeitig äußerst effizient mit Systemressourcen umzugehen.
Durch die geringen Anforderungen an die Hardware eignet sich rtorrent auch für ältere Rechner und für Lösungen ohne grafische Desktopumgebung und lässt sich insbesondere für einen dedizierten Server, eine sogenannte Seedbox, nutzen.
Rtorrent ist eine auf ncurses basierende Oberfläche der Bittorrent Bibliothek libtorrent und ist derzeit bei Debian und Ubuntu in der Version 0.8.6 (rtorrent) und 0.12.6 (libtorrent) verfügbar. Zentrale Konfigurationsdatei bei rtorrent ist die im Home Ordner versteckte Datei .rtorrent.rc.

1. Schritt: Programme installieren

aptitude install ssh rtorrent elinks screen

2. Schritt: Konfiguration

Eine Beispieldatei der .rtorrent.rc gibt es auf der offiziellen Homepage. Hier findet man unter anderem die üblichen Einstellungen zur minimalen und maximalen Anzahl von peers pro Torrent, Anzahl der gleichzeitigen Verbindungen beim Upload und eine Option für die Beschränkung der Upload/Download Rate.
Ein interessantes Feature von rtorrent ist das Überwachen von Ordnern auf neue Torrents. Diese werden dann automatisch in rtorrent gestartet und nach erfolgreichem Download in einen anderen Ordner verschoben. Um ein solches Szenario einzurichten, geht man einfach so vor:
Im Home Verzeichnis einen Ordner Downloads erstellen und in diesem dann z.B. die Unterverzeichnisse watch, session, todo, fertig anlegen. In der .rtorrent.rc müssen danach nur noch folgende Angaben gemacht werden:

directory = ~/Downloads/todo
session = ~/Downloads/session
schedule = watch_directory,10,10,"load_start=~/Downloads/watch/*.torrent,d.set_custom1=~/Downloads/fertig/"
schedule = tied_directory,10,10,start_tied=
schedule = untied_directory,10,10,stop_untied=
system.method.set_key=event.download.finished,move_complete,"d.set_directory=$d.get_custom1=;execute=mv, -u,$d.get_base_path=,$d.get_custom1="

Die letzte Zeile sieht zwar etwas kryptisch aus, bewirkt aber, dass nach der Fertigstellung des Downloads dieser vom Ordner todo nach fertig verschoben wird. Um die Torrent Datei automatisch aus dem watch Ordner zu entfernen und somit das Seeden bei einem Verhältnis von 1:1 zu beenden, muss noch dieser Code eingefügt werden.

ratio.enable=
ratio.min.set=100
ratio.max.set=120
ratio.upload.set=20M
system.method.set = group.seeding.ratio.command, d.close=, d.erase=

Verschlüsselung des Datenverkehrs erreicht man in rtorrent durch den Eintrag folgender Zeile in die .rtorrent.rc

encryption = allow_incoming, try_outgoing, require, require_RC4

3. Bedienung

Nachdem man sich mit ssh auf dem Rechner eingeloggt hat, startet man zunächst mit dem Befehl screen den Terminal Multiplexer. In screen gestartete Programme laufen auch nach dem Ausloggen mit ssh weiter. Diese können gleichzeitig in unterschiedlichen Fenstern laufen und auch nebeneinander in der Konsole dargestellt werden. Hat man rtorrent ausgeführt, kann man mit der Tastenkombination STRG+A und dann SHIFT+S die Darstellung horizontal teilen. Mit STRG+A und TAB wechselt man zur nächsten Hälfte und kann dort mit STRG+A und c eine neue Konsole öffnen. Hier startet man elinks, mit welchem man nach neuen Torrents suchen kann. Im Optionsmenü lässt sich als Standard Ordner für Downloads dann auf den watch Ordner verweisen. Heruntergeladene Torrents landen also direkt bei rtorrent!
Indem man eine Torrent Datei aus dem watch Ordner löscht, lässt sich das Herunterladen oder Verteilen beenden. Mit dem Kommando STRG+A und d verlässt man screen und schickt es in den Hintergrund. Mit dem Befehl screen -r kann man sich erneut zu seiner Session und aller darin laufenden Programme verbinden. Für weitere nützliche Kommandos innerhalb von screen einfach STRG+A und ? eingeben. Das vertikale Teilen von screen funktioniert bei Debian mit der Kombination STRG+A und |. Mehr Screenshots und weitere Informationen zu screen gibt es hier.

Wie lässt sich rtorrent bedienen?

Rtorrent lässt sich komplett über die Tastatur steuern. Mit den Pfeiltasten bewegt man sich zwischen Torrents und den Menüoptionen. Mit der Pfeiltaste nach Rechts kommt man in ein Untermenü, wo man mehr über die heruntergeladenen Dateien, Peers und Tracker erfährt. In rtorrent gibt es mehrere Ansichten, die sich über die Tasten 1-9 erreichen lassen. Das Upload Verhältnis lässt sich mit a/s/d erhöhen und mit y/x/c reduzieren. Für das Download Verhältnis ist es entsprechend A/S/D und Y/X/C. Möchte man, dass rtorrent für ein bestimmtes Torrent die globalen Einstellungen ignoriert muss man SHIFT+i drücken. Drückt man einmal STRG+d stoppt der Up-und Download des ausgewählten Torrents, ein weiteres STRG+d entfernt das Torrent. Schließlich kann man rtorrent mit STRG+q beenden.

4. Fazit

Diese Erklärung sollte nur einen kurzen Eindruck vermitteln, was man mit drei Konsolenprogrammen erreichen kann. Transmission ist sicherlich mit einer grafischen Oberfläche intuitiver zu bedienen. Wer sich jedoch von der Konfiguration einer Textdatei und der Tastensteuerung nicht abschrecken lässt, erhält einen hocheffizienten Bittorrent Client und eine hervorragende Lösung sowohl für Low als auch High End Rechner.

5. Links

Offizielle Projektseite mit umfangreicher Dokumentation für rtorrent und libtorrent