Skip to content

Instantly share code, notes, and snippets.

@tmakerman
Last active March 15, 2024 10:04
Show Gist options
  • Save tmakerman/ee53a94c3cfc8362192ad9df20709547 to your computer and use it in GitHub Desktop.
Save tmakerman/ee53a94c3cfc8362192ad9df20709547 to your computer and use it in GitHub Desktop.
Running Bisq on Raspberry Pi

Running Bisq on Raspberry Pi

Working as of 2023-01-13

My setup:

Raspberry Pi 4 Model B Rev 1.5 2GB Raspberry Pi OS 64-bit with Desktop Release Date: September 22nd 2022

Bisq 1.9.9 built from source

Install Java

Build Bisq from source

  • git clone https://github.com/tmakerman/bisq.git
  • cd bisq
  • git checkout bisq-on-rpi-v1.9.9
  • ./gradlew build
    • some artifact dependency verifications fail, this can be ignored
    • build took ~ 26 min on my RPi 4 4GB
    • Bisq is ready to run, however when it initializes it will try to connect to Bitcoin network over Tor using its bundled Tor which fails and it will eventually time out. Instead setup a Tor hidden service and configure Bisq to connect through that…

Setup Tor

deb [arch=arm64] http://deb.torproject.org/torproject.org bullseye main
deb-src [arch=arm64] http://deb.torproject.org/torproject.org bullseye main
  • curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
  • sudo apt-get update
  • sudo apt-get install tor deb.torproject.org-keyring
  • Edit /etc/tor/torrc adding the following lines to bottom of file:
SOCKSPort 9050
Log notice stdout
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1
HiddenServiceDir /var/lib/tor/bisq/
HiddenServicePort 8080 127.0.0.1:8080
  • Determine Tor group:
  • grep User /usr/share/tor/tor-service-defaults-torrc
  • sudo usermod -a -G debian-tor satoshi
    • replace satoshi with your username
  • sudo shutdown -r now
  • Wait for system to come back up
  • sudo systemctl enable tor
  • sudo systemctl start tor

Running Bisq

  • from RPi Desktop environment terminal window
  • cd bisq
  • ./bisq-desktop --torControlPort 9051 --torControlCookieFile=/var/run/tor/control.authcookie --torControlUseSafeCookieAuth
@richardalg
Copy link

@gus4rs
I have had problems connecting while a bitcoin version is running on my machine.
I figured that reporting this could get messy, hence I've kept my head down thus far.
I'd be interested to know if you have the same problem.

@gus4rs
Copy link

gus4rs commented Oct 13, 2023

I figured out my issue. The torControlPort was wrong. It now manages to contact the external Tor service, create an onion service, and connect to Bitcoin. Everything seems fine but I haven't tested buying/selling keeping it open for a while.

I also used a simplified patch on top of the last tag 1.9.14:

diff --git a/build-logic/commons/src/main/groovy/bisq.javafx.gradle b/build-logic/commons/src/main/groovy/bisq.javafx.gradle
index 9757770605..7db4944cdf 100644
--- a/build-logic/commons/src/main/groovy/bisq.javafx.gradle
+++ b/build-logic/commons/src/main/groovy/bisq.javafx.gradle
@@ -3,5 +3,5 @@ plugins {
 }
 
 javafx {
-    version = "16"
+    version = "17.0.1"
 }
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 60eaa42592..3ffc4608f7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -41,7 +41,7 @@ lombok = { strictly = '1.18.22' }
 mockito = { strictly = '4.0.0' }
 natpryce-make-it-easy = { strictly = '4.0.1' }
 netlayer = { strictly = '0.7.6' }
-openjfx-javafx-plugin = { strictly = '0.0.10' }
+openjfx-javafx-plugin = { strictly = '0.0.11' }
 protobuf = { strictly = '3.19.1' }
 qrgen = { strictly = '1.3' }
 slf4j = { strictly = '1.7.30' }
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 6f9917f32b..4b5eb78e5e 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -580,6 +580,9 @@
          <artifact name="protoc-3.19.1-windows-x86_64.exe">
             <sha256 value="06f65a95ee0fb212c45473e0e65cca824e4634b291fe8dd666068edf51e6ca4c" origin="Manually computed by Alva"/>
          </artifact>
+         <artifact name="protoc-3.19.1-linux-aarch_64.exe">
+            <sha256 value="e18b554834c8c039223b83f3024afb8af9166666b4b9e54d83dcebfe8e28a929" origin="Manually computed by Alva"/>
+         </artifact>
          <artifact name="protoc-3.19.1.pom">
             <sha256 value="71a3da76c0c3b7bedb71c1e65f18f47193cc73ef1f27fc26b0a70715794019b7" origin="Generated by Gradle"/>
          </artifact>
@@ -775,6 +778,9 @@
          <artifact name="protoc-gen-grpc-java-1.42.1-windows-x86_64.exe">
             <sha256 value="cf8a24fd65e2e243aed74f79589d9b0194fd1f7a70063fd523cc0baeb44532a9" origin="Manually computed by Alva"/>
          </artifact>
+         <artifact name="protoc-gen-grpc-java-1.42.1-linux-aarch_64.exe">
+            <sha256 value="9da908610c3006b9a8d27d790a93ad961fb881dda3335b4b4a3810425eff913b" origin="Manually computed by Alva"/>
+         </artifact>
          <artifact name="protoc-gen-grpc-java-1.42.1.pom">
             <sha256 value="9856d0a3e07df312825e698082b6ec6401cd15814ca74092ae58084f4925e784" origin="Generated by Gradle"/>
          </artifact>
@@ -1752,82 +1758,70 @@
             <sha256 value="0859ba0d5cfeefb13964e5862c036faa48a0bccff4932638fb13fe3445df33f7" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.openjfx" name="javafx" version="16">
-         <artifact name="javafx-16.pom">
-            <sha256 value="18d9784212d04475bfe4a5f4038e0fc78146f9a721eb6b9a52955d3b4b20d3ca" origin="Generated by Gradle"/>
+      <component group="org.openjfx" name="javafx" version="17.0.1">
+         <artifact name="javafx-17.0.1.pom">
+	     <sha256 value="4360be61425322ead03681349d99216b5203342a0a07f7a1c486316926661857" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.openjfx" name="javafx-base" version="16">
-         <artifact name="javafx-base-16-linux.jar">
-            <sha256 value="b825e220d685ecbd77e76f2cd52793132e6c9a10e23ee3361673cb29033413c0" origin="Generated by Gradle"/>
-         </artifact>
-         <artifact name="javafx-base-16-mac.jar">
-            <sha256 value="8cb4a023706d392d0a733aaee41be839e8418448ab0090a8115a9b909d595c77" origin="Generated by Gradle"/>
+      <component group="org.openjfx" name="javafx-base" version="17.0.1">
+         <artifact name="javafx-base-17.0.1-linux-aarch64.jar">
+            <sha256 value="248d7fa222365d5843a77424c2d0af2d3a660a40995045a53ae151c55710e55d" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-base-16-win.jar">
-            <sha256 value="23abcdffb6f92d8b37531080682034d01c177f1229118a2f7646331c51c6ed63" origin="Manually computed by Alva"/>
+         <artifact name="javafx-base-17.0.1-linux.jar">
+            <sha256 value="01d1b7fd8b84e14ad12b54abfcbc41fa8d223757a63bf988b4a33dad1060616e" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-base-16.jar">
-            <sha256 value="036955291b3633b6e11106df315f7a561218d31dcb4280078fe4d2414925f557" origin="Generated by Gradle"/>
+         <artifact name="javafx-base-17.0.1.jar">
+            <sha256 value="045700bcabd5441a50964944f38babbee8fc2e8159179b8cb5e64d18274e3853" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-base-16.pom">
-            <sha256 value="09fe0f2eda8b6f3d4c55b28e32b6b7b2782847add96a686d3048753baa781901" origin="Generated by Gradle"/>
+         <artifact name="javafx-base-17.0.1.pom">
+            <sha256 value="0ffb7659dc3aaa7043baa70566da558736614587d41caa0384fad59d7228b30c" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.openjfx" name="javafx-controls" version="16">
-         <artifact name="javafx-controls-16-linux.jar">
-            <sha256 value="fd0aba38a0dde9836845c6d671501f4c30e6cff6f2d72748f75742dbcfc74df9" origin="Generated by Gradle"/>
+      <component group="org.openjfx" name="javafx-controls" version="17.0.1">
+         <artifact name="javafx-controls-17.0.1-linux-aarch64.jar">
+            <sha256 value="a27e140ebc3b49289379e54d2d0eb76e42da56645547663f827ed6378ee7f733" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-controls-16-mac.jar">
-            <sha256 value="4add6fdf120ab9c784dc6e700c158d411d9371aaba7bbb61ad9f9d016f2cce44" origin="Generated by Gradle"/>
+         <artifact name="javafx-controls-17.0.1-linux.jar">
+            <sha256 value="b72463867e5098f8df4a0e4c833331ebfe1553ce37a347a33342343cb028da06" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-controls-16-win.jar">
-            <sha256 value="a7f6e4757163c38a5e6cf26b426e9daf788ad1b57513111d362b3bbbc298d13b" origin="Manually computed by Alva"/>
+         <artifact name="javafx-controls-17.0.1.jar">
+            <sha256 value="51d698cac8627e221152b4c421900f73f4af5abcd517008e695e43e22c40ec33" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-controls-16.jar">
-            <sha256 value="dfdbe63f9717b2cd84c9fd34b28a8ddffdbe25cc1e4c2ff9f171f07ca725e0f4" origin="Generated by Gradle"/>
-         </artifact>
-         <artifact name="javafx-controls-16.pom">
-            <sha256 value="1769aa2547256cfe316387d78375056587283b63f0614fa6e9b59231ef90edd0" origin="Generated by Gradle"/>
+         <artifact name="javafx-controls-17.0.1.pom">
+            <sha256 value="e0542cc8528fe825402c480da2a7e149401bdb3b943849f4a1f46939ff57bdd9" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.openjfx" name="javafx-fxml" version="16">
-         <artifact name="javafx-fxml-16-linux.jar">
-            <sha256 value="65249a5a47357283f21c5fa85b2e91255f7e5b0b86a2ec3dd2cc220541d7ae0b" origin="Generated by Gradle"/>
-         </artifact>
-         <artifact name="javafx-fxml-16-mac.jar">
-            <sha256 value="b722e590930180ff7c43d34281202251e1fe8d1f81b16098cda78600780b7f46" origin="Generated by Gradle"/>
-         </artifact>
-         <artifact name="javafx-fxml-16-win.jar">
-            <sha256 value="e8313ffb783c26acbbc1267448bbfdf2f05126e5845a06c6f29a43db7483606d" origin="Manually computed by Alva"/>
+      <component group="org.openjfx" name="javafx-fxml" version="17.0.1">
+         <artifact name="javafx-fxml-17.0.1-linux-aarch64.jar">
+            <sha256 value="0d00d7a40b93ca68b2063f450f131cbb9e6a7fe3b98318304c65056f66ab872b" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-fxml-16.pom">
-            <sha256 value="7b3b1a717f5d3a67f1dadcc880de3677a25a5d4e8004b75c61cec8b044b013cd" origin="Generated by Gradle"/>
+         <artifact name="javafx-fxml-17.0.1-linux.jar">
+            <sha256 value="6b64a738afbb5acd100ca4af2f91561525fe812fe4dd39299c52a51af33d1090" origin="Generated by Gradle"/>
          </artifact>
+         <artifact name="javafx-fxml-17.0.1.pom">
+            <sha256 value="3c9ed8df3409c3ba570cd0879c31eb560bac3fddb9cd191921af0f3a85fa769b" origin="Generated by Gradle"/>
+          </artifact>
       </component>
-      <component group="org.openjfx" name="javafx-graphics" version="16">
-         <artifact name="javafx-graphics-16-linux.jar">
-            <sha256 value="a2f5e1ea5aeb3ae57e63a1c853a4edf1e38b6f2fe76997ab864ad8b3c54bed53" origin="Generated by Gradle"/>
+      <component group="org.openjfx" name="javafx-graphics" version="17.0.1">
+         <artifact name="javafx-graphics-17.0.1-linux-aarch64.jar">
+            <sha256 value="816b30d6ced805c18355fb8437903df8e7e6d971e62924ef14c31651933ed24b" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-graphics-16-mac.jar">
-            <sha256 value="23a67ad877f283039a20dd827f68988c1f952fe4958d039c006762883f1f04ab" origin="Generated by Gradle"/>
+         <artifact name="javafx-graphics-17.0.1-linux.jar">
+            <sha256 value="36b5f99ede138182c08fdff649d68dcbe7681e0cb61ef4bc8367fea8a0118e35" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-graphics-16-win.jar">
-            <sha256 value="78124668c64db443cf3e105b9c2f6d7061e7c72ad5ad2de63a13adc46ef2ca8c" origin="Manually computed by Alva"/>
+         <artifact name="javafx-graphics-17.0.1.jar">
+            <sha256 value="53d60cef64ab6a1549da4d0239c009f8ef8084b62ecd18c3bda782b4d6520a8f" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-graphics-16.jar">
-            <sha256 value="77533b2922a853a3e1350c8e6650f6cf746000d20efef69119c6324086883b95" origin="Generated by Gradle"/>
+         <artifact name="javafx-graphics-17.0.1.pom">
+            <sha256 value="5b1ed9d6a7dd5dd20103a4a7fd4c52b462c175c44658eb5b8d7fd5bd92c85231" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="javafx-graphics-16.pom">
-            <sha256 value="b8fb99688eccae62be724bd72b34dfff1f8e1cddbe44649f5ef9a082e520c47e" origin="Generated by Gradle"/>
+       </component>
+           <component group="org.openjfx" name="javafx-plugin" version="0.0.11">
+         <artifact name="javafx-plugin-0.0.11.jar">
+            <sha256 value="ba87dcbdb74c6e3aa954f621ff5044cfb062a772c3407f39cca7830618c7bef6" origin="Generated by Gradle"/>
          </artifact>
