Rev 1044 | Rev 6475 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
## Receive a package version into dpkg_archive# Script run by ssh to receive a compressed package and to save it# Works in bash and dash## Assumes that compressed tar output as stdin##set -xset -eerror() {echo ERROR: $*exit 1;}delete_dir() {if [ -d "$1" ] ; thenchmod -R u+w "$1"rm -rf "$1"fi}# User optionsLinkName=while getopts DL: arg ; docase $arg inD) set -x ;;L) LinkName="$OPTARG" ;;*) error Unknown option: $arg ;;esacdoneshift $(($OPTIND - 1))# User argumentspname=${1:?Need package name}pver=${2:?Need package version}dpkg="dpkg_archive"[ -d $dpkg ] || error dpkg_archive not found## Names of working directories#newdir="$dpkg/${pname}/${pver}.NEW.TMPDIR"olddir="$dpkg/${pname}/${pver}.OLD.TMPDIR"realdir="$dpkg/${pname}/${pver}"pkgdir="$dpkg/${pname}"## Create package directory# Ensure its writablemkdir -p "$pkgdir"chmod u+w "$pkgdir"## Delete possible tmp directorydelete_dir "$newdir"delete_dir "$olddir"mkdir -p "$newdir"chmod u+w "$newdir"## De-tar the input stream into a working spacetar -zx -C "$newdir"[ -f "$newdir/descpkg" ] || error Received package does not have descpkg file## Swap in the new directory - minimize diruption# Then delete the old#if [ -d "$realdir" ] ; thenmv "$realdir" "$olddir"fimv "$newdir" "$realdir"# Delete the original directorydelete_dir "$olddir"# Process possible linkif [ "$LinkName" ] ; thenrm -f "$pkgdir/$LinkName"ln -s "$pver" "$pkgdir/$LinkName"fi# Fix up permissions on the package and package-versionchmod a-w "$pkgdir"chmod a-w "$realdir"