#!/bin/sh #--------------------------------------------------------------- # Project : Mandriva Linux # Module : rpm-helper # File : del-service # Version : $Id$ # Authors : Frederic Lepied, Andrey Borzenkov # Created On : Tue Jul 9 08:11:26 2002 # Purpose : helper script for rpm scriptlets to remove a # service. #--------------------------------------------------------------- if [ x$1 = x--no-sysv ]; then do_sysv=no shift else do_sysv=yes fi if [ $# -lt 3 ]; then echo "usage: $0 [--no-sysv] [] [ ...]" 1>&2 exit 1 fi # What init system are we currently using? if /bin/mountpoint -q /sys/fs/cgroup/systemd; then init=systemd else init=sysvinit fi pkg=$1 # name of the package num=$2 # number of packages installed if [ $do_sysv = yes ]; then srv=$3 # name of the SysV script shift 3 else srv= shift 2 fi units="$*" # systemd units USERUNITDIR=/etc/systemd/system RUNTIMEUNITDIR=/run/systemd/system SYSTEMUNITDIR=/lib/systemd/system find_unit() { unit=$(basename $1) # We need to normalise the systemd unit name as the native unit may not have # the same filename (sans it's .service suffix) as sysvinit script. # In this case, symlinks are used to mask the sysvinit file, but for enabling # and disabling units we must use the official name. searchunit= if [ -L "$USERUNITDIR/$unit" ]; then searchunit=$(/usr/bin/readlink -m "$USERUNITDIR/$unit") elif [ -e "$USERUNITDIR/$unit" ]; then searchunit="$USERUNITDIR/$unit" elif [ -L "$RUNTIMEUNITDIR/$unit" ]; then searchunit=$(/usr/bin/readlink -m "$RUNTIMEUNITDIR/$unit") elif [ -e "$RUNTIMEUNITDIR/$unit" ]; then searchunit="$RUNTIMEUNITDIR/$unit" elif [ -L "$SYSTEMUNITDIR/$unit" ]; then searchunit=$(/usr/bin/readlink -m "$SYSTEMUNITDIR/$unit") elif [ -e "$SYSTEMUNITDIR/$unit" ]; then searchunit="$SYSTEMUNITDIR/$unit" fi if [ -n "$searchunit" ]; then echo -n $searchunit fi } # If only a sysvinit service is given, then deal with a systemd unit of the same # name. Specific specs can enable specific unit names as needed but this should # catch the most common usage. if [ -z "$units" ]; then units="$srv.service" searchunit=$(find_unit $units) if [ -n "$searchunit" ]; then units=$(basename $searchunit) fi fi if [ $num = 0 ]; then if [ -z "$DURING_INSTALL" ]; then if [ x$init = xsystemd ]; then /bin/systemctl stop $units elif [ -n "srv" ]; then /sbin/service $srv stop > /dev/null || : fi fi /bin/systemctl --no-reload --quiet disable $units >/dev/null [ -n "$srv" -a -f /etc/rc.d/init.d/$srv ] && /sbin/chkconfig --del $srv # Yes - this is very ugly workaround. chkconfig --del does daemon-reload, # but initscript is still there, so it remains loaded. Remove file and # reload again. Systemd units are supposed to provide postun script if [ -n "$srv" -a -f /etc/rc.d/init.d/$srv -a x$init = xsystemd ]; then /bin/rm -f /etc/rc.d/init.d/$srv /bin/systemctl daemon-reload fi fi # del-service ends here