aria2: Deploy aria2 download manager

The *aria2* role installs the *aria2* download manager and sets it up to
run as a system service with RPC enabled. It also sets up the web UI,
though that must be installed manually from an archive, for now.
jenkins-master
Dustin 2018-08-19 14:16:41 -05:00
parent 895974f346
commit 88dd80e6fd
10 changed files with 197 additions and 0 deletions

9
aria2.yml Normal file
View File

@ -0,0 +1,9 @@
- hosts: aria2
roles:
- apache
- aria2
tasks:
- name: ensure apache is running
service:
name=httpd
state=started

2
group_vars/aria2.yml Normal file
View File

@ -0,0 +1,2 @@
aria2_download_dir: /srv/cifs/Downloads/00aria2
aria2_webui_host: files.pyrocufflink.blue

3
hosts
View File

@ -4,6 +4,9 @@ ansible_python_interpreter=/usr/bin/python3
[ansible]
cm0.pyrocufflink.blue
[aria2]
file0.pyrocufflink.blue
[burp-client]
file0.pyrocufflink.blue

View File

@ -0,0 +1,4 @@
aria2_download_dir: /var/lib/aria2/downloads
aria2_listen_ports: 16881-16999
aria2_dht_listen_ports: 6881-6999
aria2_webui_host: '{{ ansible_fqdn }}'

View File

@ -0,0 +1,5 @@
Alias /aria2 /var/lib/aria2/webui
<Location /aria2>
Require all granted
</Location>

View File

@ -0,0 +1,11 @@
[Unit]
Description=aria2 Download Manager
[Service]
Type=simple
User=aria2
Group=aria2
ExecStart=/usr/bin/aria2c --daemon=false --conf-path=/etc/aria2.conf --log=-
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,12 @@
- name: reload systemd
command: systemctl daemon-reload
- name: restart aria2
service:
name=aria2
state=restarted
- name: reload httpd
service:
name=httpd
state=reloaded
- name: save firewalld configuration
command: firewalld --runtime-to-permanent

View File

@ -0,0 +1,88 @@
- name: ensure aria2 is installed
package:
name=aria2
state=present
tags:
- install
- name: ensure aria2 group exists
group:
name=aria2
system=yes
state=present
tags:
- group
- user
- name: ensure aria2 user exists
user:
name: aria2
group: aria2
comment: aria2 Download Manager
home: /var/lib/aria2
createhome: true
shell: /sbin/nologin
system: true
state: present
- name: ensure aria2 is configured
template:
src=aria2.conf.j2
dest=/etc/aria2.conf
mode=0644
notify: restart aria2
- name: ensure aria2 download directory exists
file:
path={{ aria2_download_dir }}
owner=aria2
group=aria2
mode=755
state=directory
- name: ensure aria2 state file exists
copy:
dest=/var/lib/aria2/aria2.state
content=
force=no
- name: ensure aria2 systemd unit exists
copy:
src=aria2.service
dest=/etc/systemd/system/aria2.service
mode=0644
notify: reload systemd
- name: ensure firewall is configured for aria2
firewalld:
port: '{{ item }}'
permanent: false
immediate: true
state: enabled
with_items:
- 6800/tcp
- '{{ aria2_listen_ports }}/tcp'
- '{{ aria2_dht_listen_ports }}/tcp'
notify: save firewalld configuration
- name: ensure aria2 service starts at boot
service:
name=aria2
enabled=yes
- meta: flush_handlers
- name: ensure aria2 service is running
service:
name=aria2
state=started
- name: ensure aria2 web ui is configured
template:
src=configuration.js.j2
dest=/var/lib/aria2/webui/configuration.js
mode=0644
- name: ensure apache is configured to serve aria2 web ui
copy:
src=aria2.httpd.conf
dest=/etc/httpd/conf.d/aria2.conf
mode=0644
notify: reload httpd

View File

@ -0,0 +1,17 @@
dir={{ aria2_download_dir }}
bt-exclude-tracker=*
bt-prioritize-piece=head,tail
bt-require-crypto=true
dht-listen-port={{ aria2_dht_listen_ports }}
dht-entry-point=dht.transmissionbt.com:6881
dht-file-path=/var/lib/aria2/dht.dat
dht-file-path6=/var/lib/aria2/dht6.dat
listen-port={{ aria2_listen_ports }}
enable-rpc=true
rpc-listen-all=true
log=/var/log/aria2.log
log-level=notice
continue
save-session=/var/lib/aria2/aria2.state
input-file=/var/lib/aria2/aria2.state
save-session-interval=10

View File

@ -0,0 +1,46 @@
angular
.module('webui.services.configuration', [])
.constant('$name', 'Aria2 WebUI') // name used across the entire UI
.constant('$titlePattern', 'active: {active} - waiting: {waiting} - stopped: {stopped} — {name}')
.constant('$pageSize', 11) // number of downloads shown before pagination kicks in
.constant('$authconf', { // default authentication configuration, never fill it in case the webui is hosted in public IP as it can be compromised
host: location.protocol.startsWith('http') ? location.hostname : 'localhost',
path: '/jsonrpc',
port: 6800,
encrypt: false,
auth: { // either add the token field or the user and pass field, not both.
// token: '$YOUR_SECRET_TOKEN$'
/*-----------------------------*/
// user: '*YOUR_USERNAME*',
// pass: '*YOUR_SECRET_PASS*'
},
directURL: '' // If supplied, links will be created to enable direct download from the aria2 server, requires appropriate webserver to be configured
})
.constant('$enable', {
torrent: true, // bittorrent support only enabled if supported by aria2 build, set to false otherwise to permanently disable it
metalink: true, // metalink support only enabled if supported by aria2 build, set to false to permanently disable it
sidebar: { // configuration related to the sidebar next to the list of downloads
show: true, // set to false to completely hide the sidebar. Other elements inside will be automatically hidden
stats: true, // set to false to hide the global statistic section (contains the speed graph for now)
filters: true, // set to false to hide the Download Filters
starredProps: true // only shown when at least one property is added to the starred list, set to false to permanently hide the Quick Access Settings inside the sidebar
}
})
.constant('$starredProps', [ // default list of Quick Access Properties. Can be overridden by making modification through the Global Settings dialog
// go to Global Settings dialog to see their description
'dir', 'conf-path', 'auto-file-renaming', 'max-connection-per-server'
])
.constant('$downloadProps', [ // Similar to starred Quick Access properties but for adding new downloads.
// go to Advance Download Options when adding a new download to view the list of possible options
'header', 'http-user', 'http-passwd', 'pause', 'dir', 'max-connection-per-server'
])
.constant('$globalTimeout', 1000) // interval to update the individual downloads
;