diff options
author | coadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu> | 2015-08-26 03:41:50 -0300 |
---|---|---|
committer | coadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu> | 2015-08-26 03:41:50 -0300 |
commit | bf43cbddbccc51a1147eb37cd7a64762bde4f506 (patch) | |
tree | 3bfc609c9385b00ec9a3fdbfb79de1620c3f99db /extra/lukeshu-xbs/cron-jobs/ftpdir-cleanup | |
parent | 50d2db5c271537d78ea0037fe285d081df38fa02 (diff) |
add copy from the lukeshu/xbs repo
Diffstat (limited to 'extra/lukeshu-xbs/cron-jobs/ftpdir-cleanup')
-rwxr-xr-x | extra/lukeshu-xbs/cron-jobs/ftpdir-cleanup | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/extra/lukeshu-xbs/cron-jobs/ftpdir-cleanup b/extra/lukeshu-xbs/cron-jobs/ftpdir-cleanup new file mode 100755 index 0000000..4063c09 --- /dev/null +++ b/extra/lukeshu-xbs/cron-jobs/ftpdir-cleanup @@ -0,0 +1,96 @@ +#!/bin/bash + +. "$(dirname "$(readlink -e "$0")")/../config" +. "$(dirname "$(readlink -e "$0")")/../db-functions" + +clean_pkg() { + local pkg + local target + + if ! "${CLEANUP_DRYRUN}"; then + for pkg in "$@"; do + if [ -h "$pkg" ]; then + rm -f "$pkg" "$pkg.sig" + else + mv_acl "$pkg" "$CLEANUP_DESTDIR/${pkg##*/}" + if [ -e "$pkg.sig" ]; then + mv_acl "$pkg.sig" "$CLEANUP_DESTDIR/${pkg##*/}.sig" + fi + touch "${CLEANUP_DESTDIR}/${pkg##*/}" + fi + done + fi +} + +script_lock + +for repo in "${PKGREPOS[@]}"; do + for arch in "${ARCHES[@]}"; do + repo_lock "${repo}" "${arch}" || exit 1 + done +done + +"${CLEANUP_DRYRUN}" && warning 'dry run mode is active' + +for repo in "${PKGREPOS[@]}"; do + for arch in "${ARCHES[@]}"; do + if [ ! -f "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" ]; then + continue + fi + # get a list of actual available package files + find "${FTP_BASE}/${repo}/os/${arch}" -xtype f -name "*${PKGEXT}" -printf '%f\n' | sort > "${WORKDIR}/repo-${repo}-${arch}" + # get a list of package files defined in the repo db + bsdtar -xOf "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" | awk '/^%FILENAME%/{getline;print}' | sort > "${WORKDIR}/db-${repo}-${arch}" + + missing_pkgs=($(comm -13 "${WORKDIR}/repo-${repo}-${arch}" "${WORKDIR}/db-${repo}-${arch}")) + if [ ${#missing_pkgs[@]} -ge 1 ]; then + error "Missing packages in [%s] (%s)..." "${repo}" "${arch}" + for missing_pkg in "${missing_pkgs[@]}"; do + msg2 '%s' "${missing_pkg}" + done + fi + + old_pkgs=($(comm -23 "${WORKDIR}/repo-${repo}-${arch}" "${WORKDIR}/db-${repo}-${arch}")) + if [ ${#old_pkgs[@]} -ge 1 ]; then + msg "Removing old packages from [%s] (%s)..." "${repo}" "${arch}" + for old_pkg in "${old_pkgs[@]}"; do + msg2 '%s' "${old_pkg}" + clean_pkg "${FTP_BASE}/${repo}/os/${arch}/${old_pkg}" + done + fi + done +done + +# get a list of all available packages in the pacakge pool +find "$FTP_BASE/${PKGPOOL}" -name "*${PKGEXT}" -printf '%f\n' | sort > "${WORKDIR}/pool" +# create a list of packages in our db +find "${WORKDIR}" -maxdepth 1 -type f -name 'db-*' -exec cat {} \; | sort -u > "${WORKDIR}/db" + +old_pkgs=($(comm -23 "${WORKDIR}/pool" "${WORKDIR}/db")) +if [ ${#old_pkgs[@]} -ge 1 ]; then + msg "Removing old packages from package pool..." + for old_pkg in "${old_pkgs[@]}"; do + msg2 '%s' "${old_pkg}" + clean_pkg "$FTP_BASE/${PKGPOOL}/${old_pkg}" + done +fi + +old_pkgs=($(find "${CLEANUP_DESTDIR}" -type f -name "*${PKGEXT}" -mtime +"${CLEANUP_KEEP}" -printf '%f\n')) +if [ ${#old_pkgs[@]} -ge 1 ]; then + msg "Removing old packages from the cleanup directory..." + for old_pkg in "${old_pkgs[@]}"; do + msg2 '%s' "${old_pkg}" + if ! "${CLEANUP_DRYRUN}"; then + rm -f "${CLEANUP_DESTDIR}/${old_pkg}" + rm -f "${CLEANUP_DESTDIR}/${old_pkg}.sig" + fi + done +fi + +for repo in "${PKGREPOS[@]}"; do + for arch in "${ARCHES[@]}"; do + repo_unlock "${repo}" "${arch}" + done +done + +script_unlock |