diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-11-15 11:28:11 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-11-16 11:46:07 +0000 |
commit | e2af21d11934b3d2aad737f13117effe3654b0c8 (patch) | |
tree | 30940a6fe40056378f9679f8f800272b29f25467 /meta | |
parent | f1d0b6d296cd9dadd6a0edd40d87b71fcf87949d (diff) | |
download | poky-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.py | 13 |
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 | ||
321 | class RpmPkgsList(PkgsList): | 321 | class 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 | ||
325 | class OpkgPkgsList(PkgsList): | 325 | class 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: |