summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/lib/wic/plugins/source/isoimage-isohybrid.py75
1 files changed, 23 insertions, 52 deletions
diff --git a/scripts/lib/wic/plugins/source/isoimage-isohybrid.py b/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
index ece4b0c19e..d6bd3bff7b 100644
--- a/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
+++ b/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
@@ -95,7 +95,7 @@ class IsoImagePlugin(SourcePlugin):
95 cfg.write(syslinux_conf) 95 cfg.write(syslinux_conf)
96 96
97 @classmethod 97 @classmethod
98 def do_configure_grubefi(cls, part, creator, cr_workdir): 98 def do_configure_grubefi(cls, part, creator, target_dir):
99 """ 99 """
100 Create loader-specific (grub-efi) config 100 Create loader-specific (grub-efi) config
101 """ 101 """
@@ -109,7 +109,7 @@ class IsoImagePlugin(SourcePlugin):
109 raise WicError("configfile is specified " 109 raise WicError("configfile is specified "
110 "but failed to get it from %s", configfile) 110 "but failed to get it from %s", configfile)
111 else: 111 else:
112 splash = os.path.join(cr_workdir, "EFI/boot/splash.jpg") 112 splash = os.path.join(target_dir, "splash.jpg")
113 if os.path.exists(splash): 113 if os.path.exists(splash):
114 splashline = "menu background splash.jpg" 114 splashline = "menu background splash.jpg"
115 else: 115 else:
@@ -137,9 +137,10 @@ class IsoImagePlugin(SourcePlugin):
137 if splashline: 137 if splashline:
138 grubefi_conf += "%s\n" % splashline 138 grubefi_conf += "%s\n" % splashline
139 139
140 logger.debug("Writing grubefi config %s/EFI/BOOT/grub.cfg", cr_workdir) 140 cfg_path = os.path.join(target_dir, "grub.cfg")
141 logger.debug("Writing grubefi config %s", cfg_path)
141 142
142 with open("%s/EFI/BOOT/grub.cfg" % cr_workdir, "w") as cfg: 143 with open(cfg_path, "w") as cfg:
143 cfg.write(grubefi_conf) 144 cfg.write(grubefi_conf)
144 145
145 @staticmethod 146 @staticmethod
@@ -313,20 +314,13 @@ class IsoImagePlugin(SourcePlugin):
313 314
314 #Create bootloader for efi boot 315 #Create bootloader for efi boot
315 try: 316 try:
316 if source_params['loader'] == 'grub-efi': 317 target_dir = "%s/EFI/BOOT" % isodir
317 # Builds grub.cfg if ISODIR didn't exist or 318 if os.path.exists(target_dir):
318 # didn't contains grub.cfg 319 shutil.rmtree(target_dir)
319 bootimg_dir = img_iso_dir 320
320 if not os.path.exists("%s/EFI/BOOT" % bootimg_dir): 321 os.makedirs(target_dir)
321 bootimg_dir = "%s/bootimg" % cr_workdir
322 if os.path.exists(bootimg_dir):
323 shutil.rmtree(bootimg_dir)
324 install_cmd = "install -d %s/EFI/BOOT" % bootimg_dir
325 exec_cmd(install_cmd)
326
327 if not os.path.isfile("%s/EFI/BOOT/boot.cfg" % bootimg_dir):
328 cls.do_configure_grubefi(part, creator, bootimg_dir)
329 322
323 if source_params['loader'] == 'grub-efi':
330 # Builds bootx64.efi/bootia32.efi if ISODIR didn't exist or 324 # Builds bootx64.efi/bootia32.efi if ISODIR didn't exist or
331 # didn't contains it 325 # didn't contains it
332 target_arch = get_bitbake_var("TARGET_SYS") 326 target_arch = get_bitbake_var("TARGET_SYS")
@@ -334,37 +328,23 @@ class IsoImagePlugin(SourcePlugin):
334 raise WicError("Coludn't find target architecture") 328 raise WicError("Coludn't find target architecture")
335 329
336 if re.match("x86_64", target_arch): 330 if re.match("x86_64", target_arch):
337 grub_target = 'x86_64-efi' 331 grub_image = "grub-efi-bootx64.efi"
338 grub_image = "bootx64.efi"
339 elif re.match('i.86', target_arch): 332 elif re.match('i.86', target_arch):
340 grub_target = 'i386-efi' 333 grub_image = "grub-efi-bootia32.efi"
341 grub_image = "bootia32.efi"
342 else: 334 else:
343 raise WicError("grub-efi is incompatible with target %s" % 335 raise WicError("grub-efi is incompatible with target %s" %
344 target_arch) 336 target_arch)
345 337
346 if not os.path.isfile("%s/EFI/BOOT/%s" \ 338 grub_target = os.path.join(target_dir, grub_image)
347 % (bootimg_dir, grub_image)): 339 if not os.path.isfile(grub_target):
348 grub_path = get_bitbake_var("STAGING_LIBDIR") 340 grub_src = os.path.join(deploy_dir, grub_image)
349 if not grub_path: 341 if not os.path.exists(grub_src):
350 raise WicError("Couldn't find STAGING_LIBDIR, exiting.") 342 raise WicError("Grub loader %s is not found in %s. "
351 343 "Please build grub-efi first" % (grub_image, deploy_dir))
352 grub_core = "%s/grub/%s" % (grub_path, grub_target) 344 shutil.copy(grub_src, grub_target)
353 if not os.path.exists(grub_core): 345
354 raise WicError("Please build grub-efi first") 346 if not os.path.isfile(os.path.join(target_dir, "boot.cfg")):
355 347 cls.do_configure_grubefi(part, creator, target_dir)
356 grub_cmd = "grub-mkimage -p '/EFI/BOOT' "
357 grub_cmd += "-d %s " % grub_core
358 grub_cmd += "-O %s -o %s/EFI/BOOT/%s " \
359 % (grub_target, bootimg_dir, grub_image)
360 grub_cmd += "part_gpt part_msdos ntfs ntfscomp fat ext2 "
361 grub_cmd += "normal chain boot configfile linux multiboot "
362 grub_cmd += "search efi_gop efi_uga font gfxterm gfxmenu "
363 grub_cmd += "terminal minicmd test iorw loadenv echo help "
364 grub_cmd += "reboot serial terminfo iso9660 loopback tar "
365 grub_cmd += "memdisk ls search_fs_uuid udf btrfs xfs lvm "
366 grub_cmd += "reiserfs ata "
367 exec_native_cmd(grub_cmd, native_sysroot)
368 348
369 else: 349 else:
370 raise WicError("unrecognized bootimg-efi loader: %s" % 350 raise WicError("unrecognized bootimg-efi loader: %s" %
@@ -372,15 +352,6 @@ class IsoImagePlugin(SourcePlugin):
372 except KeyError: 352 except KeyError:
373 raise WicError("bootimg-efi requires a loader, none specified") 353 raise WicError("bootimg-efi requires a loader, none specified")
374 354
375 if os.path.exists("%s/EFI/BOOT" % isodir):
376 shutil.rmtree("%s/EFI/BOOT" % isodir)
377
378 shutil.copytree(bootimg_dir+"/EFI/BOOT", isodir+"/EFI/BOOT")
379
380 # If exists, remove cr_workdir/bootimg temporary folder
381 if os.path.exists("%s/bootimg" % cr_workdir):
382 shutil.rmtree("%s/bootimg" % cr_workdir)
383
384 # Create efi.img that contains bootloader files for EFI booting 355 # Create efi.img that contains bootloader files for EFI booting
385 # if ISODIR didn't exist or didn't contains it 356 # if ISODIR didn't exist or didn't contains it
386 if os.path.isfile("%s/efi.img" % img_iso_dir): 357 if os.path.isfile("%s/efi.img" % img_iso_dir):