diff options
Diffstat (limited to 'uninstall.in')
-rwxr-xr-x | uninstall.in | 417 |
1 files changed, 417 insertions, 0 deletions
diff --git a/uninstall.in b/uninstall.in new file mode 100755 index 0000000..0087c11 --- /dev/null +++ b/uninstall.in @@ -0,0 +1,417 @@ +#!/bin/sh + +# Initialize variables +myname="$0" +quiet=0 +prompt=0 +verb=0 +progs=0 +config=0 +start=0 +delusr=0 +delgrp=0 +delscpt=0 +force="-f" +redir=1 + +# Set file and path names +NAME=@PKG_NAME@ +OPSYS=@opsys@ +DIST=@dist_type@ +SBINDIR=@sbindir@ +LIBEXECDIR=@libexecdir@ +PLUGINSDIR=@pluginsdir@ +PIDDIR=@piddir@ +CFGDIR=@pkgsysconfdir@ +INIT_TYPE=@init_type@ +INIT_DIR=@initdir@ +INIT_FILE=@initname@ +INETD_TYPE=@inetd_type@ +INETD_DIR=@inetddir@ +INETD_FILE=@inetdname@ +SRC_INETD=@src_inetd@ +SRC_INIT=@src_init@ +NRPE_USER=@nrpe_user@ +NRPE_GROUP=@nrpe_group@ +NAGIOS_USER=@nagios_user@ +NAGIOS_GROUP=@nagios_group@ + + +# Display usage message +usage() { + echo "Usage: $0 [-q] [-p] [-v] progs|config|startup|user|group|script|all" + echo " Optional args:" + echo " -q Do not print what is happening" + echo " -p Prompt for each action" + echo " -v Be a little more verbose about what is happening" + echo " One or more of the following are required:" + echo " progs Delete the program files" + echo " config Delete configuration file(s)" + echo " startup Delete startup files (inetd, init, etc.)" + echo " user Delete the users" + echo " group Delete the groups" + echo " script Delete this uninstall script" + echo " all Do all of the above" + exit 1 +} + +get_opts() { + while test $# -gt 0 ; do + arg=$1 + shift + case "$arg" in + -q) quiet=1 ;; + -p) prompt=1 ;; + progs) progs=1 ;; + config) config=1 ;; + startup) start=1 ;; + user) delusr=1; ;; + group) delgrp=1; ;; + script) delscpt=1; ;; + -v) verb=1; force=""; redir=0 ;; + all) progs=1; config=1; start=1; delusr=1; delgrp=1; delscpt=1 ;; + *) echo "Invalid argument: $arg"; usage ;; + esac + done + + if test $prompt -eq 1 -a $quiet -eq 1 ; then + echo "The -p and -q flags are mutually exclusive" + echo Please specify one or the other + exit 1 + fi + if test $verb -eq 1 -a $quiet -eq 1 ; then + echo "The -v and -q flags are mutually exclusive" + echo Please specify one or the other + exit 1 + fi + if test $progs -eq 0 -a $config -eq 0 -a $start -eq 0 ; then + usage + fi +} + +prt_msg() { + if test $quiet -eq 1 ; then + return 0 + fi + + case $1 in + 0) indent="" ;; + 1) indent=" " ;; + 2) indent=" " ;; + *) indent="" ;; + esac + shift + + if test $1 -eq 1 -a $verb -eq 0 -a $prompt -eq 0 ; then + return 0 + fi + shift + + if test $1 -eq 1 -a $prompt -eq 1 ; then + shift + echo -n "${indent}$*" + echo -n "? [Y|n] " + read yn + if test "x$yn" = x -o x$yn = xy -o x$yn = xY ; then + return 0 + else + return 1 + fi + fi + + shift + echo "${indent}$*" + return 0 +} + +rm_progs() { + num=0 + prt_msg 1 0 0 "*** Uninstalling Progs" + + if test -f "$PLUGINSDIR/check_nrpe" ; then + num=1 + prt_msg 2 0 1 "Delete $PLUGINSDIR/check_nrpe" && { + rm $force "$PLUGINSDIR/check_nrpe" + prt_msg 2 1 0 "Remove directory $PLUGINSDIR" + if test $redir -eq 1; then + rmdir "$PLUGINSDIR" 2>/dev/null + else + rmdir "$PLUGINSDIR" + fi + prt_msg 2 1 0 "Remove directory $LIBEXECDIR" + if test $redir -eq 1; then + rmdir "$LIBEXECDIR" 2>/dev/null + else + rmdir "$LIBEXECDIR" + fi + } + fi + + if test -f "$SBINDIR/$NAME" ; then + num=1 + prt_msg 2 0 1 "Delete $SBINDIR/$NAME" && { + rm $force "$SBINDIR/$NAME" + } + fi + + if test -d "$PIDDIR" ; then + num=1 + prt_msg 2 0 1 "Remove directory $PIDDIR" && { + if test $redir -eq 1; then + rmdir "$PIDDIR" 2>/dev/null + else + rmdir "$PIDDIR" + fi + } + fi + + if test $num -eq 0; then + prt_msg 2 0 0 "There was nothing to uninstall" + fi +} + +rm_startup() { + num=0 + prt_msg 1 0 0 "*** Uninstalling Startup" + + if test "$SRC_INETD" != unknown; then + if test "$INETD_TYPE" = inetd; then + rc=`grep -E -q "^\W*$NAME\s+" "$INETD_DIR/$INETD_FILE"` + if test $rc -eq 0; then + num=1 + prt_msg 2 0 1 "($INETD_TYPE) Remove entries from $INETD_DIR/$INETD_FILE" && { + prt_msg 2 1 0 "($INETD_TYPE) Creating temp file: $INETD_DIR/$INETD_FILE.$NAME.unin" + grep -v -q "\W*$NAME\s+" "$INETD_DIR/$INETD_FILE" > "$INETD_DIR/$INETD_FILE.$NAME.unin" + prt_msg 2 1 0 "($INETD_TYPE) Renaming original to: $INETD_DIR/$INETD_FILE.$NAME_save" + mv "$INETD_DIR/$INETD_FILE" "$INETD_DIR/$INETD_FILE.$NAME_save" + prt_msg 2 1 0 "($INETD_TYPE) Renaming $INETD_DIR/$INETD_FILE.unin to $INETD_DIR/$INETD_FILE" + mv "$INETD_DIR/$INETD_FILE.unin" "$INETD_DIR/$INETD_FILE" + prt_msg 2 0 0 "($INETD_TYPE) Old $INETD_DIR/$INETD_FILE saved as $INETD_DIR/$INETD_FILE.$NAME_save" + } + fi + elif test -f "$INETD_DIR/$INETD_FILE"; then + num=1 + if test "$INETD_TYPE" != xinetd; then + prt_msg 2 0 1 "($INETD_TYPE) Stop and disable $NAME)" && { + case "$INETD_TYPE" in + systemd) + systemctl stop $NAME; systemctl disable $NAME + ;; + upstart) + if test $verb -eq 1; then + stop $NAME + else + stop $NAME >/dev/null 2>&1 + fi + ;; + launchd) + launchctl unload $INETD_FILE; launchctl remove $INETD_FILE; + ;; + smf*) + svcadm disable -s $NAME + ;; + esac + } + fi + prt_msg 2 0 1 "($INETD_TYPE) Delete $INETD_DIR/$INETD_FILE" && { + rm $force "$INETD_DIR/$INETD_FILE" + if test "$INETD_TYPE" = systemd; then + INETD_FILE=`echo "$INETD_FILE" | sed -e 's/socket$/service/'` + prt_msg 2 0 1 "($INETD_TYPE) Delete $INETD_DIR/$INETD_FILE" && { + rm $force "$INETD_DIR/$INETD_FILE" + } + elif test "$INETD_TYPE" = smf10 -o "$INETD_TYPE" = smf11; then + prt_msg 2 0 1 "($INIT_TYPE) svcadm restart svc:/system/manifest-import" && { + svcadm restart svc:/system/manifest-import + } + fi + } + fi + fi + + if test "$SRC_INIT" != unknown; then + if test -f "$INIT_DIR/$INIT_FILE"; then + num=1 + prt_msg 2 0 1 "($INIT_TYPE) Stop and disable $NAME" && { + case "$INIT_TYPE" in + systemd) + systemctl stop $NAME; systemctl disable $NAME + ;; + upstart) + if test $verb -eq 1; then + stop $NAME + else + stop $NAME >/dev/null 2>&1 + fi + ;; + launchd) + launchctl unload $INIT_FILE; launchctl remove $INIT_FILE; + ;; + *bsd) + if test -x $INIT_DIR/$INIT_FILE ; then + $INIT_DIR/$INIT_FILE stop + fi + chmod 0644 $INIT_DIR/$INIT_FILE + ;; + openrc|gentoo) + /sbin/start-stop-daemon --stop $NAME + /sbin/rc-update del $NAME + ;; + smf*) + svcadm disable -s $NAME + ;; + sysv) + service stop $NAME; chkconfig --del $NAME + ;; + esac + } + prt_msg 2 0 1 "($INIT_TYPE) Delete $INIT_DIR/$INIT_FILE" && { + rm $force "$INIT_DIR/$INIT_FILE" + if test ${OPSYS} = bsd; then + prt_msg 2 0 1 "($INITD_TYPE) Remove entries from $INETD_DIR/rc.conf" && { + prt_msg 2 1 0 "($INIT_TYPE) Creating temp file: $INETD_DIR/rc.conf.$NAME.unin" + grep -v -q "^$NAME" "$INETD_DIR/rc.conf" > "$INETD_DIR/rc.conf.$NAME.unin" + prt_msg 2 1 0 "($INIT_TYPE) Renaming original to: $INETD_DIR/rc.conf.$NAME_save" + mv "$INETD_DIR/rc.conf" "$INETD_DIR/rc.conf.$NAME_save" + prt_msg 2 1 0 "($INIT_TYPE) Renaming $INETD_DIR/rc.conf.unin to $INETD_DIR/rc.conf" + mv "$INETD_DIR/rc.conf.unin" "$INETD_DIR/rc.conf" + prt_msg 2 0 0 "($INIT_TYPE) Old $INETD_DIR/rc.conf saved as $INETD_DIR/rc.conf.$NAME_save" + } + fi + if test $INIT_TYPE = upstart; then + prt_msg 2 0 1 "($INIT_TYPE) initctl reload-configuration" && { + initctl reload-configuration + } + elif test "$INIT_TYPE" = smf10 -o "$INIT_TYPE" = smf11; then + prt_msg 2 0 1 "($INIT_TYPE) svcadm restart svc:/system/manifest-import" && { + svcadm restart svc:/system/manifest-import + } + fi + } + fi + fi + + if test $num -eq 0; then + prt_msg 2 0 0 "There was nothing to uninstall" + fi +} + +rm_config() { + num=0 + prt_msg 1 0 0 "*** Uninstalling Config" + + if test -f "$CFGDIR/$NAME.cfg"; then + num=1 + prt_msg 2 0 1 "Delete $CFGDIR/$NAME.cfg" || return + rm $force "$CFGDIR/$NAME.cfg" + prt_msg 2 1 0 "Removing directory $CFGDIR" + if test $redir -eq 1; then + rmdir "$CFGDIR" 2>/dev/null + else + rmdir "$CFGDIR" + fi + fi + + if test $num -eq 0; then + prt_msg 2 0 0 "There was nothing to uninstall" + fi +} + +rm_user() { + prt_msg 1 0 0 "*** Removing users" + prt_msg 2 0 1 "Delete nrpe user:${NRPE_USER} and nagios user:${NAGIOS_USER}" || return + + if test ${OPSYS} = aix; then + if test $redir -eq 1; then + rmuser -p ${NRPE_USER} 2>/dev/null + rmuser -p ${NAGIOS_USER} 2>/dev/null + else + rmuser -p ${NRPE_USER} + rmuser -p ${NAGIOS_USER} + fi + elif test ${OPSYS} = osx; then + dscl . -delete /Groups/${NRPE_GROUP} GroupMembership ${NRPE_USER} + dscl . -delete /Users name ${NRPE_USER} + dscl . -delete /Groups/${NAGIOS_GROUP} GroupMembership ${NAGIOS_USER} + dscl . -delete /Users name ${NAGIOS_USER} + elif test ${DIST} = "freebsd"; then + if test $redir -eq 1; then + pw del user ${NRPE_USER} 2>/dev/null + pw del user ${NAGIOS_USER} 2>/dev/null + else + pw del user ${NRPE_USER} + pw del user ${NAGIOS_USER} + fi + else + if test $redir -eq 1; then + userdel -r ${NRPE_USER} 2>/dev/null + userdel -r ${NAGIOS_USER} 2>/dev/null + else + userdel -r ${NRPE_USER} + userdel -r ${NAGIOS_USER} + fi + fi +} + +rm_group() { + prt_msg 1 0 0 "*** Removing groups" + prt_msg 2 0 1 "Delete nrpe group:${NRPE_GROUP} and nagios group:${NAGIOS_GROUP}" || return + + if test ${OPSYS} = aix; then + if test $redir -eq 1; then + rmgroup -p ${NRPE_GROUP} 2>/dev/null + rmgroup -p ${NAGIOS_GROUP} 2>/dev/null + else + rmgroup -p ${NRPE_GROUP} + rmgroup -p ${NAGIOS_GROUP} + fi + elif test ${OPSYS} = osx; then + if test $redir -eq 1; then + dscl . -delete /Groups/${NRPE_GROUP} 2>/dev/null + dscl . -delete /Groups/${NAGIOS_GROUP} 2>/dev/null + else + dscl . -delete /Groups/${NRPE_GROUP} + dscl . -delete /Groups/${NAGIOS_GROUP} + fi + elif test ${DIST} = "freebsd"; then + if test $redir -eq 1; then + pw del group ${NRPE_GROUP} 2>/dev/null + pw del group ${NAGIOS_GROUP} 2>/dev/null + else + pw del group ${NRPE_GROUP} + pw del group ${NAGIOS_GROUP} + fi + else + if test $redir -eq 1; then + groupdel ${NRPE_GROUP} 2>/dev/null + groupdel ${NAGIOS_GROUP} 2>/dev/null + else + groupdel ${NRPE_GROUP} + groupdel ${NAGIOS_GROUP} + fi + fi +} + +rm_script() { + prt_msg 1 0 0 "*** Removing ${myname}" + prt_msg 2 0 1 "Delete ${myname}" || return + + if test $redir -eq 1; then + rm "${myname}" 2>/dev/null + else + rm "${myname}" + fi +} + +get_opts $@ + +prt_msg 0 0 0 "* * * Uninstall Starting * * *" + +if test $progs -eq 1 ; then rm_progs; fi +if test $start -eq 1 ; then rm_startup; fi +if test $config -eq 1 ; then rm_config; fi +if test $delusr -eq 1; then rm_user; fi +if test $delgrp -eq 1; then rm_group; fi +if test $delscpt -eq 1; then rm_script; fi + +prt_msg 0 0 0 "* * * Uninstall Complete * * *" |