+def handle_grub1_config(grml_flavour, install_partition, grub_target, bootopt):
+ """Main handler for generating grub1 configuration
+
+ @grml_flavour: name of grml flavour the configuration should be generated for
+ @install_partition: partition number for use in (hd0,X)
+ @grub_target: path of grub's configuration files
+ @bootoptions: additional bootoptions that should be used by default"""
+
+ # grub1 config
+ grub1_cfg = grub_target + 'menu.lst'
+ logging.debug("Creating grub1 configuration file (menu.lst)")
+
+ # install main configuration only *once*, no matter how many ISOs we have:
+ if os.path.isfile(grub1_cfg):
+ string = open(grub1_cfg).readline()
+ main_identifier = re.compile(".*main config generated at: %s.*" % re.escape(str(DATESTAMP)))
+ if not re.match(main_identifier, string):
+ grub1_config_file = open(grub1_cfg, 'w')
+ grub1_config_file.write(generate_main_grub1_config(grml_flavour, install_partition, bootopt))
+ grub1_config_file.close()
+ else:
+ grub1_config_file = open(grub1_cfg, 'w')
+ grub1_config_file.write(generate_main_grub1_config(grml_flavour, install_partition, bootopt))
+ grub1_config_file.close()
+
+ grub_flavour_config = True
+ if os.path.isfile(grub1_cfg):
+ string = open(grub1_cfg).readlines()
+ flavour = re.compile("grml2usb for %s: %s" % (re.escape(grml_flavour), re.escape(str(DATESTAMP))))
+ for line in string:
+ if flavour.match(line):
+ grub_flavour_config = False
+
+ if grub_flavour_config:
+ grub1_config_file = open(grub1_cfg, 'a')
+ grub1_config_file.write(generate_flavour_specific_grub1_config(grml_flavour, install_partition, bootopt))
+ grub1_config_file.close()
+
+
+def handle_grub2_config(grml_flavour, grub_target, bootopt):
+ """Main handler for generating grub2 configuration
+
+ @grml_flavour: name of grml flavour the configuration should be generated for
+ @grub_target: path of grub's configuration files
+ @bootoptions: additional bootoptions that should be used by default"""
+
+ # grub2 config
+ grub2_cfg = grub_target + 'grub.cfg'
+ logging.debug("Creating grub2 configuration file (grub.lst)")
+
+ global GRML_DEFAULT
+
+ # install main configuration only *once*, no matter how many ISOs we have:
+ grub_flavour_is_default = False
+ if os.path.isfile(grub2_cfg):
+ string = open(grub2_cfg).readline()
+ main_identifier = re.compile(".*main config generated at: %s.*" % re.escape(str(DATESTAMP)))
+ if not re.match(main_identifier, string):
+ grub2_config_file = open(grub2_cfg, 'w')
+ GRML_DEFAULT = grml_flavour
+ grub_flavour_is_default = True
+ grub2_config_file.write(generate_main_grub2_config(grml_flavour, bootopt))
+ grub2_config_file.close()
+ else:
+ grub2_config_file = open(grub2_cfg, 'w')
+ GRML_DEFAULT = grml_flavour
+ grub_flavour_is_default = True
+ grub2_config_file.write(generate_main_grub2_config(grml_flavour, bootopt))
+ grub2_config_file.close()
+
+ # install flavour specific configuration only *once* as well
+ grub_flavour_config = True
+ if os.path.isfile(grub2_cfg):
+ string = open(grub2_cfg).readlines()
+ flavour = re.compile("grml2usb for %s: %s" % (re.escape(grml_flavour), re.escape(str(DATESTAMP))))
+ for line in string:
+ if flavour.match(line):
+ grub_flavour_config = False
+
+ if grub_flavour_config:
+ grub2_config_file = open(grub2_cfg, 'a')
+ # display only if the grml flavour isn't the default
+ if not grub_flavour_is_default:
+ GRML_FLAVOURS.add(grml_flavour)
+ grub2_config_file.write(generate_flavour_specific_grub2_config(grml_flavour, bootopt))
+ grub2_config_file.close()
+
+
+def handle_grub_config(grml_flavour, device, target):
+ """Main handler for generating grub (v1 and v2) configuration
+
+ @grml_flavour: name of grml flavour the configuration should be generated for
+ @device: device/partition where grub should be installed to
+ @target: path of grub's configuration files"""