From ea125d8425790ab1736c679a957527cafee14c9a Mon Sep 17 00:00:00 2001 From: knaccc Date: Fri, 22 May 2020 22:01:14 +0100 Subject: [PATCH] v1.17 release candidate jdk download url fix added docker build instructions fixed mac launch fixed relative paths --- README.md | 55 ++++++++++++++++++++++++++++------ bin/build-launcher.sh | 25 +++++++++------- bin/build-normalize-zip.sh | 4 +-- bin/convert-jars-to-modules.sh | 4 +-- bin/java-config.sh | 8 ++--- bin/zip-all.sh | 2 +- resources/launch.sh | 9 ++++++ 7 files changed, 78 insertions(+), 29 deletions(-) create mode 100755 resources/launch.sh diff --git a/README.md b/README.md index 31b0c15..453d025 100755 --- a/README.md +++ b/README.md @@ -27,23 +27,60 @@ Download the latest binary releases for Mac/Windows/Linux here: https://github.c The zero-dependency distribution sizes are as follows: -OS | Uncompressed size (MB) | Compressed size (MB) | v1.16 Reproducible build SHA-256 +OS | Uncompressed size (MB) | Compressed size (MB) | v1.17 Reproducible build SHA-256 ------------ | ----------------------- | --------------------- | ------------------------------------------------------------------ -Mac | 40.1 | 26.7 | `5a5afce35e31f4227882296bda327c24dff6196a1b6ee74fd716e123fa653e9d` -Windows | 47.7 | 32.3 | `ebddbac99ad8e232c8cfd5339cbfccf4963ac705016fe5a67b1bdd2b6d4233a9` -Linux | 51.8 | 33.4 | `64997e53ef27c84c3f3e871ef6b0b1f1feccf7aa7d60ccac5060f7694e9d2dfa` -Mac GUI | 63.0 | 45.8 | `c8e1a5c572ef7bff231df76b7c7be2a2ea300ced4b8dbefbd329afac75ccbcaf` -Windows GUI | 70.4 | 50.8 | `bc91c60075d0b10d0b443702176ad1997e6a571182b9ad6c2f68bdcdbbf432de` -Linux GUI | 77.9 | 53.8 | `e60e1bc257085988caa448b34d90eba803b7323f6f1e44cf4fba93b39c0eda96` +Mac | 37.8 | 26.3 | `e25c304c6f45291d03d3c303fd8d4a126ba910f9b67e205341150384b81de9cd` +Windows | 47.3 | 32.2 | `a3fa0c8b3ae2311ec8c4914d657adbf23a506256b91493d4609fc0e6f557a30b` +Linux | 61.4 | 36.2 | `298abd5bfe918581ed85f35ad9bc75261a9cdf16f576356525085dfa898a2fb6` +Mac GUI | 61.0 | 45.7 | `968af1268f2d21812a8dc8e9ba6abbb36eb472652da099228c82d81c8cbb0a86` +Windows GUI | 69.2 | 50.4 | `2296825e662dba491e428970aae87f4d9596971eb2ff9e51a52df471b354fc60` +Linux GUI | 86.5 | 56.4 | `2acbb171fa06197ecaeb1e2904e2b56b9a20adfc71d09521f6fa3545631e2b29` -Note: Reproducible builds are currently experimental. Due to JDK differences, Builds on Mac will consistently have different hashes than builds on Linux. Official releases will always be built on Linux (Ubuntu). +Note: Reproducible builds are currently experimental. Due to JDK differences, Builds on Mac will consistently have different hashes than builds on Linux. Official releases will always be built using Docker. ## Building the launchers All binary releases for Windows, Mac and Linux can be built from either Linux or Mac. -From a freshly installed Ubuntu system, first ensure git is installed: +Use the Docker build method for reproducible builds. + +### To build using Docker on Mac: + +First install docker from https://hub.docker.com/editions/community/docker-ce-desktop-mac + +```` +containerId=$(docker run -td --rm ubuntu) +docker exec -ti $containerId bash -c '\ + apt-get update \ + && apt-get -y install git wget zip unzip \ + && git clone https://github.com/i2p-zero/i2p-zero.git \ + && cd i2p-zero && bash bin/build-all-and-zip.sh' +docker cp $containerId:/i2p-zero/dist-zip ./ +docker container stop $containerId +```` + +### To build using Docker on Ubuntu: + +```` +sudo apt -y install docker docker.io +systemctl start docker + +containerId=$(sudo docker run -td --rm ubuntu) +sudo docker exec -ti $containerId bash -c '\ + apt-get update \ + && apt-get -y install git wget zip unzip \ + && git clone https://github.com/i2p-zero/i2p-zero.git \ + && cd i2p-zero && bash bin/build-all-and-zip.sh' +sudo docker cp $containerId:/i2p-zero/dist-zip ./ +sudo docker container stop $containerId +```` + +This will result in a dist-zip directory being copied into the current directory. The dist-zip directory will contain the builds for all platforms. + +### To build without Docker on Ubuntu: + +To build without Docker on a freshly installed Ubuntu system, first ensure git is installed: `sudo apt install git` diff --git a/bin/build-launcher.sh b/bin/build-launcher.sh index 29e06fb..6b575a9 100755 --- a/bin/build-launcher.sh +++ b/bin/build-launcher.sh @@ -9,21 +9,21 @@ fi source "$basedir/bin/java-config.sh" echo "*** Compiling CLI" -"$JAVA_HOME"/bin/javac --module-path target/modules/combined.jar -d target/classes/org.getmonero.i2p.zero $(find org.getmonero.i2p.zero/src -name '*.java') -cp org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/VERSION target/classes/org.getmonero.i2p.zero/org/getmonero/i2p/zero/ +"$JAVA_HOME"/bin/javac --module-path "$basedir/target/modules/combined.jar" -d "$basedir/target/classes/org.getmonero.i2p.zero" $(find "$basedir/org.getmonero.i2p.zero/src" -name '*.java') +cp "$basedir/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/VERSION" "$basedir/target/classes/org.getmonero.i2p.zero/org/getmonero/i2p/zero/" echo "*** Packaging CLI as a modular jar" -"$JAVA_HOME"/bin/jar --create --file target/org.getmonero.i2p.zero.jar --main-class org.getmonero.i2p.zero.Main -C target/classes/org.getmonero.i2p.zero . -normalizeZip target/org.getmonero.i2p.zero.jar +"$JAVA_HOME"/bin/jar --create --file "$basedir/target/org.getmonero.i2p.zero.jar" --main-class org.getmonero.i2p.zero.Main -C "$basedir/target/classes/org.getmonero.i2p.zero" . +normalizeZip "$basedir/target/org.getmonero.i2p.zero.jar" echo "*** Compiling GUI" -"$JAVA_HOME"/bin/javac --module-path target/org.getmonero.i2p.zero.jar:target/modules/combined.jar:import/javafx-sdks/linux/javafx-sdk-$JAVAFX_VERSION/lib -d target/classes/org.getmonero.i2p.zero.gui $(find org.getmonero.i2p.zero.gui/src -name '*.java') +"$JAVA_HOME"/bin/javac --module-path "$basedir/target/org.getmonero.i2p.zero.jar:$basedir/target/modules/combined.jar:$basedir/import/javafx-sdks/linux/javafx-sdk-$JAVAFX_VERSION/lib" -d "$basedir/target/classes/org.getmonero.i2p.zero.gui" $(find "$basedir/org.getmonero.i2p.zero.gui/src" -name '*.java') -cp -r org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/*.{css,png,fxml,ttf} target/classes/org.getmonero.i2p.zero.gui/org/getmonero/i2p/zero/gui/ +cp -r "$basedir/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/"*.{css,png,fxml,ttf} "$basedir/target/classes/org.getmonero.i2p.zero.gui/org/getmonero/i2p/zero/gui/" echo "*** Packaging GUI as a modular jar" -"$JAVA_HOME"/bin/jar --create --file target/org.getmonero.i2p.zero.gui.jar --main-class org.getmonero.i2p.zero.gui.Gui -C target/classes/org.getmonero.i2p.zero.gui . -normalizeZip target/org.getmonero.i2p.zero.gui.jar +"$JAVA_HOME"/bin/jar --create --file "$basedir/target/org.getmonero.i2p.zero.gui.jar" --main-class org.getmonero.i2p.zero.gui.Gui -C "$basedir/target/classes/org.getmonero.i2p.zero.gui" . +normalizeZip "$basedir/target/org.getmonero.i2p.zero.gui.jar" rm -fr "$basedir/dist" for i in linux mac win linux-gui mac-gui win-gui; do mkdir -p "$basedir/dist/$i"; done @@ -41,8 +41,8 @@ for i in linux mac win; do JAVA_HOME_VARIANT=${JAVA_HOME_WIN} ;; esac echo "Using JAVA_HOME_VARIANT: $JAVA_HOME_VARIANT" - "$JAVA_HOME"/bin/jlink --module-path "${JAVA_HOME_VARIANT}/jmods":target/modules:target/org.getmonero.i2p.zero.jar --add-modules combined,org.getmonero.i2p.zero --output dist/$i/router --compress 2 --no-header-files --no-man-pages --order-resources=**/module-info.class,/java.base/java/lang/**,**javafx** - "$JAVA_HOME"/bin/jlink --module-path "${JAVA_HOME_VARIANT}/jmods":import/javafx-jmods/$i/javafx-jmods-${JAVAFX_VERSION}:target/modules:target/org.getmonero.i2p.zero.jar:target/org.getmonero.i2p.zero.gui.jar --add-modules combined,org.getmonero.i2p.zero,org.getmonero.i2p.zero.gui,javafx.controls,javafx.fxml,java.desktop --output dist/$i-gui/router --compress 2 --no-header-files --no-man-pages --order-resources=**/module-info.class,/java.base/java/lang/**,**javafx** + "$JAVA_HOME"/bin/jlink --module-path "${JAVA_HOME_VARIANT}/jmods":"$basedir/target/modules":"$basedir/target/org.getmonero.i2p.zero.jar" --add-modules combined,org.getmonero.i2p.zero --output "$basedir/dist/$i/router" --compress 2 --no-header-files --no-man-pages --order-resources=**/module-info.class,/java.base/java/lang/**,**javafx** + "$JAVA_HOME"/bin/jlink --module-path "${JAVA_HOME_VARIANT}/jmods":"$basedir/import/javafx-jmods/$i/javafx-jmods-${JAVAFX_VERSION}":"$basedir/target/modules":"$basedir/target/org.getmonero.i2p.zero.jar":"$basedir/target/org.getmonero.i2p.zero.gui.jar" --add-modules combined,org.getmonero.i2p.zero,org.getmonero.i2p.zero.gui,javafx.controls,javafx.fxml,java.desktop --output "$basedir/dist/$i-gui/router" --compress 2 --no-header-files --no-man-pages --order-resources=**/module-info.class,/java.base/java/lang/**,**javafx** done for i in mac-gui; do @@ -87,6 +87,8 @@ for i in linux linux-gui; do cp "$basedir/import/jpackage/linux/classes/jdk/incubator/jpackage/internal/resources/libapplauncher.so" "$basedir/dist/$i/router/lib/" done +cp "$basedir/i2p-zero.png" "$basedir/dist/linux-gui/router/lib/" + # build win and win-gui app structure for i in win win-gui; do mv "$basedir/dist/$i/router" "$basedir/dist/$i/router-tmp" @@ -101,9 +103,10 @@ for i in linux mac; do cp "$basedir/resources/tunnel-control.sh" "$basedir/dist/$i/router/bin/" done +cp "$basedir/resources/launch.sh" "$basedir/dist/mac/router/bin/" # show distribution sizes -du -sk dist/* | awk '{printf "%.1f MB %s\n",$1/1024,$2}' +du -sk "$basedir/dist/"* | awk '{printf "%.1f MB %s\n",$1/1024,$2}' echo "*** Done ***" diff --git a/bin/build-normalize-zip.sh b/bin/build-normalize-zip.sh index 6548a5e..2f1803d 100755 --- a/bin/build-normalize-zip.sh +++ b/bin/build-normalize-zip.sh @@ -9,9 +9,9 @@ fi source "$basedir/bin/java-config.sh" echo "*** Compiling Zip normalizer utility" -"$JAVA_HOME"/bin/javac --module-path import/commons-compress-1.20/commons-compress-1.20.jar -d target/classes/org.getmonero.util.normalizeZip $(find org.getmonero.util.normalizeZip/src -name '*.java') +"$JAVA_HOME"/bin/javac --module-path "$basedir/import/commons-compress-1.20/commons-compress-1.20.jar" -d "$basedir/target/classes/org.getmonero.util.normalizeZip" $(find "$basedir/org.getmonero.util.normalizeZip/src" -name '*.java') echo "*** Packaging Zip normalizer as a modular jar" -"$JAVA_HOME"/bin/jar --create --file target/org.getmonero.util.normalizeZip.jar --main-class org.getmonero.util.normalizeZip.NormalizeZip -C target/classes/org.getmonero.util.normalizeZip . +"$JAVA_HOME"/bin/jar --create --file "$basedir/target/org.getmonero.util.normalizeZip.jar" --main-class org.getmonero.util.normalizeZip.NormalizeZip -C "$basedir/target/classes/org.getmonero.util.normalizeZip" . diff --git a/bin/convert-jars-to-modules.sh b/bin/convert-jars-to-modules.sh index 9b6d601..4b8c8a8 100755 --- a/bin/convert-jars-to-modules.sh +++ b/bin/convert-jars-to-modules.sh @@ -45,10 +45,10 @@ echo 'uses org.eclipse.jetty.http.HttpFieldPreEncoder; }' >> "$basedir/target/mo echo "*** Creating new combined modular jar" -"$JAVA_HOME"/bin/javac --module-path "$combinedJarPath/combined" --patch-module combined=$combinedJarPath $basedir/target/module-info/combined/module-info.java +"$JAVA_HOME"/bin/javac --module-path "$combinedJarPath/combined" --patch-module combined="$combinedJarPath" "$basedir/target/module-info/combined/module-info.java" cp $combinedJarPath "$basedir/target/modules/" "$JAVA_HOME"/bin/jar uf "$basedir/target/modules/combined.jar" -C "$basedir/target/module-info/combined" module-info.class -normalizeZip target/modules/combined.jar +normalizeZip "$basedir/target/modules/combined.jar" diff --git a/bin/java-config.sh b/bin/java-config.sh index 14dad2b..ed52c0f 100644 --- a/bin/java-config.sh +++ b/bin/java-config.sh @@ -8,13 +8,13 @@ fi export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 -JDK_MAJOR_VERSION=14 JDK_VERSION=14.0.1+7 +JDK_MAJOR_VERSION=`echo $JDK_VERSION | cut -f1 -d"."` JDK_VERSION_URL_ENC=`echo "$JDK_VERSION" | sed 's/+/%2B/g'` JDK_VERSION_URL_ENC2=`echo "$JDK_VERSION" | sed 's/+/_/g'` -JDK_DOWNLOAD_URL_LINUX=https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/${JDK_VERSION_URL_ENC}/OpenJDK${JDK_MAJOR_VERSION}U-jdk_x64_linux_hotspot_${JDK_VERSION_URL_ENC2}.tar.gz -JDK_DOWNLOAD_URL_MAC=https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/${JDK_VERSION_URL_ENC}/OpenJDK${JDK_MAJOR_VERSION}U-jdk_x64_mac_hotspot_${JDK_VERSION_URL_ENC2}.tar.gz -JDK_DOWNLOAD_URL_WIN=https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/${JDK_VERSION_URL_ENC}/OpenJDK${JDK_MAJOR_VERSION}U-jdk_x64_windows_hotspot_${JDK_VERSION_URL_ENC2}.zip +JDK_DOWNLOAD_URL_LINUX=https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk-${JDK_VERSION_URL_ENC}/OpenJDK${JDK_MAJOR_VERSION}U-jdk_x64_linux_hotspot_${JDK_VERSION_URL_ENC2}.tar.gz +JDK_DOWNLOAD_URL_MAC=https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk-${JDK_VERSION_URL_ENC}/OpenJDK${JDK_MAJOR_VERSION}U-jdk_x64_mac_hotspot_${JDK_VERSION_URL_ENC2}.tar.gz +JDK_DOWNLOAD_URL_WIN=https://github.com/AdoptOpenJDK/openjdk14-binaries/releases/download/jdk-${JDK_VERSION_URL_ENC}/OpenJDK${JDK_MAJOR_VERSION}U-jdk_x64_windows_hotspot_${JDK_VERSION_URL_ENC2}.zip JDK_DOWNLOAD_FILENAME_LINUX="${JDK_DOWNLOAD_URL_LINUX##*/}" JDK_DOWNLOAD_FILENAME_MAC="${JDK_DOWNLOAD_URL_MAC##*/}" diff --git a/bin/zip-all.sh b/bin/zip-all.sh index b9745c3..f99e64b 100755 --- a/bin/zip-all.sh +++ b/bin/zip-all.sh @@ -55,4 +55,4 @@ print4ColsJustified "Windows GUI" "`getFileSizeMB $basedir/dist/win-gui`" "`ge print4ColsJustified "Linux GUI" "`getFileSizeMB $basedir/dist/linux-gui`" "`getFileSizeMB $basedir/dist-zip/i2p-zero-linux-gui.v${VERSION}.zip`" "\``getHash $basedir/dist-zip/i2p-zero-linux-gui.v${VERSION}.zip`\`" echo "" -echo "Note: Reproducible builds are currently experimental. Due to JDK differences, Builds on Mac will consistently have different hashes than builds on Linux. Official releases will always be built on Linux (Ubuntu)." \ No newline at end of file +echo "Note: Reproducible builds are currently experimental. Due to JDK differences, Builds on Mac will consistently have different hashes than builds on Linux. Official releases will always be built using Docker." \ No newline at end of file diff --git a/resources/launch.sh b/resources/launch.sh new file mode 100755 index 0000000..a74a7d8 --- /dev/null +++ b/resources/launch.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if [ $(uname -s) = Darwin ]; then + basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) +else + basedir=$(dirname $(dirname $(readlink -fm $0))) +fi + +"$basedir"/bin/java -cp "$basedir/i2p.base/jbigi.jar" -m org.getmonero.i2p.zero