From 359b6a455308704d78de461ef6c8f97445a14651 Mon Sep 17 00:00:00 2001
From: ynerant <ynerant@crans.org>
Date: Wed, 17 Feb 2021 11:57:10 +0100
Subject: [PATCH 1/6] [belenios] Deploy belenios

Signed-off-by: ynerant <ynerant@crans.org>
---
 group_vars/belenios.yml                       |   8 ++
 group_vars/reverseproxy.yml                   |   2 +-
 host_vars/belenios.adm.crans.org.yml          |   4 +
 hosts                                         |   5 +-
 plays/belenios.yml                            |   9 ++
 roles/belenios/handlers/main.yml              |   5 +
 roles/belenios/tasks/main.yml                 | 123 ++++++++++++++++++
 .../ocsigenserver/conf.d/belenios.conf.j2     |  79 +++++++++++
 8 files changed, 233 insertions(+), 2 deletions(-)
 create mode 100644 group_vars/belenios.yml
 create mode 100644 host_vars/belenios.adm.crans.org.yml
 create mode 100755 plays/belenios.yml
 create mode 100644 roles/belenios/handlers/main.yml
 create mode 100644 roles/belenios/tasks/main.yml
 create mode 100644 roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2

diff --git a/group_vars/belenios.yml b/group_vars/belenios.yml
new file mode 100644
index 00000000..e23df08e
--- /dev/null
+++ b/group_vars/belenios.yml
@@ -0,0 +1,8 @@
+---
+glob_belenios:
+  domain: belenios.crans.org
+  email_contact: contact@crans.org
+  email_from: root@crans.org
+  cas:
+    name: CAS Cr@ns
+    server: https://cas.crans.org/
diff --git a/group_vars/reverseproxy.yml b/group_vars/reverseproxy.yml
index fca4ddbe..49f1ed78 100644
--- a/group_vars/reverseproxy.yml
+++ b/group_vars/reverseproxy.yml
@@ -39,7 +39,7 @@ nginx:
     - {from: hedgedoc.crans.org, to: "172.16.10.128:3000"}
     - {from: owncloud.crans.org, to: 172.16.10.136}
     - {from: linx.crans.org, to: "172.16.10.119:8080"}
-    # - {from: belenios.crans.org, to: 172.16.10.111}
+    - {from: belenios.crans.org, to: 172.16.10.111}
     # - {from: mailman.crans.org, to: 10.231.136.180}
 
     # Zamok
diff --git a/host_vars/belenios.adm.crans.org.yml b/host_vars/belenios.adm.crans.org.yml
new file mode 100644
index 00000000..92076e1a
--- /dev/null
+++ b/host_vars/belenios.adm.crans.org.yml
@@ -0,0 +1,4 @@
+---
+interfaces:
+  adm: ens18
+  srv_nat: ens19
diff --git a/hosts b/hosts
index d032fd9f..397f791c 100644
--- a/hosts
+++ b/hosts
@@ -17,6 +17,9 @@ tealc.adm.crans.org
 [bdd]
 tealc.adm.crans.org
 
+[belenios]
+belenios.adm.crans.org
+
 [certbot:children]
 dovecot
 git
@@ -141,7 +144,7 @@ baie
 virtu
 
 [crans_vm]
-#belenios.adm.crans.org
+belenios.adm.crans.org
 #bigbluebutton.adm.crans.org
 boeing.adm.crans.org
 cas.adm.crans.org
