Denne artikkelen tar for seg å sette opp en torrent-seedbox basert på rTorrent, ruTorrent, Apache og FreeBSD.
De fleste artiklene jeg har funnet om å sette opp en torrent-seedbox er basert på Linux, og den eneste jeg har funnet som bruker FreeBSD, hadde valgt lighttpd. Jeg fikk ikke lighttpd til å fungere skikkelig, så jeg gikk for Apache i stedet.
ruTorrent er sagt å ikke ville spille på lag med PHP-versjoner over 5.6, men jeg har ikke hatt noen problemer med å kjøre det med PHP 7.2 på verken FreeBSD eller Linux. Det er også anbefalt å bruke stabile versjoner, men en git clone av master-repoet gav meg siste versjon, som fungerer utmerket på både FreeBSD og Linux.
Hvis du allerede har en blank server som venter på en mening med livet kan du hoppe til steg 1. Hvis ikke, spinn opp en VM eller en gammel fysisk boks og installer FreeBSD. Valgene jeg gjorde under installasjonen var som følger (FreeBSD 11.2):
Når FreeBSD er installert må det oppdateres med sikkerhetsoppdateringene som har kommet siden -RELEASE:
# freebsd-update fetch install && sudo reboot
Deretter henter vi ports, setter noen build-variabler og installerer noen nødvendige pakker:
# portsnap fetch extract # echo "OPTIONS_UNSET=CUPS DEBUG DOCS FONTCONFIG X11" >> /etc/make.conf # pkg install portmaster \ git \ screen \ sudo \ vim-console \ openssh-portable \ multitail \ zsh \ gnuls
Legg til eventuelle andre pakker du ønsker/trenger på slutten av forrige linje. Jeg foretrekker ZSH over bash eller (t)csh, samt at mc, multitail og gnuls er praktisk å ha.
Dette vil installere mange flere pakker enn angitt, men det er greit. La pkg gjøre sitt, og kjør deretter portmaster for å oppdatere eventuelle pakker som har fått en versjonsbump.
# portmaster -Bad
Dette vil ta lang tid og dra inn en røys dependencies, deriblant perl, og prosessen vil stille spørsmål om options underveis. Med mindre du har spesielle ønsker eller behov for konfigurering av pakkene, aksepter alle defaults og la portmaster gjøre sitt.
# cd /usr/ports/www/apache24 # make install clean
Aksepter defaults.
Apache kommer ikke med mod_scgi som standard, så den må installeres for at ruTorrent skal kunne kommunisere med rTorrent via Apache. Installasjonen er så enkel som:
# cd /usr/ports/www/mod_scgi # make install clean
Når installasjonen er ferdig må modulen aktiveres i Apache og et SCGIMount må settes opp:
httpd.conf:
LoadModule scgi_module libexec/apache24/mod_scgi.so <IfModule scgi_module> SCGIMount /RPC2 127.0.0.1:5001 </IfModule>
# cd /usr/ports/net-p2p/rtorrent # make install clean
Se gjennom config options og pass på at XMLRPC-støtte er merket av.
Installasjon av siste PHP gjøres enklest slik:
# cd /usr/ports/lang/php72-extensions # make install clean
Du får da opp en lang liste over forskjellige extensions du kan velge. Avhengig av hva du vil bruke serveren til ellers kan du installere det du føler du trenger, men som et minimum for Apache og ruTorrent må følgende være merket av:
BZ2, CTYPE, CURL, DOM, FILEINFO, FILTER, GD, HASH, ICONV, JSON, MBSTRING, MCRYPT, MYSQL, MYSQLI, OPENSSL, PDO, PDO_SQLITE, POSIX, SESSION, SIMPLEXML, SOCKETS, SQLITE3, TOKENIZER, XML, XMLREADER, XMLRPC, XMLWRITER, ZIP
+--------------------------- php72-extensions-1.0 -----------------------------+ ≠ +--------------------------------------------------------------------------+ ≠ ≠ +[ ] BCMATH bc style precision math functions + ≠ ≠ +[x] BZ2 bzip2 library support + ≠ ≠ +[ ] CALENDAR calendar conversion support + ≠ ≠ +[x] CTYPE ctype functions + ≠ ≠ +[x] CURL CURL support + ≠ ≠ +[ ] DBA dba support + ≠ ≠ +[x] DOM DOM support + ≠ ≠ +[ ] ENCHANT Enchant spelling support + ≠ ≠ +[ ] EXIF EXIF support + ≠ ≠ +[x] FILEINFO fileinfo support + ≠ ≠ +[x] FILTER input filter support + ≠ ≠ +[ ] FTP FTP support + ≠ ≠ +[x] GD GD library support + ≠ ≠ +[x] GETTEXT gettext library support + ≠ ≠ +[ ] GMP GNU MP support + ≠ ≠ +[x] HASH HASH Message Digest Framework + ≠ ≠ +[x] ICONV iconv support + ≠ ≠ +[ ] IMAP IMAP support + ≠ ≠ +[ ] INTERBASE Interbase 6 database support (Firebird) + ≠ ≠ +[ ] INTL Internationalization(ICU) + ≠ ≠ +[x] JSON JavaScript Object Serialization support + ≠ ≠ +[ ] LDAP OpenLDAP support + ≠ ≠ +[x] MBSTRING multibyte string support + ≠ ≠ +[x] MYSQLI MySQLi database support + ≠ ≠ +[ ] ODBC ODBC support + ≠ ≠ +[x] OPCACHE OPcache support + ≠ ≠ +[x] OPENSSL OpenSSL support + ≠ ≠ +[ ] PCNTL pcntl support (CLI only) + ≠ ≠ +[ ] PDF PDFlib support (implies GD) + ≠ ≠ +[x] PDO PHP Data Objects Interface (PDO) + ≠ ≠ +[ ] PDO_DBLIB PDO DBLIB-DB driver + ≠ ≠ +[ ] PDO_FIREBIRD PDO Firebird driver + ≠ ≠ +[x] PDO_MYSQL PDO MySQL driver + ≠ ≠ +[ ] PDO_ODBC PDO ODBC driver + ≠ ≠ +[ ] PDO_PGSQL PDO PostgreSQL driver + ≠ ≠ +[x] PDO_SQLITE PDO sqlite driver + ≠ ≠ +[ ] PGSQL PostgreSQL database support + ≠ ≠ +[x] PHAR phar support + ≠ ≠ +[x] POSIX POSIX-like functions + ≠ ≠ +[ ] PSPELL pspell support + ≠ ≠ +[ ] READLINE readline support (CLI only) + ≠ ≠ +[ ] RECODE recode support + ≠ ≠ +[x] SESSION session support + ≠ ≠ +[ ] SHMOP shmop support + ≠ ≠ +[x] SIMPLEXML simplexml support + ≠ ≠ +[ ] SNMP SNMP support + ≠ ≠ +[ ] SOAP SOAP support + ≠ ≠ +[x] SOCKETS sockets support + ≠ ≠ +[ ] SODIUM Sodium encryption support + ≠ ≠ +[x] SQLITE3 sqlite3 support + ≠ ≠ +[ ] SYSVMSG System V message support + ≠ ≠ +[ ] SYSVSEM System V semaphore support + ≠ ≠ +[ ] SYSVSHM System V shared memory support + ≠ ≠ +[ ] TIDY TIDY support + ≠ ≠ +[x] TOKENIZER tokenizer support + ≠ ≠ +[ ] WDDX WDDX support (implies XML) + ≠ ≠ +[x] XML XML support + ≠ ≠ +[x] XMLREADER XMLReader support + ≠ ≠ +[x] XMLRPC XMLRPC-EPI support + ≠ ≠ +[x] XMLWRITER XMLWriter support + ≠ ≠ +[ ] XSL XSL support (Implies DOM) + ≠ ≠ +[x] ZIP ZIP support + ≠ ≠ +[x] ZLIB ZLIB support + ≠ ≠ +--------------------------------------------------------------------------+ ≠ +------------------------------------------------------------------------------+ ≠ < OK > <Cancel> ≠ +------------------------------------------------------------------------------+
Når du trykker ENTER vil du få opp en dialogboks for konfigurasjon av PHP:
+------------------------------- php72-7.2.16 ---------------------------------+ ≠ +--------------------------------------------------------------------------+ ≠ ≠ ≠+[x] CLI Build CLI version ≠ ≠ ≠ ≠+[x] CGI Build CGI version ≠ ≠ ≠ ≠+[x] FPM Build FPM version ≠ ≠ ≠ ≠+[x] EMBED Build embedded library ≠ ≠ ≠ ≠+[ ] PHPDBG Interactive PHP debugger ≠ ≠ ≠ ≠+[ ] DEBUG Build with debugging support ≠ ≠ ≠ ≠+[x] DTRACE Build with DTrace probes ≠ ≠ ≠ ≠+[x] IPV6 IPv6 protocol support ≠ ≠ ≠ ≠+[x] MYSQLND Build with MySQL Native Driver ≠ ≠ ≠ ≠+[x] LINKTHR Link thread lib (for threaded extensions) ≠ ≠ ≠ ≠+[X] ZTS Force Zend Thread Safety (ZTS) build ≠ ≠ ≠ +--------------------------------------------------------------------------+ ≠ ≠ < OK > <Cancel> ≠ +------------------------------------------------------------------------------+
Merk av ZTS i tillegg til defaults og trykk ENTER.
La installasjonen gå sin gang. Du vil bli spurt om options for forskjellige php-moduler og deres dependencies i løpet av installasjonen, så hold et øye med terminalen. For å unngå mas underveis og heller svare på alle spørsmålene om options før installasjonen begynner, angi make config-recursive && make install clean som kommandolinje.
Når dette er ferdig, må mod_php installeres:
# cd /usr/ports/www/mod_php72 # make install clean
+----------------------------- mod_php72-7.2.16 -------------------------------+ ≠ +--------------------------------------------------------------------------+ ≠ ≠ ≠ [ ] AP2FILTER Use Apache 2.x filter interface (experimental) ≠ ≠ ≠ ≠ [ ] PHPDBG Interactive PHP debugger ≠ ≠ ≠ ≠ [ ] DEBUG Build with debugging support ≠ ≠ ≠ ≠ [x] DTRACE Build with DTrace probes ≠ ≠ ≠ ≠ [x] IPV6 IPv6 protocol support ≠ ≠ ≠ ≠ [x] MYSQLND Build with MySQL Native Driver ≠ ≠ ≠ ≠ [x] LINKTHR Link thread lib (for threaded extensions) ≠ ≠ ≠ ≠ [x] ZTS Force Zend Thread Safety (ZTS) build ≠ ≠ ≠ +--------------------------------------------------------------------------+ ≠ +------------------------------------------------------------------------------+ ≠ < OK > <Cancel> ≠ +------------------------------------------------------------------------------+ Velg ZTS og trykk ENTER, og vent til modulen er installert.
For at PHP skal fungere må mod_php aktiveres i Apache. Åpne httpd.conf:
# vim /usr/local/etc/apache24/httpd.conf
Naviger til listen over moduler og evt fjern kommenteringen for mod_php7:
LoadModule php7_module libexec/apache24/libphp7.so
Sett så opp filassosiasjoner slik at php-filer håndteres av PHP i <IfModule mime_module>-blokken. Legg til:
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
like før </IfModule>, og lagre filen.
Man kan kjøre rTorrent som sin egen bruker, men for å være sikker på at private filer utenfor rTorrents nedlastingsmapper ikke blir berørt dersom noe skulle skje, så oppretter vi en dedikert bruker for å kjøre rTorrent.
# adduser Username: rtorrent Full name: rTorrent Uid (Leave empty for default): Login group [rtorrent]: Login group is rtorrent. Invite rtorrent into other groups? []: Login class [default]: Shell (sh csh tcsh zsh rzsh bash rbash git-shell nologin) [sh]: Home directory [/home/rtorrent]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: no Lock out the account after creation? [no]: Username : rtorrent Password : <disabled> Full Name : rTorrent Uid : 1001 Class : Groups : rtorrent Home : /home/rtorrent Home Mode : Shell : /bin/sh Locked : no OK? (yes/no): y adduser: INFO: Successfully added (rtorrent) to the user database. Add another user? (yes/no): n Goodbye!
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini # cp /usr/local/share/examples/rtorrent/rtorrent.rc /home/rtorrent/.rtorrent.rc # chown rtorrent:rtorrent /home/rtorrent/.rtorrent.rc
# cd /home/rtorrent # mkdir .session download watch # chown -R rtorrent:rtorrent /home/rtorrent
Endre følgende linjer i /home/rtorrent/.rtorrent.rc:
# Default directory to save the downloaded torrents. directory = /home/rtorrent/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/rtorrent/.session/ # Port range to use for listening. port_range = 50001-50001
Legg til følgende linje i slutten av filen:
scgi_port = 127.0.0.1:5001
Alle andre innstillinger kan endres senere gjennom ruTorrent-webgrensesnittet.
# mkdir -p /usr/local/www # cd /usr/local/www # git clone https://github.com/Novik/ruTorrent.git rutorrent # chown -R rtorrent:rtorrent rutorrent
Endre linje 30 i /usr/local/www/rutorrent/conf/config.php til:
$scgi_port = 5001;
Denne guiden tar ikke for seg å sette opp SSL, da det håndteres av NGINX reverse-proxy i forkant av serveren.
Endre /usr/local/etc/apache24/httpd.conf til:
# Virtual hosts Include etc/apache24/extra/httpd-vhosts.conf
Endre så /usr/local/etc/apache24/extra/httpd-vhosts.conf til:
<VirtualHost *:80> ServerName example.com ServerAdmin webmaster@example.com DocumentRoot /usr/local/www/rutorrent ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined <Directory "/usr/local/www/rutorrent"> AuthName "Restricted Access" AuthType Basic Require valid-user AuthUserFile /etc/private/apache-htpasswd </Directory> CustomLog /var/log/apache2/rutorrent.log vhost_combined ErrorLog /var/log/apache2/rutorrent_error.log </VirtualHost>
ruTorrent ligger som standard helt åpent for verden, så vi legger til passordbeskyttelse for å bare tillate godkjente brukere (AuthName-direktiver m/venner).
# mkdir -p /etc/private # htpasswd -c /etc/private/apache-htpasswd rtorrent New password: Re-type new password: Adding password for user rtorrent
sysrc apache24_enable=yes
eller rediger /etc/rc.conf manuelt og legg inn
apache24_enable="YES"
Logg inn som rtorrentbrukeren:
# su - rtorrent
Opprett en katalog kalt bin:
$ mkdir bin
Opprett /home/rtorrent/bin/rtorrent.sh med følgende innhold:
$ vim bin/rtorrent.sh
#!/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin export TERM=xterm # Start rtorrent i detached screen /usr/local/bin/screen -S rtorrent -d -m /usr/local/bin/rtorrent
Gjør scriptet kjørbart:
$ chmod 0755 /home/rtorrent/bin/rtorrent.sh
Kjør så
$ crontab -e
og legg til følgende linjer:
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin @reboot /home/rtorrent/bin/rtorrent.sh
Da er oppsettet ferdig. Start serveren på nytt for å se at alt virker som det skal og at alle tjenestene er tilgjengelige.
Husk å åpne for listen-porten spesifisert i rtorrent-configen (50001) i brannmuren for maksimale hastigheter. Som regel vil man likevel få lastet ned ting uten vesentlige problemer, men hvis ikke er det en enkel ting å fikse.
Her er noen kjente problemer og løsninger på disse:
Problem:
Når jeg besøker serverens IP-adresse får jeg følgende melding:
ERR_CONNECTION_REFUSED
Løsning:
Du glemte steg 13.
Problem:
Når jeg logger inn på ruTorrent får jeg en haug feilmeldinger:
Løsning:
Du glemte chown i steg 7 og/eller 8.
Problem:
ruTorrent gir meg feilmeldinger som dette:
(plugin): Some functionality will be unavailable. Webserver cannot access external program.
Løsning:
Hvis du har sjekket at rtorrent-brukeren din er eier av /usr/local/www/rutorrent OG underkatalogene (som i forrige løsning), så trenger pluginen et eksternt program som gjerne ikke er installert (rss trenger curl, screenshots trenger ffmpeg, etc). Kjør "pkg search pakkenavn", installer siste versjon av programmet, og start så rtorrent og Apache på nytt.
De følgende pakkene (med dependencies) var nødvendige for å få installasjonen til å virke:
curl mediainfo ffmpeg sox unrar unzip
Merk at sox og ffmpeg vil dra inn X.org og/eller Wayland og et tonn andre, unødvendige X-relaterte dependencies hvis installert fra pakker eller kompilert med defaults. Det kan derfor være en god idé å gå gjennom config options og kompilere disse pakkene selv.
Jeg opplevde også at selv om curl og PHP var installert, så klarte ikke ruTorrent å finne programmene, så jeg måtte angi sti til php og curl i config.php, linje 43-44:
$pathToExternals = array( "php" => '', // Something like /usr/bin/php. If empty, will be found in PATH. "curl" => '/usr/local/bin/curl', // Something like /usr/bin/curl. If empty, will be found in PATH.
Problem:
ruTorrent viser ikke torrentliste-delen av grensesnittet og jeg får feilmelding "Bad response from server: (500 [error,getplugins]) Internal Server Error" i loggvinduet.
Løsning:
Mest sannsynlig mangler du mod_scgi i Apacheconfigen. Sjekk at modulen er installert, aktivert og at SCGIMount er satt opp. Hvis ikke, installer, aktiver og sett opp som indikert i steg 2.