uninstall.sh 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #!/bin/bash
  2. #
  3. # uninstall: GoAhead uninstall script
  4. #
  5. # Copyright (c) Embedthis Software LLC, 2003-2014. All Rights Reserved.
  6. #
  7. # Usage: uninstall [configFile]
  8. #
  9. ################################################################################
  10. HOME=`pwd`
  11. FMT=
  12. PRODUCT="${settings.name}"
  13. COMPANY="${settings.company}"
  14. NAME="${settings.title}"
  15. VERSION="${settings.version}"
  16. OS="${platform.os}"
  17. ROOT_PREFIX="${prefixes.root}"
  18. BASE_PREFIX="${prefixes.base}"
  19. STATE_PREFIX="${prefixes.state}"
  20. APP_PREFIX="${prefixes.app}"
  21. VAPP_PREFIX="${prefixes.vapp}"
  22. BIN_PREFIX="${prefixes.bin}"
  23. SBIN_PREFIX="${prefixes.sbin}"
  24. ETC_PREFIX="${prefixes.etc}"
  25. INC_PREFIX="${prefixes.inc}"
  26. LIB_PREFIX="${prefixes.lib}"
  27. MAN_PREFIX="${prefixes.man}"
  28. WEB_PREFIX="${prefixes.web}"
  29. LOG_PREFIX="${prefixes.log}"
  30. SPL_PREFIX="${prefixes.spool}"
  31. CACHE_PREFIX="${prefixes.cache}"
  32. ABIN="${VAPP_PREFIX}/bin"
  33. AINC="${VAPP_PREFIX}/in"
  34. removebin=Y
  35. headless=${HEADLESS:-0}
  36. PATH=$PATH:/sbin:/usr/sbin
  37. export CYGWIN=nodosfilewarning
  38. unset CDPATH
  39. ###############################################################################
  40. #
  41. # Get a yes/no answer from the user. Usage: ans=`yesno "prompt" "default"`
  42. # Echos 1 for Y or 0 for N
  43. #
  44. yesno() {
  45. if [ "$headless" = 1 ] ; then
  46. echo "Y"
  47. return
  48. fi
  49. echo -n "$1 [$2] : " 1>&2
  50. while [ 1 ]
  51. do
  52. read ans
  53. if [ "$ans" = "" ] ; then
  54. echo $2 ; break
  55. elif [ "$ans" = "Y" -o "$ans" = "y" ] ; then
  56. echo "Y" ; break
  57. elif [ "$ans" = "N" -o "$ans" = "n" ] ; then
  58. echo "N" ; break
  59. fi
  60. echo -e "\nMust enter a 'y' or 'n'\n " 1>&1
  61. done
  62. }
  63. deconfigureService() {
  64. [ "$headless" != 1 ] && echo -e "Stopping $NAME service"
  65. if [ -f "$ABIN/$PRODUCT" ] ; then
  66. if which pidof >/dev/null 2>&1 ; then
  67. pid=`pidof $ABIN/$PRODUCT`
  68. else
  69. pid=`ps -ef | grep $ABIN/$PRODUCT | grep -v 'grep' | awk '{print $2}'`
  70. fi
  71. [ "$pid" != "" ] && kill -9 $pid >/dev/null 2>&1
  72. fi
  73. }
  74. removeFiles() {
  75. local pkg doins name
  76. [ "$headless" != 1 ] && echo
  77. for pkg in bin ; do
  78. doins=`eval echo \\$install${pkg}`
  79. if [ "$doins" = Y ] ; then
  80. suffix="-${pkg}"
  81. if [ "$pkg" = bin ] ; then
  82. name="${PRODUCT}"
  83. else
  84. name="${PRODUCT}${suffix}"
  85. fi
  86. if [ "$FMT" = "rpm" ] ; then
  87. [ "$headless" != 1 ] && echo -e "Running \"rpm -e $name\""
  88. rpm -e $name
  89. elif [ "$FMT" = "deb" ] ; then
  90. [ "$headless" != 1 ] && echo -e "Running \"dpkg -r $name\""
  91. dpkg -r $name >/dev/null
  92. else
  93. removeTarFiles $pkg
  94. fi
  95. elif [ "$doins" = "" ] ; then
  96. removeTarFiles $pkg
  97. fi
  98. done
  99. }
  100. removeTarFiles() {
  101. local pkg prefix
  102. local cdir=`pwd`
  103. pkg=$1
  104. [ $pkg = bin ] && prefix="$VAPP_PREFIX"
  105. if [ -f "$prefix/files.log" ] ; then
  106. if [ $OS = windows ] ; then
  107. cd ${prefix%%:*}:/
  108. else
  109. cd /
  110. fi
  111. removeFileList "$prefix/files.log"
  112. cd "$cdir"
  113. rm -f "$prefix/files.log"
  114. fi
  115. }
  116. preClean() {
  117. local f
  118. local cdir=`pwd`
  119. if [ $OS != windows ] ; then
  120. rm -f /var/lock/subsys/$PRODUCT /var/lock/$PRODUCT
  121. rm -fr /var/log/$PRODUCT
  122. rm -rf /var/run/$PRODUCT
  123. rm -rf /var/spool/$PRODUCT
  124. fi
  125. if [ -x "$APP_PREFIX" ] ; then
  126. cd "$APP_PREFIX"
  127. removeIntermediateFiles *.dylib *.dll *.exp *.lib
  128. fi
  129. if [ -x "$ETC_PREFIX" ] ; then
  130. cd "$ETC_PREFIX"
  131. removeIntermediateFiles access.log* error.log* '*.log.old' .dummy $PRODUCT.conf make.log $PRODUCT.conf.bak
  132. fi
  133. if [ -x "$WEB_PREFIX" ] ; then
  134. cd "$WEB_PREFIX"
  135. removeIntermediateFiles *.mod
  136. fi
  137. cd "$cdir"
  138. }
  139. postClean() {
  140. local cdir=`pwd`
  141. cleanDir "${ABIN}"
  142. cleanDir "${INC_PREFIX}"
  143. cleanDir "${APP_PREFIX}"
  144. cleanDir "${ETC_PREFIX}"
  145. cleanDir "${WEB_PREFIX}"
  146. if [ $OS != windows ] ; then
  147. for p in APP VAPP ETC WEB ; do
  148. eval rmdir "\$${p}_PREFIX" >/dev/null 2>&1
  149. done
  150. fi
  151. rm -f "${APP_PREFIX}/.port.log"
  152. cleanDir "${VAPP_PREFIX}"
  153. rm -f "${APP_PREFIX}/latest"
  154. cleanDir "${APP_PREFIX}"
  155. }
  156. removeFileList() {
  157. if [ -f "$1" ] ; then
  158. [ "$headless" != 1 ] && echo -e "Removing files in file list \"$1\" ..."
  159. cat "$1" | while read f
  160. do
  161. rm -f "$f"
  162. done
  163. fi
  164. }
  165. #
  166. # Cleanup empty directories. Usage: cleanDir directory
  167. #
  168. cleanDir() {
  169. local dir
  170. local cdir=`pwd`
  171. dir="$1"
  172. [ ! -d "$dir" ] && return
  173. cd "$dir"
  174. if [ "`pwd`" = "/" ] ; then
  175. echo "Configuration error: clean directory was '/'"
  176. cd "$cdir"
  177. return
  178. fi
  179. find . -type d -print | sort -r | grep -v '^\.$' | while read d
  180. do
  181. count=`ls "$d" 2>/dev/null | wc -l | sed -e 's/ *//'`
  182. [ "$count" = "0" ] && rmdir "$d" >/dev/null 2>&1
  183. done
  184. if [ -d "$cdir" ] ; then
  185. cd "$cdir"
  186. count=`ls "$dir" 2>/dev/null | wc -l | sed -e 's/ *//'`
  187. [ "$count" = "0" ] && rmdir "$dir" >/dev/null 2>&1
  188. rmdir "$dir" 2>/dev/null
  189. fi
  190. }
  191. removeIntermediateFiles() {
  192. local cdir=`pwd`
  193. find "`pwd`" -type d -print | while read d ; do
  194. cd "${d}"
  195. eval rm -f "$*"
  196. cd "${cdir}"
  197. done
  198. }
  199. setup() {
  200. if [ `id -u` != "0" -a $OS != windows ] ; then
  201. echo "You must be root to remove this product."
  202. exit 255
  203. fi
  204. #
  205. # Headless removal. Expect an argument that supplies a config file.
  206. #
  207. if [ $# -ge 1 ] ; then
  208. if [ ! -f $1 ] ; then
  209. echo "Could not find config file \"$1\""
  210. exit 255
  211. else
  212. . $1
  213. removeFiles $FMT
  214. fi
  215. exit 0
  216. fi
  217. binDir=${binDir:-$APP_PREFIX}
  218. [ "$headless" != 1 ] && echo -e "\n$NAME ${VERSION} Removal\n"
  219. }
  220. askUser() {
  221. local finished
  222. [ "$headless" != 1 ] && echo "Enter requested information or press <ENTER> to accept the defaults. "
  223. #
  224. # Confirm the configuration
  225. #
  226. finished=N
  227. while [ "$finished" = "N" ]
  228. do
  229. [ "$headless" != 1 ] && echo
  230. if [ -d "$binDir" ] ; then
  231. removebin=`yesno "Remove binary package" "$removebin"`
  232. else
  233. removebin=N
  234. fi
  235. if [ "$headless" != 1 ] ; then
  236. echo -e "\nProceed removing with these instructions:"
  237. [ $removebin = Y ] && echo -e " Remove binary package: $removebin"
  238. fi
  239. [ "$headless" != 1 ] && echo
  240. finished=`yesno "Accept these instructions" "Y"`
  241. if [ "$finished" != "Y" ] ; then
  242. exit 0
  243. fi
  244. done
  245. [ "$headless" != 1 ] && echo
  246. }
  247. #
  248. # Main program
  249. #
  250. cd /
  251. setup $*
  252. askUser
  253. if [ "$removebin" = "Y" ] ; then
  254. deconfigureService
  255. preClean
  256. removeFiles $FMT
  257. postClean
  258. [ "$headless" != 1 ] && echo -e "$NAME uninstall successful"
  259. fi
  260. exit 0