dpkg.preinst 1.7 KB

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