uninstall.in 7.9 KB

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