Denne artikkelen tar for seg å sette opp rTorrent, ruTorrent og Apache på Ubuntu Linux.
Siden jeg vurderer å konvertere serveren min fra Windows Server til Linux er det, som med det meste annet, lurt å planlegge operasjonen før man sitter i det og ingenting lenger virker. For at jeg faktisk skal huske hva jeg har tenkt og gjort er det praktisk å dokumentere hva jeg har gjort sånn at det er lett å replikere når konverteringen faktisk skjer.
For ordens skyld vil jeg nevne at nedlasting av filmer, musikk og TV-serier kan være ulovlig avhengig av hvor man er i verden og at vi på ingen måte oppfordrer til slik oppførsel. Denne guiden er skrevet kun for nedlasting av lovlig materiale.
Jeg brukte lang tid på å finne en torrentklient som gjør det samme som eksisterende løsning, men fant til slutt rTorrent/ruTorrent. rTorrent er en kommandolinje/tekstbasert torrentklient, og ruTorrent er et avansert webgrensesnitt basert på webgrensesnittet til µTorrent 2.2 - enkelt, oversiktlig, lettvekt og funksjonelt.
En annen problemstilling jeg har hatt er at jeg egentlig helst vil kjøre FreeBSD som OS i bunnen, men da jeg trenger en stabil, fungerende hypervisor har jeg reelt sett bare to alternativer - Linux og Windows, og Windows skal vi jo bort fra...
Jeg er fremdeles ikke sikker på hvilken Linuxdistro jeg ender opp med, men sannsynligvis blir det Ubuntu eller CentOS. Denne guiden er skrevet for Ubuntu, men gitt at alle nødvendige pakker finnes i offisielle og/eller tredjeparts CentOS-repos kan man like greit sette dette opp på CentOS. Fordelen med Ubuntu er at alt er tilgjengelig i standardrepoene, og når det kommer nye versjoner av programmene kan alt enkelt oppdateres med apt - man slipper å kompilere/rekompilere noe som helst, og det er en Fin Ting(tm).
Om man vil ha en server med GUI som kan brukes til flere ting, installer Ubuntu Desktop. Om man ikke vil ha GUI og/eller desktopbloat, installer Ubuntu Server. Man kan installere GUI på server senere om ønskelig/nødvendig. Jeg installerte Ubuntu Server 18.04.2 LTS siden dette 1) er en testserver og 2) jeg ikke vet om jeg trenger et GUI - i verste fall installerer jeg det senere.
Retningslinjer for installasjonen:
Etter installasjonen er det alltid en god idé å oppdatere systemet og ta en omstart for å se at alt funker som forventet:
$ sudo apt update && sudo apt upgrade -y && reboot
Siden rTorrent, Apache, PHP og ellers alt vi trenger finnes i standard Ubuntu-repos er det så enkelt som dette:
$ sudo apt install rtorrent php php-geoip php-cli php-json php-curl php-cgi php-mbstring libapache2-mod-php libapache2-mod-scgi apache2 unrar unzip ffmpeg mediainfo curl sqlite3 sox screen git
Vi trenger Apache og PHP for å presentere ruTorrent-webgrensesnittet på et senere tidspunkt, så vi kan installere det med en gang. Kommandoen over drar inn siste versjon av Apache 2.4 og PHP 7.2.
Vi trenger også noen pakker for at enkelte ruTorrent-plugins skal fungere. Vi trenger også sox for et eller annet, så for å unngå langdryg sutring fra ruTorrent bare klinker vi den inn her med en gang.
For å kunne kjøre ruTorrent med PHP 7 må vi bruke siste master fra Github. Dette er ansett for å være en dev-versjon, men da siste stabile branch av ruTorrent er eldgammel gjør vi det på denne måten. Merk at det er anbefalt å bruke stabile versjoner; disse er tilgjengelige her og her.
Apache ser by default etter filer under /var/www/html, så vi installerer ruTorrent her. Man kan legge filene hvor som helst og under et eget domenenavn for den saks skyld - alt baserer seg på standard Apacheconfig, så hvis man er kjent med oppsett av Apache er det bare å slå seg løs. For enkelhets skyld bruker vi standardplasseringer her.
$ cd /var/www/html $ sudo git clone https://github.com/Novik/ruTorrent.git $ sudo chown -R user:www-data ruTorrent/ && sudo chmod -R 0770 ruTorrent/
Dette kloner (laster ned og pakker ut) ruTorrent-repoet til lokal disk under /var/www/html.
Den siste kommandolinjen gir www-data eierskap og skrivetilgang til ruTorrent-mappen. Dette er nødvendig for å kunne endre innstillinger via webgrensesnittet.
rTorrent kan enkelt konfgureres ved å opprette en configfil kalt .rtorrent.rc i roten av hjemmeområdet til brukeren som skal kjøre rTorrent. En eksempelfil kan finnes her. Rediger filen og tilpass den for dine behov - IKKE hopp over dette steget, rTorrent vil ikke fungere uten - og pass på at den inneholder følgende:
scgi_port = 127.0.0.1:5000
rTorrent trenger et sted å lagre sesjoner (sessions). Opprett en mappe et sted og endre configfilen til å peke til mappen.
$ mkdir .session
Gi webserveren tilgang til å skrive data her:
$ sudo chown -R :www-data .session
i .rtorrent.rc:
session = /home/user/.session
Legg til følgende i ruTorrent sin plugins.ini-fil (/var/www/html/ruTorrent/conf/plugins.ini) for å aktivere HTTPRPC-pluginen og deaktivere RPC-pluginen:
[httprpc] enabled = yes [rpc] enabled = no
Screen er en terminal-multiplexer som lar deg kjøre flere konsollsessions samtidig. Med screen kan man da starte rTorrent i bakgrunnen og bruke terminalen til andre ting.
For å sjekke at rTorrent faktisk fungerer kan vi starte rTorrent i en screen, siden det er det vi kommer til å gjøre i neste steg uansett.
For å starte rTorrent i en frakoblet screen i bakgrunnen:
$ screen -S rtorrent -d -m rtorrent
Hente opp frakoblet session:
$ screen -S rtorrent -r
Avslutte en frakoblet session:
$ screen -S rtorrent -X xon
Koble fra aktiv session:
ctrl+a d
Avslutte session og alle programmer som kjører i den:
ctrl+a q
Disse kommandoene må kjøres som samme bruker som kjører rTorrent.
"-S rtorrent" er for å gi screen-sessionen et navn slik at den er lett å identifisere i listen over screens:
$ screen -list There is a screen on: 30164.rtorrent (03/26/19 13:55:48) (Detached) 1 Socket in /run/screen/S-rtorrent.
Opprett en Unit-fil:
$ sudo vim /etc/systemd/system/rtorrent.service
Denne skal inneholde følgende:
[Unit] Description=rTorrent After=network.target [Service] User=rtorrent Type=forking KillMode=none ExecStart=/usr/bin/screen -d -m -fa -S rtorrent /usr/bin/rtorrent ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent WorkingDirectory=%h [Install] WantedBy=default.target
Start sammen med systemet:
$ sudo systemctl enable rtorrent
Start/stopp manuelt:
$ sudo systemctl start rtorrent $ sudo systemctl stop rtorrent
Disse kommandoene skal kjøres som brukeren som skal kjøre rTorrent.
Det antas at man har nok diskplass til å laste ned og organisere filene på en god måte. Når det gjelder mappestruktur står man helt fritt til å organisere ting som man vil, men et greit utgangspunkt kan være følgende:
/home/user/Downloads/incomplete /home/user/Downloads/complete
Angi incomplete som nedlastingsdestinasjon i ruTorrent og complete som destinasjon for fullførte nedlastinger. Som sagt, man står helt fritt til å sette det opp som man selv føler er mest hensiktsmessig. Husk å angi riktige tilgangsrettigheter for mappene.
For å nå webgrensesnittet fra utsiden av lokalnettet ditt må du åpne nødvendige porter i brannmuren/routeren din, og sette opp en VirtualHost i Apache. Den enkleste typen config for dette er som følger:
<VirtualHost *:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html/ruTorrent ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined CustomLog /var/log/apache2/rutorrent.log vhost_combined ErrorLog /var/log/apache2/rutorrent_error.log </VirtualHost>
Det er verdt å merke seg at med denne configen er tilgang til webgrensesnittet vidåpen for hele verden, så det anbefales på det sterkeste å sikre den med SSL-sertifikat og innlogging.
Man må endre ServerName, ServerAdmin og evt DocumentRoot hvis ruTorrent ble installert et annet sted enn som angitt i denne guiden.
Her er det mange faktorer som spiller inn. Jeg kjører NGINX som reverse proxy foran webserverne mine og har installert SSL-sertifikater her. Jeg har beskrevet hvordan dette ble satt opp i en annen post, så jeg gjentar det ikke her.
For å sikre webgrensesnittet kan man angripe problemet på to måter. Den ene måten er å autentisere på NGINX, den andre er å autentisere på Apache. Begge deler funker, så det kommer egentlig ned til hvordan man håndterer autentisering for andre applikasjoner og nettsteder. Jeg vil kort beskrive begge måtene under.
NGINX:
Opprett fil for passordautentisering og legg til et brukernavn:
$ sudo sh -c "echo -n 'webguibruker:' >> /etc/nginx/htpasswd"
Opprett passord:
$ sudo sh -c "openssl Pa55w0rd -apr1 >> /etc/nginx/htpasswd"
Filen "htpasswd" kan hete hva som helst og ligge hvor som helst så lenge det ikke er i webroten for domenet. Det er ikke en god idé å la besøkende kunne laste ned passordfilen din...
Sett opp NGINX til å spørre besøkende om brukernavn og passord:
Legg inn to linjer i Location-delen av VirtualHost-oppsettet i NGINX-configen:
auth_basic "Hemmelig område"; auth_basic_user_file /etc/nginx/htpasswd
Lagre filen og start nginx på nytt:
Linux/systemd-systemer:
$ sudo systemctl restart nginx
FreeBSD/Linux med initd/SysV init:
$ sudo service nginx restart
Du skal nå få spørsmål om å logge inn når du besøker adressen til webgrensesnittet.
BRUKERNAVN OG PASSORD SENDES I KLARTEKST, så det anbefales på det sterkeste å sikre nettstedet med SSL FØR basic auth settes opp. Just sayin'.
Hvis du, som meg, kjører NGINX som reverse proxy foran Apache er du nå ferdig. Hvis du ikke vil ha auth på NGINX kan du sette opp en VirtualHost i NGINX, sikre den med SSL og foreta auth på Apache. Det gjøres slik:
$ htpasswd -c /etc/apache/htpasswd webguibruker
Endre VirtualHost-containeren vi satt opp i steg 9 til dette:
<VirtualHost *:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html/ruTorrent ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html/rutorrent"> AuthName "Restricted Access" AuthType Basic Require valid-user AuthUserFile /etc/apache/htpasswd </Directory> CustomLog /var/log/apache2/rutorrent.log vhost_combined ErrorLog /var/log/apache2/rutorrent_error.log </VirtualHost>
Opprett loggfilene:
$ sudo touch /var/log/apache2/rutorrent_error.log && sudo touch /var/log/apache2/rutorrent.log && sudo chown -R root:adm /var/log/apache2/
Hvis Apache kjørte fra før, start Apache på nytt:
$ sudo systemctl restart apache2
Hvis Apache ikke kjørte, start Apache:
$ sudo systemctl start apache2
Gratulerer, du skal nå ha en fungerende instans av rTorrent/ruTorrent med kryptert autentisering. Hvis du er usikker på hvordan SSL settes opp på NGINX-som-reverse-proxy, kan du lese hvordan jeg gjorde det.
Hvis alt funker - kanon. Start serveren på nytt for å verifisere at alt fremdeles funker etter en omstart. Det er ingenting som er så kjedelig som å måtte logge inn på serveren for å starte tjenester på nytt etter hver omstart, når alt egentlig skal kunne starte av seg selv.
$ shutdown -r -t now
Når serveren har startet opp igjen, test at webgrensesnittet fungerer uten feilmeldinger. Hvis du får opp webgrensesnittet, betyr det at (NGINX, SSL og ) Apache fungerer. Hvis du ikke får meldinger i webgrensesnittet om manglende kontakt med rTorrent, så fungerer rTorrent også. Last opp en torrentfil eller legg inn en magnet-link og test at nedlastinger fungerer som de skal.
Hvis alt fungerer som forventet er du klar.
Om ikke, feilsøk hver komponent for seg til det virker. Webgrensesnittet funker ikke? Sjekk NGINX først. Har du auth for webgrensesnitt på Apache og det ikke funker? Sjekk Apache. SSL-feil? SJekk NGINX igjen. ruTorrent sutrer over manglende skrivegang eller kontakt med rTorrent? Angi riktige rettigheter for nedlastingsmappene og endelig destinasjon for filene. Start rTorrent på nytt. Sjekk configfilen til rTorrent og se om det er noe som burde vært aktivert men som fremdeles er kommentert ut (jeg sa du skulle gå gjennom configfilen).
Sett opp ruTorrent i webgrensesnittet for å aktivere ting som å flytte nedlastede filer basert på torrent-label og annen generell tweaking.
Vurder å bruke en VPN-tjeneste for torrentnedlastinger.