[oe-commits] Laurentiu Palcu : rootfs.py, package_manager.py, sdk.py: Fix building from feeds feature for opkg

git at git.openembedded.org git at git.openembedded.org
Tue Feb 11 11:56:31 UTC 2014


Module: openembedded-core.git
Branch: master
Commit: 19c538f57c8fa7c566e88a6dbe13ea4826d4f26c
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=19c538f57c8fa7c566e88a6dbe13ea4826d4f26c

Author: Laurentiu Palcu <laurentiu.palcu at intel.com>
Date:   Wed Feb  5 11:08:34 2014 +0200

rootfs.py, package_manager.py, sdk.py: Fix building from feeds feature for opkg

When using opkg as the PM backend, one has the option to provide custom
feeds to create the rootfs from.

This commit:
 * fixes this in the refactored code;
 * moves the custom config creation code to python;
 * clean up the package-ipk.bbclass;

Signed-off-by: Laurentiu Palcu <laurentiu.palcu at intel.com>

---

 meta/classes/rootfs_ipk.bbclass | 31 +--------------------------
 meta/lib/oe/package_manager.py  | 47 +++++++++++++++++++++++++++++++++++++++--
 meta/lib/oe/rootfs.py           |  5 +++--
 meta/lib/oe/sdk.py              |  4 +++-
 4 files changed, 52 insertions(+), 35 deletions(-)

diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
index 9d63450..6d4f9fa 100644
--- a/meta/classes/rootfs_ipk.bbclass
+++ b/meta/classes/rootfs_ipk.bbclass
@@ -23,35 +23,6 @@ OPKGLIBDIR = "${localstatedir}/lib"
 
 MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg"
 
-ipk_insert_feed_uris () {
-
-	echo "Building from feeds activated!"
-
-	for line in ${IPK_FEED_URIS}
-	do
-		# strip leading and trailing spaces/tabs, then split into name and uri
-		line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`"
-		feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`"
-		feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`"
-
-		echo "Added $feed_name feed with URL $feed_uri"
-
-		# insert new feed-sources
-		echo "src/gz $feed_name $feed_uri" >> ${IPKGCONF_TARGET}
-	done
-
-	# Allow to use package deploy directory contents as quick devel-testing
-	# feed. This creates individual feed configs for each arch subdir of those
-	# specified as compatible for the current machine.
-	# NOTE: Development-helper feature, NOT a full-fledged feed.
-	if [ -n "${FEED_DEPLOYDIR_BASE_URI}" ]; then
-		for arch in ${PACKAGE_ARCHS}
-		do
-			echo "src/gz local-$arch ${FEED_DEPLOYDIR_BASE_URI}/$arch" >> ${IMAGE_ROOTFS}/etc/opkg/local-$arch-feed.conf
-	    done
-	fi
-}
-
 python () {
 
     if d.getVar('BUILD_IMAGES_FROM_FEEDS', True):
@@ -60,7 +31,7 @@ python () {
         flags = flags.replace("do_deploy", "")
         flags = flags.replace("do_populate_sysroot", "")
         d.setVarFlag('do_rootfs', 'recrdeptask', flags)
-        d.setVar('OPKG_PREPROCESS_COMMANDS', "ipk_insert_feed_uris")
+        d.setVar('OPKG_PREPROCESS_COMMANDS', "")
         d.setVar('OPKG_POSTPROCESS_COMMANDS', '')
 }
 
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index 969292c..d3e8a08 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -805,7 +805,10 @@ class OpkgPM(PackageManager):
 
         bb.utils.mkdirhier(self.opkg_dir)
 
-        self._create_config()
+        if (self.d.getVar('BUILD_IMAGES_FROM_FEEDS', True) or "") != "1":
+            self._create_config()
+        else:
+            self._create_custom_config()
 
     """
     This function will change a package's status in /var/lib/opkg/status file.
@@ -835,6 +838,45 @@ class OpkgPM(PackageManager):
 
         os.rename(status_file + ".tmp", status_file)
 
+    def _create_custom_config(self):
+        bb.note("Building from feeds activated!")
+
+        with open(self.config_file, "w+") as config_file:
+            priority = 1
+            for arch in self.pkg_archs.split():
+                config_file.write("arch %s %d\n" % (arch, priority))
+                priority += 5
+
+            for line in (self.d.getVar('IPK_FEED_URIS', True) or "").split():
+                feed_match = re.match("^[ \t]*(.*)##([^ \t]*)[ \t]*$", line)
+
+                if feed_match is not None:
+                    feed_name = feed_match.group(1)
+                    feed_uri = feed_match.group(2)
+
+                    bb.note("Add %s feed with URL %s" % (feed_name, feed_uri))
+
+                    config_file.write("src/gz %s %s\n" % (feed_name, feed_uri))
+
+            """
+            Allow to use package deploy directory contents as quick devel-testing
+            feed. This creates individual feed configs for each arch subdir of those
+            specified as compatible for the current machine.
+            NOTE: Development-helper feature, NOT a full-fledged feed.
+            """
+            if (self.d.getVar('FEED_DEPLOYDIR_BASE_URI', True) or "") != "":
+                for arch in self.pkg_archs.split():
+                    cfg_file_name = os.path.join(self.target_rootfs,
+                                                 self.d.getVar("sysconfdir", True),
+                                                 "opkg",
+                                                 "local-%s-feed.conf" % arch)
+
+                    with open(cfg_file_name, "w+") as cfg_file:
+                        cfg_file.write("src/gz local-%s %s/%s" %
+                                       arch,
+                                       self.d.getVar('FEED_DEPLOYDIR_BASE_URI', True),
+                                       arch)
+
     def _create_config(self):
         with open(self.config_file, "w+") as config_file:
             priority = 1
@@ -847,7 +889,8 @@ class OpkgPM(PackageManager):
             for arch in self.pkg_archs.split():
                 pkgs_dir = os.path.join(self.deploy_dir, arch)
                 if os.path.isdir(pkgs_dir):
-                    config_file.write("src oe-%s file:%s\n" % (arch, pkgs_dir))
+                    config_file.write("src oe-%s file:%s\n" %
+                                      (arch, pkgs_dir))
 
     def update(self):
         self.deploy_dir_lock()
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
index 95c2758..7455a86 100644
--- a/meta/lib/oe/rootfs.py
+++ b/meta/lib/oe/rootfs.py
@@ -534,8 +534,9 @@ class OpkgRootfs(Rootfs):
         opkg_post_process_cmds = self.d.getVar('OPKG_POSTPROCESS_COMMANDS', True)
         rootfs_post_install_cmds = self.d.getVar('ROOTFS_POSTINSTALL_COMMAND', True)
 
-        # update PM index files
-        self.pm.write_index()
+        # update PM index files, unless users provide their own feeds
+        if (self.d.getVar('BUILD_IMAGES_FROM_FEEDS', True) or "") != "1":
+            self.pm.write_index()
 
         execute_pre_post_process(self.d, opkg_pre_process_cmds)
 
diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py
index b54e516..518076e 100644
--- a/meta/lib/oe/sdk.py
+++ b/meta/lib/oe/sdk.py
@@ -216,7 +216,9 @@ class OpkgSdk(Sdk):
     def _populate_sysroot(self, pm, manifest):
         pkgs_to_install = manifest.parse_initial_manifest()
 
-        pm.write_index()
+        if (self.d.getVar('BUILD_IMAGES_FROM_FEEDS', True) or "") != "1":
+            pm.write_index()
+
         pm.update()
 
         for pkg_type in self.install_order:



More information about the Openembedded-commits mailing list