<div dir="ltr">This breaks list_pkgs() for the RPM backend. Instead of returning a list of packages, rpm just says "%dbpath is not defined" (or words to that effect, as the log disappeared in 100 pages of errors).<div><br></div><div>Ross</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 20 December 2016 at 09:51, David Vincent <span dir="ltr"><<a href="mailto:freesilicon@gmail.com" target="_blank">freesilicon@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">When using a custom RPM data directory instead of the default dir<br>
'/var/lib/rpm', the final image did not contain any of the database<br>
files in the expected location. This commit takes into account the<br>
'rpmlibdir' variable set into 'rootfs_rpm.bbclass'.<br>
<br>
</span>Changes since v4:<br>
- Remove boolean in d.getVar() calls.<br>
<span class=""><br>
Signed-off-by: David Vincent <<a href="mailto:freesilicon@gmail.com">freesilicon@gmail.com</a>><br>
---<br>
meta/lib/oe/package_manager.py | 23 +++++++++++++----------<br>
meta/lib/oe/rootfs.py | 3 ++-<br>
2 files changed, 15 insertions(+), 11 deletions(-)<br>
<br>
diff --git a/meta/lib/oe/package_manager.<wbr>py b/meta/lib/oe/package_manager.<wbr>py<br>
</span>index e557473999..4299220eec 100644<br>
--- a/meta/lib/oe/package_manager.<wbr>py<br>
+++ b/meta/lib/oe/package_manager.<wbr>py<br>
@@ -356,7 +356,8 @@ class RpmPkgsList(PkgsList):<br>
<span class=""> super(RpmPkgsList, self).__init__(d, rootfs_dir)<br>
<br>
self.rpm_cmd = bb.utils.which(os.getenv('<wbr>PATH'), "rpm")<br>
- self.image_rpmlib = os.path.join(self.rootfs_dir, 'var/lib/rpm')<br>
</span>+ self.rpm_libdir = self.d.getVar('rpmlibdir')<br>
<span class="">+ self.image_rpmlib = os.path.join(self.rootfs_dir, self.rpm_libdir[1:])<br>
<br>
self.ml_prefix_list, self.ml_os_list = \<br>
RpmIndexer(d, rootfs_dir).get_ml_prefix_and_<wbr>os_list(arch_var, os_var)<br>
</span>@@ -416,7 +417,7 @@ class RpmPkgsList(PkgsList):<br>
<span class=""><br>
def list_pkgs(self):<br>
cmd = [self.rpm_cmd, '--root', self.rootfs_dir]<br>
- cmd.extend(['-D', '_dbpath /var/lib/rpm'])<br>
+ cmd.extend(['-D', '_dbpath', self.rpm_libdir])<br>
cmd.extend(['-qa', '--qf', '[%{NAME} %{ARCH} %{VERSION} %{PACKAGEORIGIN}\n]'])<br>
<br>
try:<br>
</span>@@ -683,7 +684,8 @@ class RpmPM(PackageManager):<br>
<span class=""> self.solution_manifest = self.d.expand('${T}/saved/%s_<wbr>solution' %<br>
self.task_name)<br>
self.saved_rpmlib = self.d.expand('${T}/saved/%s' % self.task_name)<br>
- self.image_rpmlib = os.path.join(self.target_<wbr>rootfs, 'var/lib/rpm')<br>
</span>+ self.rpm_libdir = self.d.getVar('rpmlibdir')<br>
<span class="">+ self.image_rpmlib = os.path.join(self.target_<wbr>rootfs, self.rpm_libdir[1:])<br>
<br>
if not os.path.exists(self.d.expand('<wbr>${T}/saved')):<br>
bb.utils.mkdirhier(self.d.<wbr>expand('${T}/saved'))<br>
</span>@@ -954,7 +956,7 @@ class RpmPM(PackageManager):<br>
<span class=""> open(db_config_dir, 'w+').write(DB_CONFIG_CONTENT)<br>
<br>
# Create database so that smart doesn't complain (lazy init)<br>
- cmd = [self.rpm_cmd, '--root', self.target_rootfs, '--dbpath', '/var/lib/rpm', '-qa']<br>
+ cmd = [self.rpm_cmd, '--root', self.target_rootfs, '--dbpath', self.rpm_libdir, '-qa']<br>
try:<br>
subprocess.check_output(cmd, stderr=subprocess.STDOUT)<br>
except subprocess.CalledProcessError as e:<br>
</span>@@ -963,20 +965,19 @@ class RpmPM(PackageManager):<br>
<span class=""> # Import GPG key to RPM database of the target system<br>
</span> if self.d.getVar('RPM_SIGN_<wbr>PACKAGES') == '1':<br>
pubkey_path = self.d.getVar('RPM_GPG_PUBKEY'<wbr>)<br>
<span class="">- cmd = [self.rpm_cmd, '--root', self.target_rootfs, '--dbpath', '/var/lib/rpm', '--import', pubkey_path]<br>
+ cmd = [self.rpm_cmd, '--root', self.target_rootfs, '--dbpath', self.rpm_libdir, '--import', pubkey_path]<br>
try:<br>
subprocess.check_output(cmd, stderr=subprocess.STDOUT)<br>
except subprocess.CalledProcessError as e:<br>
bb.fatal("Import GPG key failed. Command '%s' "<br>
"returned %d:\n%s" % (' '.join(cmd), e.returncode, e.output.decode("utf-8")))<br>
<br>
-<br>
# Configure smart<br>
bb.note("configuring Smart settings")<br>
bb.utils.remove(os.path.join(<wbr>self.target_rootfs, 'var/lib/smart'),<br>
True)<br>
self._invoke_smart(['config', '--set', 'rpm-root=%s' % self.target_rootfs])<br>
- self._invoke_smart(['config', '--set', 'rpm-dbpath=/var/lib/rpm'])<br>
+ self._invoke_smart(['config', '--set', 'rpm-dbpath=%s' % self.rpm_libdir])<br>
self._invoke_smart(['config', '--set', 'rpm-extra-macros._var=%s' %<br>
</span> self.d.getVar('localstatedir')<wbr>])<br>
<span class=""> cmd = ["config", "--set", "rpm-extra-macros._tmppath=/%<wbr>s/tmp" % self.install_dir_name]<br>
</span>@@ -1236,7 +1237,7 @@ class RpmPM(PackageManager):<br>
<span class=""><br>
if not with_dependencies:<br>
cmd = [self.rpm_cmd] + ["-e", "--nodeps", "--root=%s" %<br>
- self.target_rootfs, "--dbpath=/var/lib/rpm",<br>
+ self.target_rootfs, "--dbpath=%s" % self.rpm_libdir,<br>
"--define='_cross_scriptlet_<wbr>wrapper %s'" %<br>
self.scriptlet_wrapper,<br>
"--define='_tmppath /%s/tmp'" % self.install_dir_name] + pkgs<br>
</span>@@ -1384,7 +1385,8 @@ class RpmPM(PackageManager):<br>
<span class=""> saved_dir = self.target_rootfs + self.d.expand('${sysconfdir}/<wbr>rpm-postinsts/') + new_pkg<br>
<br>
cmd = self.rpm_cmd + ' -q --scripts --root ' + self.target_rootfs<br>
- cmd += ' --dbpath=/var/lib/rpm ' + new_pkg<br>
+ cmd += ' --dbpath=%s ' % self.rpm_libdir<br>
+ cmd += new_pkg<br>
cmd += ' | sed -n -e "/^postinstall scriptlet (using .*):$/,/^.* scriptlet (using .*):$/ {/.*/p}"'<br>
cmd += ' | sed -e "/postinstall scriptlet (using \(.*\)):$/d"'<br>
cmd += ' -e "/^.* scriptlet (using .*):$/d" > %s' % saved_dir<br>
</span>@@ -1416,7 +1418,8 @@ class RpmPM(PackageManager):<br>
<span class=""> '''<br>
def unlock_rpm_db(self):<br>
# Remove rpm db lock files<br>
- rpm_db_locks = glob.glob('%s/var/lib/rpm/__<wbr>db.*' % self.target_rootfs)<br>
+ rpm_db_locks = glob.glob('%s%s/__db.*' % (self.target_rootfs,<br>
+ self.rpm_libdir))<br>
for f in rpm_db_locks:<br>
bb.utils.remove(f, True)<br>
<br>
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py<br>
</span>index d9a473006a..8730025816 100644<br>
--- a/meta/lib/oe/rootfs.py<br>
+++ b/meta/lib/oe/rootfs.py<br>
@@ -429,6 +429,7 @@ class RpmRootfs(Rootfs):<br>
<span class=""><br>
def _create(self):<br>
pkgs_to_install = self.manifest.parse_initial_<wbr>manifest()<br>
</span>+ rpm_libdir = self.d.getVar('rpmlibdir')<br>
rpm_pre_process_cmds = self.d.getVar('RPM_PREPROCESS_<wbr>COMMANDS')<br>
rpm_post_process_cmds = self.d.getVar('RPM_<wbr>POSTPROCESS_COMMANDS')<br>
<br>
@@ -476,7 +477,7 @@ class RpmRootfs(Rootfs):<br>
<div class="HOEnZb"><div class="h5"> if self.progress_reporter:<br>
self.progress_reporter.next_<wbr>stage()<br>
<br>
- self._setup_dbg_rootfs(['/etc/<wbr>rpm', '/var/lib/rpm', '/var/lib/smart'])<br>
+ self._setup_dbg_rootfs(['/etc/<wbr>rpm', rpm_libdir, '/var/lib/smart'])<br>
<br>
execute_pre_post_process(self.<wbr>d, rpm_post_process_cmds)<br>
<br>
--<br>
2.11.0<br>
<br>
</div></div></blockquote></div><br></div>