aboutsummaryrefslogtreecommitdiffstats
path: root/roles
diff options
context:
space:
mode:
Diffstat (limited to 'roles')
-rw-r--r--roles/jails/01_ingress/defaults/main.yml2
-rw-r--r--roles/jails/18_komga/defaults/main.yml14
-rw-r--r--roles/jails/18_komga/tasks/main.yml38
-rw-r--r--roles/jails/18_komga/templates/usr_local_bin_convert_pdfs43
-rw-r--r--roles/jails/18_komga/templates/usr_local_bin_komga2
-rw-r--r--roles/jails/18_komga/templates/usr_local_etc_rc.d_komga47
6 files changed, 144 insertions, 2 deletions
diff --git a/roles/jails/01_ingress/defaults/main.yml b/roles/jails/01_ingress/defaults/main.yml
index c8857b1..9761d43 100644
--- a/roles/jails/01_ingress/defaults/main.yml
+++ b/roles/jails/01_ingress/defaults/main.yml
@@ -14,7 +14,7 @@ ingress_routes:
- { host: leolalla.fi, jail: leolalla_fi }
- { host: immich.jan.systems, ip: 192.168.3.3, port: 2283 }
- { host: plex.jan.systems, jail: plex, port: 32400, presets: [streaming] }
- - { host: komga.jan.systems, jail: komga, port: 25600 }
+ - { host: komga.jan.systems, jail: komga }
- { host: goaccess.jan.systems, jail: goaccess }
cert_domains:
diff --git a/roles/jails/18_komga/defaults/main.yml b/roles/jails/18_komga/defaults/main.yml
index c825e51..70d0877 100644
--- a/roles/jails/18_komga/defaults/main.yml
+++ b/roles/jails/18_komga/defaults/main.yml
@@ -2,8 +2,20 @@ userland: "15.0-RELEASE"
zfs:
- name: zroot/jails/volumes/komga_data
- mountpoint: /root/.komga
+ mountpoint: /var/db/komga
nullfs:
- src: /usr/local/jails/volumes/storage/media/manga
dst: /mnt/manga
+
+pkg:
+ - openjdk25-jre-headless
+ - poppler-utils
+ - zip
+
+dirs:
+ - /usr/local/etc/rc.d # no packages to set this up automatically
+ - /usr/local/komga
+
+services:
+ - komga
diff --git a/roles/jails/18_komga/tasks/main.yml b/roles/jails/18_komga/tasks/main.yml
index 2abdaff..b3818e2 100644
--- a/roles/jails/18_komga/tasks/main.yml
+++ b/roles/jails/18_komga/tasks/main.yml
@@ -1,2 +1,40 @@
- import_role:
name: jail
+ tasks_from: jail_setup
+
+- name: Download komga jar
+ shell: |
+ if [ ! -f /usr/local/komga/komga.jar ]; then
+ mkdir -p /usr/local/komga
+ fetch -qo /usr/local/komga/komga.jar https://github.com/gotson/komga/releases/download/1.24.1/komga-1.24.1.jar
+ fi
+ register: _komga_download
+ changed_when: _komga_download.rc == 0 and 'mkdir' in _komga_download.cmd
+
+- name: Deploy komga wrapper script
+ template:
+ src: "{{ jail_role_dir }}/templates/usr_local_bin_komga"
+ dest: /usr/local/bin/komga
+ owner: root
+ group: wheel
+ mode: "0755"
+
+- name: Deploy komga rc.d script
+ template:
+ src: "{{ jail_role_dir }}/templates/usr_local_etc_rc.d_komga"
+ dest: /usr/local/etc/rc.d/komga
+ owner: root
+ group: wheel
+ mode: "0755"
+
+- name: Deploy convert-pdfs script
+ template:
+ src: "{{ jail_role_dir }}/templates/usr_local_bin_convert_pdfs"
+ dest: /usr/local/bin/convert-pdfs
+ owner: root
+ group: wheel
+ mode: "0755"
+
+- import_role:
+ name: jail
+ tasks_from: jail_launch
diff --git a/roles/jails/18_komga/templates/usr_local_bin_convert_pdfs b/roles/jails/18_komga/templates/usr_local_bin_convert_pdfs
new file mode 100644
index 0000000..20ca86c
--- /dev/null
+++ b/roles/jails/18_komga/templates/usr_local_bin_convert_pdfs
@@ -0,0 +1,43 @@
+#!/bin/sh
+set -euo pipefail
+
+DPI="${DPI:-250}" # override: DPI=200 ./convert-pdfs
+JPEG_QUALITY="${Q:-85}" # override: Q=80 ./convert-pdfs
+
+for f in *.pdf; do
+ [ -f "$f" ] || continue
+
+ name="${f%.pdf}"
+ tmpdir="$(mktemp -d "${name}.XXXXXX")"
+
+ echo "Converting $f (DPI=$DPI, Q=$JPEG_QUALITY)..."
+
+ cleanup() { rm -rf "$tmpdir"; }
+ trap cleanup EXIT INT TERM
+
+ pdftoppm -jpeg -r "$DPI" -jpegopt "quality=$JPEG_QUALITY" "$f" "$tmpdir/page"
+
+ if ! ls "$tmpdir"/page-*.jpg >/dev/null 2>&1; then
+ echo "ERROR: pdftoppm produced no JPEG pages for $f"
+ exit 1
+ fi
+
+ tmpcbz="${name}.cbz.tmp"
+ (cd "$tmpdir" && zip -q -r "../$tmpcbz" .)
+
+ if [ ! -s "$tmpcbz" ]; then
+ echo "ERROR: Failed to create CBZ for $f"
+ exit 1
+ fi
+
+ if [ -e "${name}.cbz" ]; then
+ echo "ERROR: ${name}.cbz already exists"
+ exit 1
+ fi
+
+ mv "$tmpcbz" "${name}.cbz"
+
+ trap - EXIT
+ cleanup
+ echo "✔ Converted $f → ${name}.cbz"
+done
diff --git a/roles/jails/18_komga/templates/usr_local_bin_komga b/roles/jails/18_komga/templates/usr_local_bin_komga
new file mode 100644
index 0000000..47cf18c
--- /dev/null
+++ b/roles/jails/18_komga/templates/usr_local_bin_komga
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/local/bin/java -jar /usr/local/komga/komga.jar --server.port=80 --komga.config-dir=/var/db/komga
diff --git a/roles/jails/18_komga/templates/usr_local_etc_rc.d_komga b/roles/jails/18_komga/templates/usr_local_etc_rc.d_komga
new file mode 100644
index 0000000..750b774
--- /dev/null
+++ b/roles/jails/18_komga/templates/usr_local_etc_rc.d_komga
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# PROVIDE: komga
+# REQUIRE: NETWORKING
+# KEYWORD: shutdown
+
+. /etc/rc.subr
+
+name="komga"
+rcvar="komga_enable"
+pidfile="/var/run/${name}.pid"
+
+load_rc_config "$name"
+
+: ${komga_enable:="NO"}
+
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+
+komga_start()
+{
+ echo "Starting ${name}..."
+ daemon -p "${pidfile}" -o /var/log/komga.log \
+ /usr/local/bin/komga
+}
+
+komga_stop()
+{
+ if [ -f "${pidfile}" ]; then
+ echo "Stopping ${name}..."
+ kill "$(cat "${pidfile}")" 2>/dev/null
+ rm -f "${pidfile}"
+ fi
+}
+
+komga_status()
+{
+ if [ -f "${pidfile}" ] && kill -0 "$(cat "${pidfile}")" 2>/dev/null; then
+ echo "${name} is running as pid $(cat "${pidfile}")"
+ else
+ echo "${name} is not running"
+ return 1
+ fi
+}
+
+run_rc_command "$1"