def get_rootfs_size(self, actual_rootfs_size=0): """ Calculate the required size of rootfs taking into consideration --size/--fixed-size flags as well as overhead and extra space, as specified in kickstart file. Raises an error if the `actual_rootfs_size` is larger than fixed-size rootfs. """ if self.fixed_size: rootfs_size = self.fixed_size if actual_rootfs_size > rootfs_size: msger.error("Actual rootfs size (%d kB) is larger than allowed size %d kB" \ %(actual_rootfs_size, rootfs_size)) else: extra_blocks = self.get_extra_block_count(actual_rootfs_size) if extra_blocks < self.extra_space: extra_blocks = self.extra_space rootfs_size = actual_rootfs_size + extra_blocks rootfs_size *= self.overhead_factor msger.debug("Added %d extra blocks to %s to get to %d total blocks" % \ (extra_blocks, self.mountpoint, rootfs_size)) return rootfs_size
def prepare(self, creator, cr_workdir, oe_builddir, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot): """ Prepare content for individual partitions, depending on partition command parameters. """ self.sourceparams_dict = {} if self.sourceparams: self.sourceparams_dict = parse_sourceparams(self.sourceparams) if not self.source: if not self.size: msger.error("The %s partition has a size of zero. Please " "specify a non-zero --size for that partition." % \ self.mountpoint) if self.fstype and self.fstype == "swap": self.prepare_swap_partition(cr_workdir, oe_builddir, native_sysroot) elif self.fstype: rootfs = "%s/fs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_empty_partition_" + prefix) method(rootfs, oe_builddir, native_sysroot) self.source_file = rootfs break return plugins = pluginmgr.get_source_plugins() if self.source not in plugins: msger.error("The '%s' --source specified for %s doesn't exist.\n\t" "See 'wic list source-plugins' for a list of available" " --sources.\n\tSee 'wic help source-plugins' for " "details on adding a new source plugin." % \ (self.source, self.mountpoint)) self._source_methods = pluginmgr.get_source_plugin_methods(\ self.source, partition_methods) self._source_methods["do_configure_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_stage_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_prepare_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, rootfs_dir, native_sysroot)
def prepare(self, creator, cr_workdir, oe_builddir, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot): """ Prepare content for individual partitions, depending on partition command parameters. """ if self.sourceparams: self.sourceparams_dict = parse_sourceparams(self.sourceparams) if not self.source: if not self.size: msger.error("The %s partition has a size of zero. Please " "specify a non-zero --size for that partition." % \ self.mountpoint) if self.fstype and self.fstype == "swap": self.prepare_swap_partition(cr_workdir, oe_builddir, native_sysroot) self.source_file = "%s/fs.%s" % (cr_workdir, self.fstype) elif self.fstype: rootfs = "%s/fs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_empty_partition_" + prefix) method(rootfs, oe_builddir, native_sysroot) self.source_file = rootfs break return plugins = pluginmgr.get_source_plugins() if self.source not in plugins: msger.error("The '%s' --source specified for %s doesn't exist.\n\t" "See 'wic list source-plugins' for a list of available" " --sources.\n\tSee 'wic help source-plugins' for " "details on adding a new source plugin." % \ (self.source, self.mountpoint)) self._source_methods = pluginmgr.get_source_plugin_methods(\ self.source, partition_methods) self._source_methods["do_configure_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_stage_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_prepare_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, rootfs_dir, native_sysroot)
def prepare_rootfs(self, cr_workdir, oe_builddir, rootfs_dir, native_sysroot): """ Prepare content for a rootfs partition i.e. create a partition and fill it from a /rootfs dir. Currently handles ext2/3/4, btrfs and vfat. """ p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot) p_localstatedir = os.environ.get("PSEUDO_LOCALSTATEDIR", "%s/../pseudo" % rootfs_dir) p_passwd = os.environ.get("PSEUDO_PASSWD", rootfs_dir) p_nosymlinkexp = os.environ.get("PSEUDO_NOSYMLINKEXP", "1") pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % p_localstatedir pseudo += "export PSEUDO_PASSWD=%s;" % p_passwd pseudo += "export PSEUDO_NOSYMLINKEXP=%s;" % p_nosymlinkexp pseudo += "%s " % get_bitbake_var("FAKEROOTCMD") rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) if not self.fstype: msger.error("File system for partition %s not specified in kickstart, " \ "use --fstype option" % (self.mountpoint)) # Get rootfs size from bitbake variable if it's not set in .ks file if not self.size: # Bitbake variable ROOTFS_SIZE is calculated in # Image._get_rootfs_size method from meta/lib/oe/image.py # using IMAGE_ROOTFS_SIZE, IMAGE_ROOTFS_ALIGNMENT, # IMAGE_OVERHEAD_FACTOR and IMAGE_ROOTFS_EXTRA_SPACE rsize_bb = get_bitbake_var('ROOTFS_SIZE') if rsize_bb: msger.warning( 'overhead-factor was specified, but size was not, so bitbake variables will be used for the size. In this case both IMAGE_OVERHEAD_FACTOR and --overhead-factor will be applied' ) self.size = int(round(float(rsize_bb))) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_rootfs_" + prefix) method(rootfs, oe_builddir, rootfs_dir, native_sysroot, pseudo) self.source_file = rootfs # get the rootfs size in the right units for kickstart (kB) du_cmd = "du -Lbks %s" % rootfs out = exec_cmd(du_cmd) self.size = int(out.split()[0]) break
def prepare_rootfs(self, cr_workdir, oe_builddir, rootfs_dir, native_sysroot): """ Prepare content for a rootfs partition i.e. create a partition and fill it from a /rootfs dir. Currently handles ext2/3/4, btrfs and vfat. """ p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot) p_localstatedir = os.environ.get("PSEUDO_LOCALSTATEDIR", "%s/../pseudo" % rootfs_dir) p_passwd = os.environ.get("PSEUDO_PASSWD", rootfs_dir) p_nosymlinkexp = os.environ.get("PSEUDO_NOSYMLINKEXP", "1") pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % p_localstatedir pseudo += "export PSEUDO_PASSWD=%s;" % p_passwd pseudo += "export PSEUDO_NOSYMLINKEXP=%s;" % p_nosymlinkexp pseudo += "%s " % get_bitbake_var("FAKEROOTCMD") rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) if not self.fstype: msger.error("File system for partition %s not specified in kickstart, " \ "use --fstype option" % (self.mountpoint)) # Get rootfs size from bitbake variable if it's not set in .ks file if not self.size: # Bitbake variable ROOTFS_SIZE is calculated in # Image._get_rootfs_size method from meta/lib/oe/image.py # using IMAGE_ROOTFS_SIZE, IMAGE_ROOTFS_ALIGNMENT, # IMAGE_OVERHEAD_FACTOR and IMAGE_ROOTFS_EXTRA_SPACE rsize_bb = get_bitbake_var('ROOTFS_SIZE') if rsize_bb: msger.warning('overhead-factor was specified, but size was not, so bitbake variables will be used for the size. In this case both IMAGE_OVERHEAD_FACTOR and --overhead-factor will be applied') self.size = int(round(float(rsize_bb))) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_rootfs_" + prefix) method(rootfs, oe_builddir, rootfs_dir, native_sysroot, pseudo) self.source_file = rootfs # get the rootfs size in the right units for kickstart (kB) du_cmd = "du -Lbks %s" % rootfs out = exec_cmd(du_cmd) self.size = int(out.split()[0]) break
def prepare_rootfs(self, cr_workdir, oe_builddir, rootfs_dir, native_sysroot): """ Prepare content for a rootfs partition i.e. create a partition and fill it from a /rootfs dir. Currently handles ext2/3/4, btrfs and vfat. """ p_prefix = os.environ.get("PSEUDO_PREFIX", "%s/usr" % native_sysroot) p_localstatedir = os.environ.get("PSEUDO_LOCALSTATEDIR", "%s/../pseudo" % rootfs_dir) p_passwd = os.environ.get("PSEUDO_PASSWD", rootfs_dir) p_nosymlinkexp = os.environ.get("PSEUDO_NOSYMLINKEXP", "1") pseudo = "export PSEUDO_PREFIX=%s;" % p_prefix pseudo += "export PSEUDO_LOCALSTATEDIR=%s;" % p_localstatedir pseudo += "export PSEUDO_PASSWD=%s;" % p_passwd pseudo += "export PSEUDO_NOSYMLINKEXP=%s;" % p_nosymlinkexp pseudo += "%s/usr/bin/pseudo " % native_sysroot rootfs = "%s/rootfs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) if not self.fstype: msger.error("File system for partition %s not specified in kickstart, " \ "use --fstype option" % (self.mountpoint)) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_rootfs_" + prefix) method(rootfs, oe_builddir, rootfs_dir, native_sysroot, pseudo) self.source_file = rootfs # get the rootfs size in the right units for kickstart (kB) du_cmd = "du -Lbks %s" % rootfs out = exec_cmd(du_cmd) self.size = int(out.split()[0]) break
def prepare(self, creator, cr_workdir, oe_builddir, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot): """ Prepare content for individual partitions, depending on partition command parameters. """ if self.sourceparams: self.sourceparams_dict = parse_sourceparams(self.sourceparams) if not self.source: if not self.size and not self.fixed_size: msger.error("The %s partition has a size of zero. Please " "specify a non-zero --size/--fixed-size for that partition." % \ self.mountpoint) if self.fstype and self.fstype == "swap": self.prepare_swap_partition(cr_workdir, oe_builddir, native_sysroot) self.source_file = "%s/fs.%s" % (cr_workdir, self.fstype) elif self.fstype: rootfs = "%s/fs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_empty_partition_" + prefix) method(rootfs, oe_builddir, native_sysroot) self.source_file = rootfs break return plugins = pluginmgr.get_source_plugins() if self.source not in plugins: msger.error("The '%s' --source specified for %s doesn't exist.\n\t" "See 'wic list source-plugins' for a list of available" " --sources.\n\tSee 'wic help source-plugins' for " "details on adding a new source plugin." % \ (self.source, self.mountpoint)) self._source_methods = pluginmgr.get_source_plugin_methods(\ self.source, partition_methods) self._source_methods["do_configure_partition"]( self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_stage_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_prepare_partition"]( self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, rootfs_dir, native_sysroot) # further processing required Partition.size to be an integer, make # sure that it is one if type(self.size) is not int: msger.error("Partition %s internal size is not an integer. " \ "This a bug in source plugin %s and needs to be fixed." \ % (self.mountpoint, self.source)) if self.fixed_size and self.size > self.fixed_size: msger.error("File system image of partition %s is larger (%d kB) than its"\ "allowed size %d kB" % (self.mountpoint, self.size, self.fixed_size))
def prepare(self, creator, cr_workdir, oe_builddir, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot): """ Prepare content for individual partitions, depending on partition command parameters. """ if self.sourceparams: self.sourceparams_dict = parse_sourceparams(self.sourceparams) if not self.source: if not self.size and not self.fixed_size: msger.error("The %s partition has a size of zero. Please " "specify a non-zero --size/--fixed-size for that partition." % \ self.mountpoint) if self.fstype and self.fstype == "swap": self.prepare_swap_partition(cr_workdir, oe_builddir, native_sysroot) self.source_file = "%s/fs.%s" % (cr_workdir, self.fstype) elif self.fstype: rootfs = "%s/fs_%s.%s.%s" % (cr_workdir, self.label, self.lineno, self.fstype) if os.path.isfile(rootfs): os.remove(rootfs) for prefix in ("ext", "btrfs", "vfat", "squashfs"): if self.fstype.startswith(prefix): method = getattr(self, "prepare_empty_partition_" + prefix) method(rootfs, oe_builddir, native_sysroot) self.source_file = rootfs break return plugins = pluginmgr.get_source_plugins() if self.source not in plugins: msger.error("The '%s' --source specified for %s doesn't exist.\n\t" "See 'wic list source-plugins' for a list of available" " --sources.\n\tSee 'wic help source-plugins' for " "details on adding a new source plugin." % \ (self.source, self.mountpoint)) self._source_methods = pluginmgr.get_source_plugin_methods(\ self.source, partition_methods) self._source_methods["do_configure_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_stage_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, native_sysroot) self._source_methods["do_prepare_partition"](self, self.sourceparams_dict, creator, cr_workdir, oe_builddir, bootimg_dir, kernel_dir, rootfs_dir, native_sysroot) # further processing required Partition.size to be an integer, make # sure that it is one if type(self.size) is not int: msger.error("Partition %s internal size is not an integer. " \ "This a bug in source plugin %s and needs to be fixed." \ % (self.mountpoint, self.source)) if self.fixed_size and self.size > self.fixed_size: msger.error("File system image of partition %s is larger (%d kB) than its"\ "allowed size %d kB" % (self.mountpoint, self.size, self.fixed_size))