[2/2,v2] package_manager: Use apt-ftparchive for deb packages

Submitted by Ricardo Ribalda Delgado on March 17, 2014, 9:30 a.m.


Message ID 1395048637-22413-2-git-send-email-ricardo.ribalda@gmail.com
State Accepted
Commit c9899a7605f15f7f1ae30c4624d53c7da825b00a
Headers show

Commit Message

Ricardo Ribalda Delgado March 17, 2014, 9:30 a.m.
Use apt-ftparchive to create a Release file compatible with SecureApt.

apt-ftparchive is also a more efficient replacement of

_64# time PSEUDO_UNLOAD=1 apt-ftparchive packages . >/tmp/kkk
real 0m26.873s
user 0m20.968s
sys 0m1.212s

_64# time PSEUDO_UNLOAD=1 dpkg-scanpackages . >/tmp/kkk
dpkg-scanpackages: info: Wrote 6022 entries to output Packages file.
real 0m59.721s
user 0m16.668s
sys 0m11.164s

apt-ftparchive is not compatible with libpseudo. The calls to ftw()
returns the path in absolute format instead of relative. This
wrong Packages and Release files.

d20227a958f6870137ce0e41b7b84307             1453

This is why it is called with PSEUDO_UNLOAD.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>

This v2 is a port of the previous patch (package_deb: Use apt-ftparchive) to master

This patch HAS NOT BEEN TESTED on master, just on dora. I do not have a working build
system for my platform with master.

 meta/lib/oe/package_manager.py | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

Patch hide | download patch | download mbox

diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 1279b50..ec96bb3 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -180,7 +180,7 @@  class DpkgIndexer(Indexer):
         if sdk_pkg_archs is not None:
             arch_list += sdk_pkg_archs.split()
-        dpkg_scanpackages = bb.utils.which(os.getenv('PATH'), "dpkg-scanpackages")
+        apt_ftparchive = bb.utils.which(os.getenv('PATH'), "apt-ftparchive")
         gzip = bb.utils.which(os.getenv('PATH'), "gzip")
         index_cmds = []
@@ -190,11 +190,17 @@  class DpkgIndexer(Indexer):
             if not os.path.isdir(arch_dir):
+            index_cmds.append("cd %s; PSEUDO_UNLOAD=1 %s packages > Packages" %
+                              (arch_dir, apt_ftparchive))
+            index_cmds.append("cd %s; %s Packages -c > Packages.gz" %
+                              (arch_dir, gzip))
             with open(os.path.join(arch_dir, "Release"), "w+") as release:
                 release.write("Label: %s" % arch)
-            index_cmds.append("cd %s; %s . | %s > Packages.gz" %
-                              (arch_dir, dpkg_scanpackages, gzip))
+            index_cmds.append("cd %s; PSEUDO_UNLOAD=1 %s release >> Release" %
+                              (arch_dir, apt_ftparchive))
             deb_dirs_found = True