[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#817170: lintian: warn when (systemd) service units install themselves into an unusual target



[I used the wrong address in the X-Debbugs-CC pseudoheader, forwarding
manually.]

I noticed that haveged.service installs itself with
WantedBy=default.target, rather than multi-user.target.

This lintian check warns when a service unit is WantedBy=
something other than {sysinit,multi-user,graphical}.target.

Would pkg-systemd-maintainers care to comment on whether this is a good
idea and/or whether there are likely to be too many false positives? I
ran the following on my system:

    systemctl --no-legend list-unit-files -t service | while read unit rest; do w=$(systemctl cat "$unit" | grep ^WantedBy=); for x in $w; do printf '%s %s\n' $x "$unit"; done; done

and the false positives were from systemd itself, bluez and anacron.

-- 
Sam Morris <https://robots.org.uk/>
CAAA AA1A CA69 A83A 892B  1855 D20B 4202 5CDA 27B9

>From 13fe1c75dae2d64d61adf765478990d5c2c84d4a Mon Sep 17 00:00:00 2001
From: Sam Morris <sam@robots.org.uk>
Date: Tue, 8 Mar 2016 16:11:18 +0000
Subject: [PATCH] systemd: warn if services are WantedBy= an unusual target

---
 checks/systemd.desc | 11 +++++++++++
 checks/systemd.pm   |  7 +++++++
 2 files changed, 18 insertions(+)

diff --git a/checks/systemd.desc b/checks/systemd.desc
index 7c8eddb..dc8ec73 100644
--- a/checks/systemd.desc
+++ b/checks/systemd.desc
@@ -126,3 +126,14 @@ Info: The systemd service file does not contain a <tt>Documentation</tt> key.
  Documentation for systemd service files can be automatically viewed using
  <tt>systemctl help servicename</tt> if this field is present.
 Ref: systemd.unit(5)
+
+Tag: systemd-service-wantedby-unusual-target
+Severity: normal
+Certainty: certain
+Info: The systemd service file declares an unusual WantedBy= relationship.
+ .
+ Most services that want to be started automatically at boot should use
+ WantedBy=multi-user.target or WantedBy=graphical.target. Services that want to
+ be started in rescue or single-user mode should instead use
+ WantedBy=sysinit.target.
+Ref: https://wiki.debian.org/Teams/pkg-systemd/rcSMigration
diff --git a/checks/systemd.pm b/checks/systemd.pm
index 69092be..225f153 100644
--- a/checks/systemd.pm
+++ b/checks/systemd.pm
@@ -195,6 +195,13 @@ sub check_systemd_service_file {
           unless extract_service_file_values($file, 'Unit', 'Documentation',1);
     }
 
+    if ($file =~ /\.service$/) {
+        my @wantedby = extract_service_file_values($file, 'Install', 'WantedBy');
+        my @unusual_wantedby = grep { /(?<!^sysinit)(?<!^multi-user)(?<!^graphical)\.target$/ } @wantedby;
+        tag 'systemd-service-wantedby-unusual-target', $file, $_
+            for @unusual_wantedby;
+    }
+
     return 1;
 }
 
-- 
2.7.0


Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: