summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Client/Tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Bcfg2/Client/Tools')
-rw-r--r--src/lib/Bcfg2/Client/Tools/APT.py32
-rw-r--r--src/lib/Bcfg2/Client/Tools/Dummy.py16
-rw-r--r--src/lib/Bcfg2/Client/Tools/POSIXUsers.py27
3 files changed, 68 insertions, 7 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/APT.py b/src/lib/Bcfg2/Client/Tools/APT.py
index 4350f6067..77610d9bc 100644
--- a/src/lib/Bcfg2/Client/Tools/APT.py
+++ b/src/lib/Bcfg2/Client/Tools/APT.py
@@ -35,6 +35,7 @@ class APT(Bcfg2.Client.Tools.Tool):
self.debsums = '%s/bin/debsums' % Bcfg2.Options.setup.apt_install_path
self.aptget = '%s/bin/apt-get' % Bcfg2.Options.setup.apt_install_path
self.dpkg = '%s/bin/dpkg' % Bcfg2.Options.setup.apt_install_path
+ self.aptmark = '%s/bin/apt-mark' % Bcfg2.Options.setup.apt_install_path
self.__execs__ = [self.debsums, self.aptget, self.dpkg]
path_entries = os.environ['PATH'].split(':')
@@ -45,6 +46,7 @@ class APT(Bcfg2.Client.Tools.Tool):
'-o DPkg::Options::=--force-confold ' + \
'-o DPkg::Options::=--force-confmiss ' + \
'--reinstall ' + \
+ '--no-install-recommends ' + \
'--force-yes '
if not Bcfg2.Options.setup.debug:
self.pkgcmd += '-q=2 '
@@ -87,6 +89,23 @@ class APT(Bcfg2.Client.Tools.Tool):
except apt.cache.FetchFailedException:
err = sys.exc_info()[1]
self.logger.info("Failed to update APT cache: %s" % err)
+ # 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()
def FindExtra(self):
@@ -166,13 +185,15 @@ class APT(Bcfg2.Client.Tools.Tool):
pkg = self.pkg_cache[pkgname]
installed_version = pkg.installed.version
- if entry.get('version') == 'auto':
+ if entry.get('version').startswith('auto'):
if pkg.is_upgradable:
desired_version = pkg.candidate.version
else:
desired_version = installed_version
- elif entry.get('version') == 'any':
+ entry.set('version', "auto: %s" % desired_version)
+ elif entry.get('version').startswith('any'):
desired_version = installed_version
+ entry.set('version', "any: %s" % desired_version)
else:
desired_version = entry.get('version')
if desired_version != installed_version:
@@ -215,7 +236,7 @@ class APT(Bcfg2.Client.Tools.Tool):
self.logger.error("APT has no information about package %s"
% pkgname)
continue
- if pkg.get('version') in ['auto', 'any']:
+ if any([pkg.get('version').startswith(v) for v in ['auto', 'any']]):
try:
ipkgs.append("%s=%s" % (
pkgname,
@@ -241,11 +262,16 @@ class APT(Bcfg2.Client.Tools.Tool):
self.logger.error("APT command failed")
self.pkg_cache = apt.cache.Cache()
self.extra = self.FindExtra()
+ mark = []
states = dict()
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))))
return states
def VerifyPath(self, entry, _): # pylint: disable=W0613
diff --git a/src/lib/Bcfg2/Client/Tools/Dummy.py b/src/lib/Bcfg2/Client/Tools/Dummy.py
new file mode 100644
index 000000000..9a96eb904
--- /dev/null
+++ b/src/lib/Bcfg2/Client/Tools/Dummy.py
@@ -0,0 +1,16 @@
+"""This is the Bcfg2 tool for the Dummy package system."""
+
+import re
+import Bcfg2.Client.Tools
+
+
+class Dummy(Bcfg2.Client.Tools.PkgTool):
+ __handles__ = [('Package', 'dummy')]
+ __req__ = {'Package': []}
+ pkgtype = 'dummy'
+
+ def RefreshPackages(self):
+ pass
+
+ def VerifyPackage(self, _entry, _):
+ return True
diff --git a/src/lib/Bcfg2/Client/Tools/POSIXUsers.py b/src/lib/Bcfg2/Client/Tools/POSIXUsers.py
index 40598541e..224119a79 100644
--- a/src/lib/Bcfg2/Client/Tools/POSIXUsers.py
+++ b/src/lib/Bcfg2/Client/Tools/POSIXUsers.py
@@ -27,13 +27,23 @@ class POSIXUsers(Bcfg2.Client.Tools.Tool):
type=uid_range_type,
help="GID ranges the POSIXUsers tool will manage"),
Bcfg2.Options.Option(
+ cf=('POSIXUsers', 'supgid_whitelist'), default=[],
+ type=uid_range_type,
+ help="GID ranges for supplementary groups the POSIXUsers"
+ "tool will manage"),
+ Bcfg2.Options.Option(
cf=('POSIXUsers', 'uid_blacklist'), default=[],
type=uid_range_type,
help="UID ranges the POSIXUsers tool will not manage"),
Bcfg2.Options.Option(
cf=('POSIXUsers', 'gid_blacklist'), default=[],
type=uid_range_type,
- help="GID ranges the POSIXUsers tool will not manage")]
+ help="GID ranges the POSIXUsers tool will not manage"),
+ Bcfg2.Options.Option(
+ cf=('POSIXUsers', 'supgid_blacklist'), default=[],
+ type=uid_range_type,
+ help="GID ranges for supplementary groups the POSIXUsers"
+ "tool will not manage")]
__execs__ = ['/usr/sbin/useradd', '/usr/sbin/usermod', '/usr/sbin/userdel',
'/usr/sbin/groupadd', '/usr/sbin/groupmod',
@@ -58,10 +68,19 @@ class POSIXUsers(Bcfg2.Client.Tools.Tool):
self.set_defaults = dict(POSIXUser=self.populate_user_entry,
POSIXGroup=lambda g: g)
self._existing = None
+
+ supgid_whitelist = Bcfg2.Options.setup.supgid_whitelist
+ supgid_blacklist = Bcfg2.Options.setup.supgid_blacklist
+ if supgid_whitelist is None and supgid_blacklist is None:
+ supgid_whitelist = Bcfg2.Options.setup.gid_whitelist
+ supgid_blacklist = Bcfg2.Options.setup.gid_blacklist
+
self._whitelist = dict(POSIXUser=Bcfg2.Options.setup.uid_whitelist,
- POSIXGroup=Bcfg2.Options.setup.gid_whitelist)
+ POSIXGroup=Bcfg2.Options.setup.gid_whitelist,
+ POSIXSupGroup=supgid_whitelist)
self._blacklist = dict(POSIXUser=Bcfg2.Options.setup.uid_blacklist,
- POSIXGroup=Bcfg2.Options.setup.gid_blacklist)
+ POSIXGroup=Bcfg2.Options.setup.gid_blacklist,
+ POSIXSupGroup=supgid_blacklist)
@property
def existing(self):
@@ -161,7 +180,7 @@ class POSIXUsers(Bcfg2.Client.Tools.Tool):
given entry is a member of """
return [g for g in self.existing['POSIXGroup'].values()
if entry.get("name") in g[3] and
- self._in_managed_range('POSIXGroup', g[2])]
+ self._in_managed_range('POSIXSupGroup', g[2])]
def VerifyPOSIXUser(self, entry, _):
""" Verify a POSIXUser entry """