summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ansible/playbook.yml12
-rw-r--r--ansible/roles/agate/tasks/main.yml8
-rw-r--r--ansible/roles/comitium/tasks/main.yml22
-rw-r--r--ansible/roles/gemini/tasks/main.yml44
-rw-r--r--ansible/roles/gemini/templates/openrc/gemini30
-rw-r--r--ansible/vars/comitium.yml1
-rw-r--r--ansible/vars/common.yml3
7 files changed, 120 insertions, 0 deletions
diff --git a/ansible/playbook.yml b/ansible/playbook.yml
index e821fbd..c426dcf 100644
--- a/ansible/playbook.yml
+++ b/ansible/playbook.yml
@@ -21,6 +21,18 @@
- email.yml
- http.yml
+- name: Install gemini
+ hosts: "{{ services.gemini.host }}"
+ become: true
+ roles:
+ - comitium
+ - agate
+ - gemini
+ vars_files:
+ - comitium.yml
+ - common.yml
+ - gemini.yml
+
- name: Install ln
hosts: "{{ services.ln.host }}"
become: true
diff --git a/ansible/roles/agate/tasks/main.yml b/ansible/roles/agate/tasks/main.yml
new file mode 100644
index 0000000..6fe7367
--- /dev/null
+++ b/ansible/roles/agate/tasks/main.yml
@@ -0,0 +1,8 @@
+- name: Install cargo
+ community.general.apk:
+ name: cargo
+
+- name: Install agate with cargo
+ ansible.builtin.command:
+ cmd: cargo install agate
+ creates: /root/.cargo/bin/agate
diff --git a/ansible/roles/comitium/tasks/main.yml b/ansible/roles/comitium/tasks/main.yml
new file mode 100644
index 0000000..da82c6d
--- /dev/null
+++ b/ansible/roles/comitium/tasks/main.yml
@@ -0,0 +1,22 @@
+- name: Install go, make and scdoc
+ community.general.apk:
+ name:
+ - go
+ - make
+ - scdoc
+
+- name: Fetch comitium source code
+ ansible.builtin.git:
+ repo: https://git.sr.ht/~nytpu/comitium
+ dest: "{{ src_dir }}/comitium"
+ version: v{{ comitium_version }}
+ depth: 1
+
+- name: Make
+ community.general.make:
+ chdir: "{{ src_dir }}/comitium"
+
+- name: Make install
+ community.general.make:
+ chdir: "{{ src_dir }}/comitium"
+ target: install
diff --git a/ansible/roles/gemini/tasks/main.yml b/ansible/roles/gemini/tasks/main.yml
new file mode 100644
index 0000000..73d730e
--- /dev/null
+++ b/ansible/roles/gemini/tasks/main.yml
@@ -0,0 +1,44 @@
+- name: Checkout joeac.net source code
+ ansible.builtin.git:
+ repo: https://git.joeac.net/joeac/joeac.net.git
+ dest: "{{ src_dir }}/joeac.net"
+ depth: 1
+ version: main
+
+- name: Run initial comitium refresh
+ register: comitium_refresh
+ ansible.builtin.command:
+ cmd: /usr/local/bin/comitium refresh --data {{ src_dir }}/joeac.net/gemini/comitium-data
+ creates: "{{ src_dir }}/joeac.net/gemini/comitium-data/feed.gmi"
+
+- name: Schedule daily comitium refresh
+ ansible.builtin.cron:
+ special_time: daily
+ job: /usr/local/bin/comitium refresh --data {{ src_dir }}/joeac.net/gemini/comitium-data
+ name: daily comitium refresh for joeac.net capsule
+
+- name: Build joeac.net capsule
+ register: build_capsule
+ community.general.make:
+ chdir: "{{ src_dir }}/joeac.net/gemini"
+
+- name: Install gemini service
+ register: install_service
+ ansible.builtin.template:
+ src: openrc/gemini
+ dest: /etc/init.d/gemini
+ mode: "775"
+
+- name: Start gemini service and configure to start on boot
+ when: not ( comitium_refresh is changed or build_capsule is changed or install_service is changed )
+ ansible.builtin.service:
+ name: gemini
+ enabled: true
+ state: started
+
+- name: Restart gemini service and configure to start on boot
+ when: comitium_refresh is changed or build_capsule is changed or install_service is changed
+ ansible.builtin.service:
+ name: gemini
+ enabled: true
+ state: restarted
diff --git a/ansible/roles/gemini/templates/openrc/gemini b/ansible/roles/gemini/templates/openrc/gemini
new file mode 100644
index 0000000..fbc2cc8
--- /dev/null
+++ b/ansible/roles/gemini/templates/openrc/gemini
@@ -0,0 +1,30 @@
+#!/sbin/openrc-run
+
+description="agate gemini server (serving {{ src_dir }}/joeac.net/gemini/content)"
+
+start()
+{
+ ebegin "Starting agate (serving {{ src_dir }}/joeac.net/gemini/content)"
+ start-stop-daemon --start \
+ --exec /root/.cargo/bin/agate \
+ --background \
+ --stdout /var/log/agate.log \
+ --stderr /var/log/agate.log \
+ --make-pidfile \
+ --pidfile /run/agate.pid \
+ -- \
+ --content {{ src_dir }}/joeac.net/gemini/content/ \
+ --addr 0.0.0.0:1965 \
+ --addr [::]:1965 \
+ --lang en-GB
+ eend $?
+}
+
+stop()
+{
+ ebegin "Stopping agate"
+ start-stop-daemon --stop \
+ --exec /usr/bin/pnpx \
+ --pidfile /run/agate.pid
+ eend $?
+}
diff --git a/ansible/vars/comitium.yml b/ansible/vars/comitium.yml
new file mode 100644
index 0000000..9381880
--- /dev/null
+++ b/ansible/vars/comitium.yml
@@ -0,0 +1 @@
+comitium_version: "1.8.2"
diff --git a/ansible/vars/common.yml b/ansible/vars/common.yml
index 20a268f..df0c0de 100644
--- a/ansible/vars/common.yml
+++ b/ansible/vars/common.yml
@@ -7,6 +7,9 @@ services:
etherpad:
port: 9001
host: blade-canongate
+ gemini:
+ port: 1965
+ host: blade-canongate
http:
port: 8080
host: pi-broughton