Add support for removing whole packages

Remove all files from a package if removepkg <pkg>
is specified in install image template.
This commit is contained in:
Martin Gracik 2010-07-29 19:04:30 +02:00
parent f277852f7a
commit 5036ff6bd8
3 changed files with 30 additions and 7 deletions

View File

@ -145,6 +145,16 @@ class Lorax(BaseLoraxClass):
# prepare the install tree
self.pinfo(":: preparing the install tree")
self.installtree.install_packages(packages=packages)
# XXX
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):
f.write("%s\n" % filename)
self.installtree.run_ldconfig()
self.installtree.copy_updates()
self.installtree.fix_problems()

View File

@ -68,6 +68,7 @@ class BaseImageClass(BaseLoraxClass):
def __init__(self):
BaseLoraxClass.__init__(self)
self.srctree, self.dsttree = None, None
self.pkgs_to_remove = set()
def parse_template(self, template_file, variables={}):
template = ltmpl.Template()
@ -102,6 +103,9 @@ class BaseImageClass(BaseLoraxClass):
fname = os.path.join(self.dsttree, fname)
remove_(fname)
def removepkg(self, pkgname):
self.pkgs_to_remove.add(pkgname)
def symlink(self, link_target, link_name):
link_name = os.path.join(self.dsttree, link_name)
symlink_(link_target, link_name)

View File

@ -621,6 +621,7 @@ class Install(BaseImageClass):
def __init__(self, installtree, template_file, workdir="/tmp"):
BaseImageClass.__init__(self)
self.installtree = installtree
self.srctree = installtree.rootdir
self.dsttree = installtree.rootdir
self.template_file = template_file
@ -632,6 +633,21 @@ class Install(BaseImageClass):
# copy the .buildstamp
shutil.copy2(self.conf.buildstamp, self.srctree)
# parse the template file
self.pinfo("parsing the template")
variables = {"buildarch": self.conf.buildarch,
"basearch": self.conf.basearch,
"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))
remove_("%s%s" % (self.srctree, fname))
self.copy_stubs()
self.copy_bootloaders()
self.rename_repos()
@ -642,13 +658,6 @@ class Install(BaseImageClass):
self.remove_unnecessary_files()
self.move_bins()
# parse the template file
self.pinfo("parsing the template")
variables = {"buildarch": self.conf.buildarch,
"basearch": self.conf.basearch,
"libdir": self.conf.libdir}
self.parse_template(self.template_file, variables)
# copy custom files
self.pinfo("copying custom files")
self.copy_custom_files()