postinst 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #!/bin/sh -
  2. set -e
  3. dupdaemonhelp () {
  4. cat <<'END'
  5. Some daemons and similar services whose scripts have links in the
  6. /etc/rcN.d directories have both start (S) and stop (K) links in
  7. some runlevels. Thus these services get stopped and immediately
  8. restarted at some runlevel changes, which is probably not what
  9. you want. I can remove the probably-spurious K links if you like.
  10. Type Y to remove then, N to leave them, or L to list them.
  11. If you don't know what to do you can say N now and then delete
  12. them by hand later.
  13. END
  14. }
  15. if [ "x$1" = xconfigure ]; then
  16. case "$2" in
  17. 0.* | 1.0.* | 1.1.0 | 1.1.0[^0-9]* | '' )
  18. for f in 0 1 2 3 4 5 6
  19. do
  20. cd /etc/rc$f.d
  21. for g in K[0-9][0-9]*
  22. do
  23. if [ -n "`echo \"x$g\" | tr -d 0-9A-Za-z_-`" ]
  24. then
  25. continue
  26. fi
  27. h="`echo $g | sed -e 's/^K/S/'`"
  28. if ! [ -L $h -a -L $g ] \
  29. || [ "`ls -Li $g 2>/dev/null | awk '{print $1}'`" != \
  30. "`ls -Li $h 2>/dev/null | awk '{print $1}'`" ]
  31. then
  32. continue
  33. fi
  34. removes="$removes rc$f.d/$g"
  35. done
  36. done
  37. if [ -n "$removes" ]
  38. then
  39. cd /etc
  40. dupdaemonhelp
  41. while [ -n "$removes" ]
  42. do
  43. echo -n 'y=remove, n=leave, l=list, h=help ? '
  44. read response
  45. case "$response" in
  46. [Yy]*)
  47. echo "Removing duplicate K links ..."
  48. rm -v $removes
  49. removes=""
  50. ;;
  51. [Nn]*)
  52. echo -e "OK, leaving them.\n"
  53. removes=""
  54. ;;
  55. [Ll]*)
  56. echo
  57. echo $removes
  58. echo
  59. ;;
  60. [Hh]*)
  61. dupdaemonhelp
  62. ;;
  63. esac
  64. done
  65. fi
  66. ;;
  67. 1.1.6 | 1.1.6elf | 1.2.[0123] | 1.2.[0123]elf )
  68. response=''
  69. while [ -z "$response" ]; do
  70. echo -n '
  71. The version of dpkg you'\''re upgrading from had a problem with the
  72. install-info program used to maintain the /usr/info/dir file. It may
  73. have corrupted the file, for example by placing new entries for the
  74. menu in it before the `* Menu'\'' line (thus making them ineffective) or
  75. by creating several identical sections.
  76. I can try to sort these problems out, but beware that this process is
  77. not guaranteed not to mess up a dir file which has things that look
  78. like menu entries in the introductory paragraphs. The distributed dir
  79. files do not do this, so if you haven'\''t edited /usr/info/dir it'\''s
  80. almost certainly safe to say `yes'\'' to the next question.
  81. If you say `no'\'' you may wish to check and/or edit /usr/info/dir yourself.
  82. Try to check/repair /usr/info/dir automatically ? [y/n] '
  83. read response
  84. case "$response" in
  85. [Yy]* | '') response=yes ;;
  86. [Nn]*) response=no ;;
  87. *) response='' ;;
  88. esac
  89. done
  90. if [ "$response" = yes ]; then
  91. echo "
  92. Checking/repairing /usr/info/dir ..."
  93. cleanup-info --unsafe
  94. echo
  95. else
  96. echo "
  97. OK.
  98. "
  99. fi
  100. ;;
  101. esac
  102. fi
  103. cd /var/lib/dpkg
  104. if ! test -f diversions
  105. then
  106. touch diversions
  107. fi
  108. rm -f /usr/bin/dpkg-deb.dist
  109. if test -d /DEBIAN
  110. then
  111. echo 'Removing /DEBIAN directory which was created by a dpkg bug ...'
  112. rm -r /DEBIAN
  113. fi
  114. if test -d /usr/lib/dpkg/methods/hd -a ! -x /usr/lib/dpkg/methods/hd/install
  115. then
  116. echo \
  117. 'Warning - /usr/lib/dpkg/methods/hd/ exists, but .../hd/install does not.
  118. This is probably left over from some previous manual installation of
  119. now-obsolete dselect-related software. I suggest you remove the whole
  120. /usr/lib/dpkg/methods/hd directory and all its contents; otherwise dselect
  121. is unlikely to function correctly.'
  122. fi
  123. if test -f /var/lib/dpkg/status; then exit 0; fi
  124. cd /var/adm/dpkg
  125. if [ ! -f status ]
  126. then
  127. echo 'Adding "status" file to dpkg system database ...'
  128. rm -f dpp.$$ || true
  129. ls -1 deb/*.control >dpp.$$
  130. sed -e 's:^deb/::; s:\.control$: Install OK Installed:;' \
  131. <dpp.$$ >status.new
  132. rm dpp.$$
  133. mv status.new status
  134. fi
  135. if grep '{' deb/*.control >/dev/null
  136. then
  137. echo 'Fixing up curly brackets in control files ...'
  138. perl -i~ -pe \
  139. 'y/{}//d if m/^(depends|recommended|optional|conflicts):/i' \
  140. deb/*.control
  141. rm deb/*.control~
  142. fi
  143. if grep 'Optional: idanish ifrench' deb/ispell.control >/dev/null 2>&1
  144. then
  145. echo 'Fixing up broken ispell.control file ...'
  146. perl -i~ -pe 's/ /, /g, s/,// if m/^Optional:/' deb/ispell.control
  147. fi
  148. newdb=/var/lib/dpkg
  149. echo "Moving datatabase /var/adm/dpkg to $newdb and changing format ..."
  150. exec 4>$newdb/status.new
  151. exec 5<status
  152. while read <&5 package status
  153. do
  154. echo " processing $package ..."
  155. if test -f deb/$package.control
  156. then
  157. egrep . deb/$package.control >&4
  158. else
  159. echo >&4 "Package: $package"
  160. fi
  161. echo >&4 "Status: $status"
  162. if test -f deb/$package.conffiles -a -s deb/$package.conffiles
  163. then
  164. echo >&4 "Conffiles:"
  165. exec 6<deb/$package.conffiles
  166. while read <&6 cfile
  167. do
  168. expr match "$cfile" "[^ ]" >/dev/null || continue
  169. if test -f deb/$package.hash
  170. then
  171. hash="`grep \"^$cfile \" <deb/$package.hash || \
  172. test $? = 1`"
  173. else
  174. hash=''
  175. fi
  176. test -n "$hash" || hash="$cfile -"
  177. expr match "$hash" / >/dev/null || hash="/$hash"
  178. echo >&4 " $hash"
  179. done
  180. elif test -f deb/$package.hash -a -s deb/$package.conffiles
  181. then
  182. echo >&4 "Conffiles:"
  183. sed -ne '/^[^\/]/ s:^:/:; s/^/ /; / ./p' >&4 deb/$package.hash
  184. fi
  185. echo >&4
  186. for s in {pre,post}{rm,inst} list
  187. do
  188. if test -f deb/$package.$s
  189. then
  190. mv deb/$package.$s $newdb/info/$package.$s
  191. fi
  192. done
  193. done
  194. if ! test -f $newdb/available
  195. then
  196. if test -f database
  197. then
  198. cp database $newdb/available
  199. else
  200. touch $newdb/available
  201. fi
  202. fi
  203. mv $newdb/status.new $newdb/status