by Joshua Branson ? September 29, 2025
My friend wants to use bitcoin things on his Talos II power9 computer. He prefers Chimera/Linux, but as an experiment, I installed Fedora. Let's see if we can get sparrow wallet an bitcoin-knots to run eh?
Setting up bitcoind
I was able to download bitcoin knots and run that binary directly.
$ cat ~/.bash_profile | grep -A 10 bitcoin
# I tried setting up bitcoin-knots via systemd, but seLinux keeps blocking
# it from running.  :(
bitcoind=$(ps -e | grep bitcoind)
if [ -z "$bitcoind" ]; then
    setsid /home/jeff/.local/bin/bitcoind -datadir=/home/jeff/.bitcoin/ >/dev/null 2>&1 < /dev/null &
fiI know that the above looks disgusting, but I could not figure out how to set SELinux to run bitcoind. So for now, I am doing it the way I did it above.
Fedora also adds ~/.local/bin/ to the path, so I added softlinks from there to ~/.local/bin/bitcoin-29.1.knots20250903/bin/.
Running Sparrow Wallet
Sparrow wallet is such a pain to run!
$ git clone --recursive
$ git fetch origin 2.3.0
From https://github.com/sparrowwallet/sparrow
* tag                 2.3.0      -> FETCH_HEAD
$ git checkout -b 2.3.0 e2fa3dfYou need java version 22 installed. Fedora only packages version 21.
But I can download a later version: ~/prog/OpenJDK22/jdk-22.0.2+12/bin/.  Version 22 is the recommended java version as of Sept 26, 2025.  Let's add that to the path.  And set JAVA_HOME.
$ grep -E 'PATH|JAVA_HOME' ~/.bash_profile
PATH=/home/jeff/prog/OpenJDK22/jdk-22.0.2+9/bin:$PATH
export PATH
JAVA_HOME=/home/jeff/prog/OpenJDK22/jdk-22.0.2+9/
export JAVA_HOMEI file a bug with sparrow wallet: https://github.com/sparrowwallet/sparrow/issues/1835
I need to tweak the javafx-gradle-plugin add these two lines:
TODO: FIXME: this might be sparrow source code instead...
$ grep ppc `find . -name '*JavaFXPlatform.java'`
LINUX_PPCLE64("linux-ppcle64", "linux-ppcle_64"),
LINUX_PPCLE64_MONOCLE("linux-ppcle64-monocle", "linux-ppcle_64-monocle"),./sparrow still gives this error:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/nativeutils3241619385560/libsecp256k1.so: /tmp/nativeutils3241619385560/libsecp256k1.so: cannot open shared object file: No such file or directory (Possible cause: can't load AMD 64 .so on a Power PC 64 LE platform)Ok, so sparrow is trying to load the amd64 version of libsecp256k1.
$ find . -name '*libsecp256k1*' | grep linux
./drongo/src/main/resources/native/linux/aarch64/libsecp256k1.so
./drongo/src/main/resources/native/linux/x64/libsecp256k1.so
./drongo/build/resources/main/native/linux/aarch64/libsecp256k1.so
./drongo/build/resources/main/native/linux/x64/libsecp256k1.soWell let's go ahead and build the a ppc64le version of this library. Craig told me to "Try building libsecp256k1 according to these instructions: https://bitcoin-s.org/docs/1.9.5/secp256k1/jni-modify#adding-to-bitcoin-s - the referenced fork is here: https://github.com/bitcoin-s/secp256k1-zkp/".
$ git clone https://github.com/bitcoin-s/secp256k1-zkp/
$ ./autogen.sh
$ ./configure --enable-jni --enable-experimental --enable-module-ecdh \
$             --enable-module-schnorrsig --enable-module-ecdsa-adaptor \
$             --with-asm=no
$ make CFLAGS="-std=c99"
$ make check
$ make check-javaThe files in ./build/ are the autotools binaries.
$ find . -name '*libsecp256k1.so*'
./.libs/libsecp256k1.so.0.0.0
./.libs/libsecp256k1.so.0
./.libs/libsecp256k1.soThen I copied the libsecp256k1.so.5.0.0 into the drogo directory (The libsecp256k1.so file is a symlink):
$ mkdir ./src/main/resources/native/linux/ppc64le
$ mkdir ./build/resources/main/native/linux/ppc64le
$ cp ~/prog/secp256k1/.libs/libsecp256k1.so.5.0.0 \
   ~/prog/sparrow/drongo/build/resources/main/native/linux/ppc64le/libsecp256k1.so
$ cp ~/prog/secp256k1/.libs/libsecp256k1.so.5.0.0 \
   ~/prog/sparrow/drongo/src/main/resources/native/linux/ppc64le/libsecp256k1.soThen I had these two lines to a drongo java file.
 $ grep ppc `find . -name 'Secp256k1Context.java'`
} else if (osArch.equals("ppc64le")){
  NativeUtils.loadLibraryFromJar("/native/linux/ppcle64/libsecp256k1.so");And sparrow still gives me a linking error. I installed the "Ark" graphical program to inspect the $sparrow-src/drogo/build/libs/drogo.jar.  As far as I can tell, the drogo.jar file is correctly storing the libsecp256k1.so file.  One can easily check this with file lib.so or readelf -h lib.so.
I can trick sparrow wallet into running if I delete ~/.sparrow/, mis-spell the "libsecp256k1.so" in Secp256k1Context.java, and run ~/prog/sparrow/sparrow.  Unfortunately, this means any bitcoin transaction is impossible.  :(
Sparrow also seems to have 2 C libraries that it needs. I will need to eventually make these work on power.
$ cd ~/prog/sparrow/build/resources/main/native/linux/x64/
$ ls
libbwt_jni.so
libzbar.solibzbar, which is sparrow's QR handling C library, is already packaged by Fedora.
$ sudo dnf install zbar-java zbar-libs zbar-develI may need to get libbwt & libbwt_jni set up for power9 as well.
DONE javaFX hello world
At first I was not sure that javaFX would run on power9. So I made a really simple program to show that it does.
# dnf install openjfx
$ dnf info openjfx | grep Version
Version         : 17.0.13.0
$ java --version
javac --module-path /lib/jvm/openjfx/ --add-modules javafx.controls,javafx.fxml JavaFXApp.java
java --module-path /lib/jvm/openjfx/ --add-modules javafx.controls  JavaFXApp
openjdk 21.0.8 2025-07-15
OpenJDK Runtime Environment (Red_Hat-21.0.8.0.9-1) (build 21.0.8+9)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.8.0.9-1) (build 21.0.8+9, mixed mode, sharing)DONE let's build javaFX from source
I'm going to build javaFX version 24 from java version 22. According to search.brave.com, I need javaFX version 22 or later, if I am using java version 22.
$ git remote -v
$ git fetch origin jfx18
$ git checkout -b jfx18 origin/jfx18
$ sh gradlew # build fails
$ git fetch origin jfx22
$ git checkout -b jfx22 origin/jfx22
$ sh gradlew # build fails
$ git fetch origin jfx24
$ git checkout -b jfx24 origin/jfx24
$ sh gradlew # build works, but I had to fix some source code