dpkg.prerm 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/sh -e
  2. # This script can be called in the following ways:
  3. #
  4. # Before the package is removed:
  5. # <prerm> remove
  6. #
  7. # Before an upgrade:
  8. # <old-prerm> upgrade <new-version>
  9. # if that fails:
  10. # <new-prerm> failed-upgrade <old-version>
  11. #
  12. #
  13. # Before package is deconfigured while dependency is replaced due to conflict:
  14. # <prerm> deconfigure in-favour <new-package> <version>
  15. # removing <old-package> <version>
  16. #
  17. # Before the package is replaced due to conflict:
  18. # <prerm> remove in-favour <new-package> <version>
  19. ensure_no_triggers_noawait()
  20. {
  21. admindir=${DPKG_ADMINDIR:-/var/lib/dpkg}
  22. pkgadmindir=$admindir/info
  23. trig_noawait=$(find "$pkgadmindir" -name "*.triggers" -type f | \
  24. xargs -r grep -El "^(interest|activate)-(no)?await" | \
  25. sed -e 's,^.*/\([^/.:]\+\)[^/]\+$,\1,')
  26. # Abort if we cannot possibly downgrade
  27. if [ -n "$trig_noawait" ]; then
  28. cat <<- MSG
  29. dpkg: error: You have packages using the "interest-noawait" and/or
  30. "activate-noawait" trigger directives but the dpkg version that
  31. you're trying to downgrade to doesn't support them. Aborting
  32. downgrade.
  33. List of affected packages:
  34. $trig_noawait
  35. MSG
  36. exit 1
  37. fi
  38. bad_triggers_files=$(find "$admindir/triggers" -type f | \
  39. xargs -r grep -l "/noawait$" || true)
  40. if [ -n "$bad_triggers_files" ]; then
  41. cat <<- MSG
  42. dpkg: error: Some internal trigger files unexpectedly reference
  43. packages tagged with "/noawait" while their corresponding
  44. infodb files doesn't seem to contain any "interest-noawait"
  45. directive. Aborting the downgrade as those tags are not supported
  46. by the version you're trying to downgrade to.
  47. List of internal trigger files that are affected:
  48. $bad_triggers_files
  49. MSG
  50. exit 1
  51. fi
  52. }
  53. case "$1" in
  54. upgrade)
  55. # Allow the downgrade only if no package is using the
  56. # (interest|activate)-noawait trigger directives
  57. if dpkg --compare-versions "$2" lt 1.16.1~; then
  58. ensure_no_triggers_noawait
  59. fi
  60. ;;
  61. remove|failed-upgrade|deconfigure)
  62. ;;
  63. *)
  64. echo "$0 called with unknown argument \`$1'" 1>&2
  65. exit 1
  66. ;;
  67. esac
  68. #DEBHELPER#
  69. exit 0