From 4eadc691fc3ae6f300087ccef893e5f5031253a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Fri, 3 Mar 2017 18:07:35 +0100 Subject: [PATCH] bootloader: added option initrd_remove_dir MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To remove the source directory from which the initrd image is build, the following can be used: [bootloader] initrd_remove_dir = True initrd_add_dir = /tmp/tuned-initrd.img This will create initrd image from the /tmp/tuned-initrd.img directory and and then it removes the tuned-initrd.img directory from the /tmp. Related: rhbz#1414098 Signed-off-by: Jaroslav Škarvada --- tuned/plugins/plugin_bootloader.py | 13 +++++++++++++ tuned/utils/commands.py | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/tuned/plugins/plugin_bootloader.py b/tuned/plugins/plugin_bootloader.py index 2062aec..b23deba 100644 --- a/tuned/plugins/plugin_bootloader.py +++ b/tuned/plugins/plugin_bootloader.py @@ -30,6 +30,7 @@ class BootloaderPlugin(base.Plugin): instance._has_static_tuning = True # controls grub2_cfg rewrites in _instance_post_static self.update_grub2_cfg = False + self._initrd_remove_dir = False self._initrd_dst_img_val = None self._cmdline_val = "" self._initrd_val = "" @@ -46,6 +47,7 @@ class BootloaderPlugin(base.Plugin): "initrd_dst_img": None, "initrd_add_img": None, "initrd_add_dir": None, + "initrd_remove_dir": None, "cmdline": None, } @@ -208,6 +210,14 @@ class BootloaderPlugin(base.Plugin): if self._initrd_dst_img_val[0] != "/": self._initrd_dst_img_val = os.path.join(consts.BOOT_DIR, self._initrd_dst_img_val) + @command_custom("initrd_remove_dir") + def _initrd_remove_dir(self, enabling, value, verify, ignore_missing): + # nothing to verify + if verify: + return None + if enabling and value is not None: + self._initrd_remove_dir = value + @command_custom("initrd_add_img", per_device = False, priority = 10) def _initrd_add_img(self, enabling, value, verify, ignore_missing): # nothing to verify @@ -248,6 +258,9 @@ class BootloaderPlugin(base.Plugin): return False self._install_initrd(tmpfile) self._cmd.unlink(tmpfile) + if self._initrd_remove_dir: + log.info("removing directory '%s'" % src_dir) + self._cmd.rmtree(src_dir) @command_custom("cmdline", per_device = False, priority = 10) def _cmdline(self, enabling, value, verify, ignore_missing): diff --git a/tuned/utils/commands.py b/tuned/utils/commands.py index 6959b1f..028aa9e 100644 --- a/tuned/utils/commands.py +++ b/tuned/utils/commands.py @@ -121,6 +121,17 @@ class commands: self._debug("Read data from file: '%s' > '%s'" % (f, old_value)) return old_value + def rmtree(self, f, no_error = False): + self._debug("Removing tree: '%s'" % f) + if os.path.exists(f): + try: + shutil.rmtree(f, no_error) + except OSError as error: + if not no_error: + log.error("cannot remove tree '%s': '%s'" % (f, str(error))) + return False + return True + def unlink(self, f, no_error = False): self._debug("Removing file: '%s'" % f) if os.path.exists(f):