Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-11-08 Thread Chris Lamb
Hi Andreas,

> Simply *why* is this error added?

I added this Lintian check after #838966 was filed against one of my
packages.

I did not add it as part of a plan to remove lsb-base, so alas I cannot
comment on the rest of your email. Apologies if you spent some time
crafting those portions.

>  - Having every package shipping an init script depend on additional
>packages […]

(Just as an aside, not every initscript uses /lib/lsb/init-functions.)

> If not, I guess I'll go stick my head in the sand and ignore lintian
> while feeling sorry (and frustrated) for all the people blindly following
> (the often good) advice given by lintian without questioning why they're
> doing so. :/

I share your dislike of noise and/or irrelevant advice from automated
tools. However, please refrain from making these kinds of "I'll take my
toys elsewhere" emotional-based arguments — in my experience, they are
not terribly productive. :)


Best wishes,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-11-08 Thread Andreas Henriksson
Hello all!

I've today looked at the newly appeared lintian error
"init.d-script-needs-depends-on-lsb-base" which seems odd to me.

First and foremost I've not found a rationale for what the overall plan
is to accomplish here. Simply *why* is this error added?
Secondly I think it seems like the implementation now suggested by
lintian is a bad idea.

On irc I got the following explanation:

16:41 < OdyX> at one point we want to remove lsb-base, so having explicit 
  (rather than implicit) dependencies is good.

... which I completely disagree with. Identifying the packages using the
hook is quite easy via codesearch.debian.net so it's not like
it's hard to know when you could drop the package. Secondly adding
even more dependencies against a package you want to get rid of
seems very counter-productive.

My point is that lsb-base has previously always been available when
needed, eg. via initscripts package dependency. If nowaydays that
package pulling in lsb-base isn't enough maybe some other package
should do it (eg. the 'init' package or maybe further down the line
for particular init implementations).

Reasons for why I think adding this dependency to every package is a
*bad* idea:
 - as already mentioned, lots of churn (for what use?)
 - spreading the problem across the archive rather than centralizing it
   will just cause lots and lots of bugs. (And archive-wide changes
   are something we're notoriously bad at in Debian. It takes decades
   to implement in practise.)
 - Having every package shipping an init script depend on additional
   packages for example bloats up init-less chroots where the init
   script is useless (but previously came with very little extra cost).
 - As we have essential packages shipping init script we're basically
   making lsb-base pseudo-essential this way, why not just add
   Essential: yes to lsb-base instead and save us the work of modifying
   ~600 packages? (But see previous point on why making it essential is
   bad, specially if the long-term goal is getting rid of it.)
 - (... not sure if there's any use in going on about this but I can
probably think of many more reasons for this being bad.)

I also asked about *how* we could possibly get rid of lsb-base on IRC
which only got a "everyone uses systemd" reply. Even with systemd and
even with a native systemd unit there's still the usefulness of lsb-base
to allow redirecting direct invocations of /etc/init.d/foo towards
a proper systemctl. I can only assume the point was that we should get
rid of init scripts completely. If that's the plan then has that been
approved of by the project now? Maybe that's what lintian should say
instead then

On IRC there was also discussion about wether this check triggering
when the init script was masked (by a systemd unit) was a bug or not.
(See previous paragraph on why having lsb-base around whenever your
package provides an init script is useful because of redirecting
direct invocations to systemctl though.)

Simply I don't see any usefulness to this plan, whatever the plan might be.
If someone could enlighten me that would be very welcome!

If not, I guess I'll go stick my head in the sand and ignore lintian
while feeling sorry (and frustrated) for all the people blindly following
(the often good) advice given by lintian without questioning why they're
doing so. :/

