Well SSH is Boring

I have got my RPi download machine up and running and having success, unfortunately though SSH is annoying and tedious, so I am gonna do something about it. But a disclaimer; this is my first time working with Aria2 in the most part.

RPC

Remote Procedure Call is fancy way of saying 'make this thing make that thing do a thing'. So I ran the command to load the config file (and added to my init file) in the last post and ..... BOLLOCKS ALL.





So ran the command again, and need to check the processes (like Task Manager).





pi@raspberrypi : ~ $ ps aux | grep aria2c root 524 0.0 0.9 17028 9284 ? Ss 21:21 0:00 aria2c --conf-path=/home/pi/.aria2/aria2.conf pi 1008 0.0 0.2 4272 1948 pts/0 S+ 21:34 0:00 grep --color=auto aria2c





There it is, that little scumbag. But still no dice. In the conf file I stated that the rpc-port to be 6800 so need to check that port.





A quick note on ports, every service that runs on your computer and needs a connection to manage, will take a port number. This makes each service unique on the machine and therefore the IP of the host.









Hmmm ... the 6th row show the service on 6800 but for TCP6 (not gonna go into detail but need to be tcp), TO THE LOGS!!!!





pi@raspberrypi : ~ $ sudo tail -f /var/log/aria2/aria.log 2017-08-03 21:21:37.169615 [ERROR] [HttpListenCommand.cc:114] IPv4 RPC: failed to bind TCP port 6800 Exception: [SocketCore.cc:292] errorCode=1 Failed to bind a socket, cause: Name or service not known





Interesting, that's the port I need. So I stopped the service and then ran manually with alternate settings.





pi@raspberrypi : ~ $ sudo service aria2 stop

pi@raspberrypi : ~ $ sudo aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all





And BINGO!!! (sort of)





I went and used a WebUI to connect to the running Aria and things are looking good. Gonna do a test download. Over to r/opendirectories/ and grabbed an ebook





















Reconfiguring

From seeing that my commands were wrong I realised that copying nonsense from the internet is not always the best way forward. Text after aria2c are arguments and are a way to send settings, and we can take the same arguments and put them in the conf file and just run that instead. Now I am gonna be much more fucking sensible and run manually each time changing the arguments until I get in right and then create my conf file.





Attempt 1 --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all





This gives me a connection and can add downloads, but no authentication at all. There are options for a username and password but in the documentation tells us that this will be depreciated so am gonna use an rpc secret instead.





Attempt 2

--rpc-secret=bumhole





Now we are running using the secret, make sure you pick complicated passwords! Ok next I need set the default directory to the mounted drive with dir, and set the log file and log level.





Attempt 3

--dir=/home/pi/drive_caddy

--log=/var/log/aria2/aria.log

--log-level=notice









On the WebUI it can be seen that the directory is set and logging is working to that file.

















Good so far, now some of the defaults are not what I am looking for. Max connections is how many connections are made to a server for downloading a file. By default is 1 but will change to 3. Also I want to attempt a download 10 times if there is an issue, and wait 30 secs between tries.





Attempt 4

--max-connection-per-server=3 --max-tries=10

--retry-wait=30





Ok that is now working, finally I want this thing to just run in the background i.e. as a daemon.



Final Attempt

--daemon=true





SUCCESS!!!!

















All left to do is put those commands (leaving out the -- at the beginning) into /home/pi/.aria2/aria2.conf





enable-rpc rpc-listen-all=true rpc-allow-origin-all

rpc-secret=bumhole

dir=/home/pi/drive_caddy log=/var/log/aria2/aria.log log-level=notice

max-connection-per-server=3 max-tries=10 retry-wait=30

daemon=true





And as a test rebooted the Pi .... and got fuck all. Back to the logs.





2017-08-04 16:25:51.008095 [ERROR] [HttpListenCommand.cc:114] IPv4 RPC: failed to bind TCP port 6800 Exception: [SocketCore.cc:292] errorCode=1 Failed to bind a socket, cause: Name or service not known 2017-08-04 16:25:51.011044 [NOTICE] [HttpListenCommand.cc:111] IPv6 RPC: listening on TCP port 6800





Balls. Same issue I had before of 'Failed to bind socket'. Before getting pissed off I remembered that I have seen this type of issue before, basically Aria2 needs to use the network interface on the startup script, but it's run before the interface has initialised. Quick hack, put a delay in the startup script, highlight in yellow below.





pi@raspberrypi : ~ $ sudo nano /etc/init.d/aria2





#! /bin/sh # /etc/init.d/aria2 ### BEGIN INIT INFO # Provides: aria2 # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: aria2 ### END INIT INFO

CONF_PATH=/home/pi/.aria2/aria2.conf

case "$1" in start) echo "Starting aria2 with custom configuration" sleep 50 aria2c --conf-path=$CONF_PATH ;; stop) echo "Stopping aria2" killall aria2c ;; *) echo "Usage: /etc/init.d/aria2 {start|stop}" exit 1 ;; esac

exit 0





ONE MORE REBOOT AND WE HAVE MOTHERFUCKING SUCCESS!!!!





Connecting and Downloading

Now in a glorious position to send downloads, but how can we achieve this. Well we need a client to connect. For myself I am using Aria2App on Android in the Google Play Store , alternatively if you are on iOS go have a little cry in the corner cos you ain't got shit.





In the App click the + icon and choose the condition for the app to be active. I have chosen WiFi and added my WiFi name.

Next Under Connection select WebSocket, Enter the IP address of the Pi, Port 6800 and leave /jsonrpc.

Under Authentication Select Token and put in your secret.

And then click the Tick at the top.





For usage I find myself a link and now for option on open I get Aria2App as an option, if not (like pdf's just download)I just copy the url and then just swap back to the app and add. Job issa good'un.





