summaryrefslogtreecommitdiff
path: root/whatmaps/command.py
diff options
context:
space:
mode:
Diffstat (limited to 'whatmaps/command.py')
-rwxr-xr-xwhatmaps/command.py124
1 files changed, 0 insertions, 124 deletions
diff --git a/whatmaps/command.py b/whatmaps/command.py
index 461b8e4..46e758b 100755
--- a/whatmaps/command.py
+++ b/whatmaps/command.py
@@ -26,10 +26,6 @@ import sys
import errno
from optparse import OptionParser
try:
- import apt_pkg
-except ImportError:
- apt_pkg = None
-try:
import lsb_release
except ImportError:
lsb_release = None
@@ -40,126 +36,6 @@ from . distro import Distro
from . pkg import Pkg, PkgError
-class DebianDistro(Distro):
- "Debian (dpkg) based distribution"""
- id = 'Debian'
-
- _pkg_services = { 'apache2-mpm-worker': [ 'apache2' ],
- 'apache2-mpm-prefork': [ 'apache2' ],
- 'apache2.2-bin': [ 'apache2' ],
- 'dovecot-imapd': [ 'dovecot' ],
- 'dovecot-pop3d': [ 'dovecot' ],
- 'exim4-daemon-light': [ 'exim4' ],
- 'exim4-daemon-heavy': [ 'exim4' ],
- 'qemu-system-x86_64': [ 'libvirt-guests' ],
- }
-
- # Per package blacklist
- _pkg_service_blacklist = { 'libvirt-bin': [ 'libvirt-guests' ] }
-
- # Per distro blacklist
- service_blacklist = set(['kvm', 'qemu-kvm', 'qemu-system-x86'])
-
- @classmethod
- def pkg(klass, name):
- return DebianPkg(name)
-
- @classmethod
- def pkg_by_file(klass, path):
- find_file = subprocess.Popen(['dpkg-query', '-S', path],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- output = find_file.communicate()[0]
- if find_file.returncode:
- return None
- pkg = output.split(':')[0]
- return DebianPkg(pkg)
-
- @classmethod
- def restart_service_cmd(klass, name):
- return ['invoke-rc.d', name, 'restart']
-
- @classmethod
- def has_apt(klass):
- return True
-
- @staticmethod
- def read_apt_pipeline():
- whatmaps_enabled = False
-
- version = sys.stdin.readline().rstrip()
- if version != "VERSION 2":
- logging.error("Wrong or missing VERSION from apt pipeline\n"
- "(is Dpkg::Tools::Options::/usr/bin/whatmaps::Version set to 2?)")
- raise PkgError
-
- while 1:
- aptconfig = sys.stdin.readline()
- if not aptconfig or aptconfig == '\n':
- break
- if aptconfig.startswith('Whatmaps::Enable-Restart=') and \
- aptconfig.strip().split('=', 1)[1].lower() in ["true", "1"]:
- logging.debug("Service restarts enabled")
- whatmaps_enabled = True
-
- if not whatmaps_enabled:
- return None
-
- pkgs = {}
- for line in sys.stdin.readlines():
- if not line:
- break
- (pkgname, oldversion, compare, newversion, filename) = line.split()
-
- if filename == '**CONFIGURE**':
- if oldversion != '-': # Updates only
- pkgs[pkgname] = DebianPkg(pkgname)
- pkgs[pkgname].version = newversion
- return pkgs
-
-
- @classmethod
- def _security_update_origins(klass):
- "Determine security update origins from apt configuration"
- codename = lsb_release.get_distro_information()['CODENAME']
- def _subst(line):
- mapping = {'distro_codename' : codename,
- 'distro_id' : klass.id, }
- return string.Template(line).substitute(mapping)
-
- origins = []
- for s in apt_pkg.config.value_list('Whatmaps::Security-Update-Origins'):
- (distro_id, distro_codename) = s.split()
- origins.append((_subst(distro_id),
- _subst(distro_codename)))
- logging.debug("Security Update Origins: %s", origins)
- return origins
-
-
- @classmethod
- def filter_security_updates(klass, pkgs):
- """Filter on security updates"""
-
- apt_pkg.init()
- acquire = apt_pkg.Acquire()
- cache = apt_pkg.Cache()
-
- security_update_origins = klass._security_update_origins()
- security_updates = {}
-
- for pkg in pkgs.values():
- cache_pkg = cache[pkg.name]
- for cache_version in cache_pkg.version_list:
- if pkg.version == cache_version.ver_str:
- for pfile, _ in cache_version.file_list:
- for origin in security_update_origins:
- if pfile.origin == origin[0] and \
- pfile.archive == origin[1]:
- security_updates[pkg] = pkg
- break
- return security_updates
-
-
class DebianPkg(Pkg):
type = 'Debian'
_init_script_re = re.compile('/etc/init.d/[\w\-\.]')