Source code for lwr.grub

# live-wrapper - Wrapper for vmdebootstrap for creating live images
# (C) Iain R. Learmonth 2015 <irl@debian.org>
# See COPYING for terms of usage, modification and redistribution.
#
# lwr/grub.py - Grub 2 helpers

"""
The lwr.grub module contains helpers for GRUB 2 including the installation
of GRUB files to the cdroot and the generation of the grub.cfg and loopback.cfg
files.
"""

import os

[docs]def generate_cfg(bootconfig, submenu=False): if not submenu: ret = ("if [ ${iso_path} ] ; then\nset loopback=\"" + "findiso=${iso_path}\"\nfi\n\n") else: ret = str() for entry in bootconfig.entries: if entry['type'] == "menu": if entry['subentries'].is_empty(["linux", "menu"]): continue ret += "submenu \"%s\" {\n" % (entry['description'],) ret += generate_cfg(entry['subentries'], submenu=True) ret += "}\n" if entry['type'] == "linux": ret += "menuentry \"%s\" {\n" % (entry['description'],) ret += " linux %s %s \"${loopback}\"\n" % (entry['kernel'], entry.get('cmdline', ''),) if entry.get('initrd') is not None: ret += " initrd %s\n" % (entry['initrd'],) ret += "}\n" return ret
[docs]def install_grub(cdroot, bootconfig): """ Can use cdroot as a relative path inside the actual cdroot. The d-i/ and live/ directories are used directly. """ cfg = generate_cfg(bootconfig) with open("%s/boot/grub/grub.cfg" % (cdroot,), "a") as cfgout: cfgout.write(cfg) with open("%s/boot/grub/loopback.cfg" % (cdroot,), "w") as loopout: loopout.write("source /grub/grub.cfg")