In this page I describe how to install a BitTorrent server on a router (Asus RT-AC56U)
- we use some Entware packages, so please
refer to this page on how to install Entware on a router.
We will use the "Transmission"
server (daemon), one of the most used BitTorrent server in Linux
environments. To install this server, we need to install several Entware's
packages (transmission-web, transmission-daemon-openssl, transmission-remote-openssl)
with the following instruction:
opkg install transmission-web transmission-daemon-openssl transmission-remote-openssl Installing transmission-web (2.93-4) to root... Downloading http://bin.entware.net/armv7sf-k2.6/transmission-web_2.93-4_armv7-2.6.ipk Installing transmission-daemon-openssl (2.93-4) to root... Downloading http://bin.entware.net/armv7sf-k2.6/transmission-daemon-openssl_2.93-4_armv7-2.6.ipk Installing libcurl (7.58.0-1) to root... Downloading http://bin.entware.net/armv7sf-k2.6/libcurl_7.58.0-1_armv7-2.6.ipk Installing libevent2 (2.0.22-1) to root... Downloading http://bin.entware.net/armv7sf-k2.6/libevent2_2.0.22-1_armv7-2.6.ipk Installing libminiupnpc (2.0.20170509-1) to root... Downloading http://bin.entware.net/armv7sf-k2.6/libminiupnpc_2.0.20170509-1_armv7-2.6.ipk Installing transmission-remote-openssl (2.93-4) to root... Downloading http://bin.entware.net/armv7sf-k2.6/transmission-remote-openssl_2.93-4_armv7-2.6.ipk Configuring libcurl. Configuring libevent2. Configuring libminiupnpc. Configuring transmission-remote-openssl. Configuring transmission-daemon-openssl. Configuring transmission-web.
Package "transmission-web" contains the web interface resources for Transmission, the package "transmission-daemon-openssl" contains the daemon itself, while the package "transmission-remote-openssl" is the CLI (Command Line Interface) remote interface for Transmission. We give a look at the package "transmission-daemon-openssl", it contains the following files:
opkg files transmission-daemon-openssl | sort /opt/bin/transmission-daemon /opt/etc/init.d/S88transmission /opt/etc/sysctl.d/20-transmission.conf /opt/etc/transmission/settings.json
File "/opt/bin/transmission-daemon" is the daemon itself, file "/opt/etc/init.d/S88transmission"
contains the script to start and stop the Transmission daemon, file "/opt/etc/sysctl.d/20-transmission.conf"
is reserved for Transmission, while the file "/opt/etc/transmission/settings.json"
contains the Transmission's configuration file.
We need to setup the Transmission's configuration file (see next section on this
page), then we can start the Transmission's daemon using the script file with
parameter "start", this is a list of parameters we can pass to the
Transmission's script:
/opt/etc/init.d/S88transmission start Starting transmission-daemon... done. /opt/etc/init.d/S88transmission check Checking transmission-daemon... alive. /opt/etc/init.d/S88transmission stop Checking transmission-daemon... alive. Shutting down transmission-daemon... done. /opt/etc/init.d/S88transmission check Checking transmission-daemon... dead.
The parameter "start" is used to run the daemon, parameter "check" is used to
check if daemon is running or not, while parameter "stop" is used to stop the
daemon.
After starting the Transmission daemon, you can access to the web user
interface. For further details, please read the section at the end of this page.
Note : due to the fact that Transmission daemon needs a large amount of system
memory, I suggest to enable a swap file on router, as described in web page "How to enable a swap file on a router".
In this section, we briefly explain the file "/opt/etc/transmission/settings.json"
containing the Transmission's configuration file. This file contains all the
settings used by the Transmission daemon, so it is important to understand how
to change it before using the Transmission daemon. Please take note that this
configuration file cannot be changed when Transmission daemon is running, so
Transmission daemon must be stopped before changing this configuration file.
Firstly I provide you with a sample default content of the configuration file:
{ "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, "blocklist-url": "http://list.iblocklist.com/?list=bt_level1", "cache-size-mb": 2, "dht-enabled": true, "download-dir": "/opt/downloads/torrent", "download-queue-enabled": true, "download-queue-size": 5, "encryption": 0, "idle-seeding-limit": 30, "idle-seeding-limit-enabled": false, "incomplete-dir": "/opt/downloads/torrent/incomplete", "incomplete-dir-enabled": false, "lpd-enabled": true, "message-level": 1, "peer-congestion-algorithm": "", "peer-id-ttl-hours": 6, "peer-limit-global": 40, "peer-limit-per-torrent": 8, "peer-port": 51413, "peer-port-random-high": 65535, "peer-port-random-low": 49152, "peer-port-random-on-start": false, "peer-socket-tos": "lowcost", "pex-enabled": true, "port-forwarding-enabled": false, "preallocation": 1, "prefetch-enabled": false, "queue-stalled-enabled": true, "queue-stalled-minutes": 30, "ratio-limit": 2, "ratio-limit-enabled": false, "rename-partial-files": true, "rpc-authentication-required": false, "rpc-bind-address": "0.0.0.0", "rpc-enabled": true, "rpc-host-whitelist": "", "rpc-host-whitelist-enabled": true, "rpc-password": "{b0b6e62c1e81950c884b369a771d4977ceb191c5dEkYqx3E", "rpc-port": 9091, "rpc-url": "/transmission/", "rpc-username": "root", "rpc-whitelist": "127.0.0.1", "rpc-whitelist-enabled": false, "scrape-paused-torrents-enabled": true, "script-torrent-added-enabled": false, "script-torrent-added-filename": "", "script-torrent-done-enabled": false, "script-torrent-done-filename": "", "seed-queue-enabled": false, "seed-queue-size": 10, "speed-limit-down": 100, "speed-limit-down-enabled": false, "speed-limit-up": 100, "speed-limit-up-enabled": false, "start-added-torrents": true, "trash-original-torrent-files": true, "umask": 18, "upload-slots-per-torrent": 14, "utp-enabled": true, "watch-dir": "/opt/etc/transmission/watchdir", "watch-dir-enabled": true }
The following table briefly explains the value of each parameter inside configuration file - more details may be found at this web address :
String | Value type | Description |
---|---|---|
alt-speed-down | Number | Max global download speed (KBps) |
alt-speed-enabled | Boolean | True means use the alt speeds |
alt-speed-time-begin | Number | When to turn on alt speeds (units: minutes after midnight) |
alt-speed-time-day | Number | What day(s) to turn on alt speeds |
alt-speed-time-enabled | Boolean | True means the scheduled on/off times are used |
alt-speed-time-end | Number | When to turn off alt speeds (units: same) |
alt-speed-up | Number | Max global upload speed (KBps) |
bind-address-ipv4 | String | Where to listen for peer connections |
bind-address-ipv6 | String | Where to listen for peer connections |
blocklist-enabled | Boolean | True means enabled |
blocklist-url | String | Location of the blocklist to use for "blocklist-update" |
blocklist-size | Number | Number of rules in the blocklist |
cache-size-mb | Number | Maximum size of the disk cache (MB) |
dht-enabled | Boolean | True means allow DHT in public torrents |
download-dir | String | Default path to download torrents |
download-queue-enabled | Boolean | If true, limit how many torrents can be downloaded at once |
download-queue-size | Number | Max number of torrents to download at once (see download-queue-enabled) |
encryption | String | 0 = Prefer unencrypted connections, 1 = Prefer encrypted connections, 2 = Require encrypted connections |
idle-seeding-limit | Number | Torrents we're seeding will be stopped if they're idle for this long |
idle-seeding-limit-enabled | Boolean | True if the seeding inactivity limit is honored by default |
incomplete-dir | String | Path for incomplete torrents, when enabled |
incomplete-dir-enabled | Boolean | True means keep torrents in incomplete-dir until done |
lazy-bitfield-enabled | Boolean | May help get around some ISP filtering |
lpd-enabled | Boolean | True means allow Local Peer Discovery in public torrents |
message-level | Number | Set verbosity of transmission messages (0 = None, 1 = Error, 2 = Info, 3 = Debug) |
peer-congestion-algorithm | String | Normally is blank (use "lp" to use TCP-LP) |
peer-id-ttl-hours | Number | Recycle the peer id used for public torrents after N hours of use |
peer-limit-global | Number | Maximum global number of peers |
peer-limit-per-torrent | Number | Maximum global number of peers |
peer-port | Number | Peer port number |
peer-port-random-high | Number | Max peer port number |
peer-port-random-low | Number | Min peer port number |
peer-port-random-on-start | Boolean | True means pick a random peer port on launch |
peer-socket-tos | String | Set the Type-Of-Service (TOS) parameter for outgoing TCP packets. Possible values are "default", "lowcost", "throughput", "lowdelay" and "reliability". The value "lowcost" is recommended if you're using a smart router |
pex-enabled | Boolean | True means allow PEX (Peer exchange Peer Exchange) in public torrents |
port-forwarding-enabled | Boolean | If true, it enables UPnP or NAT-PMP |
preallocation | Number | 0 = Off, 1 = Fast, 2 = Full (slower but reduces disk fragmentation) - default is 1 |
prefetch-enabled | Boolean | When enabled, Transmission will hint to the OS which piece data it's about to read from disk in order to satisfy requests from peers |
queue-stalled-enabled | Boolean | Whether or not to consider idle torrents as stalled |
queue-stalled-minutes | Number | Torrents that are idle for N minuets aren't counted toward seed-queue-size or download-queue-size |
ratio-limit | Number | Torrent ratio limit |
ratio-limit-enabled | Boolean | True means set a ratio limit |
rename-partial-files | Boolean | True means append ".part" to incomplete files |
rpc-authentication-required | Boolean | If true, userid/password are required to access to web gui |
rpc-bind-address | String | Where to listen for RPC connections |
rpc-enabled | Boolean | If true, enables the web gui |
rpc-host-whitelist | String | Comma-delimited list of domain names. Wildcards allowed using '*'. Example: "*.foo.org,example.com" |
rpc-host-whitelist-enabled | Boolean | If true, enable option "rpc-host-whitelist" |
rpc-password | String | Password required to access to web gui (if "rpc-authentication-required" is true). Clear text will be automatically encrypted by the daemon |
rpc-port | Number | Port used to access to web gui |
rpc-url | String | Additional path of web gui address |
rpc-username | String | User name required to access to web gui (if "rpc-authentication-required" is true) |
rpc-whitelist | String | Comma-delimited list of IP addresses. Wildcards allowed using '*'. Example: "127.0.0.*,192.168.*.*" |
rpc-whitelist-enabled | Boolean | If true, it enables the "rpc-whitelist" option |
scrape-paused-torrents-enabled | Boolean | If true, it enables the scraping of paused torrents |
script-torrent-added-enabled | Boolean | If true, it runs a script at torrent adding |
script-torrent-added-filename | String | Filename of the script to run whenever a torrent is added |
script-torrent-done-enabled | Boolean | Whether or not to call the "done" script |
script-torrent-done-filename | String | Filename of the script to run whenever a torrent is done |
seed-queue-enabled | Boolean | If true, limit how many torrents can be uploaded at once |
seed-queue-size | Number | Max number of torrents to uploaded at once (see seed-queue-enabled) |
seedRatioLimit | Double | The default seed ratio for torrents to use |
seedRatioLimited | Boolean | True if seedRatioLimit is honored by default |
speed-limit-down | Number | Max global download speed (KBps) |
speed-limit-down-enabled | Boolean | True means enabled |
speed-limit-up | Number | Max global upload speed (KBps) |
speed-limit-up-enabled | Boolean | True means enabled |
start-added-torrents | Boolean | True means added torrents will be started right away |
trash-original-torrent-files | Boolean | True means the .torrent file of added torrents will be deleted |
umask | Number | Sets transmission's file mode creation mask (base 10). Users who want their saved torrents to be world-writable may want to set this value to 0 |
upload-slots-per-torrent | Number | Max upload slots per torrent |
utp-enabled | Boolean | True means allow UTP |
watch-dir | String | Watch directory |
watch-dir-enabled | Boolean | If true, watches a directory for torrent files (.torrent files) and add them to transmission |
Transmission daemon can be accessed via the integrated Web
User Interface. The web address is "http://[router address]:[rpc port]", where [router address] is the web address of the
router, while [rpc port] is the port specified in configuration file under
parameter "rpc-port".
Web Interface may also change some Transmission's settings in real-time without
stopping and restarting the Transmission daemon - take note that only few
settings may be changed, other settings must be changed via configuration file.
Transmission daemon can be accessed also via a command line
utility called "transmission-remote" included in one of the package used to
install Transmission. I kindly discourage to use this command line, there are so
many programs compatible with Transmission for all available platforms, suitable to access Transmission
remotely and that use a user-friendly graphical interface to do this job. These
programs also allow to change some Transmission's settings in real-time without
stopping and then restarting the Transmission's daemon. Take note of the "rpc
address" and "rpc port" included in Transmission's settings, as all these
programs require these two values to remotely connect to Transmission daemon.
Anyway I provide the output of command line utility "transmission-remote" to
have an overview of its parameters and options:
transmission-remote --help transmission-remote 2.93 (3c5870d4f5) A fast and easy BitTorrent client https://transmissionbt.com/ Usage: transmission-remote [host] [options] transmission-remote [port] [options] transmission-remote [host:port] [options] transmission-remote [http(s?)://host:port/transmission/] [options] See the man page for detailed explanations and many examples. Options: -h --help Display this help page and exit -a --add Add torrent files by filename or URL -as --alt-speed Use the alternate Limits -AS --no-alt-speed Don't use the alternate Limits -asd --alt-speed-downlimit <speed> max alternate download speed (in kB/s) -asu --alt-speed-uplimit <speed> max alternate upload speed (in kB/s) -asc --alt-speed-scheduler Use the scheduled on/off times -ASC --no-alt-speed-scheduler Don't use the scheduled on/off times --alt-speed-time-begin <time> Time to start using the alt speed limits (in hhmm) --alt-speed-time-end <time> Time to stop using the alt speed limits (in hhmm) --alt-speed-days <days> Numbers for any/all days of the week - eg. "1-7" --blocklist-update Blocklist update -c --incomplete-dir <dir> Where to store new torrents until they're complete -C --no-incomplete-dir Don't store incomplete torrents in a different location -b --debug Print debugging information -d --downlimit <speed> Set the max download speed in kB/s for the current torrent(s) or globally -D --no-downlimit Disable max download speed for the current torrent(s) or globally -e --cache <size> Set the maximum size of the session's memory cache (in MiB) -er --encryption-required Encrypt all peer connections -ep --encryption-preferred Prefer encrypted peer connections -et --encryption-tolerated Prefer unencrypted peer connections --exit Tell the transmission session to shut down -f --files List the current torrent(s)' files -g --get <files> Mark files for download -G --no-get <files> Mark files for not downloading -i --info Show the current torrent(s)' details -if --info-files List the current torrent(s)' files -ip --info-peers List the current torrent(s)' peers -ic --info-pieces List the current torrent(s)' pieces -it --info-trackers List the current torrent(s)'trackers -si --session-info Show the session's details -st --session-stats Show the session's statistics -l --list List all torrents --move <path> Move current torrent's data to a new folder --find <path> Tell Transmission where to find a torrent's data -m --portmap Enable portmapping via NAT-PMP or UPnP -M --no-portmap Disable portmapping -n --auth <user:pw> Set username and password -ne --authenv Set authentication info from the TR_AUTH environment variable (user:pw) -N --netrc <file> Set authentication info from a .netrc file --ssl Use SSL when talking to daemon -o --dht Enable distributed hash tables (DHT) -O --no-dht Disable distributed hash tables (DHT) -p --port <port> Port for incoming peers (Default: 51413) -pt --port-test Port testing -P --random-port Random port for incoming peers -ph --priority-high <files> Try to download these file(s) first -pn --priority-normal <files> Try to download these file(s) normally -pl --priority-low <files> Try to download these file(s) last -Bh --bandwidth-high Give this torrent first chance at available bandwidth -Bn --bandwidth-normal Give this torrent bandwidth left over by high priority torrents -Bl --bandwidth-low Give this torrent bandwidth left over by high and normal priority torrents --reannounce Reannounce the current torrent(s) -r --remove Remove the current torrent(s) -pr --peers <max> Set the maximum number of peers for the current torrent(s) or globally -rad --remove-and-delete Remove the current torrent(s) and delete local data --torrent-done-script <file> Specify a script to run when a torrent finishes --no-torrent-done-script Don't run a script when torrents finish -sr --seedratio ratio Let the current torrent(s) seed until a specific ratio -srd --seedratio-default Let the current torrent(s) use the global seedratio settings -SR --no-seedratio Let the current torrent(s) seed regardless of ratio -gsr --global-seedratio ratio All torrents, unless overridden by a per-torrent setting, should seed until a specific ratio -GSR --no-global-seedratio All torrents, unless overridden by a per-torrent setting, should seed regardless of ratio -td --tracker-add <tracker> Add a tracker to a torrent -tr --tracker-remove <trackerId> Remove a tracker from a torrent -s --start Start the current torrent(s) -S --stop Stop the current torrent(s) -t --torrent <torrent> Set the current torrent(s) --start-paused Start added torrents paused --no-start-paused Start added torrents unpaused --trash-torrent Delete torrents after adding --no-trash-torrent Do not delete torrents after adding -hl --honor-session Make the current torrent(s) honor the session limits -HL --no-honor-session Make the current torrent(s) not honor the session limits -u --uplimit <speed> Set the max upload speed in kB/s for the current torrent(s) or globally -U --no-uplimit Disable max upload speed for the current torrent(s) or globally --utp Enable uTP for peer connections --no-utp Disable uTP for peer connections -v --verify Verify the current torrent(s) -V --version Show version number and exit -w --download-dir <path> When used in conjunction with --add, set the new torrent's download folder. Otherwise, set the default download folder -x --pex Enable peer exchange (PEX) -X --no-pex Disable peer exchange (PEX) -y --lpd Enable local peer discovery (LPD) -Y --no-lpd Disable local peer discovery (LPD) -pi --peer-info List the current torrent(s)' peers
Transmission may send an email through a script whenever a
Torrent file is added or completed using the parameters of the configuration
file whose names start with "script-torrent" - remember to change the
Transmission's settings in order to send an email using a script whenever a
Torrent file is added and/or completed.
To send an email, we use the "msmtp" Entware's package, please refer to page "How
to send an email via router" for more details about this package - we
will use the same SMTP server settings to send an email with Transmission.
Inside the body of the email message, we can use the Transmission's internal
variables.
You can find more details about Transmission scripts
on this
webpage.
This is a simple script that sends an email whenever Transmission finished to
download a Torrent file:
#!/bin/sh msmtp -v -t << EOF From: [myemail]@hotmail.com Subject: Router - torrent completed To: to_address@domain.xxx Transmission finished downloading : Torrent Name : "$TR_TORRENT_NAME" . Local Time : "$TR_TIME_LOCALTIME" . Torrent Dir : "$TR_TORRENT_DIR" . Torrent Hash : "$TR_TORRENT_HASH" . Torrent ID : "$TR_TORRENT_ID" . App Version : "$TR_APP_VERSION" . EOF exit 0