# # Receive a symlink to a package # Script run by ssh create a symlink to a package version # Works in bash and dash # #set -x set -e error() { echo ERROR: $* exit 1; } delete_dir() { if [ -d "$1" ] ; then chmod -R u+w "$1" rm -rf "$1" fi } # User options while getopts D arg ; do case $arg in D) set -x ;; *) error Unknown option: $arg ;; esac done shift $(($OPTIND - 1)) # User arguments pname=${1:?Need file name} pver=${2:?Need package version} tver=${3:?Need target package version} dpkg="dpkg_archive" [ -d $dpkg ] || error dpkg_archive not found dpkg="dpkg_archive" [ -d $dpkg ] || error dpkg_archive not found # # Names of working directories # realdir="$dpkg/${pname}/${pver}" newdir="$dpkg/${pname}/${pver}.NEW.TMPDIR" olddir="$dpkg/${pname}/${pver}.OLD.TMPDIR" pkgdir="$dpkg/${pname}" # # Create package directory # Ensure its writable mkdir -p "$pkgdir" chmod u+w "$pkgdir" # # Delete possible tmp directory delete_dir "$newdir" delete_dir "$olddir" # # Create the temp symlink # ln -s "$tver" "$newdir" # # Swap in the new directory - minimize disruption # Then delete the old # if [ -d "$realdir" ] ; then mv "$realdir" "$olddir" fi mv "$newdir" "$realdir" # Delete the original directory delete_dir "$olddir" # Fix up permissions on the package and package-version chmod a-w "$pkgdir"