diff --git a/plays/belenios.yml b/plays/belenios.yml
new file mode 100755
index 00000000..a55b3f87
--- /dev/null
+++ b/plays/belenios.yml
@@ -0,0 +1,9 @@
+#!/usr/bin/env ansible-playbook
+---
+- hosts: belenios
+  vars:
+    belenios: "{{ glob_belenios | default({}) | combine(loc_belenios | default({})) }}"
+    nullmailer: "{{ glob_nullmailer | default({}) | combine(loc_nullmailer | default({})) }}"
+  roles:
+    - belenios
+    - nullmailer
diff --git a/roles/belenios/handlers/main.yml b/roles/belenios/handlers/main.yml
new file mode 100644
index 00000000..552e8142
--- /dev/null
+++ b/roles/belenios/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: Restart ocsigenserver
+  systemd:
+    name: ocsigenserver
+    state: restarted
diff --git a/roles/belenios/tasks/main.yml b/roles/belenios/tasks/main.yml
new file mode 100644
index 00000000..bd80f572
--- /dev/null
+++ b/roles/belenios/tasks/main.yml
@@ -0,0 +1,123 @@
+---
+- name: Install Belenios dependencies from APT
+  apt:
+    update_cache: true
+    install_recommends: false
+    name:
+      - bubblewrap
+      - build-essential
+      - libgmp-dev
+      - libpcre3-dev
+      - pkg-config
+      - m4
+      - libssl-dev
+      - libsqlite3-dev
+      - wget
+      - ca-certificates
+      - zip
+      - unzip
+      - libncurses-dev
+      - zlib1g-dev
+      - libgd-securityimage-perl
+      - cracklib-runtime
+      - jq
+
+      # OCamL build dependencies
+      - dune
+      - libatdgen-ocaml-dev
+      - libzarith-ocaml-dev
+      - libcryptokit-ocaml-dev
+      - libcmdliner-ocaml-dev
+      - libcalendar-ocaml-dev
+      - eliom
+      - libcsv-ocaml-dev
+      - libgettext-ocaml-dev
+
+      # Web server dependencies
+      - ocsigenserver
+  register: apt_result
+  retries: 3
+  until: apt_result is succeeded
+
+- name: Start ocsigenserver at boot
+  lineinfile:
+    path: /etc/default/ocsigenserver
+    regexp: "^LAUNCH_AT_STARTUP="
+    line: "LAUNCH_AT_STARTUP=true"
+  notify: Restart ocsigenserver
+
+- name: Clone belenios into /opt/belenios
+  git:
+    repo: https://gitlab.inria.fr/belenios/belenios.git
+    dest: /opt/belenios
+    version: "1.14"
+    force: true
+  register: git_result
+
+- name: Make belenios project
+  when: git_result.changed
+  make:
+    chdir: /opt/belenios
+    target: build-release-server
+  notify: Restart ocsigenserver
+
+- name: Create belenios data directories
+  file:
+    path: "{{ item }}"
+    owner: ocsigen
+    group: ocsigen
+    mode: 0755
+    state: directory
+  loop:
+    - "/etc/ocsigenserver/conf.d"
+    - "/var/lib/belenios"
+    - "/var/lib/belenios/data"
+    - "/var/lib/belenios/upload"
+    - "/var/lib/belenios/spool"
+    - "/var/log/belenios"
+
+- name: Link ocsigenserver database
+  file:
+    src: "/opt/belenios/_run/lib/ocsidb"
+    path: "/var/lib/belenios/data/ocsidb"
+    owner: ocsigen
+    group: ocsigen
+    mode: 0644
+    state: link
+
+- name: Link belenios directories into proper locations
+  file:
+    src: "{{ item.src }}"
+    path: "{{ item.path }}"
+    owner: root
+    group: root
+    mode: 0755
+    state: link
+  loop:
+    - src: "/opt/belenios/_run/usr/bin/belenios-tool"
+      path: "/usr/bin/belenios-tool"
+
+    - src: "/opt/belenios/_run/usr/lib/belenios"
+      path: "/usr/lib/ocaml/belenios"
+    - src: "/opt/belenios/_run/usr/lib/belenios-platform"
+      path: "/usr/lib/ocaml/belenios-platform"
+    - src: "/opt/belenios/_run/usr/lib/belenios-platform-js"
+      path: "/usr/lib/ocaml/belenios-platform-js"
+    - src: "/opt/belenios/_run/usr/lib/belenios-platform-native"
+      path: "/usr/lib/ocaml/belenios-platform-native"
+    - src: "/opt/belenios/_run/usr/lib/belenios-server"
+      path: "/usr/lib/ocaml/belenios-server"
+    - src: "/opt/belenios/_run/usr/lib/belenios-tool"
+      path: "/usr/lib/ocaml/belenios-tool"
+
+    - src: "/opt/belenios/_run/usr/share/belenios-server"
+      path: "/usr/share/belenios-server"
+
+- name: Deploy ocsigenserver configuration
+  template:
+    src: ocsigenserver/conf.d/belenios.conf.j2
+    dest: /etc/ocsigenserver/conf.d/belenios.conf
+    owner: root
+    group: root
+    mode: 0644
+  notify: Restart ocsigenserver
diff --git a/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2 b/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2
new file mode 100644
index 00000000..fa41d367
--- /dev/null
+++ b/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2
@@ -0,0 +1,79 @@
+{{ ansible_header | comment('xml') }}
+
+<!-- -*- Mode: Xml -*- -->
+<ocsigen>
+
+  <server>
+
+    <port>8001</port>
+
+    <logdir>/var/log/belenios</logdir>
+    <datadir>/var/lib/belenios/data</datadir>
+
+    <uploaddir>/var/lib/belenios/upload</uploaddir>
+
+    <!--
+      The following limits are there to avoid flooding the server.
+      <maxuploadfilesize> might need to be increased for handling large
+      elections.
+      <maxconnected> is related to the number of simultaneous voters
+      visiting the server.
+    -->
+    <maxuploadfilesize>1024kB</maxuploadfilesize>
+    <maxconnected>500</maxconnected>
+
+    <commandpipe>/var/run/belenios/ocsigenserver_command</commandpipe>
+
+    <charset>utf-8</charset>
+
+    <findlib path="/usr/lib/ocaml"/>
+
+    <extension findlib-package="ocsigenserver.ext.staticmod"/>
+    <extension findlib-package="ocsigenserver.ext.redirectmod"/>
+
+    <extension findlib-package="ocsigenserver.ext.ocsipersist-sqlite">
+      <database file="/var/lib/belenios/data/ocsidb"/>
+    </extension>
+
+    <extension findlib-package="eliom.server"/>
+    <extension findlib-package="belenios-platform-native"/>
+
+    <host charset="utf-8" hostfilter="*" defaulthostname="{{ belenios.domain }}">
+      <!-- <redirect suburl="^$" dest="http://www.example.org"/> -->
+      <site path="static" charset="utf-8">
+        <static dir="/usr/share/belenios-server" cache="0"/>
+      </site>
+      <site path="monitor">
+        <eliom findlib-package="eliom.server.monitor.start"/>
+      </site>
+      <eliom findlib-package="belenios-server">
+        <!-- Domain name used in Message-ID -->
+        <domain name="https://{{ belenios.domain }}/"/>
+        <!--
+          The following can be adjusted to the capacity of your system.
+          If <maxrequestbodysizeinmemory> is too small, large elections
+          might fail, in particular with so-called alternative questions
+          with many voters.
+          <maxmailsatonce> depends heavily on how sending emails is
+          handled by your system.
+        -->
+        <maxrequestbodysizeinmemory value="1048576"/>
+        <maxmailsatonce value="1000"/>
+        <uuid length="14"/>
+        <gdpr uri="https://www.belenios.org/rgpd.html"/>
+        <contact uri="mailto:{{ belenios.email_contact }}"/>
+        <server mail="{{ belenios.email_from }}"/>
+        <auth name="{{ belenios.cas.name }}"><cas server="{{ belenios.cas.server }}"/></auth>
+        <source file="/usr/share/belenios-server/belenios.tar.gz"/>
+        <default-group file="/usr/share/belenios-server/groups/default.json"/>
+        <nh-group file="/usr/share/belenios-server/groups/rfc3526-2048.json"/>
+        <log file="/var/log/belenios/security.log"/>
+        <locales dir="/usr/share/belenios-server/locales"/>
+        <spool dir="/var/lib/belenios/spool"/>
+        <!-- <warning file="/opt/belenios/belenios/_run/warning.html"/> -->
+      </eliom>
+    </host>
+
+  </server>
+
+</ocsigen>
-- 
GitLab


