summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-11-15 11:28:11 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-11-16 11:46:07 +0000
commite2af21d11934b3d2aad737f13117effe3654b0c8 (patch)
tree30940a6fe40056378f9679f8f800272b29f25467 /meta
parentf1d0b6d296cd9dadd6a0edd40d87b71fcf87949d (diff)
downloadpoky-e2af21d11934b3d2aad737f13117effe3654b0c8.tar.gz
lib/oe/package_manager: Avoid race problems when calling list_pkgs()
list_pkgs() for rpm calls RpmPM() which would try and create a copy of the package feed. This can be called for example from buildhistory whilst some other task may be working on an SDK or image construction, causing the package feed to disappear part way through an operation. Avoid the need to copy the package index just to list the installed packages, avoiding the race. (From OE-Core rev: d05fa49e06034913e22c223803c98cb265e2ae58) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/lib/oe/package_manager.py13
1 files changed, 8 insertions, 5 deletions
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index aa4de6e7c3..02cf2b7621 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -320,7 +320,7 @@ class PkgsList(object, metaclass=ABCMeta):
320 320
321class RpmPkgsList(PkgsList): 321class RpmPkgsList(PkgsList):
322 def list_pkgs(self): 322 def list_pkgs(self):
323 return RpmPM(self.d, self.rootfs_dir, self.d.getVar('TARGET_VENDOR')).list_installed() 323 return RpmPM(self.d, self.rootfs_dir, self.d.getVar('TARGET_VENDOR'), needfeed=False).list_installed()
324 324
325class OpkgPkgsList(PkgsList): 325class OpkgPkgsList(PkgsList):
326 def __init__(self, d, rootfs_dir, config_file): 326 def __init__(self, d, rootfs_dir, config_file):
@@ -724,7 +724,8 @@ class RpmPM(PackageManager):
724 arch_var=None, 724 arch_var=None,
725 os_var=None, 725 os_var=None,
726 rpm_repo_workdir="oe-rootfs-repo", 726 rpm_repo_workdir="oe-rootfs-repo",
727 filterbydependencies=True): 727 filterbydependencies=True,
728 needfeed=True):
728 super(RpmPM, self).__init__(d, target_rootfs) 729 super(RpmPM, self).__init__(d, target_rootfs)
729 self.target_vendor = target_vendor 730 self.target_vendor = target_vendor
730 self.task_name = task_name 731 self.task_name = task_name
@@ -737,8 +738,9 @@ class RpmPM(PackageManager):
737 else: 738 else:
738 self.primary_arch = self.d.getVar('MACHINE_ARCH') 739 self.primary_arch = self.d.getVar('MACHINE_ARCH')
739 740
740 self.rpm_repo_dir = oe.path.join(self.d.getVar('WORKDIR'), rpm_repo_workdir) 741 if needfeed:
741 create_packages_dir(self.d, oe.path.join(self.rpm_repo_dir, "rpm"), d.getVar("DEPLOY_DIR_RPM"), "package_write_rpm", filterbydependencies) 742 self.rpm_repo_dir = oe.path.join(self.d.getVar('WORKDIR'), rpm_repo_workdir)
743 create_packages_dir(self.d, oe.path.join(self.rpm_repo_dir, "rpm"), d.getVar("DEPLOY_DIR_RPM"), "package_write_rpm", filterbydependencies)
742 744
743 self.saved_packaging_data = self.d.expand('${T}/saved_packaging_data/%s' % self.task_name) 745 self.saved_packaging_data = self.d.expand('${T}/saved_packaging_data/%s' % self.task_name)
744 if not os.path.exists(self.d.expand('${T}/saved_packaging_data')): 746 if not os.path.exists(self.d.expand('${T}/saved_packaging_data')):
@@ -967,10 +969,11 @@ class RpmPM(PackageManager):
967 standard_dnf_args = ["-v", "--rpmverbosity=debug", "-y", 969 standard_dnf_args = ["-v", "--rpmverbosity=debug", "-y",
968 "-c", oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"), 970 "-c", oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"),
969 "--setopt=reposdir=%s" %(oe.path.join(self.target_rootfs, "etc/yum.repos.d")), 971 "--setopt=reposdir=%s" %(oe.path.join(self.target_rootfs, "etc/yum.repos.d")),
970 "--repofrompath=oe-repo,%s" % (self.rpm_repo_dir),
971 "--installroot=%s" % (self.target_rootfs), 972 "--installroot=%s" % (self.target_rootfs),
972 "--setopt=logdir=%s" % (self.d.getVar('T')) 973 "--setopt=logdir=%s" % (self.d.getVar('T'))
973 ] 974 ]
975 if hasattr(self, "rpm_repo_dir"):
976 standard_dnf_args.append("--repofrompath=oe-repo,%s" % (self.rpm_repo_dir))
974 cmd = [dnf_cmd] + standard_dnf_args + dnf_args 977 cmd = [dnf_cmd] + standard_dnf_args + dnf_args
975 bb.note('Running %s' % ' '.join(cmd)) 978 bb.note('Running %s' % ' '.join(cmd))
976 try: 979 try: