From: John Crispin Date: Tue, 14 Jul 2015 09:57:19 +0000 (+0000) Subject: ipkg-build: use deterministic timestamps in ipk tarballs X-Git-Tag: reboot~2492 X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fstaging%2Fchunkeey.git;a=commitdiff_plain;h=3846bb9ac92060669f9c798c3c128057a6d32809 ipkg-build: use deterministic timestamps in ipk tarballs As a follow-up to r46026, this commit sets the modification times of files inside the tarballs to deterministic values. It uses the date of the last git or svn commit and falls back to the old behavior if those are not available. Signed-off-by: Reiner Herrmann SVN-Revision: 46360 --- diff --git a/scripts/ipkg-build b/scripts/ipkg-build index 6787ed4199..2d410767f3 100755 --- a/scripts/ipkg-build +++ b/scripts/ipkg-build @@ -13,8 +13,19 @@ version=1.0 FIND="$(which find)" FIND="${FIND:-$(which gfind)}" TAR="${TAR:-$(which tar)}" +SVN="$(which svn)" +GIT="$(which git)" export GZIP="-n" +# look up date of last commit +if [ -d "$TOPDIR/.git" ]; then + TIMESTAMP=$($GIT log -1 -s --format=%ci) +elif [ -d "$TOPDIR/.svn" ]; then + TIMESTAMP=$($SVN info "$TOPDIR" | sed -n "s/^Last Changed Date: \(.*\)/\1/p") +else + TIMESTAMP=$(date) +fi + ipkg_extract_value() { sed -e "s/^[^:]*:[[:space:]]*//" } @@ -128,20 +139,20 @@ mkdir $tmp_dir echo $CONTROL > $tmp_dir/tarX # Preserve permissions (-p) when creating data.tar.gz as non-root user -( cd $pkg_dir && $TAR $ogargs -X $tmp_dir/tarX --format=gnu -czpf $tmp_dir/data.tar.gz . ) +( cd $pkg_dir && $TAR $ogargs -X $tmp_dir/tarX --format=gnu -czpf $tmp_dir/data.tar.gz --mtime="$TIMESTAMP" . ) installed_size=`stat -c "%s" $tmp_dir/data.tar.gz` sed -i -e "s/^Installed-Size: .*/Installed-Size: $installed_size/" \ $pkg_dir/$CONTROL/control -( cd $pkg_dir/$CONTROL && $TAR $ogargs --format=gnu -czf $tmp_dir/control.tar.gz . ) +( cd $pkg_dir/$CONTROL && $TAR $ogargs --format=gnu -czf $tmp_dir/control.tar.gz --mtime="$TIMESTAMP" . ) rm $tmp_dir/tarX echo "2.0" > $tmp_dir/debian-binary pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk rm -f $pkg_file -( cd $tmp_dir && $TAR --format=gnu -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz ) +( cd $tmp_dir && $TAR --format=gnu -zcf $pkg_file --mtime="$TIMESTAMP" ./debian-binary ./data.tar.gz ./control.tar.gz ) rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz rmdir $tmp_dir