[OE-core] [PATCH 2/2] wic: Allow to use a custom config for bootloaders
Mariano Lopez
mariano.lopez at linux.intel.com
Thu Nov 26 19:23:50 UTC 2015
On 11/26/2015 08:48 AM, Mariano Lopez wrote:
>
>
> On 11/24/2015 09:43 AM, Ed Bartosh wrote:
>> On Mon, Nov 23, 2015 at 04:13:15PM -0600, Mariano Lopez wrote:
>>>
>>> On 11/23/2015 11:37 AM, Ed Bartosh wrote:
>>>> Hi Mariano,
>>>>
>>>> Thank you for the patchset!
>>>>
>>>> Would it be better to put content of configuration file into .wks
>>>> instead of just referring to it?
>>> If the configuration is simple I agree with you; however if the
>>> configuration have scripts I think it's better to have separated
>>> file. The file can growth and would be a real mess inside a wks
>>> file.
>>>
>> What bothers me here is that reference to the external entity (config
>> file in this case) which
>> may or may not exist. This makes wic more fragile than it is now.
>>
>> Can we put bootloader configs to some predefined place, e.g. to the same
>> directory where .wks is?
>
> I see your point now. I'll change the code to have the configuration
> in the wks file.
I was checking in the kickstart code and the parser is a state machine
that reads line by line, so a multi line bootloader config file is not
currently and option. I was about to modify the code when I saw the
comment for this class:
"Methods that don't need to do anything may just pass. However,
_stateMachine should never be overridden."
So, in order to have the config file inside the wks file we would need
to hack in kickstart code; I would like to avoid that. What do you think?
>
>>
>>>> It would be also nice to have this code covered by oe-selftest.
>>> Yes, I plan do create a test and update the documentation once it
>>> is integrated in master.
>>>
>> I'd prefer to have tests in the same patchset with the code. It would
>> help to understand better how to handle external configs. Can you do
>> that?
>
> I'll work on that and send the series again.
>
>>
>> Regards,
>> Ed
>>
>>>> On Wed, Nov 18, 2015 at 08:25:54AM +0000,
>>>> mariano.lopez at linux.intel.com wrote:
>>>>> From: Mariano Lopez <mariano.lopez at linux.intel.com>
>>>>>
>>>>> This change will allow to use a user defined file as the
>>>>> configuration for the bootloaders (grub, gummiboot, syslinux).
>>>>>
>>>>> The config file is defined in the wks file with the "configfile"
>>>>> option in the bootloader line.
>>>>>
>>>>> [YOCTO #8003]
>>>>>
>>>>> Signed-off-by: Mariano Lopez <mariano.lopez at linux.intel.com>
>>>>> ---
>>>>> scripts/lib/wic/plugins/source/bootimg-efi.py | 66
>>>>> ++++++++++++++++--------
>>>>> scripts/lib/wic/plugins/source/bootimg-pcbios.py | 66
>>>>> ++++++++++++++----------
>>>>> 2 files changed, 83 insertions(+), 49 deletions(-)
>>>>>
>>>>> diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py
>>>>> b/scripts/lib/wic/plugins/source/bootimg-efi.py
>>>>> index fa63c6a..8fc879e 100644
>>>>> --- a/scripts/lib/wic/plugins/source/bootimg-efi.py
>>>>> +++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
>>>>> @@ -45,22 +45,33 @@ class BootimgEFIPlugin(SourcePlugin):
>>>>> """
>>>>> Create loader-specific (grub-efi) config
>>>>> """
>>>>> - options = creator.ks.handler.bootloader.appendLine
>>>>> -
>>>>> - grubefi_conf = ""
>>>>> - grubefi_conf += "serial --unit=0 --speed=115200 --word=8
>>>>> --parity=no --stop=1\n"
>>>>> - grubefi_conf += "default=boot\n"
>>>>> - timeout = kickstart.get_timeout(creator.ks)
>>>>> - if not timeout:
>>>>> - timeout = 0
>>>>> - grubefi_conf += "timeout=%s\n" % timeout
>>>>> - grubefi_conf += "menuentry 'boot'{\n"
>>>>> -
>>>>> - kernel = "/bzImage"
>>>>> -
>>>>> - grubefi_conf += "linux %s root=%s rootwait %s\n" \
>>>>> - % (kernel, creator.rootdev, options)
>>>>> - grubefi_conf += "}\n"
>>>>> + configfile = kickstart.get_bootloader_file(creator.ks)
>>>>> +
>>>>> + if configfile and os.path.exists(configfile):
>>>>> + # Use a custom configuration file for grub
>>>>> + msger.info("Using custom configuration file "
>>>>> + "%s for grub.cfg" % configfile)
>>>>> + user_conf = open(configfile, "r")
>>>>> + grubefi_conf = user_conf.read()
>>>>> + user_conf.close()
>>>>> + else:
>>>>> + # Create grub configuration using parameters from wks
>>>>> file
>>>>> + options = creator.ks.handler.bootloader.appendLine
>>>>> +
>>>>> + grubefi_conf = ""
>>>>> + grubefi_conf += "serial --unit=0 --speed=115200
>>>>> --word=8 --parity=no --stop=1\n"
>>>>> + grubefi_conf += "default=boot\n"
>>>>> + timeout = kickstart.get_timeout(creator.ks)
>>>>> + if not timeout:
>>>>> + timeout = 0
>>>>> + grubefi_conf += "timeout=%s\n" % timeout
>>>>> + grubefi_conf += "menuentry 'boot'{\n"
>>>>> +
>>>>> + kernel = "/bzImage"
>>>>> +
>>>>> + grubefi_conf += "linux %s root=%s rootwait %s\n" \
>>>>> + % (kernel, creator.rootdev, options)
>>>>> + grubefi_conf += "}\n"
>>>>> msger.debug("Writing grubefi config
>>>>> %s/hdd/boot/EFI/BOOT/grub.cfg" \
>>>>> % cr_workdir)
>>>>> @@ -95,12 +106,23 @@ class BootimgEFIPlugin(SourcePlugin):
>>>>> cfg.write(loader_conf)
>>>>> cfg.close()
>>>>> - kernel = "/bzImage"
>>>>> -
>>>>> - boot_conf = ""
>>>>> - boot_conf += "title boot\n"
>>>>> - boot_conf += "linux %s\n" % kernel
>>>>> - boot_conf += "options LABEL=Boot root=%s %s\n" %
>>>>> (creator.rootdev, options)
>>>>> + configfile = kickstart.get_bootloader_file(creator.ks)
>>>>> +
>>>>> + if configfile and os.path.exists(configfile):
>>>>> + # Use a custom configuration file for gummiboot
>>>>> + msger.info("Using custom configuration file "
>>>>> + "%s for gummiboot's boot.conf" % configfile)
>>>>> + user_conf = open(configfile, "r")
>>>>> + boot_conf = user_conf.read()
>>>>> + user_conf.close()
>>>>> + else:
>>>>> + # Create gummiboot configuration using parameters
>>>>> from wks file
>>>>> + kernel = "/bzImage"
>>>>> +
>>>>> + boot_conf = ""
>>>>> + boot_conf += "title boot\n"
>>>>> + boot_conf += "linux %s\n" % kernel
>>>>> + boot_conf += "options LABEL=Boot root=%s %s\n" %
>>>>> (creator.rootdev, options)
>>>>> msger.debug("Writing gummiboot config
>>>>> %s/hdd/boot/loader/entries/boot.conf" \
>>>>> % cr_workdir)
>>>>> diff --git a/scripts/lib/wic/plugins/source/bootimg-pcbios.py
>>>>> b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
>>>>> index 96ed54d..9e21572 100644
>>>>> --- a/scripts/lib/wic/plugins/source/bootimg-pcbios.py
>>>>> +++ b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
>>>>> @@ -83,34 +83,46 @@ class BootimgPcbiosPlugin(SourcePlugin):
>>>>> install_cmd = "install -d %s" % hdddir
>>>>> exec_cmd(install_cmd)
>>>>> - splash = os.path.join(cr_workdir, "/hdd/boot/splash.jpg")
>>>>> - if os.path.exists(splash):
>>>>> - splashline = "menu background splash.jpg"
>>>>> + configfile = kickstart.get_bootloader_file(creator.ks)
>>>>> +
>>>>> + if configfile and os.path.exists(configfile):
>>>>> + # Use a custom configuration file for syslinux
>>>>> + msger.info("Using custom configuration file "
>>>>> + "%s for syslinux.cfg" % configfile)
>>>>> + user_conf = open(configfile, "r")
>>>>> + syslinux_conf = user_conf.read()
>>>>> + user_conf.close()
>>>>> +
>>>>> else:
>>>>> - splashline = ""
>>>>> -
>>>>> - options = creator.ks.handler.bootloader.appendLine
>>>>> -
>>>>> - syslinux_conf = ""
>>>>> - syslinux_conf += "PROMPT 0\n"
>>>>> - timeout = kickstart.get_timeout(creator.ks)
>>>>> - if not timeout:
>>>>> - timeout = 0
>>>>> - syslinux_conf += "TIMEOUT " + str(timeout) + "\n"
>>>>> - syslinux_conf += "\n"
>>>>> - syslinux_conf += "ALLOWOPTIONS 1\n"
>>>>> - syslinux_conf += "SERIAL 0 115200\n"
>>>>> - syslinux_conf += "\n"
>>>>> - if splashline:
>>>>> - syslinux_conf += "%s\n" % splashline
>>>>> - syslinux_conf += "DEFAULT boot\n"
>>>>> - syslinux_conf += "LABEL boot\n"
>>>>> -
>>>>> - kernel = "/vmlinuz"
>>>>> - syslinux_conf += "KERNEL " + kernel + "\n"
>>>>> -
>>>>> - syslinux_conf += "APPEND label=boot root=%s %s\n" % \
>>>>> - (creator.rootdev, options)
>>>>> + # Create syslinux configuration using parameters from
>>>>> wks file
>>>>> + splash = os.path.join(cr_workdir,
>>>>> "/hdd/boot/splash.jpg")
>>>>> + if os.path.exists(splash):
>>>>> + splashline = "menu background splash.jpg"
>>>>> + else:
>>>>> + splashline = ""
>>>>> +
>>>>> + options = creator.ks.handler.bootloader.appendLine
>>>>> +
>>>>> + syslinux_conf = ""
>>>>> + syslinux_conf += "PROMPT 0\n"
>>>>> + timeout = kickstart.get_timeout(creator.ks)
>>>>> + if not timeout:
>>>>> + timeout = 0
>>>>> + syslinux_conf += "TIMEOUT " + str(timeout) + "\n"
>>>>> + syslinux_conf += "\n"
>>>>> + syslinux_conf += "ALLOWOPTIONS 1\n"
>>>>> + syslinux_conf += "SERIAL 0 115200\n"
>>>>> + syslinux_conf += "\n"
>>>>> + if splashline:
>>>>> + syslinux_conf += "%s\n" % splashline
>>>>> + syslinux_conf += "DEFAULT boot\n"
>>>>> + syslinux_conf += "LABEL boot\n"
>>>>> +
>>>>> + kernel = "/vmlinuz"
>>>>> + syslinux_conf += "KERNEL " + kernel + "\n"
>>>>> +
>>>>> + syslinux_conf += "APPEND label=boot root=%s %s\n" % \
>>>>> + (creator.rootdev, options)
>>>>> msger.debug("Writing syslinux config
>>>>> %s/hdd/boot/syslinux.cfg" \
>>>>> % cr_workdir)
>>>>> --
>>>>> 1.8.4.5
>>>>>
>>> --
>>> Mariano Lopez
>
--
Mariano Lopez
More information about the Openembedded-core
mailing list