uninstall.in 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  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. NRPE_USER=@nrpe_user@
  33. NRPE_GROUP=@nrpe_group@
  34. NAGIOS_USER=@nagios_user@
  35. NAGIOS_GROUP=@nagios_group@
  36. # Display usage message
  37. usage() {
  38. echo "Usage: $0 [-q] [-p] [-v] progs|config|startup|user|group|script|all"
  39. echo " Optional args:"
  40. echo " -q Do not print what is happening"
  41. echo " -p Prompt for each action"
  42. echo " -v Be a little more verbose about what is happening"
  43. echo " One or more of the following are required:"
  44. echo " progs Delete the program files"
  45. echo " config Delete configuration file(s)"
  46. echo " startup Delete startup files (inetd, init, etc.)"
  47. echo " user Delete the users"
  48. echo " group Delete the groups"
  49. echo " script Delete this uninstall script"
  50. echo " all Do all of the above"
  51. exit 1
  52. }
  53. get_opts() {
  54. while test $# -gt 0 ; do
  55. arg=$1
  56. shift
  57. case "$arg" in
  58. -q) quiet=1 ;;
  59. -p) prompt=1 ;;
  60. progs) progs=1 ;;
  61. config) config=1 ;;
  62. startup) start=1 ;;
  63. user) delusr=1; ;;
  64. group) delgrp=1; ;;
  65. script) delscpt=1; ;;
  66. -v) verb=1; force=""; redir=0 ;;
  67. all) progs=1; config=1; start=1; delusr=1; delgrp=1; delscpt=1 ;;
  68. *) echo "Invalid argument: $arg"; usage ;;
  69. esac
  70. done
  71. if test $prompt -eq 1 -a $quiet -eq 1 ; then
  72. echo "The -p and -q flags are mutually exclusive"
  73. echo Please specify one or the other
  74. exit 1
  75. fi
  76. if test $verb -eq 1 -a $quiet -eq 1 ; then
  77. echo "The -v and -q flags are mutually exclusive"
  78. echo Please specify one or the other
  79. exit 1
  80. fi
  81. if test $progs -eq 0 -a $config -eq 0 -a $start -eq 0 ; then
  82. usage
  83. fi
  84. }
  85. prt_msg() {
  86. if test $quiet -eq 1 ; then
  87. return 0
  88. fi
  89. case $1 in
  90. 0) indent="" ;;
  91. 1) indent=" " ;;
  92. 2) indent=" " ;;
  93. *) indent="" ;;
  94. esac
  95. shift
  96. if test $1 -eq 1 -a $verb -eq 0 -a $prompt -eq 0 ; then
  97. return 0
  98. fi
  99. shift
  100. if test $1 -eq 1 -a $prompt -eq 1 ; then
  101. shift
  102. echo -n "${indent}$*"
  103. echo -n "? [Y|n] "
  104. read yn
  105. if test "x$yn" = x -o x$yn = xy -o x$yn = xY ; then
  106. return 0
  107. else
  108. return 1
  109. fi
  110. fi
  111. shift
  112. echo "${indent}$*"
  113. return 0
  114. }
  115. rm_progs() {
  116. num=0
  117. prt_msg 1 0 0 "*** Uninstalling Progs"
  118. if test -f "$PLUGINSDIR/check_nrpe" ; then
  119. num=1
  120. prt_msg 2 0 1 "Delete $PLUGINSDIR/check_nrpe" && {
  121. rm $force "$PLUGINSDIR/check_nrpe"
  122. prt_msg 2 1 0 "Remove directory $PLUGINSDIR"
  123. if test $redir -eq 1; then
  124. rmdir "$PLUGINSDIR" 2>/dev/null
  125. else
  126. rmdir "$PLUGINSDIR"
  127. fi
  128. prt_msg 2 1 0 "Remove directory $LIBEXECDIR"
  129. if test $redir -eq 1; then
  130. rmdir "$LIBEXECDIR" 2>/dev/null
  131. else
  132. rmdir "$LIBEXECDIR"
  133. fi
  134. }
  135. fi
  136. if test -f "$SBINDIR/$NAME" ; then
  137. num=1
  138. prt_msg 2 0 1 "Delete $SBINDIR/$NAME" && {
  139. rm $force "$SBINDIR/$NAME"
  140. }
  141. fi
  142. if test -d "$PIDDIR" ; then
  143. num=1
  144. prt_msg 2 0 1 "Remove directory $PIDDIR" && {
  145. if test $redir -eq 1; then
  146. rmdir "$PIDDIR" 2>/dev/null
  147. else
  148. rmdir "$PIDDIR"
  149. fi
  150. }
  151. fi
  152. if test $num -eq 0; then
  153. prt_msg 2 0 0 "There was nothing to uninstall"
  154. fi
  155. }
  156. rm_startup() {
  157. num=0
  158. prt_msg 1 0 0 "*** Uninstalling Startup"
  159. if test "$SRC_INETD" != unknown; then
  160. if test "$INETD_TYPE" = inetd; then
  161. rc=`grep -E -q "^\W*$NAME\s+" "$INETD_DIR/$INETD_FILE"`
  162. if test $rc -eq 0; then
  163. num=1
  164. prt_msg 2 0 1 "($INETD_TYPE) Remove entries from $INETD_DIR/$INETD_FILE" && {
  165. prt_msg 2 1 0 "($INETD_TYPE) Creating temp file: $INETD_DIR/$INETD_FILE.$NAME.unin"
  166. grep -v -q "\W*$NAME\s+" "$INETD_DIR/$INETD_FILE" > "$INETD_DIR/$INETD_FILE.$NAME.unin"
  167. prt_msg 2 1 0 "($INETD_TYPE) Renaming original to: $INETD_DIR/$INETD_FILE.$NAME_save"
  168. mv "$INETD_DIR/$INETD_FILE" "$INETD_DIR/$INETD_FILE.$NAME_save"
  169. prt_msg 2 1 0 "($INETD_TYPE) Renaming $INETD_DIR/$INETD_FILE.unin to $INETD_DIR/$INETD_FILE"
  170. mv "$INETD_DIR/$INETD_FILE.unin" "$INETD_DIR/$INETD_FILE"
  171. prt_msg 2 0 0 "($INETD_TYPE) Old $INETD_DIR/$INETD_FILE saved as $INETD_DIR/$INETD_FILE.$NAME_save"
  172. }
  173. fi
  174. elif test -f "$INETD_DIR/$INETD_FILE"; then
  175. num=1
  176. if test "$INETD_TYPE" != xinetd; then
  177. prt_msg 2 0 1 "($INETD_TYPE) Stop and disable $NAME)" && {
  178. case "$INETD_TYPE" in
  179. systemd)
  180. systemctl stop $NAME; systemctl disable $NAME
  181. ;;
  182. upstart)
  183. if test $verb -eq 1; then
  184. stop $NAME
  185. else
  186. stop $NAME >/dev/null 2>&1
  187. fi
  188. ;;
  189. launchd)
  190. launchctl unload $INETD_FILE; launchctl remove $INETD_FILE;
  191. ;;
  192. smf*)
  193. svcadm disable -s $NAME
  194. ;;
  195. esac
  196. }
  197. fi
  198. prt_msg 2 0 1 "($INETD_TYPE) Delete $INETD_DIR/$INETD_FILE" && {
  199. rm $force "$INETD_DIR/$INETD_FILE"
  200. if test "$INETD_TYPE" = systemd; then
  201. INETD_FILE=`echo "$INETD_FILE" | sed -e 's/socket$/service/'`
  202. prt_msg 2 0 1 "($INETD_TYPE) Delete $INETD_DIR/$INETD_FILE" && {
  203. rm $force "$INETD_DIR/$INETD_FILE"
  204. }
  205. elif test "$INETD_TYPE" = smf10 -o "$INETD_TYPE" = smf11; then
  206. prt_msg 2 0 1 "($INIT_TYPE) svcadm restart svc:/system/manifest-import" && {
  207. svcadm restart svc:/system/manifest-import
  208. }
  209. fi
  210. }
  211. fi
  212. fi
  213. if test "$SRC_INIT" != unknown; then
  214. if test -f "$INIT_DIR/$INIT_FILE"; then
  215. num=1
  216. prt_msg 2 0 1 "($INIT_TYPE) Stop and disable $NAME" && {
  217. case "$INIT_TYPE" in
  218. systemd)
  219. systemctl stop $NAME; systemctl disable $NAME
  220. ;;
  221. upstart)
  222. if test $verb -eq 1; then
  223. stop $NAME
  224. else
  225. stop $NAME >/dev/null 2>&1
  226. fi
  227. ;;
  228. launchd)
  229. launchctl unload $INIT_FILE; launchctl remove $INIT_FILE;
  230. ;;
  231. *bsd)
  232. if test -x $INIT_DIR/$INIT_FILE ; then
  233. $INIT_DIR/$INIT_FILE stop
  234. fi
  235. chmod 0644 $INIT_DIR/$INIT_FILE
  236. ;;
  237. openrc|gentoo)
  238. /sbin/start-stop-daemon --stop $NAME
  239. /sbin/rc-update del $NAME
  240. ;;
  241. smf*)
  242. svcadm disable -s $NAME
  243. ;;
  244. sysv)
  245. service stop $NAME; chkconfig --del $NAME
  246. ;;
  247. esac
  248. }
  249. prt_msg 2 0 1 "($INIT_TYPE) Delete $INIT_DIR/$INIT_FILE" && {
  250. rm $force "$INIT_DIR/$INIT_FILE"
  251. if test ${OPSYS} = bsd; then
  252. prt_msg 2 0 1 "($INITD_TYPE) Remove entries from $INETD_DIR/rc.conf" && {
  253. prt_msg 2 1 0 "($INIT_TYPE) Creating temp file: $INETD_DIR/rc.conf.$NAME.unin"
  254. grep -v -q "^$NAME" "$INETD_DIR/rc.conf" > "$INETD_DIR/rc.conf.$NAME.unin"
  255. prt_msg 2 1 0 "($INIT_TYPE) Renaming original to: $INETD_DIR/rc.conf.$NAME_save"
  256. mv "$INETD_DIR/rc.conf" "$INETD_DIR/rc.conf.$NAME_save"
  257. prt_msg 2 1 0 "($INIT_TYPE) Renaming $INETD_DIR/rc.conf.unin to $INETD_DIR/rc.conf"
  258. mv "$INETD_DIR/rc.conf.unin" "$INETD_DIR/rc.conf"
  259. prt_msg 2 0 0 "($INIT_TYPE) Old $INETD_DIR/rc.conf saved as $INETD_DIR/rc.conf.$NAME_save"
  260. }
  261. fi
  262. if test $INIT_TYPE = upstart; then
  263. prt_msg 2 0 1 "($INIT_TYPE) initctl reload-configuration" && {
  264. initctl reload-configuration
  265. }
  266. elif test "$INIT_TYPE" = smf10 -o "$INIT_TYPE" = smf11; then
  267. prt_msg 2 0 1 "($INIT_TYPE) svcadm restart svc:/system/manifest-import" && {
  268. svcadm restart svc:/system/manifest-import
  269. }
  270. fi
  271. }
  272. fi
  273. fi
  274. if test $num -eq 0; then
  275. prt_msg 2 0 0 "There was nothing to uninstall"
  276. fi
  277. }
  278. rm_config() {
  279. num=0
  280. prt_msg 1 0 0 "*** Uninstalling Config"
  281. if test -f "$CFGDIR/$NAME.cfg"; then
  282. num=1
  283. prt_msg 2 0 1 "Delete $CFGDIR/$NAME.cfg" || return
  284. rm $force "$CFGDIR/$NAME.cfg"
  285. prt_msg 2 1 0 "Removing directory $CFGDIR"
  286. if test $redir -eq 1; then
  287. rmdir "$CFGDIR" 2>/dev/null
  288. else
  289. rmdir "$CFGDIR"
  290. fi
  291. fi
  292. if test $num -eq 0; then
  293. prt_msg 2 0 0 "There was nothing to uninstall"
  294. fi
  295. }
  296. rm_user() {
  297. prt_msg 1 0 0 "*** Removing users"
  298. prt_msg 2 0 1 "Delete nrpe user:${NRPE_USER} and nagios user:${NAGIOS_USER}" || return
  299. if test ${OPSYS} = aix; then
  300. if test $redir -eq 1; then
  301. rmuser -p ${NRPE_USER} 2>/dev/null
  302. rmuser -p ${NAGIOS_USER} 2>/dev/null
  303. else
  304. rmuser -p ${NRPE_USER}
  305. rmuser -p ${NAGIOS_USER}
  306. fi
  307. elif test ${OPSYS} = osx; then
  308. dscl . -delete /Groups/${NRPE_GROUP} GroupMembership ${NRPE_USER}
  309. dscl . -delete /Users name ${NRPE_USER}
  310. dscl . -delete /Groups/${NAGIOS_GROUP} GroupMembership ${NAGIOS_USER}
  311. dscl . -delete /Users name ${NAGIOS_USER}
  312. elif test ${DIST} = "freebsd"; then
  313. if test $redir -eq 1; then
  314. pw del user ${NRPE_USER} 2>/dev/null
  315. pw del user ${NAGIOS_USER} 2>/dev/null
  316. else
  317. pw del user ${NRPE_USER}
  318. pw del user ${NAGIOS_USER}
  319. fi
  320. else
  321. if test $redir -eq 1; then
  322. userdel -r ${NRPE_USER} 2>/dev/null
  323. userdel -r ${NAGIOS_USER} 2>/dev/null
  324. else
  325. userdel -r ${NRPE_USER}
  326. userdel -r ${NAGIOS_USER}
  327. fi
  328. fi
  329. }
  330. rm_group() {
  331. prt_msg 1 0 0 "*** Removing groups"
  332. prt_msg 2 0 1 "Delete nrpe group:${NRPE_GROUP} and nagios group:${NAGIOS_GROUP}" || return
  333. if test ${OPSYS} = aix; then
  334. if test $redir -eq 1; then
  335. rmgroup -p ${NRPE_GROUP} 2>/dev/null
  336. rmgroup -p ${NAGIOS_GROUP} 2>/dev/null
  337. else
  338. rmgroup -p ${NRPE_GROUP}
  339. rmgroup -p ${NAGIOS_GROUP}
  340. fi
  341. elif test ${OPSYS} = osx; then
  342. if test $redir -eq 1; then
  343. dscl . -delete /Groups/${NRPE_GROUP} 2>/dev/null
  344. dscl . -delete /Groups/${NAGIOS_GROUP} 2>/dev/null
  345. else
  346. dscl . -delete /Groups/${NRPE_GROUP}
  347. dscl . -delete /Groups/${NAGIOS_GROUP}
  348. fi
  349. elif test ${DIST} = "freebsd"; then
  350. if test $redir -eq 1; then
  351. pw del group ${NRPE_GROUP} 2>/dev/null
  352. pw del group ${NAGIOS_GROUP} 2>/dev/null
  353. else
  354. pw del group ${NRPE_GROUP}
  355. pw del group ${NAGIOS_GROUP}
  356. fi
  357. else
  358. if test $redir -eq 1; then
  359. groupdel ${NRPE_GROUP} 2>/dev/null
  360. groupdel ${NAGIOS_GROUP} 2>/dev/null
  361. else
  362. groupdel ${NRPE_GROUP}
  363. groupdel ${NAGIOS_GROUP}
  364. fi
  365. fi
  366. }
  367. rm_script() {
  368. prt_msg 1 0 0 "*** Removing ${myname}"
  369. prt_msg 2 0 1 "Delete ${myname}" || return
  370. if test $redir -eq 1; then
  371. rm "${myname}" 2>/dev/null
  372. else
  373. rm "${myname}"
  374. fi
  375. }
  376. get_opts $@
  377. prt_msg 0 0 0 "* * * Uninstall Starting * * *"
  378. if test $progs -eq 1 ; then rm_progs; fi
  379. if test $start -eq 1 ; then rm_startup; fi
  380. if test $config -eq 1 ; then rm_config; fi
  381. if test $delusr -eq 1; then rm_user; fi
  382. if test $delgrp -eq 1; then rm_group; fi
  383. if test $delscpt -eq 1; then rm_script; fi
  384. prt_msg 0 0 0 "* * * Uninstall Complete * * *"