Created
November 17, 2018 10:24
-
-
Save shawnanastasio/2be9d896326b5179dd89615ab0716e92 to your computer and use it in GitHub Desktop.
Automatic syslinux.cfg generator for petitboot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import os | |
import re | |
import sys | |
BOOT_DIR = "/boot/" | |
ENTRY_NAME_PREFIX = "Gentoo Linux" | |
APPEND = "crypt_root=UUID=76543706-8215-4e11-bbfb-8acf447d6bb7 root=/dev/mapper/root" | |
KERNEL_RE = "vmlinux.*[0-9]+\.[0-9]+\.[0-9]+.*" | |
INITRD_RE = "initramfs.*[0-9]+\.[0-9]+\.[0-9]+.*" | |
def file_modified_key(elem): | |
return os.path.getmtime(BOOT_DIR + elem) | |
def get_version_from_filename(filename): | |
# Assumes file ends with version. | |
# Ex. "vmlinux-4.18.10-gentoo" returns "4.18.10-gentoo" | |
return re.findall(".*([0-9]+\.[0-9]+\.[0-9]+.*)", filename)[0] | |
def generate_entry_name(version): | |
return ENTRY_NAME_PREFIX + " " + version | |
def generate_entry(kernel, initrd): | |
version = get_version_from_filename(kernel) | |
output = "LABEL " + generate_entry_name(version) + "\n" | |
output += "\tKERNEL /" + kernel + "\n" | |
if initrd is not None: | |
output += "\tINITRD /" + initrd + "\n" | |
output += "\tAPPEND " + APPEND + "\n" | |
return output | |
def main(): | |
kernels = [f for f in os.listdir(BOOT_DIR) if re.match(KERNEL_RE, f)] | |
initrds = [f for f in os.listdir(BOOT_DIR) if re.match(INITRD_RE, f)] | |
# Sort by date modified | |
kernels.sort(key=file_modified_key, reverse=True) | |
initrds.sort(key=file_modified_key, reverse=True) | |
if len(kernels) == 0: | |
sys.stderr.write("No kernels found! Check BOOT_DIR and KERNEL_RE!\n") | |
sys.exit(1) | |
# Generate syslinux. Use the newest kernel as default. | |
sysconfig_out = "DEFAULT " + generate_entry_name(get_version_from_filename(kernels[0])) + "\n" | |
for i in range(len(kernels)): | |
version = get_version_from_filename(kernels[i]) | |
# Get the matching initrd if it was found | |
try: | |
initrd = [x for x in initrds if get_version_from_filename(x) == version][0] | |
except: | |
initrd = None | |
# Generate entry and append to output | |
sysconfig_out += generate_entry(kernels[i], initrd) + "\n" | |
# Print output | |
sys.stdout.write(sysconfig_out) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment