import datetime, logging, os, re, subprocess, sys, tempfile, time, os.path
import fileinput
import glob
+import uuid
# global variables
-PROG_VERSION = "0.9.14"
+PROG_VERSION = "0.9.20"
MOUNTED = set() # register mountpoints
TMPFILES = set() # register tmpfiles
DATESTAMP = time.mktime(datetime.datetime.now().timetuple()) # unique identifier for syslinux.cfg
GRML_FLAVOURS = set() # which flavours are being installed?
global GRML_DEFAULT
+global UUID
+
+def syslinux_warning(option, opt, value, parser):
+ sys.stderr.write("Note: the --syslinux option is deprecated as syslinux " +
+ "is grml2usb's default. Continuing anyway.\n")
+ setattr(parser.values, option.dest, True)
+
+# if grub option is set, unset syslinux option
+def grub_option(option, opt, value, parser):
+ setattr(parser.values, option.dest, True)
+ setattr(parser.values, 'syslinux', False)
# cmdline parsing
USAGE = "Usage: %prog [options] <[ISO[s] | /live/image]> </dev/sdX#>\n\
help="format specified partition with FAT16")
parser.add_option("--force", dest="force", action="store_true",
help="force any actions requiring manual interaction")
-parser.add_option("--grub", dest="grub", action="store_true",
+parser.add_option("--grub", dest="grub", action="callback",
+ callback=grub_option,
help="install grub bootloader instead of (default) syslinux")
parser.add_option("--grub-mbr", dest="grubmbr", action="store_true",
help="install grub into MBR instead of (default) PBR")
help="do not install a master boot record (MBR) on the device")
parser.add_option("--skip-syslinux-config", dest="skipsyslinuxconfig", action="store_true",
help="skip generation of syslinux configuration files")
-parser.add_option("--syslinux", dest="syslinux", action="store_true",
+parser.add_option("--syslinux", dest="syslinux", action="callback", default=True,
+ callback=syslinux_warning,
help="install syslinux bootloader (deprecated as it's the default)")
parser.add_option("--syslinux-mbr", dest="syslinuxmbr", action="store_true",
help="install syslinux master boot record (MBR) instead of default")
menuentry "%(grml_flavour)s (default)" {
set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
initrd /boot/release/%(flavour_filename)s/initrd.gz
}
""" % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp,
'flavour_filename': grml_flavour.replace('-', ''),
- 'bootoptions': bootoptions } )
+ 'uid': UUID, 'bootoptions': bootoptions } )
def generate_flavour_specific_grub2_config(grml_flavour, bootoptions):
## 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 quiet live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet 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-persistent - enable persistency feature" {
set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet persistent live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet 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)s2ram - copy compressed grml file to RAM" {
set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ toram=%(grml_flavour)s.squashfs %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet 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-debug - enable debugging options" {
set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ debug initcall_debug%(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ debug bootid=%(uid)s initcall_debug %(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-x - start X Window System" {
set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng 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-nofb - disable framebuffer" {
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=ofonly %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet 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-failsafe - disable hardware detection" {
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal noautoconfig atapicd noapic noacpi acpi=off nomodules nofirewire noudev nousb nohotplug noapm nopcmcia nosmp maxcpus=0 noscsi noagp nodma ide=nodma noswap nofstab nosound nogpm nosyslog nodhcp nocpu nodisc nomodem xmodule=vesa noraid nolvm noresume selinux=0 edd=off pci=nomsi %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal noautoconfig atapicd noapic noacpi acpi=off nomodules nofirewire noudev nousb nohotplug noapm nopcmcia nosmp maxcpus=0 noscsi noagp nodma ide=nodma noswap nofstab nosound nogpm nosyslog nodhcp nocpu nodisc nomodem xmodule=vesa noraid nolvm noresume selinux=0 edd=off pci=nomsi 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-forensic - do not touch harddisks during hw recognition" {
set gfxpayload=1024x768x16,1024x768
- linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect forensic readonly %(bootoptions)s
+ linux /boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet 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
}
""" % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp,
'flavour_filename': grml_flavour.replace('-', ''),
- 'bootoptions': bootoptions } )
+ 'uid': UUID, 'bootoptions': bootoptions } )
def generate_flavour_specific_grub1_config(grml_flavour, install_partition, bootoptions):
return("""\
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-persistent
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet persistent live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet persistent live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s2ram
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ toram=%(grml_flavour)s.squashfs %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ toram=%(grml_flavour)s.squashfs bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-debug
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ debug initcall_debug%(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ debug initcall_debug bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-x
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ startx=wm-ng bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-nofb
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=ofonly %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=ofonly bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-failsafe
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal noautoconfig atapicd noapic noacpi acpi=off nomodules nofirewire noudev nousb nohotplug noapm nopcmcia nosmp maxcpus=0 noscsi noagp nodma ide=nodma noswap nofstab nosound nogpm nosyslog nodhcp nocpu nodisc nomodem xmodule=vesa noraid nolvm noresume selinux=0 edd=off pci=nomsi %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal noautoconfig atapicd noapic noacpi acpi=off nomodules nofirewire noudev nousb nohotplug noapm nopcmcia nosmp maxcpus=0 noscsi noagp nodma ide=nodma noswap nofstab nosound nogpm nosyslog nodhcp nocpu nodisc nomodem xmodule=vesa noraid nolvm noresume selinux=0 edd=off pci=nomsi bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-forensic
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect forensic readonly %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce vga=791 quiet live-media-path=/live/%(grml_flavour)s/ nofstab noraid nolvm noautoconfig noswap raid=noautodetect forensic readonly bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
## flavour specific configuration for %(grml_flavour)s [grml2usb for %(grml_flavour)s: %(local_datestamp)s]
title %(grml_flavour)s-serial
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=vesafb:off console=tty1 console=ttyS0,9600n8 %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off boot=live nomce quiet live-media-path=/live/%(grml_flavour)s/ vga=normal video=vesafb:off console=tty1 console=ttyS0,9600n8 bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
""" % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp,
- 'flavour_filename': grml_flavour.replace('-', ''),
+ 'flavour_filename': grml_flavour.replace('-', ''), 'uid': UUID,
'bootoptions': bootoptions, 'install_partition': install_partition } )
# define entries:
title %(grml_flavour)s - Default boot (using 1024x768 framebuffer)
-kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ %(bootoptions)s
+kernel (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/%(grml_flavour)s/ bootid=%(uid)s %(bootoptions)s
initrd (hd0,%(install_partition)s)/boot/release/%(flavour_filename)s/initrd.gz
title Memory test (memtest86+)
kernel (hd0,%(install_partition)s)/boot/addons/bsd4grml/ldbsd.com
""" % {'grml_flavour': grml_flavour, 'local_datestamp': local_datestamp,
- 'flavour_filename': grml_flavour.replace('-', ''),
+ 'flavour_filename': grml_flavour.replace('-', ''), 'uid': UUID,
'bootoptions': bootoptions, 'install_partition': install_partition } )
@device: partition where bootloader should be installed to"""
# by default we use grub, so install syslinux only on request
- if options.syslinux:
- logging.info("Note: the --syslinux option is deprecated as syslinux is grml2usb's default. Continuing anyway.")
-
if options.grub:
if not which("grub-install"):
logging.critical("Fatal: grub-install not available (please install the grub package or use the --syslinux option)")
raise CriticalException("Failed to read device %s"
" (wrong UID/permissions or device/directory not present?)" % partition)
- if options.syslinux and filesystem != "vfat":
+ if filesystem != "vfat":
raise CriticalException("Partition %s does not contain a FAT16 filesystem. (Use --fat16 or run mkfs.vfat %s)" % (partition, partition))
except OSError:
sys.exit(1)
+def write_uuid(target_file):
+ file = open(target_file, 'w')
+ uid = str(uuid.uuid4())
+ file.write(uid)
+ file.close()
+ return uid
+
+
+def get_uuid(target):
+ conf_target = target + "/conf/"
+ uuid_file_name = conf_target + "/bootid.txt"
+ if os.path.isdir(conf_target):
+ if os.path.isfile(uuid_file_name):
+ uuid_file = open(uuid_file_name, 'r')
+ uid = uuid_file.readline().strip()
+ uuid_file.close()
+ return uid
+ else:
+ return write_uuid(uuid_file_name)
+ else:
+ execute(mkdir, conf_target)
+ return write_uuid(uuid_file_name)
+
+
def copy_system_files(grml_flavour, iso_mount, target):
"""copy grml's main files (like squashfs, kernel and initrd) to a given target
else:
exec_rsync(filesystem_module, squashfs_target + 'filesystem.module')
+
release_target = target + '/boot/release/' + grml_flavour.replace('-', '')
execute(mkdir, release_target)
else:
exec_rsync(memtestimg, addons + 'memtest')
+ # gpxe.lkrn
+ gpxeimg = search_file('gpxe.lkrn', iso_mount)
+ if gpxeimg is None:
+ logging.warn("Warning: gpxe.lkrn not found (that's fine if you don't need it)")
+ else:
+ exec_rsync(gpxeimg, addons + 'gpxe.lkrn')
def copy_bootloader_files(iso_mount, target):
"""copy grml's bootloader files to a given target
for ffile in ['f%d' % number for number in range(1,11) ]:
bootsplash = search_file(ffile, iso_mount)
+ if not bootsplash:
+ continue
exec_rsync(bootsplash, syslinux_target + ffile)
# avoid the "file is read only, overwrite anyway (y/n) ?" question
if os.path.isfile(syslinux_target + 'ldlinux.sys'):
os.unlink(syslinux_target + 'ldlinux.sys')
- if not search_file('default.cfg', iso_mount + '/boot/isolinux/'):
+ bootloader_dirs = ['/boot/isolinux/', '/boot/syslinux/']
+ source_dir = None
+ for dir in bootloader_dirs:
+ if glob.glob(iso_mount + dir + '*default.cfg'):
+ source_dir = dir
+ break
+ else:
logging.critical("Fatal: file default.cfg could not be found.")
logging.critical("Note: this grml2usb version requires an ISO generated by grml-live >=0.9.24 ...")
logging.critical(" ... either use grml releases >=2009.10 or switch to an older grml2usb version.")
logging.critical(" Please visit http://grml.org/grml2usb/#grml2usb-compat for further information.")
raise
- for filename in 'default.cfg', 'distri.cfg', \
- 'grml.cfg', 'grml.png', 'hd.cfg', 'isolinux.cfg', 'isolinux.bin', \
+ for expr in '*default.cfg', 'distri.cfg', \
+ '*grml.cfg', 'grml.png', 'hd.cfg', 'isolinux.cfg', 'isolinux.bin', \
'isoprompt.cfg', 'options.cfg', \
'prompt.cfg', 'vesamenu.c32', 'vesamenu.cfg', 'grml.png':
- path = search_file(filename, iso_mount + '/boot/isolinux/')
- exec_rsync(path, syslinux_target + filename)
+ files = glob.glob(iso_mount + source_dir + expr)
+ for path in files:
+ filename = os.path.basename(path)
+ exec_rsync(path, syslinux_target + filename)
# copy the addons_*.cfg file to the new syslinux directory
- for filename in glob.glob(iso_mount + '/boot/isolinux/' + 'addon*.cfg'):
+ for filename in glob.glob(iso_mount + source_dir + 'addon*.cfg'):
exec_rsync(filename, syslinux_target)
- path = search_file('hidden.cfg', iso_mount + '/boot/isolinux/')
- exec_rsync(path, syslinux_target + "new_" + 'hidden.cfg')
+ path = search_file('hidden.cfg', iso_mount + source_dir)
+ if path:
+ exec_rsync(path, syslinux_target + "new_" + 'hidden.cfg')
grub_target = target + '/boot/grub/'
if os.path.isfile("/usr/share/grub/ascii.pf2"):
exec_rsync('/usr/share/grub/ascii.pf2', grub_target + 'ascii.pf2')
+ # always copy grub content as it might be useful
+ for file in glob.glob(iso_mount + '/boot/grub/*.mod'):
+ exec_rsync(file, grub_target)
+
+ for file in glob.glob(iso_mount + '/boot/grub/*.img'):
+ exec_rsync(file, grub_target)
+
+ for file in glob.glob(iso_mount + '/boot/grub/stage*'):
+ exec_rsync(file, grub_target)
def install_iso_files(grml_flavour, iso_mount, device, target):
"""Copy files from ISO to given target
# * catch "install: .. No space left on device" & CO
if options.dryrun:
+ global GRML_DEFAULT
+ GRML_DEFAULT = grml_flavour
return 0
elif not options.bootloaderonly:
logging.info("Copying files. This might take a while....")
sys.exit(1)
if not options.skipaddons:
- if grml_flavour.endswith('-small'):
- logging.info("Note: grml-small doesn't provide any addons, not installing them therefore.")
+ if not search_file('addons', iso_mount):
+ logging.info("Could not find addons, therefore not installing.")
else:
copy_addons(iso_mount, target)
boot_re = re.compile("/boot/([a-zA-Z0-9_]+/)+([a-zA-Z0-9._]+)")
# flavour_re = re.compile("(label.*)(grml\w+)")
default_re = re.compile("(default.cfg)")
+ bootid_re = re.compile("(bootid)=[\w_-]+")
# do NOT write "None" in kernel cmdline
if options.bootoptions is None:
for regex in options.removeoption:
regexe.append(re.compile(r'%s' % regex))
+ global UUID
for line in fileinput.input(src, inplace=1):
line = boot_re.sub(r'/boot/release/%s/\2 ' % flavour.replace('-', ''), line)
# line = flavour_re.sub(r'\1 %s-\2' % flavour, line)
line = default_re.sub(r'%s-\1' % flavour, line)
+ line = bootid_re.sub(' ', line)
line = append_re.sub(r'\1 live-media-path=/live/%s/ ' % flavour, line)
line = append_re.sub(r'\1 boot=live %s ' % bootopt, line)
+ line = append_re.sub(r'\1 %s=%s ' % ("bootid", UUID), line)
if option_re and option_re.search(line):
for regex in regexe:
line = regex.sub(' ', line)
sys.stdout.write(line)
fileinput.close()
-def adjust_labels(src, flavour):
+def adjust_labels(src, replacement):
label_re = re.compile("^(\s*label\s*) ([a-zA-Z0-9_-]+)", re.I)
for line in fileinput.input(src, inplace=1):
- line = label_re.sub(r'\1 %s-\2' % flavour, line)
+ line = label_re.sub(replacement, line)
sys.stdout.write(line)
fileinput.close()
prompt_name.close()
initial_syslinux_config(syslinux_target)
- modify_filenames(grml_flavour, syslinux_target, ['grml.cfg', 'default.cfg'])
+ if search_file('default.cfg', syslinux_target):
+ modify_filenames(grml_flavour, syslinux_target, ['grml.cfg', 'default.cfg'])
filename = search_file("new_hidden.cfg", syslinux_target)
new_hidden = "%s_hidden.cfg" % (flavour_filename)
new_hidden_file = "%s/%s" % (syslinux_target, new_hidden)
os.rename(filename, new_hidden_file)
- adjust_labels(new_hidden_file, flavour_filename)
- adjust_syslinux_bootoptions(new_hidden_file, flavour_filename)
+ adjust_labels(new_hidden_file, r'\1 %s-\2' % grml_flavour)
+ adjust_syslinux_bootoptions(new_hidden_file, grml_flavour)
entry = 'include %s\n' % new_hidden
add_entry_if_not_present("%s/hiddens.cfg" % syslinux_target, entry)
defaults_file = '%s/defaults.cfg' % syslinux_target
if os.path.isfile(defaults_file):
- remove_default_entry('%s/%s_default.cfg' % (syslinux_target, flavour_filename))
+ new_default_with_path = "%s/%s" % (syslinux_target, new_default)
+ new_grml_cfg = "%s/%s_grml.cfg" % ( syslinux_target, flavour_filename)
+
+ # remove default menu entry in menu
+ remove_default_entry(new_default_with_path)
+
+ # adjust all labels for additional isos
+ adjust_labels(new_default_with_path, r'\1 %s' % grml_flavour)
+ adjust_labels(new_grml_cfg, r'\1 %s-\2' % grml_flavour)
+
add_entry_if_not_present("%s/defaults.cfg" % syslinux_target, entry)
@device: device/partition where bootloader should be installed to
@target: path of bootloader's configuration files"""
+ global UUID
+ UUID = get_uuid(target)
if options.skipsyslinuxconfig:
logging.info("Skipping generation of syslinux configuration as requested.")
else:
register_tmpfile(device_mountpoint)
remove_device_mountpoint = True
try:
- mount(device, device_mountpoint, "")
+ check_for_fat(device)
+ mount(device, device_mountpoint, ['-o', 'utf8,iocharset=iso8859-1'])
except CriticalException, error:
- logging.critical("Fatal: %s", error)
- cleanup()
- sys.exit(1)
+ try:
+ mount(device, device_mountpoint, "")
+ except CriticalException, error:
+ logging.critical("Fatal: %s", error)
+ cleanup()
+ sys.exit(1)
try:
try:
# check for vfat filesystem
if device is not None and not os.path.isdir(device):
try:
- check_for_fat(device)
+ if options.syslinux: check_for_fat(device)
except CriticalException, error:
logging.critical("Execution failed: %s", error)
sys.exit(1)
if options.dryrun:
logging.info("Running in simulation mode as requested via option dry-run.")
+ if options.grubmbr and not options.grub:
+ logging.critical("Error: --grub-mbr requires --grub option.")
+ sys.exit(1)
+
# specified arguments
device = args[len(args) - 1]
isos = args[0:len(args) - 1]