diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py index 776c4b4d..e6465f43 100644 --- a/src/pylorax/__init__.py +++ b/src/pylorax/__init__.py @@ -150,9 +150,9 @@ class Lorax(BaseLoraxClass): if not os.path.isdir("/tmp/pkglists"): os.makedirs("/tmp/pkglists") - for pkg in self.installtree.yum.installed_packages: - with open("/tmp/pkglists/%s" % pkg.name, "w") as f: - for filename in self.installtree.yum.get_file_list(pkg): + for pkgobj in self.installtree.yum.installed_packages.values(): + with open("/tmp/pkglists/%s" % pkgobj.name, "w") as f: + for filename in pkgobj.filelist: f.write("%s\n" % filename) self.installtree.run_ldconfig() @@ -623,7 +623,12 @@ class YumHelper(object): @property def installed_packages(self): pl = self.yb.doPackageLists() - return pl.installed + + d = {} + for pkgobj in pl.installed: + d[pkgobj.name] = pkgobj + + return d def get_file_list(self, package): return package.returnFileEntries() diff --git a/src/pylorax/base.py b/src/pylorax/base.py index ef90be70..a19979a3 100644 --- a/src/pylorax/base.py +++ b/src/pylorax/base.py @@ -103,8 +103,14 @@ class BaseImageClass(BaseLoraxClass): fname = os.path.join(self.dsttree, fname) remove_(fname) - def removepkg(self, pkgname): - self.pkgs_to_remove.add(pkgname) + def removepkg(self, *args): + pkgname = args[0] + try: + mask = args[1] + except IndexError: + mask = "*" + + self.pkgs_to_remove.add((pkgname, mask)) def symlink(self, link_target, link_name): link_name = os.path.join(self.dsttree, link_name) diff --git a/src/pylorax/images.py b/src/pylorax/images.py index 44224342..89d8275d 100644 --- a/src/pylorax/images.py +++ b/src/pylorax/images.py @@ -640,12 +640,20 @@ class Install(BaseImageClass): "libdir": self.conf.libdir} self.parse_template(self.template_file, variables) - # XXX remove whole packages - for pkg in self.installtree.yum.installed_packages: - if pkg.name in self.pkgs_to_remove: - self.pinfo("removing not needed package %s" % pkg.name) - for fname in pkg.filelist: - self.pdebug("removing file %s%s" % (self.srctree, fname)) + # XXX remove packages + installed_packages = self.installtree.yum.installed_packages + for pkgname, mask in self.pkgs_to_remove: + if pkgname not in installed_packages: + continue + + self.pinfo("removing files from package %s matching mask %s" \ + % (pkgname, mask)) + + pkgobj = installed_packages.get(pkgname) + for fname in pkgobj.filelist: + if fnmatch.fnmatch(fname, mask): + self.pdebug("removing file %s%s" \ + % (self.srctree, fname)) remove_("%s%s" % (self.srctree, fname)) self.copy_stubs()