-      </component>
-      <component group="org.openjfx" name="javafx-plugin" version="0.0.10">
-         <artifact name="javafx-plugin-0.0.10.jar">
-            <sha256 value="d03e96d9e27a7461bce6c05b537d36c22dc84ecb94d5c05d5ee967577a203ed5" origin="Generated by Gradle"/>
-         </artifact>
-         <artifact name="javafx-plugin-0.0.10.pom">
-            <sha256 value="b3d28522fe9423202d79d1cf87c4afa18ebdd44ea2e9a9dbcf5faf289d65318b" origin="Generated by Gradle"/>
+         <artifact name="javafx-plugin-0.0.11.pom">
+            <sha256 value="51f70854b5018be5cfbf13b97d9d3fb207dbe8e52466c2f9d5a91c44b8ff69fa" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.opentest4j" name="opentest4j" version="1.2.0">
@@ -1837,6 +1831,14 @@
          <artifact name="opentest4j-1.2.0.pom">
             <sha256 value="a96e671816c1ff8803bdec74c9241f025bdfb277da5d2b4ee02266405936f994" origin="Generated by Gradle"/>
          </artifact>
+      </component>
+         <component group="org.rationalityfrontline.workaround" name="jfoenix" version="17.0.1">
+         <artifact name="jfoenix-17.0.1.jar">
+            <sha256 value="30cabdf875998d0b107e41b051c867cc275003f326c1795f0256f9a900a6d872" origin="Generated by Gradle"/>
+         </artifact>
+         <artifact name="jfoenix-17.0.1.module">
+            <sha256 value="ad7d70774de3c6866866ae7640a431a9308da32eb347a8cd8246842bedd6658f" origin="Generated by Gradle"/>
+         </artifact>
       </component>
       <component group="org.ow2" name="ow2" version="1.5">
          <artifact name="ow2-1.5.pom">

@richardalg
Copy link

@gus4rs
I've put some comments up on a fork I created for bisq-1.9.12 on the raspberry pi.
I have applied your patches to source code for bisq-1.9.14 downloaded from the bisq website.
My build fails with messages saying that the java compile was NOT FOUND and the the zulu11 code could not be probed - despite it being where it was supposed to be.
I'll have to find some time to look deeper into this, but in the mentime, if you have any hints or comments, I'll be grateful.

@richardalg
Copy link

It turned out that one of the unzipped files did not have write permission, not that difficult to fix.
but my attempts to get 1.9.14 up and running on my Pi are unsuccessful thus far.
gradlew builds, but invoking the bisq desktop as before, this quickly fails.
A window appears with a message about NodeHelper.treeShowingProperty.
Probably this bug : Recent change in JavaFX (17-ea+2) breaks JFXProgressBar · Issue #1187 · sshahine/JFoenix · GitHub
Recent change in JavaFX (17-ea+2) breaks JFXProgressBar

desktop src MainView has several instances of JFXProgressBar
which leaves me trying to figure out what to do next?
I suppose the next step is to wipe out all my installed java and try again?
Any thoughts anyone?

@tmakerman
Copy link
Author

Sorry @richardalg not sure. I haven't run on RPi for a while. I do remember running into issue somewhere along the way with that library, but I don't remember specifics. I saw at this comment
bisq-network/bisq#6758 (comment)
@napoly says they "Changed it for pure JavaFX ProgressBar"
maybe you could ask them to elaborate

@napoly
Copy link

napoly commented Mar 13, 2024

there is not enough gun powder to push this for Bisq as it all goes to Bisq 2.. I have done this for Haveno (which is a fork of Bisq) mainly in this commit: haveno-dex/haveno@c777133 it uses the newest java 21 with newest gradle 8.6 and newest java fx 21.. (not sure how it will act on Raspberry Pi)

@tmakerman
Copy link
Author

Thank you for the note @napoly

@richardalg
Copy link

richardalg commented Mar 15, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment