def get_boot_path(self, target='disk'): if target != 'disk' and target != 'iso': raise KiwiBootLoaderTargetError('Invalid boot loader target %s' % target) bootpath = '/boot' need_boot_partition = False if target == 'disk': disk_setup = DiskSetup(self.xml_state, self.root_dir) need_boot_partition = disk_setup.need_boot_partition() if need_boot_partition: # if an extra boot partition is used we will find the # data directly in the root of this partition and not # below the boot/ directory bootpath = '/' if target == 'disk': if not need_boot_partition: filesystem = self.xml_state.build_type.get_filesystem() volumes = self.xml_state.get_volumes() if filesystem == 'btrfs' and volumes: root_is_snapshot = \ self.xml_state.build_type.get_btrfs_root_is_snapshot() boot_is_on_volume = False for volume in volumes: if volume.name == 'boot' or volume.name == 'boot/grub2': boot_is_on_volume = True break # if we directly boot a btrfs filesystem with a subvolume # setup and no extra boot partition we have to care for # the layout of the system which places all volumes below # a topleve volume or snapshot if not boot_is_on_volume and root_is_snapshot: bootpath = '/@/.snapshots/1/snapshot' + bootpath else: bootpath = '/@' + bootpath return bootpath
def __init__(self, xml_state, target_dir, root_dir): self.root_dir = root_dir self.target_dir = target_dir self.xml_state = xml_state self.custom_filesystem_args = None self.build_type_name = xml_state.get_build_type_name() self.image_format = xml_state.build_type.get_format() self.install_iso = xml_state.build_type.get_installiso() self.install_stick = xml_state.build_type.get_installstick() self.install_pxe = xml_state.build_type.get_installpxe() self.blocksize = xml_state.build_type.get_target_blocksize() self.volume_manager_name = xml_state.get_volume_management() self.volumes = xml_state.get_volumes() self.volume_group_name = xml_state.get_volume_group_name() self.mdraid = xml_state.build_type.get_mdraid() self.luks = xml_state.build_type.get_luks() self.luks_os = xml_state.build_type.get_luksOS() self.machine = xml_state.get_build_type_machine_section() self.requested_filesystem = xml_state.build_type.get_filesystem() self.requested_boot_filesystem = \ xml_state.build_type.get_bootfilesystem() self.bootloader = xml_state.build_type.get_bootloader() self.disk_setup = DiskSetup( xml_state, root_dir ) self.boot_image_task = BootImageTask( 'kiwi', xml_state, target_dir ) self.firmware = FirmWare( xml_state ) self.system_setup = SystemSetup( xml_state=xml_state, description_dir=None, root_dir=self.root_dir ) self.diskname = ''.join( [ target_dir, '/', xml_state.xml_data.get_name(), '.' + platform.machine(), '-' + xml_state.get_image_version(), '.raw' ] ) self.install_media = self.__install_image_requested() self.install_image = InstallImageBuilder( xml_state, target_dir, self.boot_image_task ) # an instance of a class with the sync_data capability # representing the entire image system except for the boot/ area # which could live on another part of the disk self.system = None # an instance of a class with the sync_data capability # representing the boot/ area of the disk if not part of # self.system self.system_boot = None # an instance of a class with the sync_data capability # representing the boot/efi area of the disk self.system_efi = None # result store self.result = Result()