torsdag 29 april 2010

Bittorrent på headless server med webgränssnitt

För att ladda ner senaste ubuntu använde jag bittorrent. Det är praktiskt att göra detta på min server, eftersom den är påslagen jämt och nåbar.
Förut har jag kört genom att logga in och sedan med transmission-remote för att kontrollera transmission-daemon. Det finns ett annat sätt att göra - genom att köra genom webgränssnitt.

Här är en guide för att få till transmission så att det fungerar. Det kräver visst pyssel för att få till säkerhetsmässigt och att undvika överbelastning av server och router. Samtidigt ska uppsättningen vara säker.
Som alltid kan man göra på många sätt. Det här är sättet jag valde. Guiden avser linux.

  1. skapa en separat användare för att köra nedladdningen
  2. skapa kataloger som har rätt rättigheter (för att undvika konsekvenser av ev. intrång)
  3. bygg transmission
  4. starta demonen och stäng sedan av den.
  5. redigera konfigurationsfilen
  6. starta demonen (crontab, eller manuellt).
  7. anslut via webgränssnitt
  8. tuta och kör!
Steg 1
Jag väljer att skapa användaren "transmission". Med roträttigheter kör jag adduser transmission. Jag väljer att ta bort lösenordet genom att köra passwd -l transmission. På det sättet riskerar jag inte att någon kan logga in som den nya användaren. För att förenkla att komma åt det jag laddar ner låter jag användaren ha en grupptillhörighet som min vanliga användare också är med i. Det görs med usermod -g gruppnamn -G gruppnamn transmission.

Steg 2
mkdir -p /sökväg/till/bra/plats/för/nedladdade/filer/downloaddir
mkdir -p /sökväg/till/bra/plats/för/nedladdade/filer/incompletedir

Se till att katalogen ägs/har rättigheter på ett sådant sätt att transmission kan skriva till den.


Steg 3
bygg transmission. Jag checkade ut revision 10363 från transmission. Detta pekar till en fungerande version. Jag körde först head, men det var inte särskilt stabilt. I exemplet nedan används den utpekade versionen.
Som användare transmission (su - transmission som root, eller sudo su - transmission för er ubuntufreaks :-) :
installera först beroenden (och subversion, gcc om du inte redan har det. ) Beroenden kan jag inte på rak arm, men de finns listade på http://trac.transmissionbt.com/wiki/Building
Det är viktigt att allt är disable utom daemon när du kör configure. Se listan längst ner på sidan som länkas till ovan.
mkdir -p ~/code/thirdparty
cd ~/code/thirdparty
svn co -r10363 svn://svn.m0k.org/Transmission/trunk/ transmission
.cd transmission
./autogen.sh
./configure --disable-gtk --disable-allt-utom-daemon --enable-daemon
make

Det tar rätt lång tid både för configure och make ovan. Ha tålamod!

Steg 4
kör demonen med
code/thirdparty/transmission/daemon/transmission-daemon -f
och avsluta med ctrl c efter en stund. Då finns en konfigurationsfil att utgå från.


Steg 5
redigera konfigurationsfilen. Min ser ut såhär. Detta är viktigt för att få det att fungera. Kolla inställningarna noga - annars så aktiveras till exempel inte webgränssnittet!
emacs ~/config/transmission-daemon/settings.json
[
"alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "dht-enabled": true,
    "download-dir": "/sökväg/till/bra/plats/för/nedladdade/filer/downloaddir",
    "encryption": 1,
    "incomplete-dir": "/sökväg/till/bra/plats/för/nedladdade/filer/incompletedir",
    "incomplete-dir-enabled": true,
    "lazy-bitfield-enabled": true,
    "message-level": 2,
    "open-file-limit": 32,
    "peer-limit-global": 40,
    "peer-limit-per-torrent": 30,
    "peer-port": 6881,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": 0,
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "proxy": "",
    "proxy-auth-enabled": false,
    "proxy-auth-password": "",
    "proxy-auth-username": "",
    "proxy-enabled": false,
    "proxy-port": 80,
    "proxy-type": 0,
    "ratio-limit": 2.0000,
    "ratio-limit-enabled": false,
    "rename-partial-files": true,
    "rpc-authentication-required": false,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "{redigardavmigförattdetförmodligenärdumtattvisamittlösenordhär",
    "rpc-port": 9091,
    "rpc-username": "",
    "rpc-whitelist": "127.0.0.1",
  "rpc-whitelist-enabled": true,
    "speed-limit-down": 500,
    "speed-limit-down-enabled": true,
    "speed-limit-up": 500,
    "speed-limit-up-enabled": true,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-slots-per-torrent": 14
}

Jag har begränsat hastigheten och antal anslutningar, eftersom min router inte klarar mer.

Steg 6
Sen körde jag igång klienten. Rpc-whitelist begränsar vem som kan nå webgränssnittet, genom att sätta det till 127.0.0.1 kommer man bara åt det lokalt. Jag gör så att jag vidarebefodrar en port med ssh från dee dator jag sitter vid, dvs ssh -L9091:localhost:9091 server.com och ansluter sedan till localhost:9091 på den lokala datorn.

Jag har följande i min crontab. Nästa ombootning får avslöja om det fungerar....
@reboot sleep 120s && TRANSMISSION_WEB_HOME=$HOME/code/thirdparty/transmission/web/ $HOME/code/thirdparty/transmission/daemon/transmission-daemon -f

för att provköra använder jag det som är efter &&.

Steg 7
Jag sätter upp en port-vidarebefodring med ssh
ssh -L9091:localhost:9091 server.com
och ansluter sedan med en webläsare till http://localhost:9091/

Steg 8
Hurra, det fungerar!

Inga kommentarer: