#!/bin/bash _exec_locked() { local tmp_dir="/var/tmp" local lvm_snapshot_lock_file="/.entropy_locks/vg_chroots-lv_chroots-snapshot.lock" local snapshot_lock_file="${tmp_dir}/.emerge.snapshot.lock" local matter_lock_file="${tmp_dir}/.matter_resource.lock" if [ ! -d "${tmp_dir}" ]; then echo "${tmp_dir} is missing, creating it..." >&2 mkdir -p "${tmp_dir}" fi flock -x -n "${matter_lock_file}" true rc=${?} if [ "${rc}" != "0" ]; then echo >&2 echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >&2 echo "Matter or the Backup Script is running on this chroot" >&2 echo "Please be patient, it will eventually terminate..." >&2 echo "Snapshot lock file = ${snapshot_lock_file}" >&2 echo "Matter lock file = ${matter_lock_file}" >&2 echo >&2 echo "This ${1} instance will terminate NOW" >&2 echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >&2 echo >&2 return 1 else # acquire snapshot read lock in non-blocking, shared mode ( flock -s -n 9 || { echo "Hello there," >&2; echo "a chroot snapshot is in progress..." >&2; echo "Try again later." >&2; exit 1; } flock -s --timeout=120 10 if [ "${?}" != "0" ]; then echo >&2 echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >&2 echo "The LVM lock of the Backup Script is being held for 2 minutes" >&2 echo "This should not happen. Please contact lxnay@sabayon.org and" >&2 echo "stop any activity NOW. However, if you're in an emergency" >&2 echo "Just rm ${lvm_snapshot_lock_file} and continue." >&2 echo "Please note that this will cause inconsistent backups." >&2 echo >&2 echo "This instance will terminate NOW" >&2 echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >&2 echo >&2 exit 1 fi "${@}" exit ${?} ) 9> "${snapshot_lock_file}" 10>"${lvm_snapshot_lock_file}" return ${?} fi } emerge() { _exec_locked "/usr/bin/emerge" --quiet-build=y --oneshot "${@}" return ${?} } eit() { _exec_locked "/usr/bin/eit" "${@}" return ${?} } # Alias configuration alias cosmos=/particles/cosmos/cosmos