diff options
author | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2012-10-31 20:26:38 +0000 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-01-30 01:22:51 +0100 |
commit | 7413f317f64a8f1eaa0327fc1c838ac0cea561b6 (patch) | |
tree | ff0fdeb2b2e8d5adca7cd276c762d798777db918 | |
parent | db6a56510dd25c8ddf873f6f4dc23101d0d37536 (diff) | |
download | bcfg2-7413f317f64a8f1eaa0327fc1c838ac0cea561b6.tar.gz bcfg2-7413f317f64a8f1eaa0327fc1c838ac0cea561b6.tar.bz2 bcfg2-7413f317f64a8f1eaa0327fc1c838ac0cea561b6.zip |
mark dependencies as automatic installed
-rw-r--r-- | src/lib/Client/Tools/APT.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/Client/Tools/APT.py b/src/lib/Client/Tools/APT.py index db8cd56e7..dc6c9e6aa 100644 --- a/src/lib/Client/Tools/APT.py +++ b/src/lib/Client/Tools/APT.py @@ -22,6 +22,7 @@ var_path = setup['var_path'] etc_path = setup['etc_path'] DEBSUMS = '%s/bin/debsums' % install_path APTGET = '%s/bin/apt-get' % install_path +APTMARK = '%s/bin/apt-mark' % install_path DPKG = '%s/bin/dpkg' % install_path class APT(Bcfg2.Client.Tools.Tool): @@ -76,6 +77,23 @@ class APT(Bcfg2.Client.Tools.Tool): self.logger.info("Failed to initialize APT cache: %s" % e) raise Bcfg2.Client.Tools.toolInstantiationError self.pkg_cache.update() + # mark dependencies as being automatically installed and vice versa + mark = [] + unmark = [] + try: + installed_pkgs = [p.name for p in self.pkg_cache if p.is_installed] + except AttributeError: + installed_pkgs = [p.name for p in self.pkg_cache if p.isInstalled] + for pkg in self.getSupportedEntries(): + if pkg.get('name') in installed_pkgs: + if pkg.get('origin') == 'Packages': + mark.append(pkg.get('name')) + else: + unmark.append(pkg.get('name')) + if mark: + self.cmd.run("%s markauto %s" % (APTMARK, (" ".join(mark)))) + if unmark: + self.cmd.run("%s unmarkauto %s" % (APTMARK, (" ".join(unmark)))) self.pkg_cache = apt.cache.Cache() if 'req_reinstall_pkgs' in dir(self.pkg_cache): self._newapi = True @@ -262,10 +280,15 @@ class APT(Bcfg2.Client.Tools.Tool): self.logger.error("APT command failed") self.pkg_cache = apt.cache.Cache() self.extra = self.FindExtra() + mark = [] for package in packages: states[package] = self.VerifyPackage(package, [], checksums=False) if states[package]: self.modified.append(package) + if package.get('origin') == 'Packages': + mark.append(package.get('name')) + if mark: + self.cmd.run("%s markauto %s" % (APTMARK, (" ".join(mark)))) def VerifyPath(self, entry, _): """Do nothing here since we only verify Path type=ignore.""" |