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(a)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(a)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(a)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")