X-Git-Url: https://code.grnet.gr/git/snf-image-creator/blobdiff_plain/e77e66a923367afd618cb5d7b977095cac119b75..825fe2a614c1508f05091b5dd7c71ecff3859bfe:/image_creator/disk.py diff --git a/image_creator/disk.py b/image_creator/disk.py index 20ce9f5..6cd910b 100644 --- a/image_creator/disk.py +++ b/image_creator/disk.py @@ -175,6 +175,19 @@ class DiskDevice(object): self.g = guestfs.GuestFS() self.g.add_drive_opts(self.real_device, readonly=0) + # Before version 1.17.14 the recovery process, which is a fork of the + # original process that called libguestfs, did not close its inherited + # file descriptors. This can cause problems especially if the parent + # process has opened pipes. Since the recovery process is an optional + # feature of libguestfs, it's better to disable it. + self.g.set_recovery_proc(0) + version = self.g.version() + if version['major'] > 1 or (version['major'] == 1 and + (version['minor'] >= 18 or \ + (version['minor'] == 17 and version['release'] >= 14))): + self.g.set_recovery_proc(1) + self.out.output("Enabling recovery proc") + #self.g.set_trace(1) #self.g.set_verbose(1) @@ -182,9 +195,8 @@ class DiskDevice(object): def enable(self): """Enable a newly created DiskDevice""" - self.progressbar = self.out.Progress("Launching helper VM", "percent") - self.progressbar.max = 100 - self.progressbar.goto(1) + self.progressbar = self.out.Progress(100, "Launching helper VM", + "percent") eh = self.g.set_event_callback(self.progress_callback, guestfs.EVENT_PROGRESS) self.g.launch() @@ -226,9 +238,10 @@ class DiskDevice(object): self.progressbar.goto((position * 100) // total) - def mount(self): + def mount(self, readonly=False): """Mount all disk partitions in a correct order.""" + mount = self.g.mount_ro if readonly else self.g.mount self.out.output("Mounting image...", False) mps = self.g.inspect_get_mountpoints(self.root) @@ -244,7 +257,7 @@ class DiskDevice(object): mps.sort(compare) for mp, dev in mps: try: - self.g.mount(dev, mp) + mount(dev, mp) except RuntimeError as msg: self.out.warn("%s (ignored)" % msg) self.out.success("done") @@ -406,9 +419,8 @@ class DiskDevice(object): MB = 2 ** 20 blocksize = 4 * MB # 4MB size = self.meta['SIZE'] - progress_size = (size + MB - 1) // MB # in MB - progressbar = self.out.Progress("Dumping image file", 'mb') - progressbar.max = progress_size + progr_size = (size + MB - 1) // MB # in MB + progressbar = self.out.Progress(progr_size, "Dumping image file", 'mb') with open(self.real_device, 'r') as src: with open(outfile, "w") as dst: