import shutil
# The line following this line is patched by debian/rules and tarball.sh.
-PROG_VERSION = '***UNRELEASED***'
+PROG_VERSION = '***UNKNOWN***'
+
+# when running from inside git, try to report version information via git-describe
+try:
+ git_dir = os.path.abspath(os.path.dirname(sys.argv[0]))
+ with open(os.devnull, 'w') as devnull:
+ PROG_VERSION = subprocess.check_output(["git",
+ "-C",
+ git_dir,
+ "describe",
+ "--always",
+ "--dirty"],
+ stderr=devnull).strip().decode('utf-8', errors='replace') + \
+ " (git)"
+except Exception:
+ pass
# global variables
MOUNTED = set() # register mountpoints
GRML_FLAVOURS = set() # which flavours are being installed?
GRML_DEFAULT = None
UUID = None
-SYSLINUX_LIBS = "/usr/lib/syslinux/modules/bios/"
+SYSLINUX_LIBS = [
+ "/usr/lib/syslinux/modules/bios/", # Debian
+ "/usr/lib/syslinux/bios/", # Arch Linux
+]
GPT_HEADER = b"\x55\xaa\x45\x46\x49\x20\x50\x41\x52\x54" # original GPT header
GRUB_INSTALL = None
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")
+parser.add_option("--syslinux-libs", dest="syslinuxlibs", action="append", default=[],
+ help="syslinux modules directory path")
parser.add_option("--tmpdir", dest="tmpdir", default="/tmp",
help="directory to be used for temporary files")
parser.add_option("--verbose", dest="verbose", action="store_true",
" (wrong UID/permissions or device/directory not present?)" % partition)
try:
- udev_info = subprocess.Popen(["/sbin/blkid", "-s", "TYPE", "-o", "value", partition],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
- filesystem = udev_info.communicate()[0].rstrip()
+ filesystem = subprocess.check_output(["/sbin/blkid", "-s", "TYPE", "-o", "value", partition]).decode().rstrip()
if filesystem != "vfat":
raise CriticalException(
"(Use --fat16 or run mkfs.vfat %s)" % (partition, partition))
except OSError:
- raise CriticalException("Sorry, /sbin/blkid not available (install e2fsprogs?)")
+ raise CriticalException("Sorry, /sbin/blkid not available (install util-linux?)")
def mkdir(directory):
logging.warn("Warning: could not find flavour directory for %s ", grml_flavour)
-def handle_addon_copy(filename, dst, iso_mount, ignore_errors=False):
- """handle copy of optional addons
-
- @filename: filename of the addon
- @dst: destination directory
- @iso_mount: location of the iso mount
- @ignore_errors: don't report missing files
- """
- file_location = search_file(filename, iso_mount)
- if file_location is None:
- if not ignore_errors:
- logging.warn("Warning: %s not found (that's fine if you don't need it)", filename)
- else:
- exec_rsync(file_location, dst)
-
-
def copy_addons(iso_mount, target):
"""copy grml's addons files (like allinoneimg, bsd4grml,..) to a given target
addons = target + '/boot/addons/'
execute(mkdir, addons)
- # grub all-in-one image
- handle_addon_copy('allinone.img', addons, iso_mount)
-
- # bsd image
- handle_addon_copy('bsd4grml', addons, iso_mount)
-
- # DOS image
- handle_addon_copy('balder10.imz', addons, iso_mount)
-
- # syslinux + pci.ids for hdt
- for expr in '*.c32', 'pci.ids':
- glob_and_copy(iso_mount + '/boot/addons/' + expr, addons)
-
- # memdisk image
- handle_addon_copy('memdisk', addons, iso_mount)
-
- # memtest86+ image
- handle_addon_copy('memtest', addons, iso_mount)
-
- # gpxe.lkrn: got replaced by ipxe
- handle_addon_copy('gpxe.lkrn', addons, iso_mount, ignore_errors=True)
-
- # ipxe.lkrn
- handle_addon_copy('ipxe.lkrn', addons, iso_mount)
-
- # netboot.xyz
- handle_addon_copy('netboot.xyz.lkrn', addons, iso_mount)
+ for addon_file in glob.glob(iso_mount + '/boot/addons/*'):
+ filename = os.path.basename(addon_file)
+ src_file = iso_mount + "/boot/addons/" + os.path.basename(addon_file)
+ logging.debug("Copying addon file %s" % filename)
+ exec_rsync(src_file, addons)
def build_loopbackcfg(target):
'prompt.cfg', 'vesamenu.cfg', 'grml.png', '*.c32':
glob_and_copy(iso_mount + source_dir + expr, syslinux_target)
- for filename in glob.glob1(syslinux_target, "*.c32"):
- copy_if_exist(os.path.join(SYSLINUX_LIBS, filename), syslinux_target)
+ for modules_dir in options.syslinuxlibs + SYSLINUX_LIBS:
+ if os.path.isdir(modules_dir):
+ for filename in glob.glob1(syslinux_target, "*.c32"):
+ copy_if_exist(os.path.join(modules_dir, filename), syslinux_target)
+ break
# copy the addons_*.cfg file to the new syslinux directory
glob_and_copy(iso_mount + source_dir + 'addon*.cfg', syslinux_target)
mbrcode = mbrpath
break
- if mbrcode is "":
+ if not mbrcode:
str_locations = " or ".join(['"%s"' % l for l in mbr_locations])
logging.error('Cannot find syslinux MBR, install it at %s)',
str_locations)