uninstall.in 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #!/bin/sh
  2. # Initialize variables
  3. quiet=0
  4. prompt=0
  5. verb=0
  6. progs=0
  7. config=0
  8. start=0
  9. force="-f"
  10. redir=1
  11. # Set file and path names
  12. NAME=@PKG_NAME@
  13. SBINDIR=@sbindir@
  14. LIBEXECDIR=@libexecdir@
  15. PLUGINSDIR=@pluginsdir@
  16. PIDDIR=@piddir@
  17. CFGDIR=@pkgsysconfdir@
  18. INIT_TYPE=@init_type@
  19. INIT_DIR=@initdir@
  20. INIT_FILE=@initname@
  21. INETD_TYPE=@inetd_type@
  22. INETD_DIR=@inetddir@
  23. INETD_FILE=@inetdname@
  24. SRC_INETD=@src_inetd@
  25. SRC_INIT=@src_init@
  26. # Display usage message
  27. usage () {
  28. echo "Usage: $0 [-q] [-p] [-v] progs|config|startup|all"
  29. echo " -q Do not print what is happening"
  30. echo " -p Prompt for each action"
  31. echo " -v Be a little more verbose about what is happening"
  32. echo " progs Delete the program files"
  33. echo " config Delete configuration file(s)"
  34. echo " startup Delete startup files (inetd, init, etc.)"
  35. exit 1
  36. }
  37. get_opts () {
  38. while test $# -gt 0 ; do
  39. arg=$1
  40. shift
  41. case "$arg" in
  42. -q) quiet=1 ;;
  43. -p) prompt=1 ;;
  44. progs) progs=1 ;;
  45. config) config=1 ;;
  46. startup) start=1 ;;
  47. -v) verb=1; force=""; redir=0 ;;
  48. all) progs=1; config=1; start=1 ;;
  49. *) echo "Invalid argument: $arg"; usage ;;
  50. esac
  51. done
  52. if test $prompt -eq 1 -a $quiet -eq 1 ; then
  53. echo "The -p and -q flags are mutually exclusive"
  54. echo Please specify one or the other
  55. exit 1
  56. fi
  57. if test $verb -eq 1 -a $quiet -eq 1 ; then
  58. echo "The -v and -q flags are mutually exclusive"
  59. echo Please specify one or the other
  60. exit 1
  61. fi
  62. if test $progs -eq 0 -a $config -eq 0 -a $start -eq 0 ; then
  63. usage
  64. fi
  65. }
  66. prt_msg () {
  67. if test $quiet -eq 1 ; then
  68. return 0
  69. fi
  70. case $1 in
  71. 0) indent="" ;;
  72. 1) indent=" " ;;
  73. 2) indent=" " ;;
  74. *) indent="" ;;
  75. esac
  76. shift
  77. if test $1 -eq 1 -a $verb -eq 0 -a $prompt -eq 0 ; then
  78. return 0
  79. fi
  80. shift
  81. if test $1 -eq 1 -a $prompt -eq 1 ; then
  82. shift
  83. echo -n "${indent}$*"
  84. echo -n "? [Y|n] "
  85. read yn
  86. if test "x$yn" = x -o x$yn = xy -o x$yn = xY ; then
  87. return 0
  88. else
  89. return 1
  90. fi
  91. fi
  92. shift
  93. echo "${indent}$*"
  94. return 0
  95. }
  96. rm_progs () {
  97. num=0
  98. prt_msg 1 0 0 "*** Uninstalling Progs"
  99. if test -f "$PLUGINSDIR/check_nrpe" ; then
  100. num=1
  101. prt_msg 2 0 1 "Delete $PLUGINSDIR/check_nrpe" && {
  102. rm $force "$PLUGINSDIR/check_nrpe"
  103. prt_msg 2 1 0 "Remove directory $PLUGINSDIR"
  104. if test $redir -eq 1; then
  105. rmdir "$PLUGINSDIR" 2>/dev/null
  106. else
  107. rmdir "$PLUGINSDIR"
  108. fi
  109. prt_msg 2 1 0 "Remove directory $LIBEXECDIR"
  110. if test $redir -eq 1; then
  111. rmdir "$LIBEXECDIR" 2>/dev/null
  112. else
  113. rmdir "$LIBEXECDIR"
  114. fi
  115. }
  116. fi
  117. if test -f "$SBINDIR/$NAME" ; then
  118. num=0
  119. prt_msg 2 0 1 "Delete $SBINDIR/$NAME" && {
  120. rm $force "$SBINDIR/$NAME"
  121. }
  122. fi
  123. if test -d "$PIDDIR" ; then
  124. num=0
  125. prt_msg 2 0 1 "Remove directory $PIDDIR" && {
  126. if test $redir -eq 1; then
  127. rmdir "$PIDDIR" 2>/dev/null
  128. else
  129. rmdir "$PIDDIR"
  130. fi
  131. }
  132. fi
  133. if test $num -eq 0; then
  134. prt_msg 2 0 0 "There was nothing to uninstall"
  135. fi
  136. }
  137. rm_startup () {
  138. num=0
  139. prt_msg 1 0 0 "*** Uninstalling Startup"
  140. if test "$SRC_INETD" != unknown; then
  141. if test "$INETD_TYPE" = inetd; then
  142. rc=`grep -E -q "^\W*@PKG_NAME@\s+" "$INETD_DIR/$INETD_FILE"`
  143. if test $rc -eq 0; then
  144. num=1
  145. prt_msg 2 0 1 "($INETD_TYPE) Remove entries from $INETD_DIR/$INETD_FILE" && {
  146. prt_msg 2 1 0 "($INETD_TYPE) Creating temp file: $INETD_DIR/$INETD_FILE.$NAME.unin"
  147. grep -v -q "\W*@PKG_NAME@\s+" "$INETD_DIR/$INETD_FILE" > "$INETD_DIR/$INETD_FILE.$NAME.unin"
  148. prt_msg 2 1 0 "($INETD_TYPE) Renaming original to: $INETD_DIR/$INETD_FILE.$NAME_save"
  149. mv "$INETD_DIR/$INETD_FILE" "$INETD_DIR/$INETD_FILE.$NAME_save"
  150. prt_msg 2 1 0 "($INETD_TYPE) Renaming $INETD_DIR/$INETD_FILE.unin to $INETD_DIR/$INETD_FILE"
  151. mv "$INETD_DIR/$INETD_FILE.unin" "$INETD_DIR/$INETD_FILE"
  152. prt_msg 2 0 0 "($INETD_TYPE) Old $INETD_DIR/$INETD_FILE saved as $INETD_DIR/$INETD_FILE.$NAME_save"
  153. }
  154. fi
  155. elif test -f "$INETD_DIR/$INETD_FILE"; then
  156. num=1
  157. if test "$INETD_TYPE" != xinetd; then
  158. prt_msg 2 0 1 "($INETD_TYPE) Stop and disable $NAME)" && {
  159. case "$INETD_TYPE" in
  160. systemd)
  161. systemctl stop $NAME; systemctl disable $NAME
  162. ;;
  163. upstart)
  164. stop $NAME
  165. ;;
  166. launchd)
  167. launchctl unload $INETD_FILE; launchctl remove $INETD_FILE;
  168. ;;
  169. smf*)
  170. svcadm disable -s $NAME
  171. ;;
  172. esac
  173. }
  174. fi
  175. prt_msg 2 0 1 "($INETD_TYPE) Delete $INETD_DIR/$INETD_FILE" && {
  176. rm $force "$INETD_DIR/$INETD_FILE"
  177. if test "$INETD_TYPE" = systemd; then
  178. INETD_FILE=`echo "$INETD_FILE" | sed -e 's/socket$/service/'`
  179. prt_msg 2 0 1 "($INETD_TYPE) Delete $INETD_DIR/$INETD_FILE" && {
  180. rm $force "$INETD_DIR/$INETD_FILE"
  181. }
  182. fi
  183. }
  184. fi
  185. fi
  186. if test "$SRC_INIT" != unknown; then
  187. if test -f "$INIT_DIR/$INIT_FILE"; then
  188. num=1
  189. prt_msg 2 0 1 "($INIT_TYPE) Stop and disable $NAME" && {
  190. case "$INIT_TYPE" in
  191. systemd)
  192. systemctl stop $NAME; systemctl disable $NAME
  193. ;;
  194. upstart)
  195. stop $NAME
  196. ;;
  197. launchd)
  198. launchctl unload $INIT_FILE; launchctl remove $INIT_FILE;
  199. ;;
  200. *bsd)
  201. if test -x $INIT_DIR/$INIT_FILE ; then
  202. $INIT_DIR/$INIT_FILE stop
  203. fi
  204. chmod 0644 $INIT_DIR/$INIT_FILE
  205. ;;
  206. openrc|gentoo)
  207. /sbin/start-stop-daemon --stop $NAME
  208. /sbin/rc-update del $NAME
  209. ;;
  210. smf*)
  211. svcadm disable -s $NAME
  212. ;;
  213. sysv)
  214. service stop $NAME; chkconfig --del $NAME
  215. ;;
  216. esac
  217. }
  218. prt_msg 2 0 1 "($INIT_TYPE) Delete $INIT_DIR/$INIT_FILE" && {
  219. rm $force "$INIT_DIR/$INIT_FILE"
  220. if test $INIT_TYPE = upstart; then
  221. prt_msg 2 0 1 "($INIT_TYPE) initctl reload-configuration" && {
  222. initctl reload-configuration
  223. }
  224. fi
  225. }
  226. fi
  227. fi
  228. if test $num -eq 0; then
  229. prt_msg 2 0 0 "There was nothing to uninstall"
  230. fi
  231. }
  232. rm_config () {
  233. num=0
  234. prt_msg 1 0 0 "*** Uninstalling Config"
  235. if test -f "$CFGDIR/$NAME.cfg"; then
  236. num=1
  237. prt_msg 2 0 1 "Delete $CFGDIR/$NAME.cfg" || return
  238. rm $force "$CFGDIR/$NAME.cfg"
  239. prt_msg 2 1 0 "Removing directory $CFGDIR"
  240. if test $redir -eq 1; then
  241. rmdir "$CFGDIR" 2>/dev/null
  242. else
  243. rmdir "$CFGDIR"
  244. fi
  245. fi
  246. if test $num -eq 0; then
  247. prt_msg 2 0 0 "There was nothing to uninstall"
  248. fi
  249. }
  250. get_opts $@
  251. prt_msg 0 0 0 "* * * Uninstall Starting * * *"
  252. if test $progs -eq 1 ; then rm_progs; fi
  253. if test $start -eq 1 ; then rm_startup; fi
  254. if test $config -eq 1 ; then rm_config; fi
  255. prt_msg 0 0 0 "* * * Uninstall Complete * * *"