]> code.ossystems Code Review - openembedded-core.git/commitdiff
package_manager: expand the removal list for RPM
authorRoss Burton <ross.burton@intel.com>
Fri, 27 Apr 2018 15:55:44 +0000 (16:55 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 22 May 2018 12:09:01 +0000 (13:09 +0100)
If package management is disabled we remove the state and configuration for the
package manager after the rootfs has been populated.  This list wasn't complete
and the DNF/RPM configuration files were left behind.

As we've added files to the list (and not just directories), expand the
backup/restore package management state code to handle this.

Signed-off-by: Ross Burton <ross.burton@intel.com>
meta/lib/oe/package_manager.py

index 2d8aeba037cfcf69a3977cccbbd3be83737f63ce..1cba5ee968866bf9f5b5213d1dd75b565fcd6c48 100644 (file)
@@ -668,7 +668,7 @@ class RpmPM(PackageManager):
         self.saved_packaging_data = self.d.expand('${T}/saved_packaging_data/%s' % self.task_name)
         if not os.path.exists(self.d.expand('${T}/saved_packaging_data')):
             bb.utils.mkdirhier(self.d.expand('${T}/saved_packaging_data'))
-        self.packaging_data_dirs = ['var/lib/rpm', 'var/lib/dnf', 'var/cache/dnf']
+        self.packaging_data_dirs = ['etc/rpm', 'etc/rpmrc', 'etc/dnf', 'var/lib/rpm', 'var/lib/dnf', 'var/cache/dnf']
         self.solution_manifest = self.d.expand('${T}/saved/%s_solution' %
                                                self.task_name)
         if not os.path.exists(self.d.expand('${T}/saved')):
@@ -832,7 +832,10 @@ class RpmPM(PackageManager):
         for i in self.packaging_data_dirs:
             source_dir = oe.path.join(self.target_rootfs, i)
             target_dir = oe.path.join(self.saved_packaging_data, i)
-            shutil.copytree(source_dir, target_dir, symlinks=True)
+            if os.path.isdir(source_dir):
+                shutil.copytree(source_dir, target_dir, symlinks=True)
+            elif os.path.isfile(source_dir):
+                shutil.copy2(source_dir, target_dir)
 
     def recovery_packaging_data(self):
         # Move the rpmlib back
@@ -842,9 +845,10 @@ class RpmPM(PackageManager):
                 if os.path.exists(target_dir):
                     bb.utils.remove(target_dir, True)
                 source_dir = oe.path.join(self.saved_packaging_data, i)
-                shutil.copytree(source_dir,
-                            target_dir,
-                            symlinks=True)
+                if os.path.isdir(source_dir):
+                    shutil.copytree(source_dir, target_dir, symlinks=True)
+                elif os.path.isfile(source_dir):
+                    shutil.copy2(source_dir, target_dir)
 
     def list_installed(self):
         output = self._invoke_dnf(["repoquery", "--installed", "--queryformat", "Package: %{name} %{arch} %{version} %{name}-%{version}-%{release}.%{arch}.rpm\nDependencies:\n%{requires}\nRecommendations:\n%{recommends}\nDependenciesEndHere:\n"],