#!/bin/bash
# Update the 'locate' database used for the search backend on slackware.uk.

# Default configuration.
SCANDIR="/data/depository"
DBFILE="/data/sites/slackware.uk/files/repository-search/search.db"
RUNAS_GROUP="depository"

# Only allow one copy of the script to run at any time.
# shellcheck disable=SC2154
if [[ "$FLOCK" != "$0" ]]; then
  # shellcheck disable=SC2093
  exec env FLOCK="$0" flock -E 10 -e -n "$0" "$0" "$@"
  ERR="$?"
  if (( ERR == 10 )); then
    # File is locked, exit now.
    exit 0
  elif (( ERR > 0 )); then
    printf "%s: %s\\n" "${0##*/}" "flock execution error" >&2
    exit 1
  fi
fi

RAND="$$$RANDOM"

if ionice -c3 nice -n 19 sg "$RUNAS_GROUP" -c "/opt/bin/updatedb -l no -o \"$DBFILE.$RAND\" -U \"$SCANDIR\" >/dev/null 2>&1"; then
  mv "$DBFILE.$RAND" "$DBFILE" 2>/dev/null || {
    printf "%s: %s\\n" "${0##*/}" "failed to move mirrors search database into place" >&2
    rm -f "$DBFILE.$RAND"
    exit 1
  }
else
  printf "%s: %s\\n" "${0##*/}" "mirrors search database update failed" >&2
  rm -f "$DBFILE.$RAND"
  exit 1
fi

exit 0
