raise CriticalException("error executing mkfs.vfat")
-def generate_main_grub2_config(grml_flavour, bootoptions):
- """Generate grub2 configuration for use via grub.cfg
-
- @grml_flavour: name of grml flavour the configuration should be generated for
- @bootoptions: additional bootoptions that should be used by default"""
-
- local_datestamp = DATESTAMP
-
- return("""\
-## main grub2 configuration - generated by grml2usb [main config generated at: %(local_datestamp)s]
-set default=0
-set timeout=10
-
-insmod fat
-
-if loadfont /boot/grub/ascii.pf2 ; then
- insmod png
- set gfxmode=640x480
- insmod gfxterm
- insmod vbe
- if terminal_output gfxterm ; then true ; else
- # For backward compatibility with versions of terminal.mod that don't
- # understand terminal_output
- terminal gfxterm
- fi
-fi
-
-if background_image /boot/grub/grml.png ; then
- set color_normal=black/black
- set color_highlight=red/black
-else
- set menu_color_normal=white/black
- set menu_color_highlight=black/yellow
-fi
-
-menuentry "%(grml_flavour)s (default)" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-menuentry "Memory test (memtest86+)" {
- linux16 /boot/addons/memtest
-}
-
-menuentry "Boot Grub (all in one image)" {
- linux /boot/addons/memdisk
- initrd /boot/addons/allinone.img
-}
-
-menuentry "Boot FreeDOS" {
- linux /boot/addons/memdisk
- initrd /boot/addons/balder10.imz
-}
-
-if [ ${iso_path} ] ; then
- # assume loopback.cfg boot
- if [ -e /boot/addons/bsd4grml/loopback.0 ] ; then
- # bsd4grml 20100815 and later
- menuentry "Boot MirOS bsd4grml" {
- multiboot /boot/addons/bsd4grml/ldbsd.com
- module /boot/addons/bsd4grml/bsd.rd bsd
- module /boot/addons/bsd4grml/loopback.0 boot.cfg
- module /boot/addons/bsd4grml/loopback.1 boot.1
- module /boot/addons/bsd4grml/loopback.2 boot.2
- module /boot/addons/bsd4grml/loopback.3 boot.3
- module /boot/addons/bsd4grml/loopback.4 boot.4
- module /boot/addons/bsd4grml/loopback.5 boot.5
- module /boot/addons/bsd4grml/loopback.6 boot.6
- }
- else
- # old bsd4grml
- menuentry "Boot MirOS bsd4grml" {
- multiboot /boot/addons/bsd4grml/ldbsd.com
- module /boot/addons/bsd4grml/bsd.rd bsd.rd
- module /boot/addons/bsd4grml/boot.cfg boot.cfg
- module /boot/addons/bsd4grml/boot.1 boot.1
- module /boot/addons/bsd4grml/boot.2 boot.2
- module /boot/addons/bsd4grml/boot.3 boot.3
- module /boot/addons/bsd4grml/boot.4 boot.4
- module /boot/addons/bsd4grml/boot.5 boot.5
- }
- fi
-else
- # assume grub.cfg boot
- menuentry "Boot MirOS bsd4grml" {
- multiboot /boot/addons/bsd4grml/ldbsd.com
- module /boot/addons/bsd4grml/bsd.rd bsd.rd
- module /boot/addons/bsd4grml/boot.cfg boot.cfg
- module /boot/addons/bsd4grml/boot.1 boot.1
- module /boot/addons/bsd4grml/boot.2 boot.2
- module /boot/addons/bsd4grml/boot.3 boot.3
- module /boot/addons/bsd4grml/boot.4 boot.4
- module /boot/addons/bsd4grml/boot.5 boot.5
- module /boot/addons/bsd4grml/boot.6 boot.6
- }
-fi
-
-menuentry "Boot OS of first partition on first disk" {
- set root=(hd0,1)
- chainloader +1
-}
-
-""" % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp,
- 'flavour_filename': grml_flavour.replace('-', ''),
- 'uid': UUID, 'bootoptions': bootoptions } )
-
-
-def generate_flavour_specific_grub2_config(grml_flavour, bootoptions):
- """Generate grub2 configuration for use via grub.cfg
-
- @grml_flavour: name of grml flavour the configuration should be generated for
- @bootoptions: additional bootoptions that should be used by default"""
-
- local_datestamp = DATESTAMP
-
- return("""\
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - boot in default mode" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - enable persistent mode" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce persistent live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - copy Grml to RAM" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ toram=%(grml_flavour)s.squashfs bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - start X Window System" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ startx bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - disable framebuffer" {
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ vga=normal video=ofonly bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - disable Kernel Mode-Setting" {
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s radeon.modeset=0 i915.modeset=0 nouveau.modeset=0 nomodeset
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - forensic mode" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect forensic readonly bootid=%(uid)s %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
-menuentry "%(grml_flavour)s - enable debugging options" {
- set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce live-media-path=/live/%(grml_flavour)s/ debug bootid=%(uid)s initcall_debug %(bootoptions)s
- initrd /boot/release/%(flavour_filename)s/initrd.gz
-}
-
-""" % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp,
- 'flavour_filename': grml_flavour.replace('-', ''),
- 'uid': UUID, 'bootoptions': bootoptions } )
-
def generate_isolinux_splash(grml_flavour):
"""Generate bootsplash for isolinux/syslinux
search_and_copy('hidden.cfg', iso_mount + source_dir, syslinux_target + "new_" + 'hidden.cfg')
# copy all grub files from ISO
- glob_and_copy(iso_mount + '/boot/grub/*.mod', grub_target)
- glob_and_copy(iso_mount + '/boot/grub/*.lst', grub_target)
- glob_and_copy(iso_mount + '/boot/grub/*.img', grub_target)
- glob_and_copy(iso_mount + '/boot/grub/*.pf2', grub_target) # fonts for splash
- glob_and_copy(iso_mount + '/boot/grub/*.png', grub_target) # splash image
- glob_and_copy(iso_mount + '/boot/grub/stage*', grub_target)
+ glob_and_copy(iso_mount + '/boot/grub/*', grub_target)
def install_iso_files(grml_flavour, iso_mount, device, target):
"""Copy files from ISO to given target
return flavours
-def modify_grub_config(filename):
- """Adjust bootoptions for a grub file
-
- @filename: filename to modify
- """
- if options.removeoption:
- regexe = []
- for regex in options.removeoption:
- regexe.append(re.compile(r'%s' % regex))
-
- option_re = re.compile(r'(.*/boot/.*(linux26|vmlinuz).*)')
-
- for line in fileinput.input(filename, inplace=1):
- if regexe and option_re.search(line):
- for regex in regexe:
- line = regex.sub(' ', line)
-
- sys.stdout.write(line)
-
- fileinput.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.cfg)")
-
- global GRML_DEFAULT
-
- # install main configuration only *once*, no matter how many ISOs we have:
- install_main_config = True
- 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 re.match(main_identifier, string):
- install_main_config = False
- if install_main_config:
- grub2_config_file = open(grub2_cfg, 'w')
- GRML_DEFAULT = grml_flavour
- 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 GRML_DEFAULT != grml_flavour:
- GRML_FLAVOURS.add(grml_flavour)
- grub2_config_file.write(generate_flavour_specific_grub2_config(grml_flavour, bootopt))
- grub2_config_file.close()
-
- modify_grub_config(grub2_cfg)
-
-
def get_bootoptions(grml_flavour):
"""Returns bootoptions for specific flavour
@device: device/partition where grub should be installed to
@target: path of grub's configuration files"""
- logging.debug("Generating grub configuration")
+ global UUID
+
+ logging.debug("Updating grub configuration")
grub_target = target + '/boot/grub/'
+ bootid_re = re.compile("bootid=[\w_-]+")
+ live_media_path_re = re.compile("live-media-path=[\w_/-]+")
+
bootopt = get_bootoptions(grml_flavour)
- # write grub.cfg
- handle_grub2_config(grml_flavour, grub_target, bootopt)
+ remove_regexes = []
+ option_re = re.compile(r'(.*/boot/.*(linux26|vmlinuz).*)')
+
+ if options.removeoption:
+ for regex in options.removeoption:
+ remove_regexes.append(re.compile(regex))
+
+ for filename in glob.glob(grub_target + '*.cfg'):
+ for line in fileinput.input(filename, inplace=1):
+ line = line.rstrip("\r\n")
+ if option_re.search(line):
+ line = bootid_re.sub('', line)
+ line = live_media_path_re.sub('', line)
+ line = line.rstrip() + r' live-media-path=/live/%s/ bootid=%s %s ' % (grml_flavour, UUID, bootopt)
+ for regex in remove_regexes:
+ line = regex.sub(' ', line)
+ print line
+ fileinput.close()
def initial_syslinux_config(target):