Next: Monitoring Services, Previous: Telephony Services, Up: Services [Contents][Index]
The (gnu services file-sharing)
module provides services that
assist with transferring files over peer-to-peer file-sharing networks.
Transmission is a flexible
BitTorrent client that offers a variety of graphical and command-line
interfaces. A transmission-daemon-service-type
service provides
Transmission’s headless variant, transmission-daemon
, as a
system service, allowing users to share files via BitTorrent even when
they are not logged in.
The service type for the Transmission Daemon BitTorrent client. Its
value must be a transmission-daemon-configuration
object as in
this example:
(service transmission-daemon-service-type (transmission-daemon-configuration ;; Restrict access to the RPC ("control") interface (rpc-authentication-required? #t) (rpc-username "transmission") (rpc-password (transmission-password-hash "transmission" ; desired password "uKd1uMs9")) ; arbitrary salt value ;; Accept requests from this and other hosts on the ;; local network (rpc-whitelist-enabled? #t) (rpc-whitelist '("::1" "127.0.0.1" "192.168.0.*")) ;; Limit bandwidth use during work hours (alt-speed-down (* 1024 2)) ; 2 MB/s (alt-speed-up 512) ; 512 kB/s (alt-speed-time-enabled? #t) (alt-speed-time-day 'weekdays) (alt-speed-time-begin (+ (* 60 8) 30)) ; 8:30 am (alt-speed-time-end (+ (* 60 (+ 12 5)) 30)))) ; 5:30 pm
Once the service is started, users can interact with the daemon through
its Web interface (at http://localhost:9091/
) or by using the
transmission-remote
command-line tool, available in the
transmission
package. (Emacs users may want to also consider the
emacs-transmission
package.) Both communicate with the daemon
through its remote procedure call (RPC) interface, which by default is
available to all users on the system; you may wish to change this by
assigning values to the rpc-authentication-required?
,
rpc-username
and rpc-password
settings, as shown in the
example above and documented further below.
The value for rpc-password
must be a password hash of the type
generated and used by Transmission clients. This can be copied verbatim
from an existing settings.json file, if another Transmission
client is already being used. Otherwise, the
transmission-password-hash
and transmission-random-salt
procedures provided by this module can be used to obtain a suitable hash
value.
Returns a string containing the result of hashing password
together with salt, in the format recognized by Transmission
clients for their rpc-password
configuration setting.
salt must be an eight-character string. The
transmission-random-salt
procedure can be used to generate a
suitable salt value at random.
Returns a string containing a random, eight-character salt value of the
type generated and used by Transmission clients, suitable for passing to
the transmission-password-hash
procedure.
These procedures are accessible from within a Guile REPL started with
the guix repl
command (see Invoking guix repl). This is
useful for obtaining a random salt value to provide as the second
parameter to ‘transmission-password-hash‘, as in this example session:
$ guix repl scheme@(guix-user)> ,use (gnu services file-sharing) scheme@(guix-user)> (transmission-random-salt) $1 = "uKd1uMs9"
Alternatively, a complete password hash can generated in a single step:
scheme@(guix-user)> (transmission-password-hash "transmission" (transmission-random-salt)) $2 = "{c8bbc6d1740cd8dc819a6e25563b67812c1c19c9VtFPfdsX"
The resulting string can be used as-is for the value of
rpc-password
, allowing the password to be kept hidden even in the
operating-system configuration.
Torrent files downloaded by the daemon are directly accessible only to
users in the “transmission” user group, who receive read-only access
to the directory specified by the download-dir
configuration
setting (and also the directory specified by incomplete-dir
, if
incomplete-dir-enabled?
is #t
). Downloaded files can be
moved to another directory or deleted altogether using
transmission-remote
with its --move
and
--remove-and-delete
options.
If the watch-dir-enabled?
setting is set to #t
, users in
the “transmission” group are able also to place .torrent files
in the directory specified by watch-dir
to have the corresponding
torrents added by the daemon. (The trash-original-torrent-files?
setting controls whether the daemon deletes these files after processing
them.)
Some of the daemon’s configuration settings can be changed temporarily
by transmission-remote
and similar tools. To undo these
changes, use the service’s reload
action to have the daemon
reload its settings from disk:
# herd reload transmission-daemon
The full set of available configuration settings is defined by the
transmission-daemon-configuration
data type.
The data type representing configuration settings for Transmission Daemon. These correspond directly to the settings recognized by Transmission clients in their settings.json file.
Available transmission-daemon-configuration
fields are:
transmission-daemon-configuration
parameter: package transmissionThe Transmission package to use.
transmission-daemon-configuration
parameter: non-negative-integer stop-wait-periodThe period, in seconds, to wait when stopping the service for
transmission-daemon
to exit before killing its process. This
allows the daemon time to complete its housekeeping and send a final
update to trackers as it shuts down. On slow hosts, or hosts with a
slow network connection, this value may need to be increased.
Defaults to ‘10’.
transmission-daemon-configuration
parameter: string download-dirThe directory to which torrent files are downloaded.
Defaults to ‘"/var/lib/transmission-daemon/downloads"’.
transmission-daemon-configuration
parameter: boolean incomplete-dir-enabled?If #t
, files will be held in incomplete-dir
while their
torrent is being downloaded, then moved to download-dir
once the
torrent is complete. Otherwise, files for all torrents (including those
still being downloaded) will be placed in download-dir
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: maybe-string incomplete-dirThe directory in which files from incompletely downloaded torrents will
be held when incomplete-dir-enabled?
is #t
.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: umask umaskThe file mode creation mask used for downloaded files. (See the
umask
man page for more information.)
Defaults to ‘18’.
transmission-daemon-configuration
parameter: boolean rename-partial-files?When #t
, “.part” is appended to the name of partially
downloaded files.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: preallocation-mode preallocationThe mode by which space should be preallocated for downloaded files, one
of none
, fast
(or sparse
) and full
.
Specifying full
will minimize disk fragmentation at a cost to
file-creation speed.
Defaults to ‘fast’.
transmission-daemon-configuration
parameter: boolean watch-dir-enabled?If #t
, the directory specified by watch-dir
will be
watched for new .torrent files and the torrents they describe
added automatically (and the original files removed, if
trash-original-torrent-files?
is #t
).
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: maybe-string watch-dirThe directory to be watched for .torrent files indicating new
torrents to be added, when watch-dir-enabled
is #t
.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: boolean trash-original-torrent-files?When #t
, .torrent files will be deleted from the watch
directory once their torrent has been added (see
watch-directory-enabled?
).
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: boolean speed-limit-down-enabled?When #t
, the daemon’s download speed will be limited to the rate
specified by speed-limit-down
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: non-negative-integer speed-limit-downThe default global-maximum download speed, in kilobytes per second.
Defaults to ‘100’.
transmission-daemon-configuration
parameter: boolean speed-limit-up-enabled?When #t
, the daemon’s upload speed will be limited to the rate
specified by speed-limit-up
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: non-negative-integer speed-limit-upThe default global-maximum upload speed, in kilobytes per second.
Defaults to ‘100’.
transmission-daemon-configuration
parameter: boolean alt-speed-enabled?When #t
, the alternate speed limits alt-speed-down
and
alt-speed-up
are used (in place of speed-limit-down
and
speed-limit-up
, if they are enabled) to constrain the daemon’s
bandwidth usage. This can be scheduled to occur automatically at
certain times during the week; see alt-speed-time-enabled?
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: non-negative-integer alt-speed-downThe alternate global-maximum download speed, in kilobytes per second.
Defaults to ‘50’.
transmission-daemon-configuration
parameter: non-negative-integer alt-speed-upThe alternate global-maximum upload speed, in kilobytes per second.
Defaults to ‘50’.
transmission-daemon-configuration
parameter: boolean alt-speed-time-enabled?When #t
, the alternate speed limits alt-speed-down
and
alt-speed-up
will be enabled automatically during the periods
specified by alt-speed-time-day
, alt-speed-time-begin
and
alt-time-speed-end
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: day-list alt-speed-time-dayThe days of the week on which the alternate-speed schedule should be
used, specified either as a list of days (sunday
, monday
,
and so on) or using one of the symbols weekdays
, weekends
or all
.
Defaults to ‘all’.
transmission-daemon-configuration
parameter: non-negative-integer alt-speed-time-beginThe time of day at which to enable the alternate speed limits, expressed as a number of minutes since midnight.
Defaults to ‘540’.
transmission-daemon-configuration
parameter: non-negative-integer alt-speed-time-endThe time of day at which to disable the alternate speed limits, expressed as a number of minutes since midnight.
Defaults to ‘1020’.
transmission-daemon-configuration
parameter: string bind-address-ipv4The IP address at which to listen for peer connections, or “0.0.0.0” to listen at all available IP addresses.
Defaults to ‘"0.0.0.0"’.
transmission-daemon-configuration
parameter: string bind-address-ipv6The IPv6 address at which to listen for peer connections, or “::” to listen at all available IPv6 addresses.
Defaults to ‘"::"’.
transmission-daemon-configuration
parameter: boolean peer-port-random-on-start?If #t
, when the daemon starts it will select a port at random on
which to listen for peer connections, from the range specified
(inclusively) by peer-port-random-low
and
peer-port-random-high
. Otherwise, it listens on the port
specified by peer-port
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: port-number peer-port-random-lowThe lowest selectable port number when peer-port-random-on-start?
is #t
.
Defaults to ‘49152’.
transmission-daemon-configuration
parameter: port-number peer-port-random-highThe highest selectable port number when peer-port-random-on-start
is #t
.
Defaults to ‘65535’.
transmission-daemon-configuration
parameter: port-number peer-portThe port on which to listen for peer connections when
peer-port-random-on-start?
is #f
.
Defaults to ‘51413’.
transmission-daemon-configuration
parameter: boolean port-forwarding-enabled?If #t
, the daemon will attempt to configure port-forwarding on an
upstream gateway automatically using UPnP and
NAT-PMP.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: encryption-mode encryptionThe encryption preference for peer connections, one of
prefer-unencrypted-connections
,
prefer-encrypted-connections
or
require-encrypted-connections
.
Defaults to ‘prefer-encrypted-connections’.
transmission-daemon-configuration
parameter: maybe-string peer-congestion-algorithmThe TCP congestion-control algorithm to use for peer connections,
specified using a string recognized by the operating system in calls to
setsockopt
(or set to disabled
, in which case the
operating-system default is used).
Note that on GNU/Linux systems, the kernel must be configured to allow processes to use a congestion-control algorithm not in the default set; otherwise, it will deny these requests with “Operation not permitted”. To see which algorithms are available on your system and which are currently permitted for use, look at the contents of the files tcp_available_congestion_control and tcp_allowed_congestion_control in the /proc/sys/net/ipv4 directory.
As an example, to have Transmission Daemon use
the TCP Low Priority
congestion-control algorithm, you’ll need to modify your kernel
configuration to build in support for the algorithm, then update your
operating-system configuration to allow its use by adding a
sysctl-service-type
service (or updating the existing one’s
configuration) with lines like the following:
(service sysctl-service-type (sysctl-configuration (settings ("net.ipv4.tcp_allowed_congestion_control" . "reno cubic lp"))))
The Transmission Daemon configuration can then be updated with
(peer-congestion-algorithm "lp")
and the system reconfigured to have the changes take effect.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: tcp-type-of-service peer-socket-tosThe type of service to request in outgoing TCP packets, one of
default
, low-cost
, throughput
, low-delay
and
reliability
.
Defaults to ‘default’.
transmission-daemon-configuration
parameter: non-negative-integer peer-limit-globalThe global limit on the number of connected peers.
Defaults to ‘200’.
transmission-daemon-configuration
parameter: non-negative-integer peer-limit-per-torrentThe per-torrent limit on the number of connected peers.
Defaults to ‘50’.
transmission-daemon-configuration
parameter: non-negative-integer upload-slots-per-torrentThe maximum number of peers to which the daemon will upload data simultaneously for each torrent.
Defaults to ‘14’.
transmission-daemon-configuration
parameter: non-negative-integer peer-id-ttl-hoursThe maximum lifespan, in hours, of the peer ID associated with each public torrent before it is regenerated.
Defaults to ‘6’.
transmission-daemon-configuration
parameter: boolean blocklist-enabled?When #t
, the daemon will ignore peers mentioned in the blocklist
it has most recently downloaded from blocklist-url
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: maybe-string blocklist-urlThe URL of a peer blocklist (in P2P-plaintext or eMule
.dat format) to be periodically downloaded and applied when
blocklist-enabled?
is #t
.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: boolean download-queue-enabled?If #t
, the daemon will be limited to downloading at most
download-queue-size
non-stalled torrents simultaneously.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: non-negative-integer download-queue-sizeThe size of the daemon’s download queue, which limits the number of
non-stalled torrents it will download at any one time when
download-queue-enabled?
is #t
.
Defaults to ‘5’.
transmission-daemon-configuration
parameter: boolean seed-queue-enabled?If #t
, the daemon will be limited to seeding at most
seed-queue-size
non-stalled torrents simultaneously.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: non-negative-integer seed-queue-sizeThe size of the daemon’s seed queue, which limits the number of
non-stalled torrents it will seed at any one time when
seed-queue-enabled?
is #t
.
Defaults to ‘10’.
transmission-daemon-configuration
parameter: boolean queue-stalled-enabled?When #t
, the daemon will consider torrents for which it has not
shared data in the past queue-stalled-minutes
minutes to be
stalled and not count them against its download-queue-size
and
seed-queue-size
limits.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: non-negative-integer queue-stalled-minutesThe maximum period, in minutes, a torrent may be idle before it is
considered to be stalled, when queue-stalled-enabled?
is
#t
.
Defaults to ‘30’.
transmission-daemon-configuration
parameter: boolean ratio-limit-enabled?When #t
, a torrent being seeded will automatically be paused once
it reaches the ratio specified by ratio-limit
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: non-negative-rational ratio-limitThe ratio at which a torrent being seeded will be paused, when
ratio-limit-enabled?
is #t
.
Defaults to ‘2.0’.
transmission-daemon-configuration
parameter: boolean idle-seeding-limit-enabled?When #t
, a torrent being seeded will automatically be paused once
it has been idle for idle-seeding-limit
minutes.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: non-negative-integer idle-seeding-limitThe maximum period, in minutes, a torrent being seeded may be idle
before it is paused, when idle-seeding-limit-enabled?
is
#t
.
Defaults to ‘30’.
transmission-daemon-configuration
parameter: boolean dht-enabled?Enable the distributed hash table (DHT) protocol, which supports the use of trackerless torrents.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: boolean lpd-enabled?Enable local peer discovery (LPD), which allows the discovery of peers on the local network and may reduce the amount of data sent over the public Internet.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: boolean pex-enabled?Enable peer exchange (PEX), which reduces the daemon’s reliance on external trackers and may improve its performance.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: boolean utp-enabled?Enable the micro transport protocol (uTP), which aims to reduce the impact of BitTorrent traffic on other users of the local network while maintaining full utilization of the available bandwidth.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: boolean rpc-enabled?If #t
, enable the remote procedure call (RPC)
interface, which allows remote control of the daemon via its Web
interface, the transmission-remote
command-line client, and
similar tools.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: string rpc-bind-addressThe IP address at which to listen for RPC connections, or “0.0.0.0” to listen at all available IP addresses.
Defaults to ‘"0.0.0.0"’.
transmission-daemon-configuration
parameter: port-number rpc-portThe port on which to listen for RPC connections.
Defaults to ‘9091’.
transmission-daemon-configuration
parameter: string rpc-urlThe path prefix to use in the RPC-endpoint URL.
Defaults to ‘"/transmission/"’.
transmission-daemon-configuration
parameter: boolean rpc-authentication-required?When #t
, clients must authenticate (see rpc-username
and
rpc-password
) when using the RPC interface. Note this
has the side effect of disabling host-name whitelisting (see
rpc-host-whitelist-enabled?
.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: maybe-string rpc-usernameThe username required by clients to access the RPC interface
when rpc-authentication-required?
is #t
.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: maybe-transmission-password-hash rpc-passwordThe password required by clients to access the RPC interface
when rpc-authentication-required?
is #t
. This must be
specified using a password hash in the format recognized by Transmission
clients, either copied from an existing settings.json file or
generated using the transmission-password-hash
procedure.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: boolean rpc-whitelist-enabled?When #t
, RPC requests will be accepted only when they
originate from an address specified in rpc-whitelist
.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: string-list rpc-whitelistThe list of IP and IPv6 addresses from which RPC requests will
be accepted when rpc-whitelist-enabled?
is #t
. Wildcards
may be specified using ‘*’.
Defaults to ‘("127.0.0.1" "::1")’.
transmission-daemon-configuration
parameter: boolean rpc-host-whitelist-enabled?When #t
, RPC requests will be accepted only when they
are addressed to a host named in rpc-host-whitelist
. Note that
requests to “localhost” or “localhost.”, or to a numeric address,
are always accepted regardless of these settings.
Note also this functionality is disabled when
rpc-authentication-required?
is #t
.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: string-list rpc-host-whitelistThe list of host names recognized by the RPC server when
rpc-host-whitelist-enabled?
is #t
.
Defaults to ‘()’.
transmission-daemon-configuration
parameter: message-level message-levelThe minimum severity level of messages to be logged (to
/var/log/transmission.log) by the daemon, one of none
(no
logging), error
, info
and debug
.
Defaults to ‘info’.
transmission-daemon-configuration
parameter: boolean start-added-torrents?When #t
, torrents are started as soon as they are added;
otherwise, they are added in “paused” state.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: boolean script-torrent-done-enabled?When #t
, the script specified by
script-torrent-done-filename
will be invoked each time a torrent
completes.
Defaults to ‘#f’.
transmission-daemon-configuration
parameter: maybe-file-object script-torrent-done-filenameA file name or file-like object specifying a script to run each time a
torrent completes, when script-torrent-done-enabled?
is
#t
.
Defaults to ‘disabled’.
transmission-daemon-configuration
parameter: boolean scrape-paused-torrents-enabled?When #t
, the daemon will scrape trackers for a torrent even when
the torrent is paused.
Defaults to ‘#t’.
transmission-daemon-configuration
parameter: non-negative-integer cache-size-mbThe amount of memory, in megabytes, to allocate for the daemon’s in-memory cache. A larger value may increase performance by reducing the frequency of disk I/O.
Defaults to ‘4’.
transmission-daemon-configuration
parameter: boolean prefetch-enabled?When #t
, the daemon will try to improve I/O performance by
hinting to the operating system which data is likely to be read next
from disk to satisfy requests from peers.
Defaults to ‘#t’.
Next: Monitoring Services, Previous: Telephony Services, Up: Services [Contents][Index]