[Qa-jenkins-scm] [jenkins.debian.net] 01/01: reproducible: add 'packages which need to be fixed in testing' and 'packages modified in our toolchain in experimental' to dashboard

Holger Levsen holger at moszumanska.debian.org
Fri Jun 12 11:36:06 UTC 2015


This is an automated email from the git hooks/post-receive script.

holger pushed a commit to branch master
in repository jenkins.debian.net.

commit f149915a3dfc6fb8908d7d8be4f0f7900f3fdb66
Author: Holger Levsen <holger at layer-acht.org>
Date:   Fri Jun 12 13:35:34 2015 +0200

    reproducible: add 'packages which need to be fixed in testing' and 'packages modified in our toolchain in experimental' to dashboard
---
 bin/reproducible_html_graphs.sh                |   6 +
 bin/reproducible_html_repository_comparison.sh |   5 +
 bin/reproducible_openwrt.sh                    | 259 +++++++++++++++++++++++++
 3 files changed, 270 insertions(+)

diff --git a/bin/reproducible_html_graphs.sh b/bin/reproducible_html_graphs.sh
index 157a470..5f84573 100755
--- a/bin/reproducible_html_graphs.sh
+++ b/bin/reproducible_html_graphs.sh
@@ -583,12 +583,18 @@ create_main_stats_page() {
 	RESULT=$(sqlite3 -init ${INIT} ${PACKAGES_DB} "SELECT COUNT(*) FROM (SELECT s.id FROM sources AS s JOIN results AS r ON r.package_id=s.id WHERE r.status='FTBFS' AND s.id NOT IN (SELECT package_id FROM notes) AND s.suite='$SUITE' AND s.architecture='$ARCH')")
 	write_page "<tr><td>  - failing to build</a></td><td>$RESULT / $(echo "scale=1 ; ($RESULT*100/$COUNT_TOTAL)" | bc)%</td></tr>"
 	write_page "<tr><td>packages in $SUITE which need to be fixed</td><td>$(echo $COUNT_BAD + $COUNT_UGLY |bc) / $(echo $PERCENT_BAD + $PERCENT_UGLY|bc)%</td></tr>"
+	SUITE="testing"
+	gather_suite_stats
+	write_page "<tr><td>  - in $SUITE</td><td>$(echo $COUNT_BAD + $COUNT_UGLY |bc) / $(echo $PERCENT_BAD + $PERCENT_UGLY|bc)%</td></tr>"
+	SUITE="unstable"
 	if [ -f ${NOTES_GIT_PATH}/packages.yml ] && [ -f ${NOTES_GIT_PATH}/issues.yml ] ; then
 		write_page "<tr><td>committers to <a href=\"https://anonscm.debian.org/cgit/reproducible/notes.git\" target=\"_parent\">notes.git</a> (in the last three months)</td><td>$(cd ${NOTES_GIT_PATH} ; git log --since="3 months ago"|grep Author|sort -u |wc -l)</td></tr>"
 		write_page "<tr><td>committers to notes.git (in total)</td><td>$(cd ${NOTES_GIT_PATH} ; git log |grep Author|sort -u |wc -l)</td></tr>"
 	fi
 	RESULT=$(cat /srv/reproducible-results/modified_in_sid.txt || echo "unknown")	# written by reproducible_html_repository_comparison.sh
 	write_page "<tr><td>packages <a href=\"/index_repositories.html\">modified in our toolchain</a> (in unstable)</td><td>$(echo $RESULT)</td></tr>"
+	RESULT=$(cat /srv/reproducible-results/modified_in_exp.txt || echo "unknown")	# written by reproducible_html_repository_comparison.sh
+	write_page "<tr><td>  - (in experimental)</td><td>$(echo $RESULT)</td></tr>"
 	write_page "</table>"
 	# write bugs with usertags table
 	write_usertag_table
diff --git a/bin/reproducible_html_repository_comparison.sh b/bin/reproducible_html_repository_comparison.sh
index 22aebe4..4b2675c 100755
--- a/bin/reproducible_html_repository_comparison.sh
+++ b/bin/reproducible_html_repository_comparison.sh
@@ -19,6 +19,7 @@ TMPFILE=$(mktemp)
 TMP2FILE=$(mktemp)
 
 MODIFIED_IN_SID=0
+MODIFIED_IN_EXP=0
 
 echo "$(date) - starting to write $PAGE page."
 write_page_header $VIEW "Comparison between the reproducible builds apt repository and regular Debian suites"
@@ -164,6 +165,9 @@ for PKG in $SOURCES ; do
 	if ! $OBSOLETE_IN_SID ; then
 		let "MODIFIED_IN_SID+=1"
 	fi
+	if ! $OBSOLETE_IN_EXP ; then
+		let "MODIFIED_IN_EXP+=1"
+	fi
 	write_page " </td>"
 	write_page " <td><a href=\"https://tracker.debian.org/pkg/$PKG\">PTS</a></td>"
 	URL="https://bugs.debian.org/cgi-bin/pkgreport.cgi?src=$PKG&users=reproducible-builds@lists.alioth.debian.org&archive=both"
@@ -183,3 +187,4 @@ rm $TMPFILE $TMP2FILE
 write_page_footer
 publish_page
 echo "$MODIFIED_IN_SID" > /srv/reproducible-results/modified_in_sid.txt
+echo "$MODIFIED_IN_EXP" > /srv/reproducible-results/modified_in_exp.txt
diff --git a/bin/reproducible_openwrt.sh b/bin/reproducible_openwrt.sh
new file mode 100755
index 0000000..322c5e3
--- /dev/null
+++ b/bin/reproducible_openwrt.sh
@@ -0,0 +1,259 @@
+#!/bin/bash
+
+# Copyright 2014-2015 Holger Levsen <holger at layer-acht.org>
+#         © 2015 Mattia Rizzolo <mattia at mapreri.org>
+# released under the GPLv=2
+
+DEBUG=true
+. /srv/jenkins/bin/common-functions.sh
+common_init "$@"
+
+# common code defining db access
+. /srv/jenkins/bin/reproducible_common.sh
+set -e
+
+cleanup_tmpdir() {
+	cd
+	rm -r $TMPDIR
+}
+
+create_results_dirs() {
+	mkdir -p $BASE/openwrt/dbd
+}
+
+call_debbindiff() {
+	local TMPLOG=(mktemp --tmpdir=$TMPDIR)
+	local msg=""
+	set +e
+	( timeout $TIMEOUT schroot \
+		--directory $TMPDIR \
+		-c source:jenkins-reproducible-${DBDSUITE}-debbindiff \
+		debbindiff -- \
+			--html $TMPDIR/$1.html \
+			$TMPDIR/b1/$1/openwrt.rom \
+			$TMPDIR/b2/$1/openwrt.rom 2>&1 \
+	) 2>&1 >> $TMPLOG
+	RESULT=$?
+	if ! "$DEBUG" ; then set +x ; fi
+	set -e
+	cat $TMPLOG # print dbd output
+	rm -f $TMPLOG
+	case $RESULT in
+		0)	echo "$(date -u) - $1/openwrt.rom is reproducible, yay!"
+			;;
+		1)
+			echo "$(date -u) - $DBDVERSION found issues, please investigate $1/openwrt.rom"
+			;;
+		2)
+			msg="$(date -u) - $DBDVERSION had trouble comparing the two builds. Please investigate $1/openwrt.rom"
+			;;
+		124)
+			if [ ! -s $TMPDIR/$1.html ] ; then
+				msg="$(date -u) - $DBDVERSION produced no output for $1/openwrt.rom and was killed after running into timeout after ${TIMEOUT}..."
+			else
+				msg="$DBDVERSION was killed after running into timeout after $TIMEOUT, but there is still $TMPDIR/$1.html"
+			fi
+			;;
+		*)
+			msg="$(date -u) - Something weird happened when running $DBDVERSION on $1/openwrt.rom (which exited with $RESULT) and I don't know how to handle it."
+			;;
+	esac
+	if [ ! -z $msg ] ; then
+		echo $msg | tee -a $TMPDIR/$1.html
+	fi
+}
+
+#
+# main
+#
+
+TMPDIR=$(mktemp --tmpdir=/srv/reproducible-results -d)  # where everything actually happens
+trap cleanup_tmpdir INT TERM EXIT
+cd $TMPDIR
+
+DATE=$(date -u +'%Y-%m-%d')
+START=$(date +'%s')
+mkdir b1 b2
+
+echo "============================================================================="
+echo "$(date -u) - Cloning the OpenWRT git repository now."
+echo "============================================================================="
+git clone git://git.openwrt.org/openwrt.git
+cd openwrt
+OPENWRT="$(git log -1)"
+OPENWRT_VERSION=$(git describe -always)
+echo "This is openwrt $OPENWRT_VERSION."
+echo
+git log -1
+
+echo "============================================================================="
+echo "$(date -u) - Building the toolchain now."
+echo "============================================================================="
+make defconfig
+make -j $NUM_CPU tools/install
+
+#
+# create html about toolchain used
+#
+TOOLCHAIN_HTML=$(mktemp)
+echo "<table><tr><th>Debian $(cat /etc/debian_version) package on $(dpkg --print-architecture)</th><th>installed version</th></tr>" > $TOOLCHAIN_HTML
+for i in gcc binutils bzip2 flex python perl make findutils grep diff unzip gawk util-linux zlib1g-dev libc6-dev git subversion ; do
+	echo " <tr><td>$i</td><td>" >> $TOOLCHAIN_HTML
+	dpkg -s $i|grep '^Version'|cut -d " " -f2 >> $TOOLCHAIN_HTML
+	echo " </td></tr>" >> $TOOLCHAIN_HTML
+done
+echo "</table>" >> $TOOLCHAIN_HTML
+cd ../../..
+
+echo "============================================================================="
+echo "$(date -u) - Building openwrt ${OPENWRT_VERSION} images now - first build run."
+echo "============================================================================="
+export TZ="/usr/share/zoneinfo/Etc/GMT+12"
+# actually build everything
+nice ionice -c 3 \
+	make -j $NUM_CPU target/compile
+nice ionice -c 3 \
+	make -j $NUM_CPU package/cleanup
+nice ionice -c 3 \
+	make -j $NUM_CPU package/compile
+
+cd openwrt-builds
+for i in * ; do
+	# abuild and sharedutils are build results but not the results we are looking for...
+	if [ "$i" != "abuild" ] && [ "$i" != "sharedutils" ] ; then
+		mkdir $TMPDIR/b1/$i
+		if [ -f $i/openwrt.rom ] ; then
+			cp -p $i/openwrt.rom $TMPDIR/b1/$i/
+		fi
+	fi
+done
+cd ..
+rm openwrt-builds -rf
+
+echo "============================================================================="
+echo "$(date -u) - Building openwrt images now - second build run."
+echo "============================================================================="
+export TZ="/usr/share/zoneinfo/Etc/GMT-14"
+export LANG="fr_CH.UTF-8"
+export LC_ALL="fr_CH.UTF-8"
+export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path"
+export CAPTURE_ENVIRONMENT="I capture the environment"
+umask 0002
+# use allmost all cores for second build
+NEW_NUM_CPU=$(echo $NUM_CPU-1|bc)
+nice ionice -c 3 \
+	linux64 --uname-2.6 \
+		make -j $NEW_NUM_CPU target/compile
+nice ionice -c 3 \
+	linux64 --uname-2.6 \
+		make -j $NEW_NUM_CPU package/cleanup
+nice ionice -c 3 \
+	linux64 --uname-2.6 \
+		make -j $NEW_NUM_CPU package/compile
+
+# reset environment to default values again
+export LANG="en_GB.UTF-8"
+unset LC_ALL
+export TZ="/usr/share/zoneinfo/UTC"
+export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:"
+umask 0022
+
+cd openwrt-builds
+for i in * ; do
+	if [ -f $i/openwrt.rom ] ; then
+		mkdir $TMPDIR/b2/$i
+		cp -p $i/openwrt.rom $TMPDIR/b2/$i/
+	fi
+done
+cd ..
+rm openwrt-builds -r
+
+# run debbindiff on the results
+TIMEOUT="30m"
+DBDSUITE="unstable"
+DBDVERSION="$(schroot --directory /tmp -c source:jenkins-reproducible-${DBDSUITE}-debbindiff debbindiff -- --version 2>&1)"
+echo "============================================================================="
+echo "$(date -u) - Running $DBDVERSION on openwrt images now"
+echo "============================================================================="
+ROMS_HTML=$(mktemp)
+echo "       <ul>" > $ROMS_HTML
+BAD_ROMS=0
+GOOD_ROMS=0
+ALL_ROMS=0
+create_results_dirs
+cd $TMPDIR/b1
+for i in * ; do
+	let ALL_ROMS+=1
+	if [ -f $i/openwrt.rom ] ; then
+		call_debbindiff $i
+		SIZE="$(du -h -b $i/openwrt.rom | cut -f1)"
+		SIZE="$(echo $SIZE/1024|bc)"
+		if [ -f $TMPDIR/$i.html ] ; then
+			mv $TMPDIR/$i.html $BASE/openwrt/dbd/$i.html
+			echo "         <li><a href=\"dbd/$i.html\"><img src=\"/userContent/static/weather-showers-scattered.png\" alt=\"unreproducible icon\" /> $i</a> (${SIZE}K) is unreproducible.</li>" >> $ROMS_HTML
+		else
+			SHASUM=$(sha256sum $i/openwrt.rom|cut -d " " -f1)
+			echo "         <li><img src=\"/userContent/static/weather-clear.png\" alt=\"reproducible icon\" /> $i ($SHASUM, ${SIZE}K) is reproducible.</li>" >> $ROMS_HTML
+			let GOOD_ROMS+=1
+			rm -f $BASE/openwrt/dbd/$i.html # cleanup from previous (unreproducible) tests - if needed
+		fi
+	else
+		echo "         <li><img src=\"/userContent/static/weather-storm.png\" alt=\"FTBFS icon\" /> $i <a href=\"${BUILD_URL}console\">failed to build</a> from source.</li>" >> $ROMS_HTML
+		let BAD_ROMS+=1
+	fi
+done
+echo "       </ul>" >> $ROMS_HTML
+GOOD_PERCENT=$(echo "scale=1 ; ($GOOD_ROMS*100/$ALL_ROMS)" | bc)
+BAD_PERCENT=$(echo "scale=1 ; ($BAD_ROMS*100/$ALL_ROMS)" | bc)
+
+#
+#  finally create the webpage
+#
+cd $TMPDIR
+PAGE=openwrt/openwrt.html
+cat > $PAGE <<- EOF
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width">
+    <title>openwrt</title>
+    <link rel='stylesheet' id='twentyfourteen-style-css'  href='landing_style.css?ver=4.0' type='text/css' media='all' />
+  </head>
+  <body>
+    <div class="content">
+      <div class="page-content">
+        <p> </p>
+        <p><center><img src="openwrt.png" width="300" class="alignnone size-medium wp-image-6" alt="openwrt" height="231" /><br />
+        <blockquote>
+	  <br />
+          <strong>openwrt™</strong>: fast, flexible <em>and reproducible</em> Open Source firmware?
+        </blockquote>
+       </center></p>
+EOF
+write_page "       <h1>Reproducible OpenWRT</h1>"
+write_page "       <p><em>Reproducible builds</em> enable anyone to reproduce bit by bit identical binary packages from a given source, so that anyone can verify that a given binary derived from the source it was said to be derived. There is a lot more information about <a href=\"https://wiki.debian.org/ReproducibleBuilds\">reproducible builds on the Debian wiki</a> and on <a href=\"https://reproducible.debian.net\">https://reproducible.debian.net</a>. The wiki has a lot more information [...]
+write_page "        <em>Reproducible OpenWRT</em> is an effort to apply this to openwrt. Thus each openwrt.rom is build twice (without payloads), with a few varitations added and then those two ROMs are compared using <a href=\"https://tracker.debian.org/debbindiff\">debbindiff</a>. Please note that the toolchain is not varied at all as the rebuild happens on exactly the same system. More variations are expected to be seen in the wild.</p>"
+write_page "       <p>There is a monthly run <a href=\"https://jenkins.debian.net/view/reproducible/job/reproducible_openwrt/\">jenkins job</a> to test the <code>master</code> branch of <a href=\"https://review.openwrt.org/p/openwrt.git\">openwrt.git</a>. Currently this job is triggered more often though, because this is still under development and brand new. The jenkins job is simply running <a href=\"http://anonscm.debian.org/cgit/qa/jenkins.debian.net.git/tree/bin/reproducible_openwrt [...]
+write_page "       <p>$GOOD_ROMS ($GOOD_PERCENT%) out of $ALL_ROMS built openwrt images were reproducible in our test setup, while $BAD_ROMS ($BAD_PERCENT%) failed to build from source."
+write_page "        These tests were last run on $DATE for version ${OPENWRT_VERSION}.</p>"
+write_explaination_table openwrt
+cat $ROMS_HTML >> $PAGE
+write_page "     <p><pre>"
+echo -n "$OPENWRT" >> $PAGE
+write_page "     </pre></p>"
+cat $TOOLCHAIN_HTML >> $PAGE
+write_page "    </div></div>"
+write_page_footer openwrt
+publish_page
+rm -f $ROMS_HTML $TOOLCHAIN_HTML
+
+# the end
+calculate_build_duration
+print_out_duration
+irc_message "$REPRODUCIBLE_URL/openwrt/ has been updated."
+echo "============================================================================="
+
+# remove everything, we don't need it anymore...
+cleanup_tmpdir
+trap - INT TERM EXIT

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/qa/jenkins.debian.net.git



More information about the Qa-jenkins-scm mailing list