Initial commit
This commit is contained in:
commit
c30d65b16e
10
defaults/main.yml
Normal file
10
defaults/main.yml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
ctr_name: maatma
|
||||
|
||||
maatma_network:
|
||||
network6: "2a01:e0a:518:833::/64"
|
||||
prefix6: "2a01:e0a:518:833:"
|
||||
netmask6: "64"
|
||||
gateway6: "2a01:e0a:518:833::1"
|
||||
|
||||
wg_adlin_port: 42912
|
5
handlers/main.yml
Normal file
5
handlers/main.yml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: restart networking
|
||||
service:
|
||||
name: networking
|
||||
state: restarted
|
15
meta/main.yml
Normal file
15
meta/main.yml
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
galaxy_info:
|
||||
role_name: maatma
|
||||
author: 'Pierre-Olivier Mercier <nemunaire+iac@nemunai.re>'
|
||||
description: Deploy the Maatma hosting service
|
||||
license: GPL-3.0-or-later
|
||||
min_ansible_version: 2.9
|
||||
platforms:
|
||||
- name: Alpine
|
||||
versions:
|
||||
- all
|
||||
|
||||
galaxy_tags: []
|
||||
|
||||
dependencies: []
|
105
tasks/container-setup.yml
Normal file
105
tasks/container-setup.yml
Normal file
@ -0,0 +1,105 @@
|
||||
---
|
||||
- name: Create maatma container
|
||||
community.general.lxc_container:
|
||||
name: "{{ ctr_name }}"
|
||||
backing_store: dir
|
||||
container_log: true
|
||||
container_log_level: DEBUG
|
||||
template: download
|
||||
template_options: "--dist alpine --release 3.17 --arch armhf"
|
||||
state: stopped
|
||||
|
||||
- name: Erase container configuration
|
||||
copy:
|
||||
content: |
|
||||
# Template used to create this container: /usr/share/lxc/templates/lxc-download
|
||||
# Parameters passed to the template: --dist alpine --release 3.17 --arch armhf
|
||||
# For additional config options, please look at lxc.container.conf(5)
|
||||
|
||||
# Uncomment the following line to support nesting containers:
|
||||
#lxc.include = /usr/share/lxc/config/nesting.conf
|
||||
# (Be aware this has security implications)
|
||||
|
||||
|
||||
# Distribution configuration
|
||||
lxc.include = /usr/share/lxc/config/common.conf
|
||||
lxc.arch = linux32
|
||||
|
||||
# Container specific configuration
|
||||
lxc.rootfs.path = dir:/var/lib/lxc/{{ ctr_name }}/rootfs
|
||||
lxc.uts.name = {{ ctr_name }}
|
||||
|
||||
lxc.net.0.type = macvlan
|
||||
lxc.net.0.macvlan.mode = vepa
|
||||
lxc.net.0.flags = up
|
||||
lxc.net.0.link = eth0
|
||||
lxc.net.0.hwaddr = de:de:d7:8e:36:5e
|
||||
lxc.net.0.ipv4.address = {{ local_network.prefix4 }}201/{{ local_network.netmask4 }}
|
||||
lxc.net.0.ipv4.gateway = {{ local_network.gateway }}
|
||||
lxc.net.0.ipv6.address = {{ local_network.prefix6 }}:1:a/64
|
||||
lxc.net.0.ipv6.gateway = {{ local_network.gateway6 }}
|
||||
|
||||
lxc.net.2.type = phys
|
||||
lxc.net.2.flags = up
|
||||
lxc.net.2.link = wg-adlin
|
||||
lxc.net.2.ipv6.address = {{ maatma_network.gateway6 }}/{{ maatma_network.netmask6 }}
|
||||
|
||||
lxc.net.1.type = veth
|
||||
lxc.net.1.flags = up
|
||||
lxc.net.1.veth.pair = veth_sshpipper
|
||||
lxc.net.1.ipv4.address = 169.254.42.1/30
|
||||
|
||||
lxc.sysctl.net.ipv6.conf.eth0.autoconf = 0
|
||||
lxc.sysctl.net.ipv6.conf.all.forwarding = 1
|
||||
|
||||
lxc.cap.drop = setgid
|
||||
lxc.cap.drop = setuid
|
||||
lxc.cap.drop = setpcap
|
||||
lxc.cap.drop = sys_resource
|
||||
lxc.cap.drop = sys_boot
|
||||
dest: "/var/lib/lxc/{{ ctr_name }}/config"
|
||||
|
||||
- name: Update runlevels
|
||||
file:
|
||||
path: "/var/lib/lxc/{{ ctr_name }}/rootfs{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "/etc/runlevels/boot/syslog"
|
||||
- "/etc/runlevels/default/crond"
|
||||
- "/etc/runlevels/default/networking"
|
||||
|
||||
- name: Copy init scripts
|
||||
template:
|
||||
src: "{{ item }}.init.j2"
|
||||
dest: "/var/lib/lxc/{{ ctr_name }}/rootfs/etc/init.d/{{ item }}"
|
||||
mode: 0755
|
||||
loop:
|
||||
- token-validator
|
||||
- checker
|
||||
- clean-wg
|
||||
|
||||
- name: Setup runlevels
|
||||
file:
|
||||
path: "/var/lib/lxc/{{ ctr_name }}/rootfs/etc/runlevels/{{ item.runlevel }}/{{ item.filename }}"
|
||||
src: "/etc/init.d/{{ item.filename }}"
|
||||
state: link
|
||||
force: yes
|
||||
loop:
|
||||
- { filename: "token-validator", runlevel: "default" }
|
||||
- { filename: "checker", runlevel: "default" }
|
||||
- { filename: "clean-wg", runlevel: "default" }
|
||||
|
||||
# Does not work
|
||||
- name: Setup maatma container
|
||||
community.general.lxc_container:
|
||||
name: "{{ ctr_name }}"
|
||||
container_command: |
|
||||
echo nameserver 192.168.0.254 > /etc/resolv.conf;
|
||||
apk add --no-cache wireguard-tools-wg nftables;
|
||||
state: started
|
||||
|
||||
- name: Create symlink for service
|
||||
file:
|
||||
path: "/etc/init.d/lxc.{{ ctr_name }}"
|
||||
src: "/etc/init.d/lxc"
|
||||
state: link
|
52
tasks/main.yml
Normal file
52
tasks/main.yml
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
# 1. Setup LXC
|
||||
- include_tasks: pkg.yml
|
||||
|
||||
# 2. Setup networking
|
||||
- include_tasks: networking.yml
|
||||
|
||||
# 2. Create maatma container from alpine ctr
|
||||
- include_tasks: container-setup.yml
|
||||
|
||||
- name: "Ensure container's directory is traversable by srs-deploy"
|
||||
file:
|
||||
path: "/var/lib/lxc/maatma"
|
||||
group: srs-deploy
|
||||
state: directory
|
||||
|
||||
# 3. Install others scripts
|
||||
- name: Retrieve clean-wg.sh
|
||||
get_url:
|
||||
url: https://git.nemunai.re/teach/adlin/raw/branch/master/token-validator/clean-wg.sh
|
||||
dest: "/var/lib/lxc/{{ ctr_name }}/rootfs/usr/sbin/clean-wg.sh"
|
||||
mode: 0755
|
||||
|
||||
- name: Add update-adlin script
|
||||
template:
|
||||
src: update-adlin
|
||||
dest: /sbin/update-adlin
|
||||
mode: 0755
|
||||
|
||||
- name: Define authorized key for srs-deploy
|
||||
ansible.posix.authorized_key:
|
||||
user: srs-deploy
|
||||
state: present
|
||||
key: "{{ ssh_key_srs_deploy }}"
|
||||
|
||||
- name: Ensure directory exists for receiving new builds
|
||||
file:
|
||||
path: "/var/lib/lxc/{{ ctr_name }}/rootfs/home/newbuilds"
|
||||
owner: srs-deploy
|
||||
state: directory
|
||||
|
||||
- name: Ensure directory exists for receiving maatma error pages
|
||||
file:
|
||||
path: "/var/www/nemunai.re/adlin/.error-pages"
|
||||
owner: srs-deploy
|
||||
state: directory
|
||||
|
||||
- name: Launch maatma container
|
||||
service:
|
||||
name: "lxc.{{ ctr_name }}"
|
||||
state: started
|
||||
enabled: true
|
28
tasks/networking.yml
Normal file
28
tasks/networking.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
- name: Install wg-tools on host
|
||||
apk:
|
||||
name:
|
||||
- wireguard-tools-wg
|
||||
state: present
|
||||
|
||||
- name: Enable IPv6 forwarding
|
||||
ansible.posix.sysctl:
|
||||
name: net.ipv6.conf.all.forwarding
|
||||
value: '1'
|
||||
sysctl_file: /etc/sysctl.d/maatma.conf
|
||||
|
||||
- name: ensure /etc/wireguard exists
|
||||
file:
|
||||
path: /etc/wireguard
|
||||
state: directory
|
||||
|
||||
- name: configure wg-adlin
|
||||
template:
|
||||
src: "wg.conf.j2"
|
||||
dest: "/etc/wireguard/wg-adlin.conf"
|
||||
|
||||
- name: enable wg-adlin
|
||||
template:
|
||||
src: networking.j2
|
||||
dest: "/etc/network/interfaces.d/wg-adlin"
|
||||
notify: restart networking
|
9
tasks/pkg.yml
Normal file
9
tasks/pkg.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
- name: Install dependancies
|
||||
apk:
|
||||
name:
|
||||
- lxc
|
||||
- lxc-download
|
||||
- py3-lxc
|
||||
- xz
|
||||
state: present
|
7
templates/checker.init.j2
Normal file
7
templates/checker.init.j2
Normal file
@ -0,0 +1,7 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="Maatma interface, API and more"
|
||||
command="/usr/sbin/checker"
|
||||
command_args="-dsn '{{ mysql_maatma.username }}:{{ mysql_maatma.password }}@tcp({{ mysql_endpoint.host }}:{{ mysql_endpoint.port}})/{{ mysql_maatma.database }}'"
|
||||
start_stop_daemon_args="--background --quiet"
|
||||
pidfile="/var/run/$SVCNAME.pid"
|
6
templates/clean-wg.init.j2
Normal file
6
templates/clean-wg.init.j2
Normal file
@ -0,0 +1,6 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="Maatma interface, API and more"
|
||||
command="/usr/sbin/clean-wg.sh"
|
||||
start_stop_daemon_args="--background --quiet"
|
||||
pidfile="/var/run/$SVCNAME.pid"
|
5
templates/networking.j2
Normal file
5
templates/networking.j2
Normal file
@ -0,0 +1,5 @@
|
||||
auto wg-adlin
|
||||
iface wg-adlin inet static
|
||||
requires eth0
|
||||
use wireguard
|
||||
address {{ maatma_network.gateway6 }}/{{ maatma_network.netmask6 }}
|
7
templates/token-validator.init.j2
Normal file
7
templates/token-validator.init.j2
Normal file
@ -0,0 +1,7 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="Maatma interface, API and more"
|
||||
command="/usr/sbin/token-validator"
|
||||
command_args="-baseurl /maatma/ -dsn '{{ mysql_maatma.username }}:{{ mysql_maatma.password }}@tcp({{ mysql_endpoint.host }}:{{ mysql_endpoint.port}})/{{ mysql_maatma.database }}' -oidc-clientid {{ oidc.clientid }} -oidc-secret {{ oidc.client_secret }}"
|
||||
start_stop_daemon_args="--background --quiet"
|
||||
pidfile="/var/run/$SVCNAME.pid"
|
47
templates/update-adlin
Normal file
47
templates/update-adlin
Normal file
@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
usage() {
|
||||
echo -e "Usage: $0 [OPTION...]\n"
|
||||
echo -e " -?, --help\tgive this help list"
|
||||
echo -e " -R\trollback to the last binary backup"
|
||||
}
|
||||
|
||||
while getopts "R" opt; do
|
||||
case $opt in
|
||||
R|r)
|
||||
ROLLBACK=1
|
||||
;;
|
||||
\?)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
/etc/init.d/lxc.{{ ctr_name }}-final status > /dev/null 2> /dev/null
|
||||
FINAL_UP=$?
|
||||
|
||||
[ "$FINAL_UP" = 0 ] && /etc/init.d/lxc.{{ ctr_name }}-final stop
|
||||
/etc/init.d/lxc.{{ ctr_name }} stop
|
||||
|
||||
for b in checker token-validator
|
||||
do
|
||||
echo -n " * Updating $b ..."
|
||||
if [ -n "$ROLLBACK" ]
|
||||
then
|
||||
[ -f "/var/lib/lxc/{{ ctr_name }}/rootfs/home/backups/$b" ] || echo " Doesn't exists"
|
||||
[ -f "/var/lib/lxc/{{ ctr_name }}/rootfs/home/backups/$b" ] && {
|
||||
mv "/var/lib/lxc/{{ ctr_name }}/rootfs/usr/sbin/$b" /var/lib/lxc/{{ ctr_name }}/rootfs/home/newbuilds/
|
||||
cp "/var/lib/lxc/{{ ctr_name }}/rootfs/home/backups/$b" /var/lib/lxc/{{ ctr_name }}/rootfs/usr/sbin/
|
||||
} && echo " DONE"
|
||||
else
|
||||
[ -f "/var/lib/lxc/{{ ctr_name }}/rootfs/home/newbuilds/$b" ] || echo " Doesn't exists"
|
||||
[ -f "/var/lib/lxc/{{ ctr_name }}/rootfs/home/newbuilds/$b" ] && {
|
||||
cp "/var/lib/lxc/{{ ctr_name }}/rootfs/usr/sbin/$b" /var/lib/lxc/{{ ctr_name }}/rootfs/home/backups/
|
||||
mv "/var/lib/lxc/{{ ctr_name }}/rootfs/home/newbuilds/$b" /var/lib/lxc/{{ ctr_name }}/rootfs/usr/sbin/
|
||||
} && echo " DONE"
|
||||
fi
|
||||
done
|
||||
|
||||
/etc/init.d/lxc.{{ ctr_name }} start
|
||||
[ "$FINAL_UP" = 0 ] && /etc/init.d/lxc.{{ ctr_name }}-final start
|
3
templates/wg.conf.j2
Normal file
3
templates/wg.conf.j2
Normal file
@ -0,0 +1,3 @@
|
||||
[Interface]
|
||||
PrivateKey = {{ wg_adlin_private_key }}
|
||||
ListenPort = {{ wg_adlin_port }}
|
2
vars/main.yml
Normal file
2
vars/main.yml
Normal file
@ -0,0 +1,2 @@
|
||||
---
|
||||
ssh_key_srs_deploy: 'no-agent-forwarding,no-port-forwarding,no-pty,no-X11-forwarding,from="192.168.0.*,82.64.151.41,2a01:e0a:518:83?:*" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE26xEqztOHrF1rL2klBc5Tr2lhm2zPXUyKvlW8tgrN0 deploy-key-drone-adlin'
|
Loading…
Reference in New Issue
Block a user