def __init__(self, xml_state, target_dir, root_dir): self.label = None self.root_uuid = None self.root_dir = root_dir self.target_dir = target_dir self.requested_image_type = xml_state.get_build_type_name() if self.requested_image_type == 'pxe': self.requested_filesystem = xml_state.build_type.get_filesystem() else: self.requested_filesystem = self.requested_image_type if not self.requested_filesystem: raise KiwiFileSystemSetupError( 'No filesystem configured in %s type' % self.requested_image_type) self.filesystem_custom_parameters = { 'mount_options': xml_state.get_fs_mount_option_list(), 'create_options': xml_state.get_fs_create_option_list() } self.system_setup = SystemSetup(xml_state=xml_state, root_dir=self.root_dir) self.filename = ''.join([ target_dir, '/', xml_state.xml_data.get_name(), '.' + platform.machine(), '-' + xml_state.get_image_version(), '.', self.requested_filesystem ]) self.blocksize = xml_state.build_type.get_target_blocksize() self.filesystem_setup = FileSystemSetup(xml_state, root_dir) self.filesystems_no_device_node = ['squashfs'] self.result = Result(xml_state) self.runtime_config = RuntimeConfig()
def create(self): """ Build a mountable filesystem image Image types which triggers this builder are: * image="ext2" * image="ext3" * image="ext4" * image="btrfs" * image="xfs" :return: result :rtype: instance of :class:`Result` """ log.info( 'Creating %s filesystem', self.requested_filesystem ) supported_filesystems = Defaults.get_filesystem_image_types() if self.requested_filesystem not in supported_filesystems: raise KiwiFileSystemSetupError( 'Unknown filesystem: %s' % self.requested_filesystem ) if self.requested_filesystem not in self.filesystems_no_device_node: self._operate_on_loop() else: self._operate_on_file() self.result.verify_image_size( self.runtime_config.get_max_size_constraint(), self.filename ) self.result.add( key='filesystem_image', filename=self.filename, use_for_bundle=True, compress=self.runtime_config.get_bundle_compression( default=True ), shasum=True ) self.result.add( key='image_packages', filename=self.system_setup.export_package_list( self.target_dir ), use_for_bundle=True, compress=False, shasum=False ) self.result.add( key='image_verified', filename=self.system_setup.export_package_verification( self.target_dir ), use_for_bundle=True, compress=False, shasum=False ) return self.result
def new( name: str, device_provider: object, root_dir: str=None, custom_args: Dict=None # noqa: E252 ): name_map = { 'ext2': 'Ext2', 'ext3': 'Ext3', 'ext4': 'Ext4', 'btrfs': 'Btrfs', 'xfs': 'Xfs', 'fat16': 'Fat16', 'fat32': 'Fat32', 'squashfs': 'SquashFs', 'clicfs': 'ClicFs', 'swap': 'Swap' } try: filesystem = importlib.import_module( 'kiwi.filesystem.{0}'.format(name) ) return filesystem.__dict__['FileSystem{0}'.format(name_map[name])]( device_provider, root_dir, custom_args ) except Exception as issue: raise KiwiFileSystemSetupError( 'Support for {0} filesystem not implemented: {1}'.format( name, issue ) )
def __init__( self, xml_state: XMLState, target_dir: str, root_dir: str, custom_args: Dict = None ): self.label = None self.root_uuid = '' self.root_dir = root_dir self.target_dir = target_dir self.bundle_format = xml_state.get_build_type_bundle_format() self.requested_image_type = xml_state.get_build_type_name() if self.requested_image_type in Defaults.get_kis_image_types(): self.requested_filesystem = xml_state.build_type.get_filesystem() else: self.requested_filesystem = self.requested_image_type if not self.requested_filesystem: raise KiwiFileSystemSetupError( 'No filesystem configured in %s type' % self.requested_image_type ) self.filesystem_custom_parameters = { 'mount_options': xml_state.get_fs_mount_option_list(), 'create_options': xml_state.get_fs_create_option_list() } if self.requested_filesystem == 'squashfs': self.filesystem_custom_parameters['compression'] = \ xml_state.build_type.get_squashfscompression() self.system_setup = SystemSetup( xml_state=xml_state, root_dir=self.root_dir ) self.filename = ''.join( [ target_dir, '/', xml_state.xml_data.get_name(), '.' + Defaults.get_platform_name(), '-' + xml_state.get_image_version(), '.', self.requested_filesystem ] ) self.blocksize = xml_state.build_type.get_target_blocksize() self.filesystem_setup = FileSystemSetup(xml_state, root_dir) self.filesystems_no_device_node = [ 'squashfs' ] self.result = Result(xml_state) self.runtime_config = RuntimeConfig()
def __new__(self, name, device_provider, root_dir=None, custom_args=None): if name == 'ext2': return FileSystemExt2(device_provider, root_dir, custom_args) elif name == 'ext3': return FileSystemExt3(device_provider, root_dir, custom_args) elif name == 'ext4': return FileSystemExt4(device_provider, root_dir, custom_args) elif name == 'btrfs': return FileSystemBtrfs(device_provider, root_dir, custom_args) elif name == 'xfs': return FileSystemXfs(device_provider, root_dir, custom_args) elif name == 'fat16': return FileSystemFat16(device_provider, root_dir, custom_args) elif name == 'fat32': return FileSystemFat32(device_provider, root_dir, custom_args) elif name == 'squashfs': return FileSystemSquashFs(device_provider, root_dir, custom_args) elif name == 'clicfs': return FileSystemClicFs(device_provider, root_dir, custom_args) elif name == 'swap': return FileSystemSwap(device_provider, root_dir, custom_args) else: raise KiwiFileSystemSetupError( 'Support for %s filesystem not implemented' % name)