* [PATCH 3/7] wic: Add sourceparam param to partition plugin methods
2014-08-12 1:35 [PATCH 0/7] wic: Add gummiboot support Tom Zanussi
2014-08-12 1:35 ` [PATCH 1/7] wic: Add '--sourceparams' partition option Tom Zanussi
2014-08-12 1:35 ` [PATCH 2/7] wic: Add utility function for parsing sourceparams Tom Zanussi
@ 2014-08-12 1:35 ` Tom Zanussi
2014-08-12 1:35 ` [PATCH 4/7] wic: Parse and pass sourceparams " Tom Zanussi
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Tom Zanussi @ 2014-08-12 1:35 UTC (permalink / raw)
To: openembedded-core; +Cc: Tom Zanussi
The sourceparam param allows source plugins to be parameterized
generically (via --sourceparams="key=val[,key=val], implemented
previously).
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
---
scripts/lib/wic/kickstart/custom_commands/partition.py | 6 +++---
scripts/lib/wic/pluginbase.py | 15 +++++++++------
scripts/lib/wic/plugins/source/bootimg-efi.py | 10 ++++++----
scripts/lib/wic/plugins/source/bootimg-pcbios.py | 10 ++++++----
scripts/lib/wic/plugins/source/rootfs.py | 5 +++--
5 files changed, 27 insertions(+), 19 deletions(-)
diff --git a/scripts/lib/wic/kickstart/custom_commands/partition.py b/scripts/lib/wic/kickstart/custom_commands/partition.py
index 3920adb..76cf7a9 100644
--- a/scripts/lib/wic/kickstart/custom_commands/partition.py
+++ b/scripts/lib/wic/kickstart/custom_commands/partition.py
@@ -143,16 +143,16 @@ class Wic_PartData(Mic_PartData):
msger.error("The '%s' --source specified for %s doesn't exist.\n\tSee '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, cr, cr_workdir,
+ self._source_methods["do_configure_partition"](self, None, cr, cr_workdir,
oe_builddir,
bootimg_dir,
kernel_dir,
native_sysroot)
- self._source_methods["do_stage_partition"](self, cr, cr_workdir,
+ self._source_methods["do_stage_partition"](self, None, cr, cr_workdir,
oe_builddir,
bootimg_dir, kernel_dir,
native_sysroot)
- self._source_methods["do_prepare_partition"](self, cr, cr_workdir,
+ self._source_methods["do_prepare_partition"](self, None, cr, cr_workdir,
oe_builddir,
bootimg_dir, kernel_dir, rootfs_dir,
native_sysroot)
diff --git a/scripts/lib/wic/pluginbase.py b/scripts/lib/wic/pluginbase.py
index 06f318f..b8b3a46 100644
--- a/scripts/lib/wic/pluginbase.py
+++ b/scripts/lib/wic/pluginbase.py
@@ -64,8 +64,9 @@ class SourcePlugin(_Plugin):
msger.debug("SourcePlugin: do_install_disk: disk: %s" % disk_name)
@classmethod
- def do_stage_partition(self, part, cr, workdir, oe_builddir, bootimg_dir,
- kernel_dir, native_sysroot):
+ def do_stage_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ native_sysroot):
"""
Special content staging hook called before do_prepare_partition(),
normally empty.
@@ -80,8 +81,9 @@ class SourcePlugin(_Plugin):
msger.debug("SourcePlugin: do_stage_partition: part: %s" % part)
@classmethod
- def do_configure_partition(self, part, cr, cr_workdir, oe_builddir,
- bootimg_dir, kernel_dir, native_sysroot):
+ def do_configure_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ native_sysroot):
"""
Called before do_prepare_partition(), typically used to create
custom configuration files for a partition, for example
@@ -90,8 +92,9 @@ class SourcePlugin(_Plugin):
msger.debug("SourcePlugin: do_configure_partition: part: %s" % part)
@classmethod
- def do_prepare_partition(self, part, cr, cr_workdir, oe_builddir, bootimg_dir,
- kernel_dir, rootfs_dir, native_sysroot):
+ def do_prepare_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir, rootfs_dir,
+ native_sysroot):
"""
Called to do the actual content population for a partition i.e. it
'prepares' the partition to be incorporated into the image.
diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
index 53f1782..ea94fd2 100644
--- a/scripts/lib/wic/plugins/source/bootimg-efi.py
+++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
@@ -42,8 +42,9 @@ class BootimgEFIPlugin(SourcePlugin):
name = 'bootimg-efi'
@classmethod
- def do_configure_partition(self, part, cr, cr_workdir, oe_builddir,
- bootimg_dir, kernel_dir, native_sysroot):
+ def do_configure_partition(self, source_params, part, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ native_sysroot):
"""
Called before do_prepare_partition(), creates grubefi config
"""
@@ -92,8 +93,9 @@ class BootimgEFIPlugin(SourcePlugin):
cfg.close()
@classmethod
- def do_prepare_partition(self, part, cr, cr_workdir, oe_builddir, bootimg_dir,
- kernel_dir, rootfs_dir, native_sysroot):
+ def do_prepare_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ rootfs_dir, native_sysroot):
"""
Called to do the actual content population for a partition i.e. it
'prepares' the partition to be incorporated into the image.
diff --git a/scripts/lib/wic/plugins/source/bootimg-pcbios.py b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
index bd2225e..aceed20 100644
--- a/scripts/lib/wic/plugins/source/bootimg-pcbios.py
+++ b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
@@ -65,8 +65,9 @@ class BootimgPcbiosPlugin(SourcePlugin):
raise ImageError("Unable to set MBR to %s" % full_path)
@classmethod
- def do_configure_partition(self, part, cr, cr_workdir, oe_builddir,
- bootimg_dir, kernel_dir, native_sysroot):
+ def do_configure_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ native_sysroot):
"""
Called before do_prepare_partition(), creates syslinux config
"""
@@ -118,8 +119,9 @@ class BootimgPcbiosPlugin(SourcePlugin):
cfg.close()
@classmethod
- def do_prepare_partition(self, part, cr, cr_workdir, oe_builddir, bootimg_dir,
- kernel_dir, rootfs_dir, native_sysroot):
+ def do_prepare_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ rootfs_dir, native_sysroot):
"""
Called to do the actual content population for a partition i.e. it
'prepares' the partition to be incorporated into the image.
diff --git a/scripts/lib/wic/plugins/source/rootfs.py b/scripts/lib/wic/plugins/source/rootfs.py
index 919e97e..a432a18 100644
--- a/scripts/lib/wic/plugins/source/rootfs.py
+++ b/scripts/lib/wic/plugins/source/rootfs.py
@@ -62,8 +62,9 @@ class RootfsPlugin(SourcePlugin):
return image_rootfs_dir
@classmethod
- def do_prepare_partition(self, part, cr, cr_workdir, oe_builddir, bootimg_dir,
- kernel_dir, krootfs_dir, native_sysroot):
+ def do_prepare_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ krootfs_dir, native_sysroot):
"""
Called to do the actual content population for a partition i.e. it
'prepares' the partition to be incorporated into the image.
--
1.8.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 4/7] wic: Parse and pass sourceparams to partition plugin methods
2014-08-12 1:35 [PATCH 0/7] wic: Add gummiboot support Tom Zanussi
` (2 preceding siblings ...)
2014-08-12 1:35 ` [PATCH 3/7] wic: Add sourceparam param to partition plugin methods Tom Zanussi
@ 2014-08-12 1:35 ` Tom Zanussi
2014-08-12 1:35 ` [PATCH 5/7] wic: Add gummiboot support to bootimg-efi Tom Zanussi
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Tom Zanussi @ 2014-08-12 1:35 UTC (permalink / raw)
To: openembedded-core; +Cc: Tom Zanussi
Add code to parse the sourceparams and pass them to the partition
plugin methods.
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
---
scripts/lib/wic/kickstart/custom_commands/partition.py | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/scripts/lib/wic/kickstart/custom_commands/partition.py b/scripts/lib/wic/kickstart/custom_commands/partition.py
index 76cf7a9..a3d5ef3 100644
--- a/scripts/lib/wic/kickstart/custom_commands/partition.py
+++ b/scripts/lib/wic/kickstart/custom_commands/partition.py
@@ -126,6 +126,11 @@ class Wic_PartData(Mic_PartData):
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)
@@ -143,16 +148,19 @@ class Wic_PartData(Mic_PartData):
msger.error("The '%s' --source specified for %s doesn't exist.\n\tSee '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, None, cr, cr_workdir,
+ self._source_methods["do_configure_partition"](self, self.sourceparams_dict,
+ cr, cr_workdir,
oe_builddir,
bootimg_dir,
kernel_dir,
native_sysroot)
- self._source_methods["do_stage_partition"](self, None, cr, cr_workdir,
+ self._source_methods["do_stage_partition"](self, self.sourceparams_dict,
+ cr, cr_workdir,
oe_builddir,
bootimg_dir, kernel_dir,
native_sysroot)
- self._source_methods["do_prepare_partition"](self, None, cr, cr_workdir,
+ self._source_methods["do_prepare_partition"](self, self.sourceparams_dict,
+ cr, cr_workdir,
oe_builddir,
bootimg_dir, kernel_dir, rootfs_dir,
native_sysroot)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 5/7] wic: Add gummiboot support to bootimg-efi
2014-08-12 1:35 [PATCH 0/7] wic: Add gummiboot support Tom Zanussi
` (3 preceding siblings ...)
2014-08-12 1:35 ` [PATCH 4/7] wic: Parse and pass sourceparams " Tom Zanussi
@ 2014-08-12 1:35 ` Tom Zanussi
2014-08-12 1:35 ` [PATCH 6/7] wic: Add sourceparams to mkefidisk.wks Tom Zanussi
2014-08-12 1:35 ` [PATCH 7/7] wic: Add mkgummidisk kickstart file Tom Zanussi
6 siblings, 0 replies; 8+ messages in thread
From: Tom Zanussi @ 2014-08-12 1:35 UTC (permalink / raw)
To: openembedded-core; +Cc: Tom Zanussi
Add gummiboot support to bootimg-efi, which retains the existing
grub-efi support (though requires an update to the .wks file).
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
---
scripts/lib/wic/plugins/source/bootimg-efi.py | 113 +++++++++++++++++++++-----
1 file changed, 91 insertions(+), 22 deletions(-)
diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
index ea94fd2..855bbc2 100644
--- a/scripts/lib/wic/plugins/source/bootimg-efi.py
+++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
@@ -42,19 +42,10 @@ class BootimgEFIPlugin(SourcePlugin):
name = 'bootimg-efi'
@classmethod
- def do_configure_partition(self, source_params, part, cr, cr_workdir,
- oe_builddir, bootimg_dir, kernel_dir,
- native_sysroot):
+ def do_configure_grubefi(self, hdddir, cr, cr_workdir):
"""
- Called before do_prepare_partition(), creates grubefi config
+ Create loader-specific (grub-efi) config
"""
- hdddir = "%s/hdd/boot" % cr_workdir
- rm_cmd = "rm -rf %s" % cr_workdir
- exec_cmd(rm_cmd)
-
- install_cmd = "install -d %s/EFI/BOOT" % hdddir
- exec_cmd(install_cmd)
-
splash = os.path.join(cr_workdir, "/EFI/boot/splash.jpg")
if os.path.exists(splash):
splashline = "menu background splash.jpg"
@@ -73,7 +64,7 @@ class BootimgEFIPlugin(SourcePlugin):
grubefi_conf += "timeout=%s\n" % timeout
grubefi_conf += "menuentry 'boot'{\n"
- kernel = "/vmlinuz"
+ kernel = "/bzImage"
if cr._ptable_format == 'msdos':
rootstr = rootdev
@@ -93,6 +84,79 @@ class BootimgEFIPlugin(SourcePlugin):
cfg.close()
@classmethod
+ def do_configure_gummiboot(self, hdddir, cr, cr_workdir):
+ """
+ Create loader-specific (gummiboot) config
+ """
+ install_cmd = "install -d %s/loader" % hdddir
+ exec_cmd(install_cmd)
+
+ install_cmd = "install -d %s/loader/entries" % hdddir
+ exec_cmd(install_cmd)
+
+ (rootdev, root_part_uuid) = cr._get_boot_config()
+ options = cr.ks.handler.bootloader.appendLine
+
+ timeout = kickstart.get_timeout(cr.ks)
+ if not timeout:
+ timeout = 0
+
+ loader_conf = ""
+ loader_conf += "default boot\n"
+ loader_conf += "timeout %d\n" % timeout
+
+ msger.debug("Writing gummiboot config %s/hdd/boot/loader/loader.conf" \
+ % cr_workdir)
+ cfg = open("%s/hdd/boot/loader/loader.conf" % cr_workdir, "w")
+ cfg.write(loader_conf)
+ cfg.close()
+
+ kernel = "/bzImage"
+
+ if cr._ptable_format == 'msdos':
+ rootstr = rootdev
+ else:
+ raise ImageError("Unsupported partition table format found")
+
+ boot_conf = ""
+ boot_conf += "title boot\n"
+ boot_conf += "linux %s\n" % kernel
+ boot_conf += "options LABEL=Boot root=%s %s\n" \
+ % (rootstr, options)
+
+ msger.debug("Writing gummiboot config %s/hdd/boot/loader/entries/boot.conf" \
+ % cr_workdir)
+ cfg = open("%s/hdd/boot/loader/entries/boot.conf" % cr_workdir, "w")
+ cfg.write(boot_conf)
+ cfg.close()
+
+
+ @classmethod
+ def do_configure_partition(self, part, source_params, cr, cr_workdir,
+ oe_builddir, bootimg_dir, kernel_dir,
+ native_sysroot):
+ """
+ Called before do_prepare_partition(), creates loader-specific config
+ """
+ hdddir = "%s/hdd/boot" % cr_workdir
+ rm_cmd = "rm -rf %s" % cr_workdir
+ exec_cmd(rm_cmd)
+
+ install_cmd = "install -d %s/EFI/BOOT" % hdddir
+ exec_cmd(install_cmd)
+
+ try:
+ if source_params['loader'] == 'grub-efi':
+ self.do_configure_grubefi(hdddir, cr, cr_workdir)
+ elif source_params['loader'] == 'gummiboot':
+ self.do_configure_gummiboot(hdddir, cr, cr_workdir)
+ else:
+ msger.error("unrecognized bootimg-efi loader: %s" % source_params['loader'])
+ except KeyError:
+ msger.error("bootimg-efi requires a loader, none specified")
+
+
+ @classmethod
def do_prepare_partition(self, part, source_params, cr, cr_workdir,
oe_builddir, bootimg_dir, kernel_dir,
rootfs_dir, native_sysroot):
@@ -117,14 +181,21 @@ class BootimgEFIPlugin(SourcePlugin):
(staging_kernel_dir, hdddir)
exec_cmd(install_cmd)
- shutil.copyfile("%s/hdd/boot/EFI/BOOT/grub.cfg" % cr_workdir,
- "%s/grub.cfg" % cr_workdir)
-
- cp_cmd = "cp %s/EFI/BOOT/* %s/EFI/BOOT" % (staging_data_dir, hdddir)
- exec_cmd(cp_cmd, True)
-
- shutil.move("%s/grub.cfg" % cr_workdir,
- "%s/hdd/boot/EFI/BOOT/grub.cfg" % cr_workdir)
+ try:
+ if source_params['loader'] == 'grub-efi':
+ shutil.copyfile("%s/hdd/boot/EFI/BOOT/grub.cfg" % cr_workdir,
+ "%s/grub.cfg" % cr_workdir)
+ cp_cmd = "cp %s/EFI/BOOT/* %s/EFI/BOOT" % (staging_data_dir, hdddir)
+ exec_cmd(cp_cmd, True)
+ shutil.move("%s/grub.cfg" % cr_workdir,
+ "%s/hdd/boot/EFI/BOOT/grub.cfg" % cr_workdir)
+ elif source_params['loader'] == 'gummiboot':
+ cp_cmd = "cp %s/EFI/BOOT/* %s/EFI/BOOT" % (staging_data_dir, hdddir)
+ exec_cmd(cp_cmd, True)
+ else:
+ msger.error("unrecognized bootimg-efi loader: %s" % source_params['loader'])
+ except KeyError:
+ msger.error("bootimg-efi requires a loader, none specified")
du_cmd = "du -bks %s" % hdddir
out = exec_cmd(du_cmd)
@@ -164,5 +235,3 @@ class BootimgEFIPlugin(SourcePlugin):
part.set_size(bootimg_size)
part.set_source_file(bootimg)
-
-
--
1.8.3.1
^ permalink raw reply related [flat|nested] 8+ messages in thread