From 35f93aa506965c7e3935ca7bc706e7a6f32fcd40 Mon Sep 17 00:00:00 2001 From: Max Mehl Date: Fri, 26 May 2023 11:04:55 +0200 Subject: [PATCH] initial commit --- .gitmodules | 3 + files/seafile-mirror | 1 + tasks/main.yml | 104 ++++++++++++++++++++++++++ templates/seaf-daemon.service.j2 | 18 +++++ templates/seafile_mirror.conf.yaml.j2 | 1 + 5 files changed, 127 insertions(+) create mode 100644 .gitmodules create mode 160000 files/seafile-mirror create mode 100755 tasks/main.yml create mode 100755 templates/seaf-daemon.service.j2 create mode 100755 templates/seafile_mirror.conf.yaml.j2 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bebddf0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "files/seafile-mirror"] + path = files/seafile-mirror + url = https://src.mehl.mx/mxmehl/seafile-mirror.git diff --git a/files/seafile-mirror b/files/seafile-mirror new file mode 160000 index 0000000..eaa92ea --- /dev/null +++ b/files/seafile-mirror @@ -0,0 +1 @@ +Subproject commit eaa92ea2d2607e22d3a942fca83aaee2c4739012 diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100755 index 0000000..a456981 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,104 @@ +--- +- name: Ensure local seafile user is configured correctly + include_role: + name: users + apply: + become: false + vars: + username: "{{ seafile_local_user.user }}" + password: "{{ seafile_local_user.pass | default('') }}" + +- name: Ensure requirements are installed + apt: + name: + - moreutils # chronic + - python3-yaml + - systemd-container # necessary to use machinectl become_method + - seafile-cli + become: false # need to do this as root + +- name: Register user info of {{ seafile_local_user.user }} + user: + name: "{{ seafile_local_user.user }}" + check_mode: true + register: seafile_local_user_info + +- name: Define directory for Seafile mirror service as fact + set_fact: + seafile_mirror_dir: "{{ seafile_local_user_info.home }}/seafile_mirror" + +- name: Ensure directory for Seafile mirror service exists + file: + path: "{{ seafile_mirror_dir }}/functions" + state: directory + mode: 0755 + recurse: true + +- name: Ensure Seafile mirror script and its functions exists + copy: + src: "seafile-mirror/{{ item.src }}" + dest: "{{ item.dest }}" + mode: 0755 + loop: + - {src: "seafile_mirror.py", dest: "{{ seafile_mirror_dir }}/"} + - {src: "functions/__init__.py", dest: '{{ seafile_mirror_dir }}/functions/'} + - {src: "functions/cachedb.py", dest: '{{ seafile_mirror_dir }}/functions/'} + - {src: "functions/helpers.py", dest: '{{ seafile_mirror_dir }}/functions/'} + - {src: "functions/seafile.py", dest: '{{ seafile_mirror_dir }}/functions/'} + + +- name: Ensure Seafile mirror configuration exists + template: + src: seafile_mirror.conf.yaml.j2 + dest: "{{ seafile_mirror_dir }}/seafile_mirror.conf.yaml" + mode: 0600 + +- name: Ensure cron entry for Seafile mirror service + cron: + name: Seafile Mirror Service + job: "chronic python3 {{ seafile_mirror_dir }}/seafile_mirror.py -c {{ seafile_mirror_dir }} -v" + hour: "23" + minute: "20" + +- name: Ensure user systemd directory exists + file: + path: "{{ seafile_local_user_info.home }}/.config/systemd/user/" + state: directory + mode: 0755 + +- name: Ensure systemd service file is present + template: + src: seaf-daemon.service.j2 + dest: "{{ seafile_local_user_info.home }}/.config/systemd/user/seaf-daemon.service" + mode: 0644 + +- name: Ensure Seafile config dir exists + file: + path: "{{ seafile_local_user_info.home }}/config" + state: directory + mode: 0755 + +- name: Ensure Seafile config dir is initialised + command: + cmd: seaf-cli init -d "{{ seafile_local_user_info.home }}/config" + register: result + changed_when: '"already exists" not in result.stdout' + +- name: "Check whether user is lingering: {{ seafile_local_user.user }}" + stat: + path: "/var/lib/systemd/linger/{{ seafile_local_user.user }}" + register: seafile_local_user_lingering + +- name: Ensure systemd lingering is enabled for user {{ seafile_local_user.user }} + command: loginctl enable-linger {{ seafile_local_user.user }} + become: false + when: not seafile_local_user_lingering.stat.exists + +- name: Ensure systemd service is running and enabled + systemd: + name: seaf-daemon + state: started + enabled: true + daemon_reload: true + scope: user + become_method: machinectl # in order to get XDG_RUNTIME_DIR and user's DBUS session diff --git a/templates/seaf-daemon.service.j2 b/templates/seaf-daemon.service.j2 new file mode 100755 index 0000000..a577507 --- /dev/null +++ b/templates/seaf-daemon.service.j2 @@ -0,0 +1,18 @@ +[Unit] +Description=Seafile Daemon +After=network.target +After=nfs-client.target +StartLimitIntervalSec=60 +StartLimitBurst=3 + +[Service] +Type=simple +ExecStart=/usr/bin/seaf-daemon -c {{ seafile_local_user_info.home }}/.ccnet -d {{ seafile_local_user_info.home }}/config/seafile-data -w {{ seafile_local_user_info.home }}/config/seafile +Restart=always +RestartSec=10 +# Restart every day +RuntimeMaxSec=1d +SyslogIdentifier=seaf-daemon + +[Install] +WantedBy=default.target diff --git a/templates/seafile_mirror.conf.yaml.j2 b/templates/seafile_mirror.conf.yaml.j2 new file mode 100755 index 0000000..6350833 --- /dev/null +++ b/templates/seafile_mirror.conf.yaml.j2 @@ -0,0 +1 @@ +{{seafile_syncs|to_yaml(sort_keys=False)}}