From d4cd779ea38a42a2f122738e7c8083ca3ac6a367 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 2 Dec 2014 21:47:43 -0500 Subject: [PATCH] rpmostreepayload: Avoid shutil.copytree in favor of cp -r to fix symlinks shutil.copytree() follows symlinks by default which I didn't realize, and this actively breaks things as grubenv is a symlink. Since we're shelling out to 'cp' in a case above, might as well do it here. This also means that if we hit e.g. ENOSPC we'll enter the error handling codepath instead of an uncaught traceback. (Yes, this code is crappy, should probably live in bootloader.py, except I'm going through gyrations here to avoid requiring any changes in how mainline bootloaders work) --- pyanaconda/packaging/rpmostreepayload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyanaconda/packaging/rpmostreepayload.py b/pyanaconda/packaging/rpmostreepayload.py index ade664c..f96a316 100644 --- a/pyanaconda/packaging/rpmostreepayload.py +++ b/pyanaconda/packaging/rpmostreepayload.py @@ -119,7 +119,7 @@ class RPMOSTreePayload(ArchivePayload): self._safeExecWithRedirect('cp', ['-r', '-p', sub_srcpath, sub_destpath]) else: log.info("Copying bootloader data: " + fname) - shutil.copytree(srcpath, destpath) + self._safeExecWithRedirect('cp', ['-r', '-p', srcpath, destpath]) def install(self): mainctx = GLib.MainContext.new() -- 1.8.3.1