]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
systemd-systemctl: Add preset capability
authorKhem Raj <raj.khem@gmail.com>
Sat, 23 Nov 2013 06:28:44 +0000 (22:28 -0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 14 Dec 2013 09:09:32 +0000 (09:09 +0000)
systemd has presets as described here

http://lists.freedesktop.org/archives/systemd-devel/2011-July/002830.html

This patch will let distros define presets file
which will override the enable/disable specified
by recipes.

systemctl preset without any argument will run presents
on all services

systemctl preset service1 service2 will run presets on
specified pervice.

something like enable * or disable *
would mean that all services will be either enabled or
disabled by default.

If no user-presets are specified then 'enable' is default

systemd allows basic globs but we do not implement them
except '*'

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
meta/recipes-core/systemd/systemd-systemctl/systemctl

index f7866565b98c48c76577af83ef8821e5e053b4f7..b37f27abfb25173101d2fbdadd6805cc6d62375b 100755 (executable)
@@ -28,6 +28,14 @@ while [ $# != 0 ]; do
                mask)
                        shift
 
+                       action="$opt"
+                       services="$1"
+                       cmd_args="1"
+                       shift
+                       ;;
+               preset)
+                       shift
+
                        action="$opt"
                        services="$1"
                        cmd_args="1"
@@ -49,8 +57,16 @@ while [ $# != 0 ]; do
                        ;;
        esac
 done
+if [ "$action" = "preset" -a "$service_file" = "" ]; then
+       services=$(for f in `find $ROOT/etc/systemd/system $ROOT/lib/systemd/system $ROOT/usr/lib/systemd/system -type f 2>1`; do basename $f; done)
+       services="$services $opt"
+       presetall=1
+fi
 
 for service in $services; do
+       if [ "$presetall" = "1" ]; then
+               action="preset"
+       fi
        if [ "$action" = "mask" ]; then
                if [ ! -d $ROOT/etc/systemd/system/ ]; then
                        mkdir -p $ROOT/etc/systemd/system/
@@ -80,7 +96,17 @@ for service in $services; do
        # If any new unit types are added to systemd they should be added
        # to this regular expression.
        unit_types_re='\.\(service\|socket\|device\|mount\|automount\|swap\|target\|path\|timer\|snapshot\)$'
-
+       if [ "$action" = "preset" ]; then
+               action=`egrep -sh  $service $ROOT/etc/systemd/user-preset/*.preset | cut -f1 -d' '`
+               if [ -z "$action" ]; then
+                       globalpreset=`egrep -sh  '\*'  $ROOT/etc/systemd/user-preset/*.preset | cut -f1 -d' '`
+                       if [ -n "$globalpreset" ]; then
+                               action="$globalpreset"
+                       else
+                               action="enable"
+                       fi
+               fi
+       fi
        # create the required symbolic links
        wanted_by=$(sed '/^WantedBy[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file" \
                        | tr ',' '\n' \