From 138346b15fd3e8ccf4e7ae43686815a4f900f026 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 26 Mar 2008 09:14:27 +0000 Subject: teslab: add and activate by default --- BACKPORTS.txt | 2 ++ classes/testlab.bbclass | 65 ++++++++++++++++++++++++++++++++++++++++ conf/distro/include/angstrom.inc | 2 +- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 classes/testlab.bbclass diff --git a/BACKPORTS.txt b/BACKPORTS.txt index a6c5d713de..bccc4869b6 100644 --- a/BACKPORTS.txt +++ b/BACKPORTS.txt @@ -229,5 +229,7 @@ a6d2d41d484ef7827260add2c94d270077592a01 db_4.3.29: fix packaging QA a99dc9b34551aa3889d7057538bf2e37b0471af1 patch.bbclass: Show full path of a patch complicated : use autotools_stage_all for native packages +7712d9178e2d4268d697de3c404c8853aa202089 testlab: add it +552396a9dfe973c66350f15cdf75d1b55fc16adb " " diff --git a/classes/testlab.bbclass b/classes/testlab.bbclass new file mode 100644 index 0000000000..ea1e84dca1 --- /dev/null +++ b/classes/testlab.bbclass @@ -0,0 +1,65 @@ +# +# Performs various tests and analysises on images +# +# Copyright (C) 2007, 2008 Koen Kooi + +# 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 mtn certs to record this info into the scm +# * add test suite to run on the target device + + +# Needs 'dot', 'ipkg-cl' + +do_testlab() { +if [ -e ${IMAGE_ROOTFS}/etc/ipkg ] ; then + + TESTLAB_DIR="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-testlab" + mkdir -p ${TESTLAB_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 $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} list_installed | awk '{print $1}') ; do + ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Filename | awk -F: '{print $2}' >> ${TESTLAB_DIR}/installed-packages.txt + + for depends in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Depends) ; do + echo "$pkg OPP $depends;" | grep -v "(" | grep -v ")" | grep -v 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 $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Recom) ; do + echo "$pkg OPP $recommends [style=dotted];" | grep -v "(" | grep -v ")" | grep -v 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 + + 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") + done | grep "\.ipk" | sed -e s:${DEPLOY_DIR_IPK}::g | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${TESTLAB_DIR}/installed-package-sizes.txt +fi +} + +IMAGE_POSTPROCESS_COMMAND += " do_testlab ;" diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc index 3fc5406f15..bf2116f998 100644 --- a/conf/distro/include/angstrom.inc +++ b/conf/distro/include/angstrom.inc @@ -29,7 +29,7 @@ MAINTAINER = "Angstrom Developers " #use debian style naming #use multimachine buildrules -INHERIT += "debian multimachine sanity devshell angstrom-mirrors insane" +INHERIT += "debian multimachine sanity devshell angstrom-mirrors insane testlab" ANGSTROM_PKG_FORMAT ?= "ipk" require conf/distro/include/angstrom-package-${ANGSTROM_PKG_FORMAT}.inc -- cgit 1.2.3-korg