[oe-commits] Koen Kooi : testlab, blacklist bbclass: import from meta-angstrom

git version control git at git.openembedded.org
Mon May 16 19:01:39 UTC 2011


Module: meta-openembedded.git
Branch: master
Commit: 68c15845d087df0a6f66c58a9fd80548a9bb3a59
URL:    http://git.openembedded.org/?p=meta-openembedded.git&a=commit;h=68c15845d087df0a6f66c58a9fd80548a9bb3a59

Author: Koen Kooi <koen at dominion.thruhere.net>
Date:   Mon May 16 20:57:45 2011 +0200

testlab, blacklist bbclass: import from meta-angstrom

These are good for general use since other distros (SHR, SlugOS) are copying them into their layers nowadays. Let's stop this duplication bu moving them here.

Signed-off-by: Koen Kooi <koen at dominion.thruhere.net>

---

 meta-oe/classes/blacklist.bblass |   20 +++++++++
 meta-oe/classes/kernel.bbclass   |    3 +-
 meta-oe/classes/testlab.bbclass  |   83 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 105 insertions(+), 1 deletions(-)

diff --git a/meta-oe/classes/blacklist.bblass b/meta-oe/classes/blacklist.bblass
new file mode 100644
index 0000000..7bf4a73
--- /dev/null
+++ b/meta-oe/classes/blacklist.bblass
@@ -0,0 +1,20 @@
+# anonymous support class from angstrom
+# 
+# Features:
+#
+# * blacklist handling, set ANGSTROM_BLACKLIST_pn-blah = "message"
+#
+
+python () {
+    import bb
+
+    blacklist = bb.data.getVar("ANGSTROM_BLACKLIST", d, 1)
+    pkgnm = bb.data.getVar("PN", d, 1)
+    distro = bb.data.getVar("DISTRO", d, 1)
+
+    if blacklist:
+	bb.note("%s DOES NOT support %s because %s" % (distro,pkgnm, blacklist))
+        raise bb.parse.SkipPackage("%s DOES NOT support %s because %s" % (distro,pkgnm, blacklist))
+
+}
+
diff --git a/meta-oe/classes/kernel.bbclass b/meta-oe/classes/kernel.bbclass
index 9a80a1c..e1e8197 100644
--- a/meta-oe/classes/kernel.bbclass
+++ b/meta-oe/classes/kernel.bbclass
@@ -159,7 +159,8 @@ kernel_do_install() {
 	# we clean the scripts dir while leaving the generated config
 	# and include files.
 	#
-	oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
+	find $kerneldir -name "*.o" -delete
+	#oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
 	make -C $kerneldir _mrproper_scripts
 	find $kerneldir -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \;
 	find $kerneldir/Documentation -name "*.txt" -exec rm '{}' \;
diff --git a/meta-oe/classes/testlab.bbclass b/meta-oe/classes/testlab.bbclass
new file mode 100644
index 0000000..6581ec3
--- /dev/null
+++ b/meta-oe/classes/testlab.bbclass
@@ -0,0 +1,83 @@
+#
+# Performs various tests and analysises on images
+#
+# Copyright (C) 2007, 2008 Koen Kooi <koen at openembedded.org> 
+
+# The current features are:
+# 1) dump a list of installed packages
+# 2) dump a list of sizes of installed packages
+# 3) dependency graphs of installed packages
+
+# See 
+#  * http://dominion.thruhere.net/koen/cms/the-testlab-strikes-again
+#  * http://dominion.thruhere.net/koen/cms/package-relations-inside-images
+#  for use cases
+
+# TODO: 
+# * log information to a server for safekeeping
+# * use git notes to record this info into the scm
+# * add test suite to run on the target device 
+
+
+# Needs 'dot', 'opkg-cl'
+
+do_testlab() {
+if [ -e  ${IMAGE_ROOTFS}/etc/opkg ] && [ "${ONLINE_PACKAGE_MANAGEMENT}" = "full" ] ; then
+
+	IPKG_TMP_DIR="${IMAGE_ROOTFS}-tmp"
+	IPKG_ARGS="-f ${STAGING_ETCDIR_NATIVE}/opkg.conf -o ${IMAGE_ROOTFS} -t ${IPKG_TMP_DIR}"
+
+	TESTLAB_DIR="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-testlab"
+        mkdir -p ${TESTLAB_DIR}/
+        mkdir -p ${IPKG_TMP_DIR}/
+	ls -laR ${IMAGE_ROOTFS} > ${TESTLAB_DIR}/files-in-image.txt 	
+     
+	echo > ${TESTLAB_DIR}/installed-packages.txt
+	echo -e "digraph depends {\n    node [shape=plaintext]" > ${TESTLAB_DIR}/depends.dot
+
+	for pkg in $(opkg-cl ${IPKG_ARGS} list_installed | awk '{print $1}') ; do 
+		opkg-cl ${IPKG_ARGS} info $pkg | grep -B 7 -A 7 "^Status.* \(\(installed\)\|\(unpacked\)\)" | awk '/^Package/ {printf $2"_"} /^Version/ {printf $2"_"} /^Archi/ {print $2".ipk"}'  >> ${TESTLAB_DIR}/installed-packages.txt
+
+    		for depends in $(opkg-cl ${IPKG_ARGS} info $pkg | grep ^Depends) ; do 
+        		echo "$pkg OPP $depends;" | grep -v "(" | grep -v ")" | grep -v "$pkg OPP Depends" | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot
+    		done
+    		
+		for recommends in $(opkg-cl ${IPKG_ARGS} info $pkg | grep ^Recom) ; do
+        		echo "$pkg OPP $recommends [style=dotted];" | grep -v "(" | grep -v ")" | grep -v "$pkg OPP Recom" | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot
+    		done
+	done
+
+	echo "}" >>  ${TESTLAB_DIR}/depends.dot
+	rm -rf ${IPKG_TMP_DIR}
+	
+	grep -v kernel_2 ${TESTLAB_DIR}/depends.dot | grep -v kernel_image > ${TESTLAB_DIR}/depends-nokernel.dot
+	grep -v libc6 ${TESTLAB_DIR}/depends-nokernel.dot | grep -v libgcc > ${TESTLAB_DIR}/depends-nokernel-nolibc.dot
+	grep -v update_ ${TESTLAB_DIR}/depends-nokernel-nolibc.dot > ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot
+        grep -v kernel_module ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot > ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate-nomodules.dot
+
+	#dot has some library troubles when run under fakeroot, uncomment at your own risk
+	#dot -Tpng -o ${TESTLAB_DIR}/image-dependencies.png  ${TESTLAB_DIR}/depends.dot
+	#dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc.png ${TESTLAB_DIR}/depends-nokernel-nolibc.dot
+	#dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc-noupdate.png ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot
+	#dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc-noupdate-nomodules.png ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate-nomodules.dot
+
+	for file in $(cat ${TESTLAB_DIR}/installed-packages.txt) ; do 
+     		du -k $(find ${DEPLOY_DIR_IPK} -name "$file") | head -n1
+	done | grep "\.ipk" | sed -e s:${DEPLOY_DIR_IPK}::g | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${TESTLAB_DIR}/installed-package-sizes.txt
+
+	# Log results to a git controlled directory structure than can be pushed to a remote location
+	if [ "${TESTLABLOG}" = "remote" ] && [ -n "${TESTLABREMOTEDIR}" ] ; then
+		TESTLABLOGDIR="${MACHINE_ARCH}/${IMAGE_BASENAME}"
+		mkdir -p ${TESTLABREMOTEDIR}/${TESTLABLOGDIR}
+		cp ${TESTLAB_DIR}/*package* ${TESTLAB_DIR}/depends.dot ${TESTLABREMOTEDIR}/${TESTLABLOGDIR}
+		# force change to record builds where the testlab contents didn't change, but other things (e.g. git rev) did
+		echo "${MACHINE}: ${IMAGE_BASENAME} configured for ${DISTRO} ${DISTRO_VERSION} using branch ${METADATA_BRANCH} and revision ${METADATA_REVISION} " > ${TESTLABREMOTEDIR}/${TESTLABLOGDIR}/build-id
+		# This runs inside fakeroot, so the git author is listed as root (or whatever root configured it to be) :(
+		( cd ${TESTLABREMOTEDIR}/
+		  git add ${TESTLABLOGDIR}/*
+		  git commit ${TESTLABLOGDIR}/ -m "${MACHINE}: ${IMAGE_BASENAME} configured for ${DISTRO} ${DISTRO_VERSION} using branch ${METADATA_BRANCH} and revision ${METADATA_REVISION}" --author "testlab <testlab@${DISTRO}>" || true)
+	fi
+fi
+}
+
+IMAGE_POSTPROCESS_COMMAND += "  do_testlab ;"





More information about the Openembedded-commits mailing list