def _write_escrow_packets(self, storage, sysroot): """Write the escrow packets. :param storage: the storage object :type storage: an instance of InstallerStorage :param sysroot: a path to the target OS installation :type sysroot: str """ escrow_devices = [ d for d in storage.devices if d.format.type == 'luks' and d.format.escrow_cert ] if not escrow_devices: return log.debug("escrow: write_escrow_packets start") backup_passphrase = blockdev.crypto.generate_backup_passphrase() try: escrow_dir = sysroot + "/root" log.debug("escrow: writing escrow packets to %s", escrow_dir) blivet_util.makedirs(escrow_dir) for device in escrow_devices: log.debug("escrow: device %s: %s", repr(device.path), repr(device.format.type)) device.format.escrow(escrow_dir, backup_passphrase) except (IOError, RuntimeError) as e: # TODO: real error handling log.error("failed to store encryption key: %s", e) log.debug("escrow: write_escrow_packets done")
def _find_existing_installations(devicetree): """Find existing GNU/Linux installations on devices from the device tree. :param devicetree: a device tree to find existing installations in :return: roots of all found installations """ if not os.path.exists(util.getTargetPhysicalRoot()): blivet_util.makedirs(util.getTargetPhysicalRoot()) sysroot = util.getSysroot() roots = [] direct_devices = (dev for dev in devicetree.devices if dev.direct) for device in direct_devices: if not device.format.linux_native or not device.format.mountable or \ not device.controllable: continue try: device.setup() except Exception: # pylint: disable=broad-except log_exception_info(log.warning, "setup of %s failed", [device.name]) continue options = device.format.options + ",ro" try: device.format.mount(options=options, mountpoint=sysroot) except Exception: # pylint: disable=broad-except log_exception_info(log.warning, "mount of %s as %s failed", [device.name, device.format.type]) blivet_util.umount(mountpoint=sysroot) continue if not os.access(sysroot + "/etc/fstab", os.R_OK): blivet_util.umount(mountpoint=sysroot) device.teardown() continue try: (architecture, product, version) = get_release_string() except ValueError: name = _("Linux on %s") % device.name else: # I'd like to make this finer grained, but it'd be very difficult # to translate. if not product or not version or not architecture: name = _("Unknown Linux") elif "linux" in product.lower(): name = _("%(product)s %(version)s for %(arch)s") % \ {"product": product, "version": version, "arch": architecture} else: name = _("%(product)s Linux %(version)s for %(arch)s") % \ {"product": product, "version": version, "arch": architecture} (mounts, swaps) = _parse_fstab(devicetree, chroot=sysroot) blivet_util.umount(mountpoint=sysroot) if not mounts and not swaps: # empty /etc/fstab. weird, but I've seen it happen. continue roots.append(Root(mounts=mounts, swaps=swaps, name=name)) return roots
def _write_escrow_packets(storage, sysroot): """Write the escrow packets. :param storage: the storage object :type storage: :class:`~.storage.InstallerStorage` :param sysroot: a path to the target OS installation :type sysroot: str """ escrow_devices = [ d for d in storage.devices if d.format.type == 'luks' and d.format.escrow_cert ] if not escrow_devices: return log.debug("escrow: write_escrow_packets start") backup_passphrase = blockdev.crypto.generate_backup_passphrase() try: escrow_dir = sysroot + "/root" log.debug("escrow: writing escrow packets to %s", escrow_dir) blivet_util.makedirs(escrow_dir) for device in escrow_devices: log.debug("escrow: device %s: %s", repr(device.path), repr(device.format.type)) device.format.escrow(escrow_dir, backup_passphrase) except (IOError, RuntimeError) as e: # TODO: real error handling log.error("failed to store encryption key: %s", e) log.debug("escrow: write_escrow_packets done")
def _find_existing_installations(devicetree): """Find existing GNU/Linux installations on devices from the device tree. :param devicetree: a device tree to find existing installations in :return: roots of all found installations """ if not os.path.exists(conf.target.physical_root): blivet_util.makedirs(conf.target.physical_root) sysroot = conf.target.physical_root roots = [] direct_devices = (dev for dev in devicetree.devices if dev.direct) for device in direct_devices: if not device.format.linux_native or not device.format.mountable or \ not device.controllable: continue try: device.setup() except Exception: # pylint: disable=broad-except log_exception_info(log.warning, "setup of %s failed", [device.name]) continue options = device.format.options + ",ro" try: device.format.mount(options=options, mountpoint=sysroot) except Exception: # pylint: disable=broad-except log_exception_info(log.warning, "mount of %s as %s failed", [device.name, device.format.type]) blivet_util.umount(mountpoint=sysroot) continue if not os.access(sysroot + "/etc/fstab", os.R_OK): blivet_util.umount(mountpoint=sysroot) device.teardown() continue try: (architecture, product, version) = get_release_string(chroot=sysroot) except ValueError: name = _("Linux on %s") % device.name else: # I'd like to make this finer grained, but it'd be very difficult # to translate. if not product or not version or not architecture: name = _("Unknown Linux") elif "linux" in product.lower(): name = _("%(product)s %(version)s for %(arch)s") % \ {"product": product, "version": version, "arch": architecture} else: name = _("%(product)s Linux %(version)s for %(arch)s") % \ {"product": product, "version": version, "arch": architecture} (mounts, swaps) = _parse_fstab(devicetree, chroot=sysroot) blivet_util.umount(mountpoint=sysroot) if not mounts and not swaps: # empty /etc/fstab. weird, but I've seen it happen. continue roots.append(Root(mounts=mounts, swaps=swaps, name=name)) return roots
def _find_existing_installations(devicetree): """Find existing GNU/Linux installations on devices from the device tree. :param devicetree: a device tree to find existing installations in :return: roots of all found installations """ if not os.path.exists(conf.target.physical_root): blivet_util.makedirs(conf.target.physical_root) sysroot = conf.target.physical_root roots = [] direct_devices = (dev for dev in devicetree.devices if dev.direct) for device in direct_devices: if not device.format.linux_native or not device.format.mountable or \ not device.controllable or not device.format.exists: continue try: device.setup() except Exception: # pylint: disable=broad-except log_exception_info(log.warning, "setup of %s failed", [device.name]) continue options = device.format.options + ",ro" try: device.format.mount(options=options, mountpoint=sysroot) except Exception: # pylint: disable=broad-except log_exception_info(log.warning, "mount of %s as %s failed", [device.name, device.format.type]) blivet_util.umount(mountpoint=sysroot) continue if not os.access(sysroot + "/etc/fstab", os.R_OK): blivet_util.umount(mountpoint=sysroot) device.teardown() continue architecture, product, version = get_release_string(chroot=sysroot) (mounts, swaps) = _parse_fstab(devicetree, chroot=sysroot) blivet_util.umount(mountpoint=sysroot) if not mounts and not swaps: # empty /etc/fstab. weird, but I've seen it happen. continue roots.append( Root(product=product, version=version, arch=architecture, mounts=mounts, swaps=swaps)) return roots