From 094bb497f4a7b630e77149da95e5cf7c0a8fec4f Mon Sep 17 00:00:00 2001
From: ynerant <ynerant@crans.org>
Date: Wed, 17 Feb 2021 12:07:50 +0100
Subject: [PATCH 2/6] [belenios] Sort APT dependencies

Signed-off-by: ynerant <ynerant@crans.org>
---
 roles/belenios/tasks/main.yml | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/roles/belenios/tasks/main.yml b/roles/belenios/tasks/main.yml
index bd80f572..e69ec1b7 100644
--- a/roles/belenios/tasks/main.yml
+++ b/roles/belenios/tasks/main.yml
@@ -6,32 +6,32 @@
     name:
       - bubblewrap
       - build-essential
+      - ca-certificates
+      - cracklib-runtime
+      - jq
+      - libgd-securityimage-perl
       - libgmp-dev
+      - libncurses-dev
       - libpcre3-dev
-      - pkg-config
-      - m4
       - libssl-dev
       - libsqlite3-dev
+      - m4
+      - pkg-config
+      - unzip
       - wget
-      - ca-certificates
       - zip
-      - unzip
-      - libncurses-dev
       - zlib1g-dev
-      - libgd-securityimage-perl
-      - cracklib-runtime
-      - jq
 
       # OCamL build dependencies
       - dune
+      - eliom
       - libatdgen-ocaml-dev
-      - libzarith-ocaml-dev
-      - libcryptokit-ocaml-dev
-      - libcmdliner-ocaml-dev
       - libcalendar-ocaml-dev
-      - eliom
+      - libcmdliner-ocaml-dev
+      - libcryptokit-ocaml-dev
       - libcsv-ocaml-dev
       - libgettext-ocaml-dev
+      - libzarith-ocaml-dev
 
       # Web server dependencies
       - ocsigenserver
-- 
GitLab


From d83613c514988aab0c81166e63f469e4d7eba9bd Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Wed, 17 Feb 2021 23:43:47 +0100
Subject: [PATCH 3/6] [belenios] Use proper network interface names

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 host_vars/belenios.adm.crans.org.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/host_vars/belenios.adm.crans.org.yml b/host_vars/belenios.adm.crans.org.yml
index 92076e1a..2eb6f993 100644
--- a/host_vars/belenios.adm.crans.org.yml
+++ b/host_vars/belenios.adm.crans.org.yml
@@ -1,4 +1,4 @@
 ---
 interfaces:
-  adm: ens18
-  srv_nat: ens19
+  adm: eth0
+  srv_nat: eth1
-- 
GitLab


From 2bdd00b385a6045baaccfaba8d3dd7d28829cd5a Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Wed, 17 Feb 2021 23:44:38 +0100
Subject: [PATCH 4/6] [belenios] Don't need to link the ocsidb file

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 roles/belenios/tasks/main.yml | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/roles/belenios/tasks/main.yml b/roles/belenios/tasks/main.yml
index e69ec1b7..6d037e90 100644
--- a/roles/belenios/tasks/main.yml
+++ b/roles/belenios/tasks/main.yml
@@ -76,15 +76,6 @@
     - "/var/lib/belenios/spool"
     - "/var/log/belenios"
 
-- name: Link ocsigenserver database
-  file:
-    src: "/opt/belenios/_run/lib/ocsidb"
-    path: "/var/lib/belenios/data/ocsidb"
-    owner: ocsigen
-    group: ocsigen
-    mode: 0644
-    state: link
-
 - name: Link belenios directories into proper locations
   file:
     src: "{{ item.src }}"
-- 
GitLab


From 601a52132e5ccebf400709810a73fd88826d5e6f Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Thu, 18 Feb 2021 11:24:40 +0100
Subject: [PATCH 5/6] [belenios] Move ocsigenserver command pipe

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2 b/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2
index fa41d367..f852bb41 100644
--- a/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2
+++ b/roles/belenios/templates/ocsigenserver/conf.d/belenios.conf.j2
@@ -22,7 +22,7 @@
     <maxuploadfilesize>1024kB</maxuploadfilesize>
     <maxconnected>500</maxconnected>
 
-    <commandpipe>/var/run/belenios/ocsigenserver_command</commandpipe>
+    <commandpipe>/var/run/ocsigenserver_command</commandpipe>
 
     <charset>utf-8</charset>
 
-- 
GitLab


From ae163d6bc9caf03afeb4216fa826c0670fc60fdc Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <ynerant@crans.org>
Date: Thu, 18 Feb 2021 11:25:02 +0100
Subject: [PATCH 6/6] [nullmailer] Define allmailfrom to always send mails as
 root

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
---
 group_vars/all/nullmailer.yml   | 1 +
 roles/nullmailer/tasks/main.yml | 6 ++++++
 2 files changed, 7 insertions(+)

diff --git a/group_vars/all/nullmailer.yml b/group_vars/all/nullmailer.yml
index 5c63dbc4..48b48c66 100644
--- a/group_vars/all/nullmailer.yml
+++ b/group_vars/all/nullmailer.yml
@@ -3,3 +3,4 @@ glob_nullmailer:
   root: root@crans.org
   smtp_server: smtp.adm.crans.org
   defaulthost: crans.org
+  allmailfrom: root@crans.org
diff --git a/roles/nullmailer/tasks/main.yml b/roles/nullmailer/tasks/main.yml
index 2d354bba..864b2f5a 100644
--- a/roles/nullmailer/tasks/main.yml
+++ b/roles/nullmailer/tasks/main.yml
@@ -26,3 +26,9 @@
     content: "{{ nullmailer.defaulthost }}\n"
     dest: /etc/nullmailer/defaulthost
     mode: 0644
+
+- name: Set nullmailer allmailfrom
+  copy:
+    content: "{{ nullmailer.allmailfrom }}\n"
+    dest: /etc/nullmailer/allmailfrom
+    mode: 0644
-- 
GitLab