diff options
Diffstat (limited to 'scripts/lib/wic/plugins/source/isoimage-isohybrid.py')
| -rw-r--r-- | scripts/lib/wic/plugins/source/isoimage-isohybrid.py | 75 |
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): |
