Automatically Start rTorrent on System Boot
It's inconvenient to have to start rTorrent manually every time the server restarts. We can make it start automatically upon reboot by using a bash script.
Code:
sudo nano /etc/init.d/rtorrent
Paste the contents of this file into the terminal.
Code:
#!/bin/bash
### BEGIN INIT INFO
# Provides: rtorrent
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop rtorrent daemon
### END INIT INFO
# ------------------------------------------------------------------------------
# /etc/init.d/rtorrent
#
# This script is an init script to run rtorrent in the background, using a
# screen. The script was designed and tested for Debian systems, but may work on
# other systems. On Debian, enable it by moving the script to
# "/etc/init.d/rtorrent" and issuing the command
# "update-rc.d rtorrent defaults 99"
# ____ _ _
# / ___| ___ ___ __| | |__ _____ __
# \___ \ / _ \/ _ \/ _` | '_ \ / _ \ \/ /
# ___) | __/ __/ (_| | |_) | (_) > <
# |____/ \___|\___|\__,_|_.__/ \___/_/\_\
#
# @see http://methvin.net/scripts/rtorrent
# @see http://tldp.org/LDP/abs/html/
# ------------------------------------------------------------------------------
## Username to run rtorrent under, make sure you have a .rtorrent.rc in the
## home directory of this user!
USER="<username>"
## Absolute path to the rtorrent binary.
## run "which rtorrent"
RTORRENT="/usr/local/bin/rtorrent"
## Absolute path to the screen binary.
SCREEN="/usr/bin/screen"
## Name of the screen session, you can then "screen -r rtorrent" to get it back
## to the foreground and work with it on your shell.
SCREEN_NAME="rtorrent"
## Absolute path to rtorrent's PID file.
PIDFILE="/var/run/rtorrent.pid"
## Absolute path to rtorrent's XMLRPC socket.
SOCKET="/var/run/rtorrent/rpc.socket"
## Check if the socket exists and if it exists delete it.
delete_socket() {
if [[ -e $SOCKET ]]; then
rm -f $SOCKET
fi
}
case "$1" in
## Start rtorrent in the background.
start)
echo "Starting rtorrent."
delete_socket
start-stop-daemon --start --background --oknodo \
--pidfile "$PIDFILE" --make-pidfile \
--chuid $USER \
--exec $SCREEN -- -DmUS $SCREEN_NAME $RTORRENT
if [[ $? -ne 0 ]]; then
echo "Error: rtorrent failed to start."
exit 1
fi
echo "rtorrent started successfully."
;;
## Stop rtorrent.
stop)
echo "Stopping rtorrent."
start-stop-daemon --stop --oknodo --pidfile "$PIDFILE"
if [[ $? -ne 0 ]]; then
echo "Error: failed to stop rtorrent process."
exit 1
fi
delete_socket
echo "rtorrent stopped successfully."
;;
## Restart rtorrent.
restart)
"$0" stop
sleep 1
"$0" start || exit 1
;;
## Print usage information if the user gives an invalid option.
*)
echo "Usage: $0 [start|stop|restart]"
exit 1
;;
esac
Set permissions and install the init script.
Code:
sudo chmod +x /etc/init.d/rtorrent
sudo update-rc.d rtorrent defaults 99
Apache + PHP + SSL
Install Web Server Dependencies
For Ubuntu 16.4 LTS:
Code:
sudo apt-get install apache2 apache2-utils libapache2-mod-php
For Debian 8:
Code:
sudo apt-get install apache2 apache2-utils libapache2-mod-php5
Configure Apache
Enable auth_digest module for ruTorrent authentication, SSL, and reqtimeout.
Code:
sudo a2enmod auth_digest ssl reqtimeout
Open apache2.conf
Code:
sudo nano /etc/apache2/apache2.conf
Edit or add the following lines:
Code:
Timeout 30
ServerSignature Off
ServerTokens Prod
ServerTokens Prod will prevent Apache from reporting its version number, and ServerSignature Off will disable the server signature displayed in Apache error messages. Small steps to harden your system.
Restart Apache
Code:
sudo service apache2 restart
Now, let's confirm that Apache and PHP are working.
Code:
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php
The previous command created a file called info.php in the web root containing the function phpinfo(), which, if everything is functioning properly, should print a large table of information detailing your server's PHP settings.
Open your browser and navigate to <server.address>/info.php
After confirming that PHP and Apache are working, remove info.php to avoid unnecessarily exposing information about your system.
Code:
sudo rm /var/www/html/info.php
Create an SSL Certificate
We'll create a self-signed SSL certificate that will allow you to access ruTorrent via the https:// protocol and will expire in 10 years.
Code:
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.pem -out /etc/apache2/ssl/apache.pem
Fill in the fields as prompted, or leave them blank (excepting the CN field). Be sure to input something for the CN (Common Name) field. Typically this is your server's hostname, but if you have a domain pointed to your server, you may use that instead.
Now, change the permissions for the newly created certificate, as some programs will refuse to load these certificates if permissions are set wrong.
Code:
sudo chmod 600 /etc/apache2/ssl/apache.pem
Configure Apache Access
Open Apache's default configuration:
Code:
sudo nano etc/apache2/sites-available/000-default.conf
Modify as follows, or replace the whole document, to enable SSL on port 443 and to setup Auth Digest for the rutorrent directory:
Code:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /rutorrent>
AuthType Digest
AuthName "rutorrent"
AuthDigestDomain /var/www/html/rutorrent/ http://<server.address>/rutorrent
AuthDigestProvider file
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
SetEnv R_ENV "/var/www/html/rutorrent"
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName <server.address>:443
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
DocumentRoot /var/www/html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /rutorrent>
AuthType Digest
AuthName "rutorrent"
AuthDigestDomain /var/www/html/rutorrent/ http://<server.address>/rutorrent
AuthDigestProvider file
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
SetEnv R_ENV "/var/www/html/rutorrent"
</Location>
</VirtualHost>
Enable SSL for your site:
Code:
sudo a2ensite default-ssl
Modify Apache ports configuration:
Code:
sudo nano /etc/apache2/ports.conf
Modify ports.conf to include the line Listen 443, or just replace the whole file with this:
Code:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Restart Apache
Code:
sudo service apache2 restart
Confirm that Apache and SSL are working by navigating to your server in a browser with the https:// prefix: https://<server.address>
You will likely receive a warning from your browser suggesting that the site is insecure. This is because of our self-signed certificate; ignore it and proceed. You should see a page containing the text, "It works!" Or with new versions of Ubuntu, you'll see the "Apache2 Ubuntu Default Page."
Optional: Modify PHP Settings
If you ever find yourself uploading one or two dozen torrents at a time, you may want to adjust the PHP settings to allow for larger file uploads. First, create a new phpinfo() file. There are other, quicker ways to find the active php.ini file, but this is a surefire method that won't leave you editing one of the inactive files.
Code:
echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php
Go to <server.address>/info.php in your browser.
Find the line that says Loaded Configuration file and then copy and paste its location in the following command, replacing the underlined string:
Code:
sudo nano /etc/php5/apache2/php.ini
Use Ctrl+W in Nano to find and modify the following lines:
Code:
upload_max_filesize = 64M
max_file_uploads = 200
post_max_size = 128M
You may set these values to whatever you like. Remove the file info.php to reduce security risks.
Code:
sudo rm /var/www/html/info.php
Restart Apache
Code:
sudo service apache2 restart
RuTorrent
Install ruTorrent Dependencies
Ubuntu 16.4 LTS:
Code:
sudo apt-get install zip unzip zlib1g-dev ffmpeg mediainfo
sudo apt-get install unrar rar
For Debian 8, you must add an additional repository:
Code:
sudo nano /etc/apt/sources.list
Add the following line:
Code:
deb http://ftp.us.debian.org/debian jessie-backports main contrib non-free
Run the following command to install FFMPEG.
Code:
sudo apt update && sudo apt install -t jessie-backports ffmpeg
If installation of rar and unrar packages fails, you'll need to add the non-free repositories to your operating system.
Add Non-free Repositories
Code:
sudo nano /etc/apt/sources.list
Add the following lines to the bottom:
Code:
deb ftp://ftp.us.debian.org/debian/ wheezy non-free
deb http://security.debian.org/ wheezy/updates non-free
Update your server with the new repositories:
Code:
sudo apt-get update
Try again to install unrar and rar:
Code:
sudo apt-get install unrar rar
Download ruTorrent
Download ruTorrent from the project's Github repository, remove the packaged plugins directory, then replace it with the plugins from the repository. The following commands will download the latest versions of ruTorrent and plugins. No need to find the latest versions like in previous steps.
Code:
cd /var/www/html
sudo git clone https://github.com/Novik/ruTorrent.git rutorrent
sudo rm -r rutorrent/plugins
sudo svn checkout https://github.com/Novik/ruTorrent/trunk/plugins rutorrent/plugins
Configure ruTorrent
Transfer ownership of rutorrent files to webserver so that they are accessible:
Code:
sudo chown -R www-data:www-data rutorrent
sudo chmod -R 755 rutorrent
Edit the ruTorrent configuration file:
Code:
sudo nano rutorrent/conf/config.php
Code:
$log_file = '/tmp/rutorrent_errors.log';
$topDirectory = '/home/downloads/';
$pathToExternals = array(
"php" => '/usr/bin/php',
"curl" => '/usr/bin/curl',
"gzip" => '/bin/gzip',
"id" => '/usr/bin/id',
"stat" => '/usr/bin/stat',
);
Those modifications...
- Changed the error log filename to differentiate it from other error logs.
- Restricted the ruTorrent interface to /home/downloads.
- Defined the paths to ruTorrent dependencies.
Configure ruTorrent Plugins
ruTorrent has extended functionality beyond basic interface with rTorrent via a robust set of plugins. The plugins.ini file allows you to either hardcode an on/off state for individual plugins, or set them as user-defined, which allows you to determine their state within the ruTorrent web GUI.
This alphabetized version of plugins.ini enables all of the (subjectively) most useful plugins, and the additional optional plugins you can choose to install later in this guide. Enable/disable plugins as you see fit (the more plugins enabled, the longer ruTorrent will take to load), and if you don't know what something does, leave it set as user-defined, and explore the features in the web GUI.
Code:
sudo rm -f /var/www/html/rutorrent/conf/plugins.ini
sudo nano /var/www/html/rutorrent/conf/plugins.ini
Code:
;; Plugins permissions.
;; If flag is not found in plugin section, corresponding flag from "default" section is used.
;; If flag is not found in "default" section, it is assumed to be "yes".
;;
;; For setting individual plugin permissions you must write something like that:
;;
;; [ratio]
;; enabled = yes ;; also may be "user-defined", in this case user can control plugins state from UI
;; canChangeToolbar = yes
;; canChangeMenu = yes
;; canChangeOptions = no
;; canChangeTabs = yes
;; canChangeColumns = yes
;; canChangeStatusBar = yes
;; canChangeCategory = yes
;; canBeShutdowned = yes
[default]
enabled = user-defined
canChangeToolbar = yes
canChangeMenu = yes
canChangeOptions = yes
canChangeTabs = yes
canChangeColumns = yes
canChangeStatusBar = yes
canChangeCategory = yes
canBeShutdowned = yes
[_getdir]
enabled = yes
[_task]
enabled = yes
[autotools]
enabled = user-defined
[chat]
enabled = no
[check_port]
enabled = no
[chunks]
enabled = user-defined
[cookies]
enabled = user-defined
[cpuload]
enabled = user-defined
[create]
enabled = user-defined
[data]
enabled = user-defined
[datadir]
enabled = yes
[diskspace]
enabled = user-defined
[edit]
enabled = user-defined
[erasedata]
enabled = user-defined
[extratio]
enabled = user-defined
[extsearch]
enabled = user-defined
[feeds]
enabled = no
[filedrop]
enabled = user-defined
[filemanager]
enabled = yes
[fileshare]
enabled = yes
[geoip]
enabled = user-defined
[history]
enabled = no
[httprpc]
canBeShutdowned = no
[instantsearch]
enabled = no
[ipad]
enabled = user-defined
[logoff]
enabled = yes
[loginmgr]
enabled = no
[mediainfo]
enabled = yes
[mediastream]
enabled = yes
[pausewebui]
enabled = yes
[ratio]
enabled = user-defined
[ratiocolor]
enabled = user-defined
[retrackers]
enabled = no
[rpc]
enabled = no
[rss]
enabled = user-defined
[rssurlrewrite]
enabled = no
[rutracker_check]
enabled = no
[scheduler]
enabled = user-defined
[screenshots]
enabled = yes
[seedingtime]
enabled = yes
[show_peers_like_wtorrent]
enabled = user-defined
[source]
enabled = yes
[theme]
enabled = yes
[throttle]
enabled = user-defined
[titlebar]
enabled = user-defined
[tracklabels]
enabled = user-defined
[trafic]
enabled = user-defined
[unpack]
enabled = user-defined
Create ruTorrent Credentials
Now let's create a username/password for ruTorrent. This is a different set of credentials than the SSH user account we created at the beginning of this process. It's more secure to pick different credentials than those you chose previously, but less convenient. It's your choice.
Code:
sudo htdigest -c /etc/apache2/.htpasswd rutorrent <username>
Status Report
You've now completed all the steps to run rTorrent and ruTorrent on your server. You can stop here, or add additional functionality to ruTorrent or to your server, like the ability to stream media to your local devices, and automatically download torrents that match custom filter rules.
Before we go any further, verify that everything is working as expected. It's easier to fix problems now with fewer components to troubleshoot.
Navigate to https://<server.address>/rutorrent
Make sure the GUI loads, and then try adding a torrent.
Troubleshooting
Apache Error Logs
Debian/Ubuntu: /var/log/apache2/error.log
CentOS: /var/log/httpd/error_log
rTorrent won't start after reboot
If you find that rtorrent will not start on reboot, try to start rtorrent manually:
You'll likely get the following error:
Code:
rtorrent: Could not lock session directory: "/home/downloads/.session/", held by ":+XXXX".
This can happen if your system crashes, or if you run out of disk space. To resolve the issue, delete rtorrent.lock from the session directory.
Code:
sudo rm -f /home/downloads/.session/rtorrent.lock
Now rtorrent should start, and you can reboot or start a new screen session for rtorrent:
Code:
screen -S rtorrent -fa -d -m rtorrent
Bookmarks