Last active 1611700355

Provisions a droplet on DigitalOcean to download a given torrent file, then reupload to a given rclone remote

Revision d297fed624acedbcb21faf3099f970308a070a08

digitalocean-torrentdl.sh Raw
1#!/bin/bash
2# Provisions a droplet on DigitalOcean to download a given torrent file, then reupload to a given rclone remote
3# Prints estimated USD cost of transaction when complete
4# uses your user's rclone.conf, so set up the remote locally and make sure it works
5# Torrent filename should be a local file, not a URL
6# torrentdl.sh ubuntu-20.04-server-amd64.iso.torrent b2:linux-isos/ubuntu/
7export IMAGE="ubuntu-20-04-x64"
8export REGION="sgp1"
9export SIZE="s-4vcpu-8gb"
10export HOSTNAME="torrent-dl"
11export TORRENT="$1"
12export DESTREMOTE="$2"
13
14echo "Downloading '$1' on $REGION:$IMAGE:$SIZE with hostname $HOSTNAME, then uploading to '$2'"
15read -p "Press enter to continue, ctrl-c to abort..."
16echo "Started at `date`"
17export STARTTIME=`date +%s`
18echo "Provisioning droplet..."
19export SSHKEYS=`doctl compute ssh-key list --no-header --format ID | tr '\n' ',' | sed 's/,$/\n/'`
20export IP=$( set -x; doctl compute droplet create $HOSTNAME --ssh-keys $SSHKEYS --region $REGION --size $SIZE --image $IMAGE --wait --no-header --format PublicIPv4 )
21echo -n "Droplet at $IP, waiting for connection"
22until (ssh -o StrictHostKeyChecking=no root@$IP mkdir -p /root/.config/rclone /root/t 2>/dev/null >/dev/null); do
23 echo -n "."
24 sleep 1
25done
26ssh-keyscan -H $IP >> ~/.ssh/known_hosts
27echo
28echo Installing dependencies on droplet...
29ssh -t root@$IP "apt-get update 2>&1 >/dev/null && apt-get install -y aria2; curl https://rclone.org/install.sh | sudo bash"
30echo Copying rclone conf and torrent to droplet...
31scp ~/.config/rclone/rclone.conf root@$IP:/root/.config/rclone/rclone.conf 2>/dev/null >/dev/null
32scp "$1" root@$IP:/root/t/ 2>/dev/null >/dev/null
33echo Downloading torrent...
34ssh -t root@$IP aria2c -d "/root/t/" --enable-dht=false --enable-peer-exchange=false --seed-time=0 "/root/t/*.torrent"
35echo Uploading torrent to rclone remote...
36ssh -t root@$IP rclone copy /root/t/ "$DESTREMOTE" -P --fast-list --transfers=$(($LINES-5))
37echo Job complete, deleting droplet
38$(set -x; doctl compute droplet delete -f $HOSTNAME)
39echo "Finished at `date`"
40export ENDTIME=`date +%s`
41echo "Total run time: $(($ENDTIME-$STARTTIME))"
42echo -n "Total (estimated) cost: USD $"
43doctl compute size list | grep $SIZE | awk '{print $5}' | while read p; do python3 -c "print(($p/2592000)*($ENDTIME-$STARTTIME))"; done