diff --git a/aria2.yml b/aria2.yml new file mode 100644 index 0000000..bc7a977 --- /dev/null +++ b/aria2.yml @@ -0,0 +1,9 @@ +- hosts: aria2 + roles: + - apache + - aria2 + tasks: + - name: ensure apache is running + service: + name=httpd + state=started diff --git a/group_vars/aria2.yml b/group_vars/aria2.yml new file mode 100644 index 0000000..4329916 --- /dev/null +++ b/group_vars/aria2.yml @@ -0,0 +1,2 @@ +aria2_download_dir: /srv/cifs/Downloads/00aria2 +aria2_webui_host: files.pyrocufflink.blue diff --git a/hosts b/hosts index d7653da..4843930 100644 --- a/hosts +++ b/hosts @@ -4,6 +4,9 @@ ansible_python_interpreter=/usr/bin/python3 [ansible] cm0.pyrocufflink.blue +[aria2] +file0.pyrocufflink.blue + [burp-client] file0.pyrocufflink.blue diff --git a/roles/aria2/defaults/main.yml b/roles/aria2/defaults/main.yml new file mode 100644 index 0000000..9f9da67 --- /dev/null +++ b/roles/aria2/defaults/main.yml @@ -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 }}' diff --git a/roles/aria2/files/aria2.httpd.conf b/roles/aria2/files/aria2.httpd.conf new file mode 100644 index 0000000..18ffa5f --- /dev/null +++ b/roles/aria2/files/aria2.httpd.conf @@ -0,0 +1,5 @@ +Alias /aria2 /var/lib/aria2/webui + + + Require all granted + diff --git a/roles/aria2/files/aria2.service b/roles/aria2/files/aria2.service new file mode 100644 index 0000000..ddd03ad --- /dev/null +++ b/roles/aria2/files/aria2.service @@ -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 diff --git a/roles/aria2/handlers/main.yml b/roles/aria2/handlers/main.yml new file mode 100644 index 0000000..51ab6c7 --- /dev/null +++ b/roles/aria2/handlers/main.yml @@ -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 diff --git a/roles/aria2/tasks/main.yml b/roles/aria2/tasks/main.yml new file mode 100644 index 0000000..0d4eadf --- /dev/null +++ b/roles/aria2/tasks/main.yml @@ -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 diff --git a/roles/aria2/templates/aria2.conf.j2 b/roles/aria2/templates/aria2.conf.j2 new file mode 100644 index 0000000..e20ded5 --- /dev/null +++ b/roles/aria2/templates/aria2.conf.j2 @@ -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 diff --git a/roles/aria2/templates/configuration.js.j2 b/roles/aria2/templates/configuration.js.j2 new file mode 100644 index 0000000..4119b31 --- /dev/null +++ b/roles/aria2/templates/configuration.js.j2 @@ -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 +; + +