diff options
Diffstat (limited to 'meta/lib/oe/package_manager/rpm')
-rw-r--r-- | meta/lib/oe/package_manager/rpm/__init__.py | 47 | ||||
-rw-r--r-- | meta/lib/oe/package_manager/rpm/manifest.py | 2 | ||||
-rw-r--r-- | meta/lib/oe/package_manager/rpm/rootfs.py | 4 | ||||
-rw-r--r-- | meta/lib/oe/package_manager/rpm/sdk.py | 10 |
4 files changed, 45 insertions, 18 deletions
diff --git a/meta/lib/oe/package_manager/rpm/__init__.py b/meta/lib/oe/package_manager/rpm/__init__.py index 6df0092281..f40c880af4 100644 --- a/meta/lib/oe/package_manager/rpm/__init__.py +++ b/meta/lib/oe/package_manager/rpm/__init__.py | |||
@@ -1,4 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
2 | # SPDX-License-Identifier: GPL-2.0-only | 4 | # SPDX-License-Identifier: GPL-2.0-only |
3 | # | 5 | # |
4 | 6 | ||
@@ -96,11 +98,15 @@ class RpmPM(PackageManager): | |||
96 | archs = ["sdk_provides_dummy_target"] + archs | 98 | archs = ["sdk_provides_dummy_target"] + archs |
97 | confdir = "%s/%s" %(self.target_rootfs, "etc/dnf/vars/") | 99 | confdir = "%s/%s" %(self.target_rootfs, "etc/dnf/vars/") |
98 | bb.utils.mkdirhier(confdir) | 100 | bb.utils.mkdirhier(confdir) |
99 | open(confdir + "arch", 'w').write(":".join(archs)) | 101 | with open(confdir + "arch", 'w') as f: |
102 | f.write(":".join(archs)) | ||
103 | |||
100 | distro_codename = self.d.getVar('DISTRO_CODENAME') | 104 | distro_codename = self.d.getVar('DISTRO_CODENAME') |
101 | open(confdir + "releasever", 'w').write(distro_codename if distro_codename is not None else '') | 105 | with open(confdir + "releasever", 'w') as f: |
106 | f.write(distro_codename if distro_codename is not None else '') | ||
102 | 107 | ||
103 | open(oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"), 'w').write("") | 108 | with open(oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"), 'w') as f: |
109 | f.write("") | ||
104 | 110 | ||
105 | 111 | ||
106 | def _configure_rpm(self): | 112 | def _configure_rpm(self): |
@@ -110,14 +116,17 @@ class RpmPM(PackageManager): | |||
110 | platformconfdir = "%s/%s" %(self.target_rootfs, "etc/rpm/") | 116 | platformconfdir = "%s/%s" %(self.target_rootfs, "etc/rpm/") |
111 | rpmrcconfdir = "%s/%s" %(self.target_rootfs, "etc/") | 117 | rpmrcconfdir = "%s/%s" %(self.target_rootfs, "etc/") |
112 | bb.utils.mkdirhier(platformconfdir) | 118 | bb.utils.mkdirhier(platformconfdir) |
113 | open(platformconfdir + "platform", 'w').write("%s-pc-linux" % self.primary_arch) | 119 | with open(platformconfdir + "platform", 'w') as f: |
120 | f.write("%s-pc-linux" % self.primary_arch) | ||
114 | with open(rpmrcconfdir + "rpmrc", 'w') as f: | 121 | with open(rpmrcconfdir + "rpmrc", 'w') as f: |
115 | f.write("arch_compat: %s: %s\n" % (self.primary_arch, self.archs if len(self.archs) > 0 else self.primary_arch)) | 122 | f.write("arch_compat: %s: %s\n" % (self.primary_arch, self.archs if len(self.archs) > 0 else self.primary_arch)) |
116 | f.write("buildarch_compat: %s: noarch\n" % self.primary_arch) | 123 | f.write("buildarch_compat: %s: noarch\n" % self.primary_arch) |
117 | 124 | ||
118 | open(platformconfdir + "macros", 'w').write("%_transaction_color 7\n") | 125 | with open(platformconfdir + "macros", 'w') as f: |
126 | f.write("%_transaction_color 7\n") | ||
119 | if self.d.getVar('RPM_PREFER_ELF_ARCH'): | 127 | if self.d.getVar('RPM_PREFER_ELF_ARCH'): |
120 | open(platformconfdir + "macros", 'a').write("%%_prefer_color %s" % (self.d.getVar('RPM_PREFER_ELF_ARCH'))) | 128 | with open(platformconfdir + "macros", 'a') as f: |
129 | f.write("%%_prefer_color %s" % (self.d.getVar('RPM_PREFER_ELF_ARCH'))) | ||
121 | 130 | ||
122 | if self.d.getVar('RPM_SIGN_PACKAGES') == '1': | 131 | if self.d.getVar('RPM_SIGN_PACKAGES') == '1': |
123 | signer = get_signer(self.d, self.d.getVar('RPM_GPG_BACKEND')) | 132 | signer = get_signer(self.d, self.d.getVar('RPM_GPG_BACKEND')) |
@@ -164,13 +173,13 @@ class RpmPM(PackageManager): | |||
164 | repo_uri = uri + "/" + arch | 173 | repo_uri = uri + "/" + arch |
165 | repo_id = "oe-remote-repo" + "-".join(urlparse(repo_uri).path.split("/")) | 174 | repo_id = "oe-remote-repo" + "-".join(urlparse(repo_uri).path.split("/")) |
166 | repo_name = "OE Remote Repo:" + " ".join(urlparse(repo_uri).path.split("/")) | 175 | repo_name = "OE Remote Repo:" + " ".join(urlparse(repo_uri).path.split("/")) |
167 | open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'a').write( | 176 | with open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'a') as f: |
168 | "[%s]\nname=%s\nbaseurl=%s\n%s\n" % (repo_id, repo_name, repo_uri, gpg_opts)) | 177 | f.write("[%s]\nname=%s\nbaseurl=%s\n%s\n" % (repo_id, repo_name, repo_uri, gpg_opts)) |
169 | else: | 178 | else: |
170 | repo_name = "OE Remote Repo:" + " ".join(urlparse(uri).path.split("/")) | 179 | repo_name = "OE Remote Repo:" + " ".join(urlparse(uri).path.split("/")) |
171 | repo_uri = uri | 180 | repo_uri = uri |
172 | open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'w').write( | 181 | with open(oe.path.join(self.target_rootfs, "etc", "yum.repos.d", repo_base + ".repo"), 'w') as f: |
173 | "[%s]\nname=%s\nbaseurl=%s\n%s" % (repo_base, repo_name, repo_uri, gpg_opts)) | 182 | f.write("[%s]\nname=%s\nbaseurl=%s\n%s" % (repo_base, repo_name, repo_uri, gpg_opts)) |
174 | 183 | ||
175 | def _prepare_pkg_transaction(self): | 184 | def _prepare_pkg_transaction(self): |
176 | os.environ['D'] = self.target_rootfs | 185 | os.environ['D'] = self.target_rootfs |
@@ -181,7 +190,7 @@ class RpmPM(PackageManager): | |||
181 | os.environ['NATIVE_ROOT'] = self.d.getVar('STAGING_DIR_NATIVE') | 190 | os.environ['NATIVE_ROOT'] = self.d.getVar('STAGING_DIR_NATIVE') |
182 | 191 | ||
183 | 192 | ||
184 | def install(self, pkgs, attempt_only = False): | 193 | def install(self, pkgs, attempt_only=False, hard_depends_only=False): |
185 | if len(pkgs) == 0: | 194 | if len(pkgs) == 0: |
186 | return | 195 | return |
187 | self._prepare_pkg_transaction() | 196 | self._prepare_pkg_transaction() |
@@ -192,13 +201,16 @@ class RpmPM(PackageManager): | |||
192 | 201 | ||
193 | output = self._invoke_dnf((["--skip-broken"] if attempt_only else []) + | 202 | output = self._invoke_dnf((["--skip-broken"] if attempt_only else []) + |
194 | (["-x", ",".join(exclude_pkgs)] if len(exclude_pkgs) > 0 else []) + | 203 | (["-x", ",".join(exclude_pkgs)] if len(exclude_pkgs) > 0 else []) + |
195 | (["--setopt=install_weak_deps=False"] if self.d.getVar('NO_RECOMMENDATIONS') == "1" else []) + | 204 | (["--setopt=install_weak_deps=False"] if (hard_depends_only or self.d.getVar('NO_RECOMMENDATIONS') == "1") else []) + |
196 | (["--nogpgcheck"] if self.d.getVar('RPM_SIGN_PACKAGES') != '1' else ["--setopt=gpgcheck=True"]) + | 205 | (["--nogpgcheck"] if self.d.getVar('RPM_SIGN_PACKAGES') != '1' else ["--setopt=gpgcheck=True"]) + |
197 | ["install"] + | 206 | ["install"] + |
198 | pkgs) | 207 | pkgs) |
199 | 208 | ||
200 | failed_scriptlets_pkgnames = collections.OrderedDict() | 209 | failed_scriptlets_pkgnames = collections.OrderedDict() |
201 | for line in output.splitlines(): | 210 | for line in output.splitlines(): |
211 | if line.startswith("Error: Systemctl"): | ||
212 | bb.error(line) | ||
213 | |||
202 | if line.startswith("Error in POSTIN scriptlet in rpm package"): | 214 | if line.startswith("Error in POSTIN scriptlet in rpm package"): |
203 | failed_scriptlets_pkgnames[line.split()[-1]] = True | 215 | failed_scriptlets_pkgnames[line.split()[-1]] = True |
204 | 216 | ||
@@ -326,7 +338,8 @@ class RpmPM(PackageManager): | |||
326 | return e.output.decode("utf-8") | 338 | return e.output.decode("utf-8") |
327 | 339 | ||
328 | def dump_install_solution(self, pkgs): | 340 | def dump_install_solution(self, pkgs): |
329 | open(self.solution_manifest, 'w').write(" ".join(pkgs)) | 341 | with open(self.solution_manifest, 'w') as f: |
342 | f.write(" ".join(pkgs)) | ||
330 | return pkgs | 343 | return pkgs |
331 | 344 | ||
332 | def load_old_install_solution(self): | 345 | def load_old_install_solution(self): |
@@ -360,7 +373,8 @@ class RpmPM(PackageManager): | |||
360 | bb.utils.mkdirhier(target_path) | 373 | bb.utils.mkdirhier(target_path) |
361 | num = self._script_num_prefix(target_path) | 374 | num = self._script_num_prefix(target_path) |
362 | saved_script_name = oe.path.join(target_path, "%d-%s" % (num, pkg)) | 375 | saved_script_name = oe.path.join(target_path, "%d-%s" % (num, pkg)) |
363 | open(saved_script_name, 'w').write(output) | 376 | with open(saved_script_name, 'w') as f: |
377 | f.write(output) | ||
364 | os.chmod(saved_script_name, 0o755) | 378 | os.chmod(saved_script_name, 0o755) |
365 | 379 | ||
366 | def _handle_intercept_failure(self, registered_pkgs): | 380 | def _handle_intercept_failure(self, registered_pkgs): |
@@ -372,11 +386,12 @@ class RpmPM(PackageManager): | |||
372 | self.save_rpmpostinst(pkg) | 386 | self.save_rpmpostinst(pkg) |
373 | 387 | ||
374 | def extract(self, pkg): | 388 | def extract(self, pkg): |
375 | output = self._invoke_dnf(["repoquery", "--queryformat", "%{location}", pkg]) | 389 | output = self._invoke_dnf(["repoquery", "--location", pkg]) |
376 | pkg_name = output.splitlines()[-1] | 390 | pkg_name = output.splitlines()[-1] |
377 | if not pkg_name.endswith(".rpm"): | 391 | if not pkg_name.endswith(".rpm"): |
378 | bb.fatal("dnf could not find package %s in repository: %s" %(pkg, output)) | 392 | bb.fatal("dnf could not find package %s in repository: %s" %(pkg, output)) |
379 | pkg_path = oe.path.join(self.rpm_repo_dir, pkg_name) | 393 | # Strip file: prefix |
394 | pkg_path = pkg_name[5:] | ||
380 | 395 | ||
381 | cpio_cmd = bb.utils.which(os.getenv("PATH"), "cpio") | 396 | cpio_cmd = bb.utils.which(os.getenv("PATH"), "cpio") |
382 | rpm2cpio_cmd = bb.utils.which(os.getenv("PATH"), "rpm2cpio") | 397 | rpm2cpio_cmd = bb.utils.which(os.getenv("PATH"), "rpm2cpio") |
diff --git a/meta/lib/oe/package_manager/rpm/manifest.py b/meta/lib/oe/package_manager/rpm/manifest.py index e6604b301f..6ee7c329f0 100644 --- a/meta/lib/oe/package_manager/rpm/manifest.py +++ b/meta/lib/oe/package_manager/rpm/manifest.py | |||
@@ -1,4 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
2 | # SPDX-License-Identifier: GPL-2.0-only | 4 | # SPDX-License-Identifier: GPL-2.0-only |
3 | # | 5 | # |
4 | 6 | ||
diff --git a/meta/lib/oe/package_manager/rpm/rootfs.py b/meta/lib/oe/package_manager/rpm/rootfs.py index 00d07cd9cc..3ba5396320 100644 --- a/meta/lib/oe/package_manager/rpm/rootfs.py +++ b/meta/lib/oe/package_manager/rpm/rootfs.py | |||
@@ -1,4 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
2 | # SPDX-License-Identifier: GPL-2.0-only | 4 | # SPDX-License-Identifier: GPL-2.0-only |
3 | # | 5 | # |
4 | 6 | ||
@@ -108,7 +110,7 @@ class PkgRootfs(Rootfs): | |||
108 | if self.progress_reporter: | 110 | if self.progress_reporter: |
109 | self.progress_reporter.next_stage() | 111 | self.progress_reporter.next_stage() |
110 | 112 | ||
111 | self._setup_dbg_rootfs(['/etc', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf']) | 113 | self._setup_dbg_rootfs(['/etc/rpm', '/etc/rpmrc', '/etc/dnf', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf']) |
112 | 114 | ||
113 | execute_pre_post_process(self.d, rpm_post_process_cmds) | 115 | execute_pre_post_process(self.d, rpm_post_process_cmds) |
114 | 116 | ||
diff --git a/meta/lib/oe/package_manager/rpm/sdk.py b/meta/lib/oe/package_manager/rpm/sdk.py index c5f232431f..ea79fe050b 100644 --- a/meta/lib/oe/package_manager/rpm/sdk.py +++ b/meta/lib/oe/package_manager/rpm/sdk.py | |||
@@ -1,4 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
2 | # SPDX-License-Identifier: GPL-2.0-only | 4 | # SPDX-License-Identifier: GPL-2.0-only |
3 | # | 5 | # |
4 | 6 | ||
@@ -65,7 +67,12 @@ class PkgSdk(Sdk): | |||
65 | 67 | ||
66 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) | 68 | self.target_pm.install_complementary(self.d.getVar('SDKIMAGE_INSTALL_COMPLEMENTARY')) |
67 | 69 | ||
70 | env_bkp = os.environ.copy() | ||
71 | os.environ['PATH'] = self.d.expand("${COREBASE}/scripts/nativesdk-intercept") + \ | ||
72 | os.pathsep + os.environ["PATH"] | ||
73 | |||
68 | self.target_pm.run_intercepts(populate_sdk='target') | 74 | self.target_pm.run_intercepts(populate_sdk='target') |
75 | os.environ.update(env_bkp) | ||
69 | 76 | ||
70 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) | 77 | execute_pre_post_process(self.d, self.d.getVar("POPULATE_SDK_POST_TARGET_COMMAND")) |
71 | 78 | ||
@@ -110,5 +117,6 @@ class PkgSdk(Sdk): | |||
110 | for f in glob.glob(os.path.join(self.sdk_output, "etc", "rpm*")): | 117 | for f in glob.glob(os.path.join(self.sdk_output, "etc", "rpm*")): |
111 | self.movefile(f, native_sysconf_dir) | 118 | self.movefile(f, native_sysconf_dir) |
112 | for f in glob.glob(os.path.join(self.sdk_output, "etc", "dnf", "*")): | 119 | for f in glob.glob(os.path.join(self.sdk_output, "etc", "dnf", "*")): |
113 | self.movefile(f, native_sysconf_dir) | 120 | self.mkdirhier(native_sysconf_dir + "/dnf") |
121 | self.movefile(f, native_sysconf_dir + "/dnf") | ||
114 | self.remove(os.path.join(self.sdk_output, "etc"), True) | 122 | self.remove(os.path.join(self.sdk_output, "etc"), True) |