imgcreate/creator.py | 18 ++++++++++++------ imgcreate/fs.py | 23 ++++++++++++++--------- imgcreate/live.py | 4 +++- tools/livecd-creator | 13 ++++++++----- 4 files changed, 37 insertions(+), 21 deletions(-)
New commits: commit fcf8197558fb9e83f9fa0b44a86def5a31de1671 Author: Brian C. Lane bcl@redhat.com Date: Fri Feb 4 12:08:14 2011 -0800
Pass tmpdir to ImageCreator class initializer (#476676)
diff --git a/tools/livecd-creator b/tools/livecd-creator index 75949c1..3424636 100755 --- a/tools/livecd-creator +++ b/tools/livecd-creator @@ -141,17 +141,20 @@ def main(): ks = imgcreate.read_kickstart(options.kscfg)
if options.image_type == 'livecd': - creator = imgcreate.LiveImageCreator(ks, name, fslabel=fslabel, releasever=options.releasever) + creator = imgcreate.LiveImageCreator(ks, name, + fslabel=fslabel, + releasever=options.releasever, + tmpdir=os.path.abspath(options.tmpdir)) elif options.image_type == 'image': - creator = imgcreate.LoopImageCreator(ks, name, fslabel=fslabel, releasever=options.releasever) + creator = imgcreate.LoopImageCreator(ks, name, + fslabel=fslabel, + releasever=options.releasever, + tmpdir=os.path.abspath(options.tmpdir)) else: # Cannot happen, we validate this when parsing options. logging.error(u"'%s' is not a valid image type" % options.image_type) return 1
- creator.tmpdir = os.path.abspath(options.tmpdir) - if not os.path.exists(creator.tmpdir): - makedirs(creator.tmpdir) creator.compress_type = options.compress_type creator.skip_compression = options.skip_compression creator.skip_minimize = options.skip_minimize
commit 0726cfa1982a285ed7bd8d96ce479e6b061e2658 Author: Brian C. Lane bcl@redhat.com Date: Fri Feb 4 10:58:55 2011 -0800
Add tmpdir to ImageCreator class initializer (#476676)
Create the tmpdir if it doesn't exist.
diff --git a/imgcreate/creator.py b/imgcreate/creator.py index d9b5afc..b915b11 100644 --- a/imgcreate/creator.py +++ b/imgcreate/creator.py @@ -51,7 +51,7 @@ class ImageCreator(object):
"""
- def __init__(self, ks, name, releasever=None): + def __init__(self, ks, name, releasever=None, tmpdir="/tmp"): """Initialize an ImageCreator instance.
ks -- a pykickstart.KickstartParser instance; this instance will be @@ -62,6 +62,8 @@ class ImageCreator(object): filesystem labels
releasever -- Value to substitute for $releasever in repo urls + + tmpdir -- Top level directory to use for temporary files and dirs """ self.ks = ks """A pykickstart.KickstartParser instance.""" @@ -71,8 +73,10 @@ class ImageCreator(object):
self.releasever = releasever
- self.tmpdir = "/var/tmp" + self.tmpdir = tmpdir """The directory in which all temporary files will be created.""" + if not os.path.exists(self.tmpdir): + makedirs(self.tmpdir)
self.__builddir = None self.__bindmounts = [] @@ -796,7 +800,7 @@ class LoopImageCreator(ImageCreator):
"""
- def __init__(self, ks, name, fslabel=None, releasever=None): + def __init__(self, ks, name, fslabel=None, releasever=None, tmpdir="/tmp"): """Initialize a LoopImageCreator instance.
This method takes the same arguments as ImageCreator.__init__() with @@ -805,7 +809,7 @@ class LoopImageCreator(ImageCreator): fslabel -- A string used as a label for any filesystems created.
""" - ImageCreator.__init__(self, ks, name, releasever=releasever) + ImageCreator.__init__(self, ks, name, releasever=releasever, tmpdir=tmpdir)
self.__fslabel = None self.fslabel = fslabel @@ -940,7 +944,7 @@ class LoopImageCreator(ImageCreator): self.__fstype, self.__blocksize, self.fslabel, - self.__tmpdir) + self.tmpdir)
try: self.__instloop.mount()
commit e606117e948fa3ee34b80b166adf27d5053a2b11 Author: Frederick Grose fgrose@gmail.com Date: Thu Feb 3 16:31:26 2011 -0800
Enable an optional tmpdir for e2image in fs.resize2fs()
Provide facility for an optional tmpdir during image resizing or minimizing. This is useful for LiveOSystems with limited resources, as the hardcoded /tmp is mounted on a tmpfs.
diff --git a/imgcreate/creator.py b/imgcreate/creator.py index 4d0e59d..d9b5afc 100644 --- a/imgcreate/creator.py +++ b/imgcreate/creator.py @@ -934,11 +934,13 @@ class LoopImageCreator(ImageCreator): if not base_on is None: self._base_on(base_on)
- self.__instloop = ExtDiskMount(SparseLoopbackDisk(self._image, self.__image_size), + self.__instloop = ExtDiskMount(SparseLoopbackDisk(self._image, + self.__image_size), self._instroot, self.__fstype, self.__blocksize, - self.fslabel) + self.fslabel, + self.__tmpdir)
try: self.__instloop.mount() diff --git a/imgcreate/fs.py b/imgcreate/fs.py index a43c6e5..de61c7b 100644 --- a/imgcreate/fs.py +++ b/imgcreate/fs.py @@ -56,14 +56,14 @@ def mksquashfs(in_img, out_img, compress_type): raise SquashfsError("'%s' exited with error (%d)" % (string.join(args, " "), ret))
-def resize2fs(fs, size = None, minimal = False): +def resize2fs(fs, size = None, minimal = False, tmpdir = "/tmp"): if minimal and size is not None: raise ResizeError("Can't specify both minimal and a size for resize!") if not minimal and size is None: raise ResizeError("Must specify either a size or minimal for resize!")
e2fsck(fs) - (fd, saved_image) = tempfile.mkstemp("", "resize-image-", "/tmp") + (fd, saved_image) = tempfile.mkstemp("", "resize-image-", tmpdir) os.close(fd) call(["/sbin/e2image", "-r", fs, saved_image])
@@ -184,7 +184,9 @@ class SparseLoopbackMount(LoopbackMount): class SparseExtLoopbackMount(SparseLoopbackMount): """SparseExtLoopbackMount compatibility layer for old API""" def __init__(self, lofile, mountdir, size, fstype, blocksize, fslabel): - self.diskmount = ExtDiskMount(SparseLoopbackDisk(lofile,size), mountdir, fstype, blocksize, fslabel, rmmountdir = True) + self.diskmount = ExtDiskMount(SparseLoopbackDisk(lofile,size), + mountdir, fstype, blocksize, fslabel, + rmmountdir = True, tmpdir = "/tmp")
def __format_filesystem(self): @@ -414,10 +416,12 @@ class DiskMount(Mount):
class ExtDiskMount(DiskMount): """A DiskMount object that is able to format/resize ext[23] filesystems.""" - def __init__(self, disk, mountdir, fstype, blocksize, fslabel, rmmountdir=True): + def __init__(self, disk, mountdir, fstype, blocksize, fslabel, + rmmountdir=True, tmpdir="/tmp"): DiskMount.__init__(self, disk, mountdir, fstype, rmmountdir) self.blocksize = blocksize self.fslabel = "_" + fslabel + self.tmpdir = tmpdir
def __format_filesystem(self): logging.info("Formating %s filesystem on %s" % (self.fstype, self.disk.device)) @@ -445,7 +449,7 @@ class ExtDiskMount(DiskMount): if size > current_size: self.disk.expand(size)
- resize2fs(self.disk.lofile, size) + resize2fs(self.disk.lofile, size, tmpdir = self.tmpdir) return size
def __create(self): @@ -487,7 +491,7 @@ class ExtDiskMount(DiskMount): return int(parse_field(out, "Block count")) * self.blocksize
def __resize_to_minimal(self): - resize2fs(self.disk.lofile, minimal = True) + resize2fs(self.disk.lofile, minimal = True, tmpdir = self.tmpdir) return self.__get_size_from_filesystem()
def resparse(self, size = None): @@ -577,7 +581,8 @@ class DeviceMapperSnapshot(object): except ValueError: raise SnapshotError("Failed to parse dmsetup status: " + out)
-def create_image_minimizer(path, image, compress_type, target_size = None): +def create_image_minimizer(path, image, compress_type, target_size = None, + tmpdir = "/tmp"): """ Builds a copy-on-write image which can be used to create a device-mapper snapshot of an image where @@ -605,9 +610,9 @@ def create_image_minimizer(path, image, compress_type, target_size = None): snapshot.create()
if target_size is not None: - resize2fs(snapshot.path, target_size) + resize2fs(snapshot.path, target_size, tmpdir = tmpdir) else: - resize2fs(snapshot.path, minimal = True) + resize2fs(snapshot.path, minimal = True, tmpdir = tmpdir)
cow_used = snapshot.get_cow_used() finally: diff --git a/imgcreate/live.py b/imgcreate/live.py index 60cd1de..bf3a4dd 100644 --- a/imgcreate/live.py +++ b/imgcreate/live.py @@ -297,7 +297,9 @@ class LiveImageCreatorBase(LoopImageCreator): self._resparse()
if not self.skip_minimize: - create_image_minimizer(self.__isodir + "/LiveOS/osmin.img", self._image, self.compress_type) + create_image_minimizer(self.__isodir + "/LiveOS/osmin.img", + self._image, self.compress_type, + tmpdir = self.tmpdir)
if self.skip_compression: shutil.move(self._image, self.__isodir + "/LiveOS/ext3fs.img")