Using Fedora Linux on Power9 ? GNUcode.org

Using Fedora Linux on Power9

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 &
fi

I 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 e2fa3df

You 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_HOME

I 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.so

Well 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-java

The files in ./build/ are the autotools binaries.

$ find . -name '*libsecp256k1.so*'
./.libs/libsecp256k1.so.0.0.0
./.libs/libsecp256k1.so.0
./.libs/libsecp256k1.so

Then 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.so

Then 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.so

libzbar, which is sparrow's QR handling C library, is already packaged by Fedora.

$ sudo dnf install zbar-java zbar-libs zbar-devel

I 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