Le 10/11/2014 07:04, Martin Pitt a écrit :

Hey Martin,
The downside is that we loose the return code, indeed (we could
concatenate it if needed).
Yes, I think it should save the return code if it's != 0 and return
that. I. e. the script will fail if processing any unit fails.

done, deb-systemd-invoke now returns latest unit error code it may found (and print which one(s) in STDERR).

I added as well, as ansgar's suggested that we don't start static units (not being able to find as well any good reason we would want to autostart them).

Please find attached v4 of the debdiff with those 2 changes.
Cheers,
Didier
diff -Nru init-system-helpers-1.21/debian/changelog 
init-system-helpers-1.22/debian/changelog
--- init-system-helpers-1.21/debian/changelog   2014-08-21 07:40:58.000000000 
+0200
+++ init-system-helpers-1.22/debian/changelog   2014-11-12 11:44:36.000000000 
+0100
@@ -1,3 +1,18 @@
+init-system-helpers (1.22) UNRELEASED; urgency=medium
+
+  * deb-system-invoke: don't start disabled systemd services (in case
+    of systemd only services), when there is no init script. (Closes: #768456)
+    Add some conditions to start the job on deb-system-invoke [restart|start],
+    during package upgrade:
+    - deb-system-invoke start <unit> don't do anything on systemd if the
+      unit is disabled or static.
+    - deb-system-invoke restart <unit> only restart a disabled or static unit
+      if the daemon was already running (forced by the admin).
+    - in case of multiple units in error passed to deb-system-invoke, this one
+      will exit with last unit in errror exit code.
+
+ -- Didier Roche <didro...@ubuntu.com>  Fri, 07 Nov 2014 15:01:27 +0100
+
 init-system-helpers (1.21) unstable; urgency=medium
 
   * Demote augeas-tools to Suggests and let the systemd2init tool error out
diff -Nru init-system-helpers-1.21/script/deb-systemd-invoke 
init-system-helpers-1.22/script/deb-systemd-invoke
--- init-system-helpers-1.21/script/deb-systemd-invoke  2014-08-21 
07:40:58.000000000 +0200
+++ init-system-helpers-1.22/script/deb-systemd-invoke  2014-11-12 
11:42:44.000000000 +0100
@@ -77,4 +77,36 @@
     }
 }
 
-exec '/bin/systemctl', @ARGV;
+# If the job is disabled and is not currently running, the job is not started 
or restarted.
+# However, if the job is disabled but has been forced into the running state, 
we *do* stop
+# and restart it since this is expected behaviour for the admin who forced the 
start.
+# We don't autostart static units either.
+if ($action eq "start" || $action eq "restart") {
+    my $global_exit_code = 0;
+    for my $unit (@units) {
+        my $unit_installed = 0;
+        my $enabled_output = `/bin/systemctl is-enabled -- $unit`;
+        # matching enabled and enabled-runtime as an installed non static unit
+        if ($enabled_output =~ /enabled/) {
+            $unit_installed = 1;
+        }
+        system('/bin/systemctl', '--quiet', 'is-active', '--', $unit);
+        my $unit_active = $?>>8 == 0 ? 1 : 0;
+        if (!$unit_installed && $action eq "start") {
+            print STDERR "$unit is a disabled or a static unit, not starting 
it.\n";
+        } elsif (!$unit_installed && !$unit_active && $action eq "restart") {
+            print STDERR "$unit is a disabled or a static unit not running, 
not starting it.\n";
+        }
+        else {
+            system('/bin/systemctl', "$action", "$unit");
+            my $exit_code = $?>>8;
+            if ($exit_code != 0) {
+                print STDERR "$unit couldn't $action.\n";
+                $global_exit_code = $exit_code;
+            }
+        }
+    }
+    exit($global_exit_code);
+} else {
+    exec '/bin/systemctl', @ARGV;
+}

Reply via email to