diff options
Diffstat (limited to 'meta/lib/oe/package_manager/rpm/__init__.py')
-rw-r--r-- | meta/lib/oe/package_manager/rpm/__init__.py | 47 |
1 files changed, 31 insertions, 16 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") |