[arch-commits] Commit in maven/trunk (PKGBUILD)
Levente Polyak
anthraxx at gemini.archlinux.org
Sun Dec 19 18:22:31 UTC 2021
Date: Sunday, December 19, 2021 @ 18:22:30
Author: anthraxx
Revision: 1079077
upgpkg: maven 3.8.4-1: fully bit identical canonical packaging
Make our packaged version 100% canonical but built from source by
leveraging reproducible builds implications.
We use the upstream build number to build our version from source and check the
resulting tarball against the official hashes. We literally reproduce the
upstream binary dist bit by bit. This has multiple nice side effects, most
importantly we can dist a 100% canonical version that is bit by bit the same
and therefor supported but still do not require to blindly repackage prebuilt
artifacts.
Modified:
maven/trunk/PKGBUILD
----------+
PKGBUILD | 52 ++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 40 insertions(+), 12 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2021-12-19 18:04:17 UTC (rev 1079076)
+++ PKGBUILD 2021-12-19 18:22:30 UTC (rev 1079077)
@@ -3,7 +3,7 @@
# Contributor: William Rea <sillywilly at gmail.com>
pkgname=maven
-pkgver=3.8.3
+pkgver=3.8.4
pkgrel=1
pkgdesc='Java project management and project comprehension tool'
url='https://maven.apache.org'
@@ -12,8 +12,11 @@
depends=('java-environment>=7' 'bash' 'procps-ng')
makedepends=('maven' 'java-environment=8')
backup=('opt/maven/conf/settings.xml')
-source=(https://www-eu.apache.org/dist/maven/maven-3/${pkgver}/source/apache-maven-${pkgver}-src.tar.gz{,.asc}
+source=(https://downloads.apache.org/maven/maven-3/${pkgver}/source/apache-maven-${pkgver}-src.tar.gz{,.asc}
+ # both bin artifacts are only used for reproducible builds from source
+ https://downloads.apache.org/maven/maven-3/${pkgver}/binaries/apache-maven-${pkgver}-bin.tar.gz{,.asc,.sha512}
maven.sh)
+noextract=(apache-maven-${pkgver}-bin.tar.gz)
# https://www.apache.org/dist/maven/KEYS
validpgpkeys=(
'042B29E928995B9DB963C636C7CA19B7B620D787' # StephenConnolly<stephenc at apache.org>
@@ -22,33 +25,58 @@
'B02137D875D833D9B23392ECAE5A7FB608A0221C' # Robert Scholte <rfscholte at apache.org>
'6A814B1F869C2BBEAB7CB7271A2A1C94BDE89688' # Michael Osipov (Java developer) <1983-01-06 at gmx.net>
)
-sha256sums=('c58ea18cee78d678af33b4080b083a104ab80919e4bb57468109338e0bbad19f'
+sha256sums=('298bfb6172c134655f4f5608342f9c7bc798918ac165b8ded4af800be184ab9b'
'SKIP'
+ '2cdc9c519427bb20fdc25bef5a9063b790e4abd930e7b14b4e9f4863d6f9f13c'
+ 'SKIP'
+ 'e3b1b816da14173abf0141e22ced80239b57fe81889e230529fec02a88dc55c4'
'17d9b8efa6a922907110026273443bcc8d83e061e14ac82cb5052b483acc9b76')
+_buildnumber() {
+ # use same build number as the binary dist but prove that our source build is
+ # identical and therefor canonical in the build() step
+ bsdtar xOf <(bsdtar xOf "${srcdir}/apache-maven-${pkgver}-bin.tar.gz" apache-maven-${pkgver}/lib/maven-core-${pkgver}.jar) \
+ org/apache/maven/messages/build.properties | grep buildNumber | cut -d= -f2 | tr -cd '[:print:]'
+}
+
build() {
cd apache-maven-${pkgver}
export PATH="/usr/lib/jvm/java-8-openjdk/bin:${PATH}"
mvn package \
+ -DbuildNumber="$(_buildnumber)" \
+ -Dline.separator=$'\r\n' \
+ -Dproject.build.sourceEncoding=UTF-8 -e \
-Dmaven.repo.local="${srcdir}/repo" \
- -Dproject.build.sourceEncoding=UTF-8 -e
+ -DskipTests
+
+ # check reproducible builds result against upstream hashes. This way we can
+ # prove that our source build is identical and therefor canonical so we are
+ # technically free to use the static build number in our build env. On top we
+ # ensure bit by bit identical upstream signed binary dist against our variant
+ # via diff exiting non-successful on mismatch.
+ sha512sum -c <(printf "$(cat ${srcdir}/apache-maven-${pkgver}-bin.tar.gz.sha512) apache-maven/target/apache-maven-${pkgver}-bin.tar.gz")
+ diff "${srcdir}/apache-maven-${pkgver}-bin.tar.gz" apache-maven/target/apache-maven-${pkgver}-bin.tar.gz
}
+check() {
+ cd apache-maven-${pkgver}
+
+ export PATH="/usr/lib/jvm/java-8-openjdk/bin:${PATH}"
+ mvn test \
+ -Dmaven.repo.local="${srcdir}/repo"
+}
+
package() {
cd apache-maven-${pkgver}
install -Dm 755 ../maven.sh -t "${pkgdir}/etc/profile.d"
+
install -d "${pkgdir}/opt/maven"
+ bsdtar xf apache-maven/target/apache-maven-${pkgver}-bin.tar.gz \
+ --strip-components=1 \
+ -C "${pkgdir}/opt/maven"
- # skip tests as they were already executed
- export PATH="/usr/lib/jvm/java-8-openjdk/bin:${PATH}"
- mvn install \
- -Dmaven.repo.local="${srcdir}/repo" \
- -Dproject.build.sourceEncoding=UTF-8 -e \
- -DdistributionTargetDir="${pkgdir}/opt/maven" \
- -DskipTests -Dmaven.test.skip=true
-
install -d "${pkgdir}/usr/bin"
ln -s /opt/maven/bin/mvn "${pkgdir}/usr/bin/mvn"
ln -s /opt/maven/bin/mvnDebug "${pkgdir}/usr/bin/mvnDebug"
More information about the arch-commits
mailing list