From d1cabdfa1e6cc3add67b75e505404d1cac79da2c Mon Sep 17 00:00:00 2001
From: Evangelos Foutras <evangelos@foutrelis.com>
Date: Fri, 15 Apr 2022 22:06:43 +0300
Subject: [PATCH] rebuilderd_worker: start removing stale chroots

On some build failures, or perhaps when rebooting the boxes while a
build is ongoing, repro chroots can be left behind taking up space.

Add a service with a daily timer to remove week old chroots.
---
 roles/rebuilderd_worker/files/clean-repro         |  3 +++
 roles/rebuilderd_worker/files/clean-repro.service | 10 ++++++++++
 roles/rebuilderd_worker/files/clean-repro.timer   | 10 ++++++++++
 roles/rebuilderd_worker/handlers/main.yml         |  5 +++++
 roles/rebuilderd_worker/tasks/main.yml            | 14 ++++++++++++++
 5 files changed, 42 insertions(+)
 create mode 100644 roles/rebuilderd_worker/files/clean-repro
 create mode 100644 roles/rebuilderd_worker/files/clean-repro.service
 create mode 100644 roles/rebuilderd_worker/files/clean-repro.timer
 create mode 100644 roles/rebuilderd_worker/handlers/main.yml

diff --git a/roles/rebuilderd_worker/files/clean-repro b/roles/rebuilderd_worker/files/clean-repro
new file mode 100644
index 000000000..f07b33769
--- /dev/null
+++ b/roles/rebuilderd_worker/files/clean-repro
@@ -0,0 +1,3 @@
+#!/bin/bash -e
+
+find /var/lib/repro -maxdepth 1 -name '*?_?*' -mtime +6 -exec rm -rf {} +
diff --git a/roles/rebuilderd_worker/files/clean-repro.service b/roles/rebuilderd_worker/files/clean-repro.service
new file mode 100644
index 000000000..dc89c54f6
--- /dev/null
+++ b/roles/rebuilderd_worker/files/clean-repro.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Clean up stale repro chroots
+ConditionPathExists=/var/lib/repro
+
+[Service]
+Type=oneshot
+ExecStart=/usr/local/bin/clean-repro
+Nice=19
+IOSchedulingClass=best-effort
+IOSchedulingPriority=7
diff --git a/roles/rebuilderd_worker/files/clean-repro.timer b/roles/rebuilderd_worker/files/clean-repro.timer
new file mode 100644
index 000000000..cfa6d2438
--- /dev/null
+++ b/roles/rebuilderd_worker/files/clean-repro.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Daily repro cleanup
+
+[Timer]
+OnCalendar=daily
+RandomizedDelaySec=12h
+Persistent=true
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/rebuilderd_worker/handlers/main.yml b/roles/rebuilderd_worker/handlers/main.yml
new file mode 100644
index 000000000..039b26571
--- /dev/null
+++ b/roles/rebuilderd_worker/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+
+- name: daemon reload
+  systemd:
+    daemon-reload: true
diff --git a/roles/rebuilderd_worker/tasks/main.yml b/roles/rebuilderd_worker/tasks/main.yml
index 379629597..c838137a4 100644
--- a/roles/rebuilderd_worker/tasks/main.yml
+++ b/roles/rebuilderd_worker/tasks/main.yml
@@ -13,3 +13,17 @@
 - name: enable and start rebuilderd-worker@{{ item }}
   systemd: name=rebuilderd-worker@{{ item }} enabled=yes state=started
   with_items: '{{ rebuilderd_workers }}'
+
+- name: install cleanup script
+  copy: src=clean-repro dest=/usr/local/bin/clean-repro owner=root group=root mode=0755
+
+- name: install cleanup units
+  copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644
+  loop:
+    - clean-repro.timer
+    - clean-repro.service
+  notify:
+    - daemon reload
+
+- name: start and enable cleanup timer
+  service: name=clean-repro.timer enabled=yes state=started
-- 
GitLab