diff --git a/bin/build-all-and-zip.sh b/bin/build-all-and-zip.sh index a217482..2ed7495 100755 --- a/bin/build-all-and-zip.sh +++ b/bin/build-all-and-zip.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) diff --git a/bin/build-all.sh b/bin/build-all.sh index a7f98d2..48d4993 100755 --- a/bin/build-all.sh +++ b/bin/build-all.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) diff --git a/bin/build-launcher.sh b/bin/build-launcher.sh index 45b2026..138c2ea 100755 --- a/bin/build-launcher.sh +++ b/bin/build-launcher.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) @@ -9,7 +11,7 @@ fi source "$basedir/bin/java-config.sh" echo "*** Compiling CLI" -"$JAVA_HOME"/bin/javac --enable-preview -source 14 --module-path "$basedir/target/modules/combined.jar" -d "$basedir/target/classes/org.getmonero.i2p.zero" $(find "$basedir/org.getmonero.i2p.zero/src" -name '*.java') +"$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" @@ -17,7 +19,7 @@ echo "*** Packaging CLI as a modular jar" normalizeZip "$basedir/target/org.getmonero.i2p.zero.jar" echo "*** Compiling GUI" -"$JAVA_HOME"/bin/javac --enable-preview -source 14 --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') +"$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 "$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/" diff --git a/bin/build-normalize-zip.sh b/bin/build-normalize-zip.sh index 2f1803d..c96ac27 100755 --- a/bin/build-normalize-zip.sh +++ b/bin/build-normalize-zip.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) diff --git a/bin/build-original-i2p.sh b/bin/build-original-i2p.sh index 7b80338..d63dc7b 100755 --- a/bin/build-original-i2p.sh +++ b/bin/build-original-i2p.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) diff --git a/bin/clean-build-env.sh b/bin/clean-build-env.sh index 92aa25c..2ab1e45 100755 --- a/bin/clean-build-env.sh +++ b/bin/clean-build-env.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) diff --git a/bin/convert-jars-to-modules.sh b/bin/convert-jars-to-modules.sh index 5115ae8..c2f3b05 100755 --- a/bin/convert-jars-to-modules.sh +++ b/bin/convert-jars-to-modules.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) @@ -46,7 +48,7 @@ echo 'uses org.eclipse.jetty.http.HttpFieldPreEncoder; }' >> "$basedir/target/mo echo "*** Creating new combined modular jar" -"$JAVA_HOME"/bin/javac --enable-preview -source 14 --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 diff --git a/bin/import-packages.sh b/bin/import-packages.sh index 3be706a..c35861a 100755 --- a/bin/import-packages.sh +++ b/bin/import-packages.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) @@ -79,14 +81,18 @@ if [ ! -d "$basedir/import/javafx-jmods" ]; then wget --directory-prefix=javafx-jmods/mac $JAVAFX_JMODS_DOWNLOAD_URL_MAC wget --directory-prefix=javafx-jmods/win $JAVAFX_JMODS_DOWNLOAD_URL_WIN + set +e unzip -q javafx-jmods/linux/$JAVAFX_JMODS_DOWNLOAD_FILENAME_LINUX -d javafx-jmods/linux/ unzip -q javafx-jmods/mac/$JAVAFX_JMODS_DOWNLOAD_FILENAME_MAC -d javafx-jmods/mac/ unzip -q javafx-jmods/win/$JAVAFX_JMODS_DOWNLOAD_FILENAME_WIN -d javafx-jmods/win/ + set -e fi if [ ! -d "$basedir/import/jpackage" ]; then mkdir -p jpackage/linux jpackage/win + set +e unzip -q $JAVA_HOME_LINUX/jmods/jdk.incubator.jpackage.jmod -d jpackage/linux/ unzip -q $JAVA_HOME_WIN/jmods/jdk.incubator.jpackage.jmod -d jpackage/win/ + set -e fi diff --git a/bin/java-config.sh b/bin/java-config.sh index ed52c0f..b4c85c4 100644 --- a/bin/java-config.sh +++ b/bin/java-config.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) @@ -8,13 +10,14 @@ fi export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 +# Get latest JDK version from https://adoptopenjdk.net/releases.html?variant=openjdk15&jvmVariant=hotspot JDK_VERSION=14.0.1+7 -JDK_MAJOR_VERSION=`echo $JDK_VERSION | cut -f1 -d"."` +JDK_MAJOR_VERSION=`echo $JDK_VERSION | cut -f1 -d"." | 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-${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_URL_LINUX=https://github.com/AdoptOpenJDK/openjdk${JDK_MAJOR_VERSION}-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/openjdk${JDK_MAJOR_VERSION}-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/openjdk${JDK_MAJOR_VERSION}-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##*/}" @@ -24,6 +27,7 @@ JAVA_HOME_LINUX=$basedir/import/jdks/linux/jdk-$JDK_VERSION JAVA_HOME_MAC=$basedir/import/jdks/mac/jdk-$JDK_VERSION/Contents/Home JAVA_HOME_WIN=$basedir/import/jdks/win/jdk-$JDK_VERSION +# JavaFX from https://gluonhq.com/products/javafx/ JAVAFX_VERSION=14 JAVAFX_SDK_DOWNLOAD_URL_LINUX=https://download2.gluonhq.com/openjfx/$JAVAFX_VERSION/openjfx-${JAVAFX_VERSION}_linux-x64_bin-sdk.zip JAVAFX_SDK_DOWNLOAD_URL_MAC=https://download2.gluonhq.com/openjfx/$JAVAFX_VERSION/openjfx-${JAVAFX_VERSION}_osx-x64_bin-sdk.zip diff --git a/bin/zip-all.sh b/bin/zip-all.sh index f99e64b..1fe56cb 100755 --- a/bin/zip-all.sh +++ b/bin/zip-all.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e +set -o pipefail if [ $(uname -s) = Darwin ]; then basedir=$(dirname $(cd "$(dirname "$0")"; pwd -P)) diff --git a/mipseed.md b/mipseed.md index 4bfc464..c29803a 100644 --- a/mipseed.md +++ b/mipseed.md @@ -7,11 +7,12 @@ 6. Create a server tunnel for incoming I2P connections by typing: `router/bin/tunnel-control.sh server.create.vanity 127.0.0.1 8061 none xyz` replacing `xyz` with a 3 alphanumeric character vanity prefix for your public b32.i2p address. This command will take a few minutes to complete, depending on how fast your CPU is. If you do not want a vanity prefix, use the command: `router/bin/tunnel-control.sh server.create 127.0.0.1 8061` 7. The command above will result in an I2P address being printed to the command line, which will end with `.b32.i2p`. This is your new I2P address. 8. You now need to keep a backup of your private keys to your I2P address on another computer for safekeeping. Do this by taking a backup of the `~/.i2p-zero/config/tunnels.json` file -9. Run monerod by typing the following, replacing `XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p` with your own I2P address that was printed from step 6: `monerod --tx-proxy i2p,127.0.0.1:8060 --add-peer core5hzivg4v5ttxbor4a3haja6dssksqsmiootlptnsrfsgwqqa.b32.i2p --add-peer spn4ef3gddveqxkco6fhh7epyxnvdmei4w6hioiiunfvvljxgcoa.b32.i2p --add-peer dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p --add-peer sel36x6fibfzujwvt4hf5gxolz6kd3jpvbjqg6o3ud2xtionyl2q.b32.i2p --add-peer yht4tm2slhyue42zy5p2dn3sft2ffjjrpuy7oc2lpbhifcidml4q.b32.i2p --anonymous-inbound XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p,127.0.0.1:8061 --prune-blockchain --detach` - +9. Run monerod by typing the following, replacing `XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p` with your own I2P address that was printed from step 6: `monerod --tx-proxy i2p,127.0.0.1:8060 --anonymous-inbound XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p,127.0.0.1:8061 --prune-blockchain --detach` That's it! You are now running a mipseed, which will itself be seeded by the manually added mipseeds specified with the --add-peer entries passed to monerod. +Note: monerod versions v0.17.1.3 onwards comes with a list of hardcoded monerod peers accessible via I2p which are used to then discover further I2P peers. You can manually add peers to the list by passing `--add-peer` flags to the `monerod` command above. E.g. `--add-peer core5hzivg4v5ttxbor4a3haja6dssksqsmiootlptnsrfsgwqqa.b32.i2p` + If you are running Linux, it would be useful to set this all up to run automatically if the machine is ever rebooted. You can do this by creating systemd service files, as documented [here](monerod-with-i2p-zero.md#setting-up-linux-services-so-that-monerod-and-i2p-zero-are-automatically-started). ## What this all about: diff --git a/monerod-with-i2p-zero.md b/monerod-with-i2p-zero.md index 257ac8b..1af9904 100644 --- a/monerod-with-i2p-zero.md +++ b/monerod-with-i2p-zero.md @@ -6,10 +6,12 @@ 5. Create a socks tunnel for outgoing I2P connections by typing: `router/bin/tunnel-control.sh socks.create 8060` 6. Create a server tunnel for incoming I2P connections by typing: `router/bin/tunnel-control.sh server.create 127.0.0.1 8061`. 7. The command above will result in an I2P address being printed to the command line, which will end with `.b32.i2p`. This is your new I2P address. -8. Run monerod by typing the following, replacing `XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p` with your own I2P address that was printed from step 6: `monerod --tx-proxy i2p,127.0.0.1:8060 --add-peer core5hzivg4v5ttxbor4a3haja6dssksqsmiootlptnsrfsgwqqa.b32.i2p --add-peer spn4ef3gddveqxkco6fhh7epyxnvdmei4w6hioiiunfvvljxgcoa.b32.i2p --add-peer dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p --add-peer sel36x6fibfzujwvt4hf5gxolz6kd3jpvbjqg6o3ud2xtionyl2q.b32.i2p --add-peer yht4tm2slhyue42zy5p2dn3sft2ffjjrpuy7oc2lpbhifcidml4q.b32.i2p --anonymous-inbound XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p,127.0.0.1:8061 --detach` +8. Run monerod by typing the following, replacing `XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p` with your own I2P address that was printed from step 6: `monerod --tx-proxy i2p,127.0.0.1:8060 --anonymous-inbound XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.b32.i2p,127.0.0.1:8061 --prune-blockchain --detach` That's it! Do not replace the dsc****.b32.i2p address with yours, only replace the XXXXXXX.b32.i2p one. The dsc****.b32.i2p is a seed node that will help you discover other I2P-accessible monero nodes. +Note: monerod versions v0.17.1.3 onwards comes with a list of hardcoded monerod peers accessible via I2p which are used to then discover further I2P peers. You can manually add peers to the list by passing `--add-peer` flags to the `monerod` command above. E.g. `--add-peer core5hzivg4v5ttxbor4a3haja6dssksqsmiootlptnsrfsgwqqa.b32.i2p` + ## Setting up Linux services so that monerod and I2P-zero are automatically started If you are running Linux, it would be useful to set this all up to run automatically if the machine is ever rebooted. You can do this by creating systemd service files: @@ -24,7 +26,7 @@ After=network.target [Service] Type=simple -ExecStart=/home//i2p-zero-linux.v1.18/router/bin/i2p-zero +ExecStart=/home//i2p-zero-linux.v1.19/router/bin/i2p-zero User= Group= diff --git a/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java b/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java index 9722060..ee9d07f 100644 --- a/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java +++ b/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java @@ -98,6 +98,17 @@ public class Controller { return (Stage) rootBorderPane.getScene().getWindow(); } + public static class DialogRefs { + public Scene scene; + public Stage stage; + public AddTunnelController controller; + public DialogRefs(Scene scene, Stage stage, AddTunnelController controller) { + this.scene = scene; + this.stage = stage; + this.controller = controller; + } + } + @FXML private void initialize() { // set up copy-cell-to-clipboard functionality @@ -134,7 +145,6 @@ public class Controller { tunnelRemoveButton.setDisable(true); }); - record DialogRefs(Scene scene, Stage stage, AddTunnelController controller){}; Supplier showAddTunnelDialog = ()->{ try { Stage dialogStage = new Stage(); diff --git a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/VERSION b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/VERSION index d907c15..8068c6e 100644 --- a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/VERSION +++ b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/VERSION @@ -1 +1 @@ -1.18 \ No newline at end of file +1.19 \ No newline at end of file diff --git a/resources/i2p-zero.linux-gui.cfg b/resources/i2p-zero.linux-gui.cfg index 7586db6..5623513 100644 --- a/resources/i2p-zero.linux-gui.cfg +++ b/resources/i2p-zero.linux-gui.cfg @@ -9,6 +9,7 @@ app.mainmodule=org.getmonero.i2p.zero.gui/org.getmonero.i2p.zero.gui.Gui [JVMOptions] +--enable-preview [JVMUserOptions] diff --git a/resources/i2p-zero.win-gui.cfg b/resources/i2p-zero.win-gui.cfg index 3d7a1be..e667721 100644 --- a/resources/i2p-zero.win-gui.cfg +++ b/resources/i2p-zero.win-gui.cfg @@ -9,6 +9,7 @@ app.mainmodule=org.getmonero.i2p.zero.gui/org.getmonero.i2p.zero.gui.Gui [JVMOptions] +--enable-preview [JVMUserOptions] diff --git a/resources/i2p-zero.win.cfg b/resources/i2p-zero.win.cfg index 78efa3b..db4888b 100644 --- a/resources/i2p-zero.win.cfg +++ b/resources/i2p-zero.win.cfg @@ -9,6 +9,7 @@ app.mainmodule=org.getmonero.i2p.zero/org.getmonero.i2p.zero.Main [JVMOptions] +--enable-preview [JVMUserOptions] diff --git a/resources/launch-gui.sh b/resources/launch-gui.sh index d61632e..051c3d0 100755 --- a/resources/launch-gui.sh +++ b/resources/launch-gui.sh @@ -6,4 +6,4 @@ else basedir=$(dirname $(dirname $(readlink -fm $0))) fi -"$basedir"/bin/java -cp "$basedir/i2p.base/jbigi.jar" -m org.getmonero.i2p.zero.gui +"$basedir"/bin/java --enable-preview -cp "$basedir/i2p.base/jbigi.jar" -m org.getmonero.i2p.zero.gui diff --git a/resources/launch.bat b/resources/launch.bat index 4425589..8eb4503 100644 --- a/resources/launch.bat +++ b/resources/launch.bat @@ -1,3 +1,3 @@ @echo off set DIR=%~dp0 -"%DIR%\java" -cp %DIR%\..\i2p.base\jbigi.jar -m org.getmonero.i2p.zero %* \ No newline at end of file +"%DIR%\java" --enable-preview -cp %DIR%\..\i2p.base\jbigi.jar -m org.getmonero.i2p.zero %* \ No newline at end of file diff --git a/resources/launch.sh b/resources/launch.sh index a74a7d8..5657a7f 100755 --- a/resources/launch.sh +++ b/resources/launch.sh @@ -6,4 +6,4 @@ else basedir=$(dirname $(dirname $(readlink -fm $0))) fi -"$basedir"/bin/java -cp "$basedir/i2p.base/jbigi.jar" -m org.getmonero.i2p.zero +"$basedir"/bin/java --enable-preview -cp "$basedir/i2p.base/jbigi.jar" -m org.getmonero.i2p.zero