# HG changeset patch # User Aleksej Bobylev # Date 1500579646 -10800 # Node ID 8d3e8fb0dbf3f438a3b913c47f26f77679890f49 # Parent 99722514f5fedfdbd7df3c55a84c64bf22a395bf modules/get, modules/install: use "release checksum" too, as defined in packages.info field #9. Checksum from packages.md5 used in verifying downloaded package file, while checksum in packages.info[$9] used in updates checking. diff -r 99722514f5fe -r 8d3e8fb0dbf3 modules/get --- a/modules/get Thu Jun 08 14:47:02 2017 +0300 +++ b/modules/get Thu Jul 20 22:40:46 2017 +0300 @@ -348,11 +348,11 @@ IFS=$'\n' for rep in $PRIORITY; do [ ! -f "$rep/packages.info" ] && continue - # If found, output string "-:" - line=$(awk -F$'\t' -vpkg="$(virtual_pkg "$1" "$rep")" \ - '$1==pkg || $1"-"$2==pkg {printf "%s-%s:%s", $1, $2, $9; exit}' "$rep/packages.info") - if [ -n "$line" ]; then - namever=${line%:*}; pkgsum=${line#*:} + # If found, output string "-" + namever=$(awk -F$'\t' -vpkg="$(virtual_pkg "$1" "$rep")" \ + '$1==pkg || $1"-"$2==pkg {printf "%s-%s", $1, $2; exit}' "$rep/packages.info") + if [ -n "$namever" ]; then + pkgsum=$(awk -vfile="$namever.tazpkg" '{if($2==file)print $1}' $rep/packages.md5) break fi done @@ -360,7 +360,7 @@ debug " rep='$rep'\n namever='$namever'\n pkgsum='$pkgsum'" - if [ -z "$line" ]; then + if [ -z "$namever" ]; then _ 'Unable to find package "%s" in the mirrored packages list.' "$1" >&2 # Retry with "get-package"; prevent looping with 'redo' if [ "$2" != 'redo' ]; then diff -r 99722514f5fe -r 8d3e8fb0dbf3 modules/install --- a/modules/install Thu Jun 08 14:47:02 2017 +0300 +++ b/modules/install Thu Jul 20 22:40:46 2017 +0300 @@ -615,20 +615,34 @@ - # Update installed.info + # Update installed.info ---------------------------------------------------- SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g') + # Remove newlines from some receipts DEPENDS=$(echo $DEPENDS) - PKG_SUM="$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" "$PKGS_DB/installed.$SUM" | cut -d' ' -f1)" + + # Calculate "release checksum": md5sum of file containing md5sums of: + # a) all files, b) receipt, and c) description.txt. + rsumf=$(mktemp) + cp $INSTALLED/$PACKAGE/md5sum $rsumf + md5sum $INSTALLED/$PACKAGE/receipt | sed 's| [^ ]*/| |' >> $rsumf + [ -e "$INSTALLED/$PACKAGE/description.txt" ] && + md5sum $INSTALLED/$PACKAGE/description.txt | sed 's| [^ ]*/| |' >> $rsumf + RSUM=$(md5sum $rsumf | awk '{print $1}') + rm $rsumf + ii="$PKGS_DB/installed.info" + # Remove old entry sed -i "/^$PACKAGE /d" "$ii" + cat >> "$ii" < $ii + TEMP_FILE="$(mktemp)" sort "$ii" > "$TEMP_FILE"; mv -f "$TEMP_FILE" "$ii"; chmod a+r "$ii"; unset ii + # -------------------------------------------------------------------------- cd "$CUR_DIR" footer "$(_ 'Package "%s" (%s) is installed.' "$PACKAGE" "$VERSION$EXTRAVERSION")"