<div dir="ltr">This breaks list_pkgs() for the RPM backend. Instead of returning a list of packages, rpm just says &quot;%dbpath is not defined&quot; (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">&lt;<a href="mailto:freesilicon@gmail.com" target="_blank">freesilicon@gmail.com</a>&gt;</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>
&#39;/var/lib/rpm&#39;, the final image did not contain any of the database<br>
files in the expected location. This commit takes into account the<br>
&#39;rpmlibdir&#39; variable set into &#39;rootfs_rpm.bbclass&#39;.<br>
<br>
</span>Changes since v4:<br>
    - Remove boolean in d.getVar() calls.<br>
<span class=""><br>
Signed-off-by: David Vincent &lt;<a href="mailto:freesilicon@gmail.com">freesilicon@gmail.com</a>&gt;<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(&#39;<wbr>PATH&#39;), &quot;rpm&quot;)<br>
-        self.image_rpmlib = os.path.join(self.rootfs_dir, &#39;var/lib/rpm&#39;)<br>
</span>+        self.rpm_libdir = self.d.getVar(&#39;rpmlibdir&#39;)<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, &#39;--root&#39;, self.rootfs_dir]<br>
-        cmd.extend([&#39;-D&#39;, &#39;_dbpath /var/lib/rpm&#39;])<br>
+        cmd.extend([&#39;-D&#39;, &#39;_dbpath&#39;, self.rpm_libdir])<br>
         cmd.extend([&#39;-qa&#39;, &#39;--qf&#39;, &#39;[%{NAME} %{ARCH} %{VERSION} %{PACKAGEORIGIN}\n]&#39;])<br>
<br>
         try:<br>
</span>@@ -683,7 +684,8 @@ class RpmPM(PackageManager):<br>
<span class="">         self.solution_manifest = self.d.expand(&#39;${T}/saved/%s_<wbr>solution&#39; %<br>
                                                self.task_name)<br>
         self.saved_rpmlib = self.d.expand(&#39;${T}/saved/%s&#39; % self.task_name)<br>
-        self.image_rpmlib = os.path.join(self.target_<wbr>rootfs, &#39;var/lib/rpm&#39;)<br>
</span>+        self.rpm_libdir = self.d.getVar(&#39;rpmlibdir&#39;)<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(&#39;<wbr>${T}/saved&#39;)):<br>
             bb.utils.mkdirhier(self.d.<wbr>expand(&#39;${T}/saved&#39;))<br>
</span>@@ -954,7 +956,7 @@ class RpmPM(PackageManager):<br>
<span class="">             open(db_config_dir, &#39;w+&#39;).write(DB_CONFIG_CONTENT)<br>
<br>
         # Create database so that smart doesn&#39;t complain (lazy init)<br>
-        cmd = [self.rpm_cmd, &#39;--root&#39;, self.target_rootfs, &#39;--dbpath&#39;, &#39;/var/lib/rpm&#39;, &#39;-qa&#39;]<br>
+        cmd = [self.rpm_cmd, &#39;--root&#39;, self.target_rootfs, &#39;--dbpath&#39;, self.rpm_libdir, &#39;-qa&#39;]<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(&#39;RPM_SIGN_<wbr>PACKAGES&#39;) == &#39;1&#39;:<br>
             pubkey_path = self.d.getVar(&#39;RPM_GPG_PUBKEY&#39;<wbr>)<br>
<span class="">-            cmd = [self.rpm_cmd, &#39;--root&#39;, self.target_rootfs, &#39;--dbpath&#39;, &#39;/var/lib/rpm&#39;, &#39;--import&#39;, pubkey_path]<br>
+            cmd = [self.rpm_cmd, &#39;--root&#39;, self.target_rootfs, &#39;--dbpath&#39;, self.rpm_libdir, &#39;--import&#39;, pubkey_path]<br>
             try:<br>
                 subprocess.check_output(cmd, stderr=subprocess.STDOUT)<br>
             except subprocess.CalledProcessError as e:<br>
                 bb.fatal(&quot;Import GPG key failed. Command &#39;%s&#39; &quot;<br>
                         &quot;returned %d:\n%s&quot; % (&#39; &#39;.join(cmd), e.returncode, e.output.decode(&quot;utf-8&quot;)))<br>
<br>
-<br>
         # Configure smart<br>
         bb.note(&quot;configuring Smart settings&quot;)<br>
         bb.utils.remove(os.path.join(<wbr>self.target_rootfs, &#39;var/lib/smart&#39;),<br>
                         True)<br>
         self._invoke_smart([&#39;config&#39;, &#39;--set&#39;, &#39;rpm-root=%s&#39; % self.target_rootfs])<br>
-        self._invoke_smart([&#39;config&#39;, &#39;--set&#39;, &#39;rpm-dbpath=/var/lib/rpm&#39;])<br>
+        self._invoke_smart([&#39;config&#39;, &#39;--set&#39;, &#39;rpm-dbpath=%s&#39; % self.rpm_libdir])<br>
         self._invoke_smart([&#39;config&#39;, &#39;--set&#39;, &#39;rpm-extra-macros._var=%s&#39; %<br>
</span>                            self.d.getVar(&#39;localstatedir&#39;)<wbr>])<br>
<span class="">         cmd = [&quot;config&quot;, &quot;--set&quot;, &quot;rpm-extra-macros._tmppath=/%<wbr>s/tmp&quot; % 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] + [&quot;-e&quot;, &quot;--nodeps&quot;, &quot;--root=%s&quot; %<br>
-                    self.target_rootfs, &quot;--dbpath=/var/lib/rpm&quot;,<br>
+                    self.target_rootfs, &quot;--dbpath=%s&quot; % self.rpm_libdir,<br>
                     &quot;--define=&#39;_cross_scriptlet_<wbr>wrapper %s&#39;&quot; %<br>
                     self.scriptlet_wrapper,<br>
                     &quot;--define=&#39;_tmppath /%s/tmp&#39;&quot; % 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(&#39;${sysconfdir}/<wbr>rpm-postinsts/&#39;) + new_pkg<br>
<br>
         cmd = self.rpm_cmd + &#39; -q --scripts --root &#39; + self.target_rootfs<br>
-        cmd += &#39; --dbpath=/var/lib/rpm &#39; + new_pkg<br>
+        cmd += &#39; --dbpath=%s &#39; %  self.rpm_libdir<br>
+        cmd += new_pkg<br>
         cmd += &#39; | sed -n -e &quot;/^postinstall scriptlet (using .*):$/,/^.* scriptlet (using .*):$/ {/.*/p}&quot;&#39;<br>
         cmd += &#39; | sed -e &quot;/postinstall scriptlet (using \(.*\)):$/d&quot;&#39;<br>
         cmd += &#39; -e &quot;/^.* scriptlet (using .*):$/d&quot; &gt; %s&#39; % saved_dir<br>
</span>@@ -1416,7 +1418,8 @@ class RpmPM(PackageManager):<br>
<span class="">     &#39;&#39;&#39;<br>
     def unlock_rpm_db(self):<br>
         # Remove rpm db lock files<br>
-        rpm_db_locks = glob.glob(&#39;%s/var/lib/rpm/__<wbr>db.*&#39; % self.target_rootfs)<br>
+        rpm_db_locks = glob.glob(&#39;%s%s/__db.*&#39; % (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(&#39;rpmlibdir&#39;)<br>
         rpm_pre_process_cmds = self.d.getVar(&#39;RPM_PREPROCESS_<wbr>COMMANDS&#39;)<br>
         rpm_post_process_cmds = self.d.getVar(&#39;RPM_<wbr>POSTPROCESS_COMMANDS&#39;)<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([&#39;/etc/<wbr>rpm&#39;, &#39;/var/lib/rpm&#39;, &#39;/var/lib/smart&#39;])<br>
+        self._setup_dbg_rootfs([&#39;/etc/<wbr>rpm&#39;, rpm_libdir, &#39;/var/lib/smart&#39;])<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>