Regards,
Andreas Henriksson



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-15 Thread Didier 'OdyX' Raboud
Le vendredi, 14 octobre 2016, 22.57:13 h CEST Jakub Wilk a écrit :
> * Vincent Bernat , 2016-10-11, 08:44:
> >We put 3.0-6, then we have to update to 3.2-14 for status_proc. Then we
> >discover there may be people with backports so we update to 3.2-14~. This
> >makes a lot of people in Debian work for people that do not exist (those
> >with distributions older than oldoldstable that install packages from
> >unstable
> It's worse than that:
> 
> The last release that didn't have lsb-base (>= 3.2-14) is lenny, i.e.
> (old)^3stable. The last release that didn't have lsb-base (>= 3.0-6) is
> sarge, i.e. (old)^5stable.
> 
> Lintian has no business being THAT pedantic, especially not in a tag with
> severity:important. I will remove the version constraint.

Oh, indeed. Thanks for checking !

-- 
Cheers,
OdyX



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-14 Thread Jakub Wilk

* Vincent Bernat , 2016-10-11, 08:44:
We put 3.0-6, then we have to update to 3.2-14 for status_proc. Then we 
discover there may be people with backports so we update to 3.2-14~. This 
makes a lot of people in Debian work for people that do not exist (those with 
distributions older than oldoldstable that install packages from unstable


It's worse than that:

The last release that didn't have lsb-base (>= 3.2-14) is lenny, i.e. 
(old)^3stable.
The last release that didn't have lsb-base (>= 3.0-6) is sarge, i.e. 
(old)^5stable.

Lintian has no business being THAT pedantic, especially not in a tag with 
severity:important. I will remove the version constraint.


(If anybody really wants, they can implement a separate tag with 
severity:pedantic. But IMHO that's not worth the trouble.)


--
Jakub Wilk



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-13 Thread Michael Biebl
Am 13.10.2016 um 12:26 schrieb Michael Biebl:
> I would prefer having the version requirement dropped as well. It seem
> rather pointless when even oldstable has a newer version.
> 
> Aside from this issue: Should we handle packages differently which ship
> native systemd service files?
> You might boot with sysvinit or use /etc/init.d/foo  which needs
> the redirection from the lsb hook, but is that common enough with
> systemd being our default init system to warrant a hard dependency?

We have around 1100 packages with around 1300 sysv init scripts sourcing
/lib/lsb/init-functions.
lsb-base has 462 rdeps. So, roughly speaking, we'd have to touch 600
packages. That's quite a bit of churn.

I wonder if we couldn't just generate the lsb-base dependency and inject
it via misc:Depends. Say via dh_installinit or a separate dh helper.

This would have the benefit that in the hypothetical future, where
lsb-base is merged into init-system-helpers, we wouldn't have to touch
all those packages again.

Michael
-- 
Why is it that all of the instruments seeking intelligent life in the
universe are pointed away from Earth?



signature.asc
Description: OpenPGP digital signature


Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-13 Thread Michael Biebl
On Tue, 11 Oct 2016 08:44:57 +0200 Vincent Bernat  wrote:
>  ❦  8 octobre 2016 13:05 CEST, Evgeni Golov  :
> 
> >> > > But all-in-all, what matters is the dependency, as there were no 
> >> > > changes
> >> > > since 2013 (4.1+Debian10), and Jessie has 4.1+Debian13.
> >> > 
> >> > Just to be clear, are you suggesting that the version part should be
> >> > dropped?
> >> 
> >> It's a political question. My nitpicker side favours precise dependencies 
> >> (because we can), but my realistic side admits lsb-base >= 4.1+Debian13 
> >> will 
> >> be available for all packages which will see changes following the lintian 
> >> warning.
> >> 
> >> If we can, and we can, we should have precise dependencies instead of 
> >> 'available in stable'; it helps downstreams as well.
> >
> > I kind of agree. Just adding the >= 3.0-6 dep all over Debian is not really 
> > needed.
> > For downstreams, well, can't lintian have profiles for them and thus emit 
> > slightly
> > different suggestions, if the downstreams actually still have such an
> > old lsb-base?
> 
> Ubuntu Precise also has a recent-enough version of lsb-base. Putting a
> version is extra work because it may need to be updated. We put 3.0-6,
> then we have to update to 3.2-14 for status_proc. Then we discover there
> may be people with backports so we update to 3.2-14~. This makes a lot
> of people in Debian work for people that do not exist (those with
> distributions older than oldoldstable that install packages from
> unstable or those from old derived distributions that install packages
> From unstable).

I would prefer having the version requirement dropped as well. It seem
rather pointless when even oldstable has a newer version.

Aside from this issue: Should we handle packages differently which ship
native systemd service files?
You might boot with sysvinit or use /etc/init.d/foo  which needs
the redirection from the lsb hook, but is that common enough with
systemd being our default init system to warrant a hard dependency?


-- 
Why is it that all of the instruments seeking intelligent life in the
universe are pointed away from Earth?



signature.asc
Description: OpenPGP digital signature


Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-10 Thread Vincent Bernat
 ❦  8 octobre 2016 13:05 CEST, Evgeni Golov  :

>> > > But all-in-all, what matters is the dependency, as there were no changes
>> > > since 2013 (4.1+Debian10), and Jessie has 4.1+Debian13.
>> > 
>> > Just to be clear, are you suggesting that the version part should be
>> > dropped?
>> 
>> It's a political question. My nitpicker side favours precise dependencies 
>> (because we can), but my realistic side admits lsb-base >= 4.1+Debian13 will 
>> be available for all packages which will see changes following the lintian 
>> warning.
>> 
>> If we can, and we can, we should have precise dependencies instead of 
>> 'available in stable'; it helps downstreams as well.
>
> I kind of agree. Just adding the >= 3.0-6 dep all over Debian is not really 
> needed.
> For downstreams, well, can't lintian have profiles for them and thus emit 
> slightly
> different suggestions, if the downstreams actually still have such an
> old lsb-base?

Ubuntu Precise also has a recent-enough version of lsb-base. Putting a
version is extra work because it may need to be updated. We put 3.0-6,
then we have to update to 3.2-14 for status_proc. Then we discover there
may be people with backports so we update to 3.2-14~. This makes a lot
of people in Debian work for people that do not exist (those with
distributions older than oldoldstable that install packages from
unstable or those from old derived distributions that install packages
From unstable).
-- 
Write clearly - don't sacrifice clarity for "efficiency".
- The Elements of Programming Style (Kernighan & Plauger)


signature.asc
Description: PGP signature


Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-08 Thread Evgeni Golov
Ohai,

On Wed, Oct 05, 2016 at 10:23:58PM +0200, Didier 'OdyX' Raboud wrote:
> Le mercredi, 5 octobre 2016, 20.08:31 h CEST Chris Lamb a écrit :
> > Didier 'OdyX' Raboud wrote:
> > > But all-in-all, what matters is the dependency, as there were no changes
> > > since 2013 (4.1+Debian10), and Jessie has 4.1+Debian13.
> > 
> > Just to be clear, are you suggesting that the version part should be
> > dropped?
> 
> It's a political question. My nitpicker side favours precise dependencies 
> (because we can), but my realistic side admits lsb-base >= 4.1+Debian13 will 
> be available for all packages which will see changes following the lintian 
> warning.
> 
> If we can, and we can, we should have precise dependencies instead of 
> 'available in stable'; it helps downstreams as well.

I kind of agree. Just adding the >= 3.0-6 dep all over Debian is not really 
needed.
For downstreams, well, can't lintian have profiles for them and thus emit 
slightly
different suggestions, if the downstreams actually still have such an old 
lsb-base?

Greets
Evgeni



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-05 Thread Didier 'OdyX' Raboud
Le mercredi, 5 octobre 2016, 20.08:31 h CEST Chris Lamb a écrit :
> Didier 'OdyX' Raboud wrote:
> > But all-in-all, what matters is the dependency, as there were no changes
> > since 2013 (4.1+Debian10), and Jessie has 4.1+Debian13.
> 
> Just to be clear, are you suggesting that the version part should be
> dropped?

It's a political question. My nitpicker side favours precise dependencies 
(because we can), but my realistic side admits lsb-base >= 4.1+Debian13 will 
be available for all packages which will see changes following the lintian 
warning.

If we can, and we can, we should have precise dependencies instead of 
'available in stable'; it helps downstreams as well.

> I've seen other bits of Deban be really rather "picky" about versions (even
> ones that are satisfied in oldstable!) so I took my lead from that.
> 
> What do others think?
> 
> (ACK on the status_of_proc — will fix.)

Great, thanks.

-- 
Cheers,
OdyX



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-05 Thread Chris Lamb
Didier 'OdyX' Raboud wrote:

> There are more precise checks that could also  be done; such as:
>  - any use of status_of_proc from /lib/lsb/init-functions needs lsb-base (>= 
> 3.2-14~)

Filed as Bug#839861: lintian: init.d-script-needs-depends-on-lsb-base does
not use strict enough lsb-base version for (eg.) status_of_proc.

Please follow-up there (if you have anything to add, that is...) !


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-05 Thread Chris Lamb
Didier 'OdyX' Raboud wrote:

> But all-in-all, what matters is the dependency, as there were no changes 
> since 
> 2013 (4.1+Debian10), and Jessie has 4.1+Debian13.

Just to be clear, are you suggesting that the version part should be
dropped?

I've seen other bits of Deban be really rather "picky" about versions (even
ones that are satisfied in oldstable!) so I took my lead from that.

What do others think?

(ACK on the status_of_proc — will fix.)


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-05 Thread Didier 'OdyX' Raboud
Le mardi, 27 septembre 2016, 15.29:00 h CEST Chris Lamb a écrit :
> Package: lintian
> Severity: wishlist
> Tags: patch
> 
> Hi,
> 
> Attached is the following:
> 
>   commit 288035a951de277d0248ce28c561fbf7f8646839
>   Author: Chris Lamb 
>   Date:   Tue Sep 27 16:28:04 2016 +0200
> 
>   checks/init.d: Check for initscripts that source
> /lib/lsb/init-functions without declaring the corresponding dependency on
> lsb-base (>= 3.0-6).

Nice one.

There are more precise checks that could also  be done; such as:
 - any use of status_of_proc from /lib/lsb/init-functions needs lsb-base (>= 
3.2-14~)

But all-in-all, what matters is the dependency, as there were no changes since 
2013 (4.1+Debian10), and Jessie has 4.1+Debian13.

-- 
Cheers,
OdyX

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


Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-01 Thread Chris Lamb
Hi Niels,

Thanks again for the review.

> Apologies, I had assumed you had run the test suite, so it turns out
> there are a few more remarks.

Mea culpa. As an "excuse" I had received your previous instructions on the
the testsuite, perlcritic, etc. but after I had written this patch… but I
should have run it regardlness.

>  * There are test failures with the patch (presumably the tests needs
>updating).
>- At least init.d-* and legacy-scripts had failures

Fixed.

>- For legacy tests, just add the tag to "tags" and move on.  For the
>  rest, please up date them so they do not emit the tag if reasonably
>  possible.

Fixed…although I err'd on adding the tag in some places instead of a control
file simply to add the Depends.

>  * There are perlcritic warnings (boolean operator precedence mixing)

Fixed.

>  * There are unescaped "<" or ">" in the tag description, which should
>be escaped with < or > (like HTML).  Odds are it is just the
>dependency relation.

Fixed.

Updated patch attached:

  commit c09ecd4c2a776461d68ce9449e95169348cb79a4
  Author: Chris Lamb 
  Date:   Sat Oct 1 16:05:06 2016 +0100
  
  Check scripts using init-functions without lsb-base Depends.
  
  Emit a tag for initscripts that source the /lib/lsb/init-functions utility
  functions without declaring the corresponding dependency on lsb-base
  (>= 3.0-6).
  
  Closes: #838997
  Signed-off-by: Chris Lamb 
  
   checks/init.d.desc |  6 ++
   checks/init.d.pm   | 12 +++-
   .../files-bad-perm-owner/debian/debian/control.in  |  2 +-
   t/tests/init.d-general/debian/debian/control.in|  6 +-
   t/tests/init.d-lsb-depends/debian/debian/init  | 71 
++
   t/tests/init.d-lsb-depends/desc|  4 ++
   t/tests/init.d-lsb-depends/tags|  1 +
   .../init.d-lsb-headers/debian/debian/control.in| 16 ++---
   t/tests/init.d-script-registration/tags|  1 +
   t/tests/legacy-scripts/tags|  1 +
   t/tests/scripts-calls-init-script/tags |  1 +
   t/tests/systemd-general/tags   |  1 +


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-
From c09ecd4c2a776461d68ce9449e95169348cb79a4 Mon Sep 17 00:00:00 2001
From: Chris Lamb 
Date: Sat, 1 Oct 2016 16:05:06 +0100
Subject: [PATCH] Check scripts using init-functions without lsb-base Depends.

Emit a tag for initscripts that source the /lib/lsb/init-functions utility
functions without declaring the corresponding dependency on lsb-base
(>= 3.0-6).

Closes: #838997
Signed-off-by: Chris Lamb 
---
 checks/init.d.desc |  6 ++
 checks/init.d.pm   | 12 +++-
 .../files-bad-perm-owner/debian/debian/control.in  |  2 +-
 t/tests/init.d-general/debian/debian/control.in|  6 +-
 t/tests/init.d-lsb-depends/debian/debian/init  | 71 ++
 t/tests/init.d-lsb-depends/desc|  4 ++
 t/tests/init.d-lsb-depends/tags|  1 +
 .../init.d-lsb-headers/debian/debian/control.in| 16 ++---
 t/tests/init.d-script-registration/tags|  1 +
 t/tests/legacy-scripts/tags|  1 +
 t/tests/scripts-calls-init-script/tags |  1 +
 t/tests/systemd-general/tags   |  1 +
 12 files changed, 107 insertions(+), 15 deletions(-)
 create mode 100644 t/tests/init.d-lsb-depends/debian/debian/init
 create mode 100644 t/tests/init.d-lsb-depends/desc
 create mode 100644 t/tests/init.d-lsb-depends/tags

diff --git a/checks/init.d.desc b/checks/init.d.desc
index ce33ba5..5b19b3a 100644
--- a/checks/init.d.desc
+++ b/checks/init.d.desc
@@ -370,3 +370,9 @@ Info: The given init script declares a dependency on the
  totally broken.
 Ref: https://wiki.debian.org/LSBInitScripts
 
+Tag: init.d-script-needs-depends-on-lsb-base
+Severity: important
+Certainty: possible
+Info: The given init script sources the /lib/lsb/init-functions utility
+ functions without declaring the corresponding dependency on lsb-base
+ (>= 3.0-6).
diff --git a/checks/init.d.pm b/checks/init.d.pm
index f91afa1..7b0fa7d 100644
--- a/checks/init.d.pm
+++ b/checks/init.d.pm
@@ -198,7 +198,7 @@ sub run {
 
 # Check if file exists in package and check the script for
 # other issues if it was included in the package.
-check_init($initd_path);
+check_init($initd_path, $info);
 }
 
 return unless $initd_dir and $initd_dir->is_dir;
@@ -222,7 +222,7 @@ sub run {
 # coverage in the first pass.
 unless ($initd_postinst{$script->basename}) {
 tag $tagname, $script;
-check_init($script);
+check_init($script, $info);
 }
 }
 
@@ -230,7 +230,7 @@ sub run {
 }
 
 sub check_init {
-my ($initd_path) = 

Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-01 Thread Niels Thykier
Chris Lamb:
> Dear Niels,
> 
> Thanks for the review.
> 

You are welcome :)

Apologies, I had assumed you had run the test suite, so it turns out
there are a few more remarks.

 * There are test failures with the patch (presumably the tests needs
   updating).
   - At least init.d-* and legacy-scripts had failures
   - For legacy tests, just add the tag to "tags" and move on.  For the
 rest, please up date them so they do not emit the tag if reasonably
 possible.
 * There are perlcritic warnings (boolean operator precedence mixing)
 * There are unescaped "<" or ">" in the tag description, which should
   be escaped with < or > (like HTML).  Odds are it is just the
   dependency relation.


>> Please shorten the synopsis and move the more length part into the
>> description.
> 
> Done…
> 

Thanks, though it is still a bit too long.  I would probably personally
have reduced it to:
  "Check scripts using init-functions without lsb-base Depends"

With the "Closes" bit moved down to the "Signed-Off-By".

(The leading "checks/init.d:" is not a requirement for commit message. I
appreciate we use it frequently enough that it may seem at such).


Thanks,
~Niels



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-10-01 Thread Chris Lamb
Dear Niels,

Thanks for the review.

> Please shorten the synopsis and move the more length part into the
> description.

Done…

> Please create a non-legacy test case for new tags.  A long term goal is
> to remove all the t/tests/legacy-* tests. 

… and done. Good to know :)


