From d6fc80cd88b08bdd066a0c9bd8565a44bea19161 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Thu, 31 Mar 2016 11:09:16 -0700 Subject: [PATCH] Initial update_grub --- client/update_grub.py | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 client/update_grub.py diff --git a/client/update_grub.py b/client/update_grub.py new file mode 100644 index 0000000..0bb8c62 --- /dev/null +++ b/client/update_grub.py @@ -0,0 +1,57 @@ +#!/usr/bin/python3 + +import argparse +import os +import sys + + +parser = argparse.ArgumentParser(description='iconograph update_grub') +parser.add_argument( + '--boot-dir', + dest='boot_dir', + action='store', + required=True) +parser.add_argument( + '--image-dir', + dest='image_dir', + action='store', + required=True) +FLAGS = parser.parse_args() + + +class GrubUpdater(object): + + def __init__(self, image_dir, boot_dir): + self._image_dir = image_dir + self._boot_dir = boot_dir + + assert self._image_dir.startswith(self._boot_dir) + + self._image_path = '/' + os.path.relpath(self._image_dir, self._boot_dir) + + def Update(self): + for filename in os.listdir(self._image_dir): + if not filename.endswith('.iso'): + continue + sys.stdout.write(""" +menuentry "%(image_filename)s" { + search --no-floppy --file --set=root %(image_path)s/%(image_filename)s + iso_path="%(image_path)s/%(image_filename)s" + export iso_path + loopback loop "%(image_path)s/%(image_filename)s" + set root=(loop) + configfile /boot/grub/loopback.cfg +} +""" % { + 'image_filename': filename, + 'image_path': self._image_path, + }) + + +def main(): + updater = GrubUpdater(FLAGS.image_dir, FLAGS.boot_dir) + updater.Update() + + +if __name__ == '__main__': + main()