From e05352b87d150af95bf9ee1da3727afa8b125c2a Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 31 Oct 2012 20:26:38 +0000 Subject: mark dependencies as automatic installed --- src/lib/Bcfg2/Client/Tools/APT.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/lib/Bcfg2/Client/Tools/APT.py b/src/lib/Bcfg2/Client/Tools/APT.py index 39816403a..420fad7df 100644 --- a/src/lib/Bcfg2/Client/Tools/APT.py +++ b/src/lib/Bcfg2/Client/Tools/APT.py @@ -26,6 +26,7 @@ class APT(Bcfg2.Client.Tools.Tool): self.etc_path = setup.get('apt_etc_path', '/etc') self.debsums = '%s/bin/debsums' % self.install_path self.aptget = '%s/bin/apt-get' % self.install_path + self.aptmark = '%s/bin/apt-mark' % self.install_path self.dpkg = '%s/bin/dpkg' % self.install_path self.__execs__ = [self.debsums, self.aptget, self.dpkg] @@ -69,6 +70,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" % (self.aptmark, (" ".join(mark)))) + if unmark: + self.cmd.run("%s unmarkauto %s" % (self.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" % (self.aptmark, (" ".join(mark)))) def VerifyPath(self, entry, _): """Do nothing here since we only verify Path type=ignore.""" -- cgit v1.2.3-1-g7c22