diff --git a/misc/makeboot.centos.py b/misc/makeboot.centos.py new file mode 100644 index 00000000..77baa060 --- /dev/null +++ b/misc/makeboot.centos.py @@ -0,0 +1,60 @@ +#!/usr/bin/python + +import os +import sys +import yaml + +def mkdirp(path): + try: + os.makedirs(path) + except OSError as e: + if e.errno != 17: + raise + +def makeboot_tree(distribution, profiledir): + bootdir = os.path.join(profiledir, 'boot') + efisrc = os.path.join(distribution, 'EFI') + efidir = os.path.join(bootdir, 'efi/boot') + mkdirp(efidir) + initrfsdir = os.path.join(bootdir, 'initramfs') + mkdirp(initrfsdir) + for directory in os.walk(efisrc): + for filename in directory[2]: + if filename.lower() == 'bootx64.efi': + srcfile = os.path.join(directory[0], filename) + trgfile = os.path.join(efidir, 'bootx64.efi') + os.link(srcfile, trgfile) + elif filename.lower() == 'grubx64.efi': + srcfile = os.path.join(directory[0], filename) + trgfile = os.path.join(efidir, 'grubx64.efi') + os.link(srcfile, trgfile) + netbootdir = os.path.join(distribution, 'images/pxeboot') + srckern = os.path.join(netbootdir, 'vmlinuz') + srcinitramfs = os.path.join(netbootdir, 'initrd.img') + trgkern = os.path.join(bootdir, 'kernel') + trginitramfs = os.path.join(initrfsdir, 'initrd.img') + os.link(srckern, trgkern) + os.link(srcinitramfs, trginitramfs) + trginitramfs = os.path.join(initrfsdir, 'site-initramfs.gz') + os.link('/var/lib/confluent/public/site/site-initramfs.gz', trginitramfs) + profileinfo = os.path.join(profiledir, 'profile.yaml') + with open(profileinfo) as info: + profile = yaml.load(info) + cfgfile = os.path.join(efidir, 'grub.cfg') + with open(cfgfile, 'w') as grubcfg: + grubcfg.write('set timeout=5\n') + grubcfg.write("menuentry '{0}' {{\n".format( + profile.get('label', 'Unknown'))) + grubcfg.write(' linuxefi /kernel {0}\n'.format(profile.get( + 'kernelargs', 'quiet'))) + initrds = ' '.join( + ['/initramfs/{0}'.format(x) for x in os.listdir(initrfsdir)]) + grubcfg.write(' initrdefi {0}\n}}'.format(initrds)) + #TODO: create the netboot grub.cfg, is there a way to use grub http + # without putting the server in the cfg? + # If server is omitted, value of environment variable ‘net_default_server’ + # is used + + +if __name__ == '__main__': + makeboot_tree(sys.argv[1], sys.argv[2]) \ No newline at end of file