--27303_ĵaÅ_Apr_18_10_24_27_UTC_2019
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Here is prelimitary patch, that implement the check. It seems to affect
t/tags/checks/init.d/init.d-lsb-depends-nonrel/ check, and, maybe,
something else -- I did not run whole test suite.
=46rom 8717235c0e585b758130e576088a3b670f92be7f Mon Sep 17 00:00:00 2001
From: Dmitry Bogatov
Date: Thu, 18 Apr 2019 10:13:26 +
Subject: [PATCH] Check that daemons have init.d script
Ref: policy 9.11
Closes: #926471
---
checks/init.d.desc | 10 ++
checks/init.d.pm | 16
.../init.d-missing-script/debian/bar.service | 0
.../init.d-missing-script/debian/control.in | 16
.../init.d/init.d-missing-script/debian/install | 3 +++
.../init.d/init.d-missing-script/debian/rules| 4
.../init.d/init.d-missing-script/debian/run | 0
t/tags/checks/init.d/init.d-missing-script/desc | 7 +++
.../checks/init.d/init.d-missing-script/output | 4
9 files changed, 60 insertions(+)
create mode 100644 t/tags/checks/init.d/init.d-missing-script/debian/bar.s=
ervice
create mode 100644 t/tags/checks/init.d/init.d-missing-script/debian/contr=
ol.in
create mode 100644 t/tags/checks/init.d/init.d-missing-script/debian/insta=
ll
create mode 100755 t/tags/checks/init.d/init.d-missing-script/debian/rules
create mode 100644 t/tags/checks/init.d/init.d-missing-script/debian/run
create mode 100644 t/tags/checks/init.d/init.d-missing-script/desc
create mode 100644 t/tags/checks/init.d/init.d-missing-script/output
diff --git a/checks/init.d.desc b/checks/init.d.desc
index d1873805d..632177b35 100644
--- a/checks/init.d.desc
+++ b/checks/init.d.desc
@@ -372,6 +372,16 @@ Info: The given init script appears to contain content=
from the
Please double-check the script and/or replace it with content suitable to
this binary package.
=
+Tag: init.d-missing-script
+Severity: important
+Certainty: certain
+Ref: policy 9.11
+Info: The package provides daemon, but contains no init.d script
+ The package contains file for running service under alternative
+ init system, but no mandanory init.d script.
+ .
+ See init-d-script(5) for one of possible ways writing init.d scripts.
+
Tag: init.d-script-should-always-start-service
Severity: important
Certainty: possible
diff --git a/checks/init.d.pm b/checks/init.d.pm
index 0d59d79b5..557eac05f 100644
--- a/checks/init.d.pm
+++ b/checks/init.d.pm
@@ -86,6 +86,8 @@ sub run {
=
my (%initd_postinst, %initd_postrm);
=
+check_missing_script($info);
+
# read postinst control file
if ($postinst and $postinst->is_file and $postinst->is_open_ok) {
my $fd =3D $postinst->open;
@@ -502,6 +504,20 @@ sub check_defaults {
return;
}
=
+# Check for missing init.d script, when equivalent for alternative init
+# system is present.
+sub check_missing_script {
+my ($info) =3D @_;
+for my $file ($info->sorted_index) {
+my $service;
+if ($file =3D~ m,etc/sv/([^/]+)/run$, or
+$file =3D~ m,lib/systemd/system/(.*)\.service,)
+{ $service =3D $1; } else { next; }
+tag 'init.d-missing-script', $file
+unless $info->index_resolved_path("/etc/init.d/${service}");
+}
+}
+
1;
=
# Local Variables:
diff --git a/t/tags/checks/init.d/init.d-missing-script/debian/bar.service =
b/t/tags/checks/init.d/init.d-missing-script/debian/bar.service
new file mode 100644
index 0..e69de29bb
diff --git a/t/tags/checks/init.d/init.d-missing-script/debian/control.in b=
/t/tags/checks/init.d/init.d-missing-script/debian/control.in
new file mode 100644
index 0..f2a6964cb
--- /dev/null
+++ b/t/tags/checks/init.d/init.d-missing-script/debian/control.in
@@ -0,0 +1,16 @@
+Source: {$source}
+Priority: optional
+Section: mail
+Maintainer: {$author}
+Standards-Version: {$standards_version}
+Build-Depends: {$build_depends}
+Rules-Requires-Root: no
+
+Package: {$source}
+Architecture: {$package_architecture}
+Depends: $\{misc:Depends\}
+Description: Package with daemon, but no init.d script
+ This is a test package designed to exercise some feature or tag of
+ Lintian. It is part of the Lintian test suite and may do very odd
+ things. It should not be installed like a regular package. It may
+ be an empty package.
diff --git a/t/tags/checks/init.d/init.d-missing-script/debian/install b/t/=
tags/checks/init.d/init.d-missing-script/debian/install
new file mode 100644
index 0..db29ac80e
--- /dev/null
+++ b/t/tags/checks/init.d/init.d-missing-script/debian/install
@@ -0,0 +1,3 @@
+# Actual content does not matter, Lintain checks only for file names.
+debian/bar.service /lib/systemd/system/
+debian/run /etc/sv/foo/
diff --git a/t/tags/checks/init.d/init.d-missing-script/debian/rules b/t/ta=
gs/checks/init.d/init.d-missing-script/debian/rules
new file