meta-openembedded/meta-systemd/recipes-core/systemd/systemd-systemctl-native/systemctl
Andreas Müller d6408d8793 systemd-systemctl-native: handle ALIAS tag
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
2012-08-08 09:07:39 +02:00

2.6 KiB
Executable File

#!/bin/sh echo "Started $0 $*"

ROOT=

parse command line params

action= while [ $# != 0 ]; do opt="$1"

case "$opt" in
	enable)
		shift

		action="$opt"
		services="$1"
		cmd_args="1"
		shift
		;;
	disable)
		shift

		action="$opt"
		services="$1"
		cmd_args="1"
		shift
		;;
	mask)
		shift

		action="$opt"
		services="$1"
		cmd_args="1"
		shift
		;;
	--root=*)
		ROOT=${opt##--root=}
		cmd_args="0"
		shift
		;;
	*)
		if [ "$cmd_args" = "1" ]; then
			services="$services $opt" 
			shift
		else
			echo "'$opt' is an unkown option; exiting with error"
			exit 1
		fi
		;;
esac

done

for service in $services; do if [ "$action" = "mask" ]; then if [ ! -d $ROOT/etc/systemd/system/ ]; then mkdir -p $ROOT/etc/systemd/system/ fi cmd="ln -s /dev/null $ROOT/etc/systemd/system/$service" echo "$cmd" $cmd exit 0 fi

echo "Try to find location of $service..."
# find service file
for p in $ROOT/etc/systemd/system \
	 $ROOT/lib/systemd/system \
	 $ROOT/usr/lib/systemd/system; do
	if [ -e $p/$service ]; then
		service_file=$p/$service
		service_file=${service_file##$ROOT}
	fi
done
if [ -z "$service_file" ]; then
	echo "'$service' couldn't be found; exiting with error"
	exit 1
fi
echo "Found $service in $service_file"

# create the required symbolic links
wanted_by=$(grep WantedBy $ROOT/$service_file \
	        | sed 's,WantedBy=,,g' \
	        | tr ',' '\n' \
	        | grep '\.target$')

for r in $wanted_by; do
	echo "WantedBy=$r found in $service"
	if [ "$action" = "enable" ]; then
		mkdir -p $ROOT/etc/systemd/system/$r.wants
		ln -s $service_file $ROOT/etc/systemd/system/$r.wants
		echo "Enabled $service for $wanted_by."
	else
		rm -f $ROOT/etc/systemd/system/$r.wants/$service
		rmdir --ignore-fail-on-non-empty -p $ROOT/etc/systemd/system/$r.wants
		echo "Disabled $service for $wanted_by."
	fi
done

# create the required symbolic 'Alias' links
alias=$(grep Alias $ROOT/$service_file \
	        | sed 's,Alias=,,g' \
	        | tr ',' '\n' \
	        | grep '\.service$')

for r in $alias; do
	if [ "$action" = "enable" ]; then
		mkdir -p $ROOT/etc/systemd/system
		ln -s $service_file $ROOT/etc/systemd/system/$r
		echo "Enabled $service for $alias."
	else
		rm -f $ROOT/etc/systemd/system/$r
		echo "Disabled $service for $alias."
	fi
done

# call us for the other required scripts
also=$(grep Also $ROOT/$service_file \
	   | sed 's,Also=,,g' \
	   | tr ',' '\n')
for a in $also; do
	echo "Also=$a found in $service"
	if [ "$action" = "enable" ]; then
		$0 --root=$ROOT enable $a
	fi
done

done