From 003303a0658832a3b54797fa340e875a30883b26 Mon Sep 17 00:00:00 2001 From: Silvie Chlupova Date: Fri, 11 Sep 2020 14:24:39 +0200 Subject: [PATCH] Garbage collection script This makes subsequent git clones from the dist-git machine much more IO effective and faster. It also saves disk space. It cleans up all unnecessary files. The dist-git-gc script will run monthly. --- configs/dist-git/dist-git.conf | 3 +++ configs/systemd/dist-git-gc.service | 9 +++++++++ configs/systemd/dist-git-gc.timer | 8 ++++++++ dist-git.spec | 3 +++ scripts/dist-git/dist-git-gc | 11 +++++++++++ 5 files changed, 34 insertions(+) create mode 100644 configs/systemd/dist-git-gc.service create mode 100644 configs/systemd/dist-git-gc.timer create mode 100755 scripts/dist-git/dist-git-gc diff --git a/configs/dist-git/dist-git.conf b/configs/dist-git/dist-git.conf index 3667618..c5b9adf 100644 --- a/configs/dist-git/dist-git.conf +++ b/configs/dist-git/dist-git.conf @@ -7,6 +7,9 @@ git_author_email = rel-eng@lists.fedoraproject.org lookaside_dir = /var/lib/dist-git/cache/lookaside/pkgs gitroot_dir = /var/lib/dist-git/git +# relates to the dist-git-gc script (and timer), +# we need to dive 2 levels from gitroot_dir in the directory structure +git_gc_depth = 2 gitolite = True grok = True diff --git a/configs/systemd/dist-git-gc.service b/configs/systemd/dist-git-gc.service new file mode 100644 index 0000000..5203fc5 --- /dev/null +++ b/configs/systemd/dist-git-gc.service @@ -0,0 +1,9 @@ +[Unit] +Description=Git Repositories Clean Up + +[Service] +Type=oneshot +ExecStart=/usr/bin/dist-git-gc + +[Install] +WantedBy=multi-user.target diff --git a/configs/systemd/dist-git-gc.timer b/configs/systemd/dist-git-gc.timer new file mode 100644 index 0000000..fbdfcf9 --- /dev/null +++ b/configs/systemd/dist-git-gc.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Git Repositories Clean Up Timer + +[Timer] +OnCalendar=monthly + +[Install] +WantedBy=timers.target diff --git a/dist-git.spec b/dist-git.spec index fc770fd..cb1ceb9 100644 --- a/dist-git.spec +++ b/dist-git.spec @@ -165,6 +165,7 @@ ln -s %{_datadir}/dist-git/setup_git_package %{buildroot}%{_bindir}/setup_git_pa ln -s %{_datadir}/dist-git/mkbranch %{buildroot}%{_bindir}/mkbranch ln -s %{_datadir}/dist-git/mkbranch_branching %{buildroot}%{_bindir}/mkbranch_branching ln -s %{_datadir}/dist-git/remove_unused_sources %{buildroot}%{_bindir}/remove_unused_sources +mv %{buildroot}%{_datadir}/dist-git/dist-git-gc %{buildroot}%{_bindir}/dist-git-gc # ------------------------------------------------------------------------------ # SELinux @@ -226,6 +227,8 @@ fi %{_unitdir}/dist-git@.service %{_unitdir}/dist-git.socket +%{_unitdir}/dist-git-gc.service +%{_unitdir}/dist-git-gc.timer # ------------------------------------------------------------------------------ # /var/lib/ ...... dynamic persistent files diff --git a/scripts/dist-git/dist-git-gc b/scripts/dist-git/dist-git-gc new file mode 100755 index 0000000..4e5547d --- /dev/null +++ b/scripts/dist-git/dist-git-gc @@ -0,0 +1,11 @@ +#!/usr/bin/bash +# Cleanup unnecessary files +# The default DEPTH is 2 because the directory path is /var/lib/dist-git/git/rpms/ + +REPODIR=$(crudini --get dist-git.conf dist-git gitroot_dir) +DEPTH=$(crudini --get dist-git.conf dist-git git_gc_depth) + +find "$REPODIR" -mindepth "$DEPTH" -maxdepth "$DEPTH" -type d | + while read -r DIRECTORY; do + (cd "$DIRECTORY" && git gc) + done