diff options
author | Tomas Novotny <tomas@novotny.cz> | 2016-02-26 15:57:40 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-02-28 11:33:07 +0000 |
commit | b33efa964a227366e3f91ec6995484b6fbf37c97 (patch) | |
tree | 2fbee1a167ec958e5225921448902831c2ad8921 /meta/recipes-core | |
parent | 8caa5921da97d8d4e8434e1381da43697e6232a2 (diff) | |
download | poky-b33efa964a227366e3f91ec6995484b6fbf37c97.tar.gz |
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).
(From OE-Core rev: 6f4d9d9675ce39f5154de30b2921ada019a93d0f)
Signed-off-by: Tomas Novotny <tomas@novotny.cz>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core')
-rwxr-xr-x | meta/recipes-core/systemd/systemd-systemctl/systemctl | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl index 697fbd59df..1164dd4950 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 | |||
125 | | tr ',' '\n' \ | 125 | | tr ',' '\n' \ |
126 | | grep "$unit_types_re") | 126 | | grep "$unit_types_re") |
127 | 127 | ||
128 | for r in $wanted_by; do | 128 | required_by=$(sed '/^RequiredBy[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file" \ |
129 | echo "WantedBy=$r found in $service" | 129 | | tr ',' '\n' \ |
130 | if [ "$action" = "enable" ]; then | 130 | | grep "$unit_types_re") |
131 | enable_service=$service | 131 | |
132 | if [ "$service_template" = true -a "$instance_specified" = false ]; then | 132 | for dependency in WantedBy RequiredBy; do |
133 | default_instance=$(sed '/^DefaultInstance[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file") | 133 | if [ "$dependency" = "WantedBy" ]; then |
134 | if [ -z $default_instance ]; then | 134 | suffix="wants" |
135 | echo "Template unit without instance or DefaultInstance directive, nothing to enable" | 135 | dependency_list="$wanted_by" |
136 | continue | 136 | elif [ "$dependency" = "RequiredBy" ]; then |
137 | else | 137 | suffix="requires" |
138 | echo "Found DefaultInstance $default_instance, enabling it" | 138 | dependency_list="$required_by" |
139 | enable_service=$(echo $service | sed "s/@/@$(echo $default_instance | sed 's/\\/\\\\/g')/") | 139 | fi |
140 | for r in $dependency_list; do | ||
141 | echo "$dependency=$r found in $service" | ||
142 | if [ "$action" = "enable" ]; then | ||
143 | enable_service=$service | ||
144 | if [ "$service_template" = true -a "$instance_specified" = false ]; then | ||
145 | default_instance=$(sed '/^DefaultInstance[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file") | ||
146 | if [ -z $default_instance ]; then | ||
147 | echo "Template unit without instance or DefaultInstance directive, nothing to enable" | ||
148 | continue | ||
149 | else | ||
150 | echo "Found DefaultInstance $default_instance, enabling it" | ||
151 | enable_service=$(echo $service | sed "s/@/@$(echo $default_instance | sed 's/\\/\\\\/g')/") | ||
152 | fi | ||
140 | fi | 153 | fi |
141 | fi | 154 | mkdir -p $ROOT/etc/systemd/system/$r.$suffix |
142 | mkdir -p $ROOT/etc/systemd/system/$r.wants | 155 | ln -s $service_file $ROOT/etc/systemd/system/$r.$suffix/$enable_service |
143 | ln -s $service_file $ROOT/etc/systemd/system/$r.wants/$enable_service | 156 | echo "Enabled $enable_service for $r." |
144 | echo "Enabled $enable_service for $wanted_by." | ||
145 | else | ||
146 | if [ "$service_template" = true -a "$instance_specified" = false ]; then | ||
147 | disable_service="$ROOT/etc/systemd/system/$r.wants/`echo $service | sed 's/@/@*/'`" | ||
148 | else | 157 | else |
149 | disable_service="$ROOT/etc/systemd/system/$r.wants/$service" | 158 | if [ "$service_template" = true -a "$instance_specified" = false ]; then |
159 | disable_service="$ROOT/etc/systemd/system/$r.$suffix/`echo $service | sed 's/@/@*/'`" | ||
160 | else | ||
161 | disable_service="$ROOT/etc/systemd/system/$r.$suffix/$service" | ||
162 | fi | ||
163 | rm -f $disable_service | ||
164 | [ -d $ROOT/etc/systemd/system/$r.$suffix ] && rmdir --ignore-fail-on-non-empty -p $ROOT/etc/systemd/system/$r.$suffix | ||
165 | echo "Disabled ${disable_service##$ROOT/etc/systemd/system/$r.$suffix/} for $r." | ||
150 | fi | 166 | fi |
151 | rm -f $disable_service | 167 | done |
152 | [ -d $ROOT/etc/systemd/system/$r.wants ] && rmdir --ignore-fail-on-non-empty -p $ROOT/etc/systemd/system/$r.wants | ||
153 | echo "Disabled ${disable_service##$ROOT/etc/systemd/system/$r.wants/} for $wanted_by." | ||
154 | fi | ||
155 | done | 168 | done |
156 | 169 | ||
157 | # create the required symbolic 'Alias' links | 170 | # create the required symbolic 'Alias' links |