Package: debian-goodies
Version: 0.61
Severity: normal
Tags: patch
If checkrestart encounters a service run by an interpreter, and the
interpreter has been upgraded, such as:
# checkrestart
Found 1 processes using old versions of upgraded files
(1 distinct program)
(1 distinct packages)
These processes do not seem to have an associated init script to restart
them:
perl-base:
462 /usr/bin/perl
where:
# ps auxw|grep 462
root 462 0.0 0.0 9044 5484 ? Ss Nov29 0:54
/usr/sbin/munin-node
and:
# ls -l /proc/462/exe
lrwxrwxrwx 1 root root 0 29. Nov 13:56 /proc/462/exe -> /usr/bin/perl
(deleted)
then checkrestart will not be able to correctly deal with that service,
since its regex for matching the interpreter:
self.program = os.readlink('/proc/%d/exe' % self.pid)
m = re.match("^/usr/bin/(perl|python)$", self.program)
will fail due to the terminating '$' in the regex - note that the link above
contains a "(deleted)" at its end.
If we match the optional " (deleted)" at the end of the line then checkrestart
works as intended:
m = re.match("^/usr/bin/(perl|python)( \(deleted\))*$", self.program)
Patch is attached.
Thanks,
*t
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 3.7.0 (SMP w/8 CPU cores)
Locale: LANG=de_CH.UTF-8, LC_CTYPE=de_CH.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages debian-goodies depends on:
ii curl 7.26.0-1
ii dctrl-tools [grep-dctrl] 2.22.2
ii perl 5.14.2-15
ii python 2.7.3~rc2-1
ii whiptail 0.52.14-10
Versions of packages debian-goodies recommends:
ii lsof 4.86+dfsg-1
Versions of packages debian-goodies suggests:
ii popularity-contest 1.56
ii xdg-utils 1.1.0~rc1+git20111210-6
ii zenity 3.4.0-2
-- no debconf information
diff --git a/checkrestart b/checkrestart
index 382e997..bf672f8 100755
--- a/checkrestart
+++ b/checkrestart
@@ -526,7 +526,7 @@ class Process:
self.program = os.readlink('/proc/%d/exe' % self.pid)
# if the executable command is an interpreter such as perl/python,
# we want to find the real program
- m = re.match("^/usr/bin/(perl|python)$", self.program)
+ m = re.match("^/usr/bin/(perl|python)( \(deleted\))*$", self.program)
if m:
with open('/proc/%d/cmdline' % self.pid, 'r') as cmdline:
# only match program in /usr (ex.: /usr/sbin/smokeping)