[OE-core] [DONT-MERGE] sstate: add hack to detect sstate archive compression failures

André Draszik git at andred.net
Mon Nov 12 12:56:53 UTC 2018


From: André Draszik <andre.draszik at jci.com>

Signed-off-by: André Draszik <andre.draszik at jci.com>
---
 meta/classes/sstate.bbclass | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index efb0096c70..b0ba07cacb 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -731,6 +731,8 @@ sstate_create_package () {
 
 	# Need to handle empty directories
 	if [ "$(ls -A)" ]; then
+	    ctr=0
+	    while [ $ctr -lt 2 ] ; do
 		set +e
 		tar $OPT -f $TFILE *
 		ret=$?
@@ -738,6 +740,33 @@ sstate_create_package () {
 			exit 1
 		fi
 		set -e
+
+		TDIR=`mktemp -d ${SSTATE_PKG}.extracted.XXXXXXXX`
+		tar -C $TDIR -xzf $TFILE
+		export TFILE
+		find $TDIR -type f -exec sh -ceu '
+			for c in "$@" ; do
+				if stat "$c" | grep -v "Size: 0" | grep -q "Blocks: 0" ; then
+					echo File $c in archive $TFILE is broken
+					echo "$TFILE -> $c" >> "$TFILE.broken"
+				fi
+			done
+		' _ '{}' +
+		rm -rf $TDIR
+		if [ ! -s "$TFILE.broken" ] ; then
+			if [ $ctr -ne 0 ] ; then
+				bbwarn "$TFILE created successfully on attempt # $ctr"
+			fi
+			break
+		fi
+		bbwarn "$TFILE is broken, retrying"
+		bbwarn "`cat $TFILE.broken`"
+		rm $TFILE.broken
+		ctr=$(expr $ctr + 1)
+	    done
+	    if [ $ctr -ge 2 ] ; then
+		bbfatal "Could not compress sstate"
+	    fi
 	else
 		tar $OPT --file=$TFILE --files-from=/dev/null
 	fi
-- 
2.19.1



More information about the Openembedded-core mailing list