Updated patch attached:

  commit 7152e3984acb45ebb455387765a5e7af4176bb62
  Author: Chris Lamb 
  Date:   Sat Oct 1 12:39:39 2016 +0100
  
  checks/init.d: Check scripts using init-functions without lsb-base 
Depends. (Closes: #838997)
  
  Emit a tag for initscripts that source the /lib/lsb/init-functions utility
  functions without declaring the corresponding dependency on lsb-base
  (>= 3.0-6).
  
  Signed-off-by: Chris Lamb 
  
   checks/init.d.desc|  6 +++
   checks/init.d.pm  | 12 +++--
   t/tests/init.d-lsb-depends/debian/debian/init | 71 
+++
   t/tests/init.d-lsb-depends/desc   |  4 ++
   t/tests/init.d-lsb-depends/tags   |  1 +
   5 files changed, 91 insertions(+), 3 deletions(-)


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-
From e382f9e37fae3a4a9af304b47c49ddbec7d8f0e5 Mon Sep 17 00:00:00 2001
From: Chris Lamb 
Date: Sat, 1 Oct 2016 12:42:10 +0100
Subject: [PATCH] checks/init.d: Check scripts using init-functions without
 lsb-base Depends. (Closes: #838997)

Emit a tag for initscripts that source the /lib/lsb/init-functions utility
functions without declaring the corresponding dependency on lsb-base
(>= 3.0-6).

Signed-off-by: Chris Lamb 
---
 checks/init.d.desc|  6 +++
 checks/init.d.pm  | 12 +++--
 t/tests/init.d-lsb-depends/debian/debian/init | 71 +++
 t/tests/init.d-lsb-depends/desc   |  4 ++
 t/tests/init.d-lsb-depends/tags   |  1 +
 5 files changed, 91 insertions(+), 3 deletions(-)
 create mode 100644 t/tests/init.d-lsb-depends/debian/debian/init
 create mode 100644 t/tests/init.d-lsb-depends/desc
 create mode 100644 t/tests/init.d-lsb-depends/tags

diff --git a/checks/init.d.desc b/checks/init.d.desc
index ce33ba5..3be8a3d 100644
--- a/checks/init.d.desc
+++ b/checks/init.d.desc
@@ -370,3 +370,9 @@ Info: The given init script declares a dependency on the
  totally broken.
 Ref: https://wiki.debian.org/LSBInitScripts
 
+Tag: init.d-script-needs-depends-on-lsb-base
+Severity: important
+Certainty: possible
+Info: The given init script sources the /lib/lsb/init-functions utility
+ functions without declaring the corresponding dependency on lsb-base
+ (>= 3.0-6).
diff --git a/checks/init.d.pm b/checks/init.d.pm
index f91afa1..4174a4d 100644
--- a/checks/init.d.pm
+++ b/checks/init.d.pm
@@ -198,7 +198,7 @@ sub run {
 
 # Check if file exists in package and check the script for
 # other issues if it was included in the package.
-check_init($initd_path);
+check_init($initd_path, $info);
 }
 
 return unless $initd_dir and $initd_dir->is_dir;
@@ -222,7 +222,7 @@ sub run {
 # coverage in the first pass.
 unless ($initd_postinst{$script->basename}) {
 tag $tagname, $script;
-check_init($script);
+check_init($script, $info);
 }
 }
 
@@ -230,7 +230,7 @@ sub run {
 }
 
 sub check_init {
-my ($initd_path) = @_;
+my ($initd_path, $info) = @_;
 
 # In an upstart system, such as Ubuntu, init scripts are symlinks to
 # upstart-job.  It doesn't make sense to check the syntax of upstart-job,
@@ -321,6 +321,12 @@ sub check_init {
 while ($l =~ s/^[^\#]*?(start|stop|restart|force-reload|status)//o) {
 $tag{$1} = 1;
 }
+
+if ($l =~ m{^\s*\.\s+/lib/lsb/init-functions}
+&& not $info->relation('strong')->implies('lsb-base (>= 3.0-6)')) {
+tag 'init.d-script-needs-depends-on-lsb-base',
+  $initd_path, "(line $.)";
+}
 }
 close($fd);
 
diff --git a/t/tests/init.d-lsb-depends/debian/debian/init b/t/tests/init.d-lsb-depends/debian/debian/init
new file mode 100644
index 000..48d4cde
--- /dev/null
+++ b/t/tests/init.d-lsb-depends/debian/debian/init
@@ -0,0 +1,71 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:		init.d-lsb-depends
+# Required-Start:	$syslog $remote_fs
+# Required-Stop:	$syslog $remote_fs
+# Should-Start:		$local_fs
+# Should-Stop:		$local_fs
+# Default-Start:	2 3 4 5
+# Default-Stop:		0 1 6
+# Short-Description:	init.d-lsb-depends
+# Description:		init.d-lsb-depends
+### END INIT INFO
+
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/init.d-lsb-depends
+NAME=init.d-lsb-depends
+DESC=init.d-lsb-depends
+
+RUNDIR=/var/run/redis
+PIDFILE=$RUNDIR/init.d-lsb-depends.pid
+
+test -x $DAEMON || exit 0
+
+if [ -r /etc/default/$NAME ]
+then
+	. /etc/default/$NAME
+fi
+
+. /lib/lsb/init-functi

Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-09-30 Thread Niels Thykier
On Tue, 27 Sep 2016 15:29:00 +0100 Chris Lamb  wrote:
> Package: lintian
> Severity: wishlist
> Tags: patch
> 
> Hi,
> 
> Attached is the following:
> 

Hi,

Thanks for the patch.

It looks good and I only got two comments! :)

>   commit 288035a951de277d0248ce28c561fbf7f8646839
>   Author: Chris Lamb 
>   Date:   Tue Sep 27 16:28:04 2016 +0200
>   
>   checks/init.d: Check for initscripts that source 
> /lib/lsb/init-functions without declaring the corresponding dependency on 
> lsb-base (>= 3.0-6).
>   

Please shorten the synopsis and move the more length part into the
description.


>   Signed-off-by: Chris Lamb 
>   
>checks/init.d.desc  |  5 +
>checks/init.d.pm| 12 +---
>t/tests/legacy-scripts/desc |  2 ++
>t/tests/legacy-scripts/tags |  1 +
> [...]


Please create a non-legacy test case for new tags.  A long term goal is
to remove all the t/tests/legacy-* tests. :)

Thanks,
~Niels



Bug#838997: lintian: checks/init.d: Check for initscripts that source /lib/lsb/init-functions without declaring the corresponding dependency on lsb-base (>= 3.0-6).

2016-09-27 Thread Chris Lamb
Package: lintian
Severity: wishlist
Tags: patch

Hi,

Attached is the following:

  commit 288035a951de277d0248ce28c561fbf7f8646839
  Author: Chris Lamb 
  Date:   Tue Sep 27 16:28:04 2016 +0200
  
  checks/init.d: Check for initscripts that source /lib/lsb/init-functions 
without declaring the corresponding dependency on lsb-base (>= 3.0-6).
  
  Signed-off-by: Chris Lamb 
  
   checks/init.d.desc  |  5 +
   checks/init.d.pm| 12 +---
   t/tests/legacy-scripts/desc |  2 ++
   t/tests/legacy-scripts/tags |  1 +
   4 files changed, 17 insertions(+), 3 deletions(-)


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-
>From 288035a951de277d0248ce28c561fbf7f8646839 Mon Sep 17 00:00:00 2001
From: Chris Lamb 
Date: Tue, 27 Sep 2016 16:28:04 +0200
Subject: [PATCH] checks/init.d: Check for initscripts that source
 /lib/lsb/init-functions without declaring the corresponding dependency on
 lsb-base (>= 3.0-6).

Signed-off-by: Chris Lamb 
---
 checks/init.d.desc  |  5 +
 checks/init.d.pm| 12 +---
 t/tests/legacy-scripts/desc |  2 ++
 t/tests/legacy-scripts/tags |  1 +
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/checks/init.d.desc b/checks/init.d.desc
index ce33ba5..5b31754 100644
--- a/checks/init.d.desc
+++ b/checks/init.d.desc
@@ -370,3 +370,8 @@ Info: The given init script declares a dependency on the
  totally broken.
 Ref: https://wiki.debian.org/LSBInitScripts
 
+Tag: init.d-script-needs-depends-on-lsb-base
+Severity: important
+Certainty: possible
+Info: The given init script sources /lib/lsb/init-functions without
+ declaring the corresponding dependency on lsb-base (>= 3.0-6).
diff --git a/checks/init.d.pm b/checks/init.d.pm
index f91afa1..4174a4d 100644
--- a/checks/init.d.pm
+++ b/checks/init.d.pm
@@ -198,7 +198,7 @@ sub run {
 
 # Check if file exists in package and check the script for
 # other issues if it was included in the package.
-check_init($initd_path);
+check_init($initd_path, $info);
 }
 
 return unless $initd_dir and $initd_dir->is_dir;
@@ -222,7 +222,7 @@ sub run {
 # coverage in the first pass.
 unless ($initd_postinst{$script->basename}) {
 tag $tagname, $script;
-check_init($script);
+check_init($script, $info);
 }
 }
 
@@ -230,7 +230,7 @@ sub run {
 }
 
 sub check_init {
-my ($initd_path) = @_;
+my ($initd_path, $info) = @_;
 
 # In an upstart system, such as Ubuntu, init scripts are symlinks to
 # upstart-job.  It doesn't make sense to check the syntax of upstart-job,
@@ -321,6 +321,12 @@ sub check_init {
 while ($l =~ s/^[^\#]*?(start|stop|restart|force-reload|status)//o) {
 $tag{$1} = 1;
 }
+
+if ($l =~ m{^\s*\.\s+/lib/lsb/init-functions}
+&& not $info->relation('strong')->implies('lsb-base (>= 3.0-6)')) {
+tag 'init.d-script-needs-depends-on-lsb-base',
+  $initd_path, "(line $.)";
+}
 }
 close($fd);
 
diff --git a/t/tests/legacy-scripts/desc b/t/tests/legacy-scripts/desc
index d95a521..ee8dc4e 100644
--- a/t/tests/legacy-scripts/desc
+++ b/t/tests/legacy-scripts/desc
@@ -4,3 +4,5 @@ Sequence: 
 Version: 6ds-1ubuntu0.5.10.1
 Type: non-native
 Description: Legacy test "scripts"
+Test-For:
+ init.d-script-needs-depends-on-lsb-base
diff --git a/t/tests/legacy-scripts/tags b/t/tests/legacy-scripts/tags
index 3f2854c..0436902 100644
--- a/t/tests/legacy-scripts/tags
+++ b/t/tests/legacy-scripts/tags
@@ -10,6 +10,7 @@ E: scripts: init.d-script-does-not-implement-required-option etc/init.d/lsb-brok
 E: scripts: init.d-script-does-not-implement-required-option etc/init.d/lsb-broken restart
 E: scripts: init.d-script-has-duplicate-lsb-section etc/init.d/lsb-broken
 E: scripts: init.d-script-has-unterminated-lsb-section etc/init.d/lsb-broken:15
+E: scripts: init.d-script-needs-depends-on-lsb-base etc/init.d/skeleton (line 40)
 E: scripts: missing-dep-for-interpreter jruby => jruby | jruby1.0 | jruby1.1 | jruby1.2 (usr/bin/jruby-broken)
 E: scripts: missing-dep-for-interpreter lefty => graphviz (usr/bin/lefty-foo)
 E: scripts: package-installs-python-bytecode usr/lib/python2.3/site-packages/test.pyc
-- 
2.9.3