pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Transmission experience



Good afternoon,

I would like to share my way of setting up transmission-daemon for convenient, 
unattended and multiuser operation.

First, create a group, add a user as whom the daemon will be run.

        # group add torrent
        # user add -m -M750 -s/sbin/nologin -gtorrent

Make the basic directory structure as follows:

        # mkdir /home/torrent/config /home/torrent/data
        # chown -R torrent:torrent /home/torrent
        # chmod 700 /home/torrent/config
        # chmod 750 /home/torrent/data

If you want the group members to have write access to the data, set the access 
bits for "data" to 770 instead.

Write a rc script /etc/rc.d/torrentd as shown below, set its mode to 555:

        #!/bin/sh

        # PROVIDE: torrentd
        # REQUIRE: DAEMON

        . /etc/rc.subr

        name="torrentd"
        rcvar=$name
        command="/usr/pkg/bin/transmission-daemon"
        command_args="-g/home/torrent/config"
        pidfile="/var/run/${name}.pid"

        load_rc_config $name
        torrentd_user="torrent"
        run_rc_command "$1"
        check_process ${command} > ${pidfile}

Now add the following to your rc.conf. These flags are a good, safe start:

        torrentd=YES
        torrentd_flags="-C -r127.0.0.1" #no watchdir, restricted RPC

Time to launch the daemon and see if it works correctly, being run as the 
"torrent" user. If not, something is wrong, and you should not leave it running.

        # cd /
        # /etc/rc.d/torrentd start
        # ps aux
        # /etc/rc.d/torrentd stop

If everything is in order, it will create the configuration files in 
/home/torrent/config. Consult 
https://trac.transmissionbt.com/wiki/EditConfigFiles and set the following  
entries of /home/torrent/config/settings.json. As an example, we're using 
"hackme" for RPC password. Of course, you are going to need a better one for 
production run. In my case, I didn't need any kind of remote control 
Transmission offered, so I restricted RPC to localhost. In case you need it, I 
think it might be better to set up SSHd, if not, bind RPC to 0.0.0.0 and 
disable whitelist below, mind the flags in rc.conf as well.

        "download-dir": "/home/torrent/data",
        "rpc-authentication-required": true,
        "rpc-bind-address": "127.0.0.1", 
        "rpc-enabled": true,
        "rpc-password": "hackme",
        "rpc-username": "root",
        "rpc-whitelist": "127.0.0.1",
        "rpc-whitelist-enabled": true,
        "watch-dir-enabled": false

The password will be hashed.
        
Here are some more that might be useful in enhancing security:

        "blocklist-enabled": true,
        "blocklist-url": 
"http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz";,
        "encryption": 2,

Fire up the daemon again, issue the following command:

        $ transmission-remote -nroot:hackme -l

It will print out the list of torrents, which should be empty for now. Consult 
the manual for other options.

You might find having to remember yet another password inconvenient. To avoid 
this, create a script in /root/bin with mode 700, that does the auth for you:

        #!/bin/sh
        transmission-remote -nroot:hackme $@

Members of the "transmission" group can not control the daemon, which might be 
inconvenient. There are two workarounds to this I've come up with yet, which 
are somewhat limited. If you know possible solutions to this problem, please 
let me know.

        a. You can create watch dir for torrents, writable by the group. This 
allows users only to add torrents. If torrents are not started automatically 
(see settings.json), the user in control must issue commands to start them. 
This is useful if you want to revise users' choice before downloading anything.

        b. Move the script we've created above to /usr/pkg/bin, set its owner 
and group to "root" and "torrent" respectively, and modes to 750, so that only 
the group can run it. In this case, the group can almost fully control the 
daemon's behaviour. Good on small systems with little number of users, but on 
bigger ones it will likely cause a mess.


Home | Main Index | Thread Index | Old Index