Skip to content

Instantly share code, notes, and snippets.

@askmrsinh
Last active December 7, 2017 18:52
Show Gist options
  • Save askmrsinh/634f0fdc954e6a5afd6261df7c0b37c6 to your computer and use it in GitHub Desktop.
Save askmrsinh/634f0fdc954e6a5afd6261df7c0b37c6 to your computer and use it in GitHub Desktop.
Configure deluge/rtorrent for downloading torrents.
#!/bin/bash
## http://dev.deluge-torrent.org/wiki/Installing/Linux/Ubuntu
## http://dev.deluge-torrent.org/wiki/UserGuide/ThinClient
## http://dev.deluge-torrent.org/wiki/UserGuide/Service/DebianUbuntuInitd
## Install packages
sudo apt-get install deluge -y
sudo apt-get install deluged deluge-web deluge-console -y
## Create Default Config
deluged
killall deluged
## Add User to the authentication file
read -r -p "Set a password for deluge user $USER: " deluge_password
echo "$USER:$deluge_password" >> ~/.config/deluge/auth
## Enable Remote Connection
deluge-console "config -s allow_remote True"
deluge-console "config allow_remote"
## Make directories
sudo mkdir -p /var/log/deluge/daemon
sudo mkdir /var/log/deluge/web
## Give permissions
sudo chmod -R 755 /var/log/deluge
sudo chown -R deluge /var/log/deluge
sudo cat > /etc/logrotate.d/deluge << EOF
/var/log/deluge/*/*.log {
weekly
missingok
rotate 7
compress
notifempty
copytruncate
create 600
}
/var/log/deluge/*.log {
monthly
missingok
rotate 3
compress
notifempty
copytruncate
create 600
}
EOF
sudo cat << EOT > /etc/default/deluge-daemon
# Configuration for /etc/init.d/deluge-daemon
# The init.d script will only run if this variable non-empty.
DELUGED_USER="$USER" # !!!CHANGE THIS!!!!
# Should we run at startup?
RUN_AT_STARTUP="YES"
EOT
sudo cat << 'EOT' > /etc/init.d/deluge-daemon
#!/bin/sh
### BEGIN INIT INFO
# Provides: deluge-daemon
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Daemonized version of deluge and webui.
# Description: Starts the deluge daemon with the user specified in
# /etc/default/deluge-daemon.
### END INIT INFO
# Author: Adolfo R. Brandes
# Updated by: Jean-Philippe "Orax" Roemer
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d -L warning -l /var/log/deluge/daemon/warning.log" # Consult `man deluged` for more options
DAEMON2=/usr/bin/deluge-web
DAEMON2_ARGS="-L warning -l /var/log/deluge/web/warning.log"
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
UMASK=022 # Change this to 0 if running deluged as its own user
PKGNAME=deluge-daemon
SCRIPTNAME=/etc/init.d/$PKGNAME
# Exit if the package is not installed
[ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
then
log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
exit 0
fi
if [ -z "$DELUGED_USER" ]
then
log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
exit 0
fi
#
# Function to verify if a pid is alive
#
is_alive()
{
pid=`cat $1` > /dev/null 2>&1
kill -0 $pid > /dev/null 2>&1
return $?
}
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
is_alive $PIDFILE1
RETVAL1="$?"
if [ $RETVAL1 != 0 ]; then
rm -f $PIDFILE1
start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \
--exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS
RETVAL1="$?"
else
is_alive $PIDFILE2
RETVAL2="$?"
[ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1
fi
is_alive $PIDFILE2
RETVAL2="$?"
if [ $RETVAL2 != 0 ]; then
sleep 2
rm -f $PIDFILE2
start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \
--exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
RETVAL2="$?"
fi
[ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2
RETVAL2="$?"
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
RETVAL1="$?"
[ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2
rm -f $PIDFILE1 $PIDFILE2
[ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME1"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
:
EOT
sudo chmod 755 /etc/init.d/deluge-daemon
sudo update-rc.d deluge-daemon defaults
sudo invoke-rc.d deluge-daemon start
#!/bin/bash
if [ -f /etc/redhat-release ]; then
sudo dnf install -y rtorrent
elif [ -f /etc/debian_version ]; then
sudo apt-get update && sudo apt-get install -y rtorrent
else
lsb_release -si
echo "\e[31mCant use yum or apt-get, check installation script.\n\e[0m"
exit
fi
mkdir -p ~/Downloads/{incoming,pending,watch}
mkdir -p ~/.rtorrent.session
touch ~/.rtorrent.rc
cat << EOT >> ~/.rtorrent.rc
#Performance
min_peers = 40
max_peers = 52
min_peers_seed = 10
max_peers_seed = 52
max_uploads = 8
download_rate = 0
upload_rate = 100
check_hash = yes
#Create and manage files
directory = /home/$USER/Downloads/pending
session = ~/.rtorrent.session
schedule = watch_directory,5,5,load_start=/home/$USER/Downloads/watch/*.torrent
schedule = untied_directory,5,5,stop_untied=
schedule = tied_directory,5,5,start_tied=
schedule = low_diskspace,5,60,close_low_diskspace=100M
system.method.set_key = event.download.finished,move_complete,"execute=mv,-n,$d.get_base_path=,./Downloads/incoming/;d.set_directory=./Downloads/incoming/"
system.method.set_key = event.download.finished,move_complete,"d.set_directory=$d.get_custom2= ;execute=mv,-u,$d.get_base_path=,$d.get_custom2= ;execute=/torrents/scripts/unrar_movies.pl,$d.get_name="
#Port configuration
port_range = 49164-49164
#Additional settings
encryption = allow_incoming,try_outgoing,enable_retry
dht = auto
dht_port = 6881
peer_exchange = yes
EOT
#!/bin/bash
## Script for Delgue's `execute` plugin.
set -x
torrentId=$1
torrentName=$2
torrentPath=$3
logFile="/var/log/deluge/plugin-execute.log"
date >> $logFile
echo -e "[+] $torrentId\n \"$torrentName\"\n \"$torrentPath\"" >> $logFile
appName=$(dpkg-query -W -f='${binary:Package} ${Version}\n' deluged)
appHost=$(ip route get 1 | awk '{print $NF;exit}')
appPort=$(sed -rn 's/(.*)"port": (.*),/\2/p' ~/.config/deluge/web.conf)
read -d '' postData << EOF
{
"source_device_iden":"$(head -1 ~/.config/pushbullet-source_device_iden | base64 --decode)",
"title":"[$appName] TorrentAdded",
"body":"\\\"$torrentName\\\"\\\n$torrentId\\\n$(date)\\\ndf $torrentPath\\\n\\\tfree:$(df --output=avail -h $torrentPath | sed '1d') used:$(df --output=pcent -h $torrentPath | sed '1d')",
"url":"http://$appHost:$appPort",
"type":"link"
}
EOF
echo $postData | jq . >> $logFile
curl --header "Access-Token: $(head -1 ~/.config/pushbullet-access_token | base64 --decode)" \
--header 'Content-Type: application/json' \
--data-binary "$postData" \
--request POST \
https://api.pushbullet.com/v2/pushes | jq . >> $logFile
echo >> $logFile
set +x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment