dpkg.preinst 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/bin/sh
  2. # This script can be called in the following ways:
  3. #
  4. # Before the package is installed:
  5. # <new-preinst> install
  6. #
  7. # Before removed package is upgraded:
  8. # <new-preinst> install <old-version> <new-version>
  9. #
  10. # Before the package is upgraded:
  11. # <new-preinst> upgrade <old-version> <new-version>
  12. #
  13. #
  14. # If postrm fails during upgrade or fails on failed upgrade:
  15. # <old-preinst> abort-upgrade <new-version>
  16. set -e
  17. # Handle upgrades from pre-conffile dpkg.cfg
  18. upgrade_dpkg_non_conffile()
  19. {
  20. if [ -r /etc/dpkg/dpkg.cfg ]; then
  21. dpkg_cfg_md5="535552ad5ee9145dbc7a34c264df4e59 /etc/dpkg/dpkg.cfg"
  22. if echo "$dpkg_cfg_md5" | md5sum -c >/dev/null 2>&1; then
  23. echo "Removing non-modified dpkg.cfg to be replaced by a conffile ..."
  24. rm -f /etc/dpkg/dpkg.cfg
  25. fi
  26. fi
  27. }
  28. kill_bad_alternatives () {
  29. local IFS=""
  30. admindir=${DPKG_ADMINDIR:-/var/lib/dpkg}
  31. ALTDIR="$admindir/alternatives"
  32. for alt in $ALTDIR/*; do
  33. if [ ! -f $alt ]; then
  34. # In case it's been removed by the code below, or in case
  35. # it's not a real file
  36. continue
  37. fi
  38. {
  39. read mode || continue
  40. read mainlink || continue
  41. while true; do
  42. read slave || break
  43. if [ "$slave" = "" ]; then
  44. break
  45. fi
  46. if [ -e "$ALTDIR/$slave" ]; then
  47. echo "Removing conflicting master alternative $slave (it is slave of $(basename $alt))..."
  48. rm -f "$ALTDIR/$slave"
  49. fi
  50. read slavelink || break
  51. done
  52. } <$alt
  53. done
  54. }
  55. case "$1" in
  56. install)
  57. ;;
  58. upgrade)
  59. # Cleanup bad alternatives that would choke with new
  60. # update-alternatives (see #530633, #531611, #532739, #521760)
  61. if dpkg --compare-versions "$2" lt 1.15.3; then
  62. kill_bad_alternatives
  63. fi
  64. case "$2" in
  65. # Upgrade from pre-conffile dpkg.cfg
  66. 1.9.21 | 1.10.* )
  67. upgrade_dpkg_non_conffile
  68. ;;
  69. esac
  70. ;;
  71. abort-upgrade)
  72. ;;
  73. *)
  74. echo "$0 called with unknown argument '$1'" 1>&2
  75. exit 1
  76. ;;
  77. esac
  78. #DEBHELPER#
  79. exit 0