# # Delete a package version from dpkg_archive # Script run by ssh to delete a package # Works in bash and dash # #set -x set -e error() { echo ERROR: $* exit 1; } delete_dir() { if [ -e "$1" ] ; then chmod -R u+w "$1" rm -rf "$1" fi if [ -L "$1" ] ; then rm -rf "$1" fi } # User options tagForDeletion="" removeTag="" while getopts DTK arg ; do case $arg in D) set -x ;; T) tagForDeletion=1 ;; K) removeTag=1 ;; *) error Unknown option: $arg ;; esac done shift $(($OPTIND - 1)) # User arguments pname=${1:?Need package name} pver=${2:?Need package version} dpkg="$HOME/dpkg_archive" [ -d $dpkg ] || error dpkg_archive not found # # Names of working directories # olddir="$dpkg/${pname}/${pver}.DELETE.TMPDIR" realdir="$dpkg/${pname}/${pver}" pkgdir="$dpkg/${pname}" if [ -n "${tagForDeletion}" ] ; then # # Tag for delayed deletion # Touch a tagfile - the creation stamp will be used # tagFile="$realdir/.deletepkg" if [ -d "$realdir" ] ; then chmod u+w "$realdir" rm -f "$tagFile" touch "$tagFile" chmod u-w "$realdir" fi elif [ -n "${removeTag}" ] ; then # # Remove any tag thats present # tagFile="$realdir/.deletepkg" if [ -d "$realdir" ] ; then chmod u+w "$realdir" rm -f "$tagFile" chmod u-w "$realdir" fi else # # Create package directory # Ensure its writable mkdir -p "$pkgdir" chmod u+w "$pkgdir" # # Delete possible tmp directory delete_dir "$olddir" # # Rename and then delete - minimize diruption # Then delete the old # if [ -e "$realdir" ] ; then mv "$realdir" "$olddir" delete_dir "$olddir" elif [ -L "$realdir" ] ; then delete_dir "$realdir" fi # # Try to remove package directory too # rmdir --ignore-fail-on-non-empty -p "$pkgdir" 2>/dev/null || true # Fix up permissions on the package and package-version if [ -d "$pkgdir" ] ; then chmod a-w "$pkgdir" fi fi