[oe-commits] [openembedded-core] 104/116: systemctl: handle RequiredBy dependencies

git at git.openembedded.org git at git.openembedded.org
Sun Feb 28 11:30:30 UTC 2016


rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 3ed04a6de75f3f7fd535e9c759f8c5a820a2bcd6
Author: Tomas Novotny <tomas at novotny.cz>
AuthorDate: Fri Feb 26 15:57:40 2016 +0100

    systemctl: handle RequiredBy dependencies
    
    Install section of a systemd service may contain RequiredBy dependency,
    which is not handled currently. This means that symlinks to enable the
    service are not created and the service may not be started.
    
    Also fix debug output (all dependencies were printed instead of the one
    which was enabled or disabled).
    
    Signed-off-by: Tomas Novotny <tomas at novotny.cz>
    Signed-off-by: Ross Burton <ross.burton at intel.com>
---
 .../systemd/systemd-systemctl/systemctl            | 61 +++++++++++++---------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl
index 697fbd5..1164dd4 100755
--- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
+++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
@@ -125,33 +125,46 @@ for service in $services; do
 		        | tr ',' '\n' \
 		        | grep "$unit_types_re")
 
-	for r in $wanted_by; do
-		echo "WantedBy=$r found in $service"
-		if [ "$action" = "enable" ]; then
-			enable_service=$service
-			if [ "$service_template" = true -a "$instance_specified" = false ]; then
-				default_instance=$(sed '/^DefaultInstance[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file")
-				if [ -z $default_instance ]; then
-					echo "Template unit without instance or DefaultInstance directive, nothing to enable"
-					continue
-				else
-					echo "Found DefaultInstance $default_instance, enabling it"
-					enable_service=$(echo $service | sed "s/@/@$(echo $default_instance | sed 's/\\/\\\\/g')/")
+	required_by=$(sed '/^RequiredBy[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file" \
+		        | tr ',' '\n' \
+		        | grep "$unit_types_re")
+
+	for dependency in WantedBy RequiredBy; do
+		if [ "$dependency" = "WantedBy" ]; then
+			suffix="wants"
+			dependency_list="$wanted_by"
+		elif [ "$dependency" = "RequiredBy" ]; then
+			suffix="requires"
+			dependency_list="$required_by"
+		fi
+		for r in $dependency_list; do
+			echo "$dependency=$r found in $service"
+			if [ "$action" = "enable" ]; then
+				enable_service=$service
+				if [ "$service_template" = true -a "$instance_specified" = false ]; then
+					default_instance=$(sed '/^DefaultInstance[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file")
+					if [ -z $default_instance ]; then
+						echo "Template unit without instance or DefaultInstance directive, nothing to enable"
+						continue
+					else
+						echo "Found DefaultInstance $default_instance, enabling it"
+						enable_service=$(echo $service | sed "s/@/@$(echo $default_instance | sed 's/\\/\\\\/g')/")
+					fi
 				fi
-			fi
-			mkdir -p $ROOT/etc/systemd/system/$r.wants
-			ln -s $service_file $ROOT/etc/systemd/system/$r.wants/$enable_service
-			echo "Enabled $enable_service for $wanted_by."
-		else
-			if [ "$service_template" = true -a "$instance_specified" = false ]; then
-				disable_service="$ROOT/etc/systemd/system/$r.wants/`echo $service | sed 's/@/@*/'`"
+				mkdir -p $ROOT/etc/systemd/system/$r.$suffix
+				ln -s $service_file $ROOT/etc/systemd/system/$r.$suffix/$enable_service
+				echo "Enabled $enable_service for $r."
 			else
-				disable_service="$ROOT/etc/systemd/system/$r.wants/$service"
+				if [ "$service_template" = true -a "$instance_specified" = false ]; then
+					disable_service="$ROOT/etc/systemd/system/$r.$suffix/`echo $service | sed 's/@/@*/'`"
+				else
+					disable_service="$ROOT/etc/systemd/system/$r.$suffix/$service"
+				fi
+				rm -f $disable_service
+				[ -d $ROOT/etc/systemd/system/$r.$suffix ] && rmdir --ignore-fail-on-non-empty -p $ROOT/etc/systemd/system/$r.$suffix
+				echo "Disabled ${disable_service##$ROOT/etc/systemd/system/$r.$suffix/} for $r."
 			fi
-			rm -f $disable_service
-			[ -d $ROOT/etc/systemd/system/$r.wants ] && rmdir --ignore-fail-on-non-empty -p $ROOT/etc/systemd/system/$r.wants
-			echo "Disabled ${disable_service##$ROOT/etc/systemd/system/$r.wants/} for $wanted_by."
-		fi
+		done
 	done
 
 	# create the required symbolic 'Alias' links

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list