Open nyxnor opened 2 years ago
Hi - thanks for attempting a build, and for posting your detailed notes!
You should be able to get this fixed with
sudo apt-get install rpm-build
Debian typically doesn't have this package by default. You can also skip creating the installers altogether by editing build.gradle
and changing line 201 to:
skipInstaller = true
I will create more detailed instructions on creating a reproducible build before releasing the next version. Note that you will need to have the same version of the JDK to create the same binaries as the official releases (starting from 1.5.0). It's likely this is already the case (check with java --version
) but otherwise:
sudo apt-get install -y adoptopenjdk-16-hotspot=16.0.1+9-3
java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
The above does not show the -3
of the version. This does:
dpkg -l adoptopenjdk-16-hotspot
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=======================-============-============-=============================================================
ii adoptopenjdk-16-hotspot 16.0.1+9-3 amd64 OpenJDK Development Kit 16 (JDK) with Hotspot by AdoptOpenJDK
sudo apt-get install -y rpm
sudo ./gradlew jpackage
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :jpackage
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
[scrubbed] Creating association with null extension.
BUILD SUCCESSFUL in 55s
19 actionable tasks: 1 executed, 18 up-to-date
:100:
Complete debian install:
cd
sudo apt-get install -y wget apt-transport-https gnupg rpm
wget https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public
gpg --no-default-keyring --keyring ./adoptopenjdk-keyring.gpg --import public
gpg --no-default-keyring --keyring ./adoptopenjdk-keyring.gpg --export --output adoptopenjdk-archive-keyring.gpg
rm adoptopenjdk-keyring.gpg
sudo mv adoptopenjdk-archive-keyring.gpg /usr/share/keyrings
echo "deb [signed-by=/usr/share/keyrings/adoptopenjdk-archive-keyring.gpg] https://adoptopenjdk.jfrog.io/adoptopenjdk/deb $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/adoptopenjdk.list
sudo apt-get update -y
sudo apt-cache search adoptopenjdk
sudo apt-get install -y adoptopenjdk-16-hotspot=16.0.1+9-3
git clone --recursive git@github.com:sparrowwallet/sparrow.git
cd sparrow
git reset --hard 0b4785e01c72e9a819fea040d1fc9f667ea46c87 # git checkout 1.5.0-beta1
sudo ./gradlew jpackage
Please provide clear instructions how to verify. I noticed my packages do not have the -beta1
in the name, even tough I used the 1.5.0-beta1 tag.
sudo find . -name "*.deb"
./build/jpackage/sparrow_1.5.0-1_amd64.deb
cd build/jpackage/
ls
Sparrow sparrow_1.5.0-1_amd64.deb sparrow-1.5.0-1.x86_64.rpm
drwxr-xr-x 4 root root 4096 Sparrow
-rw-r--r-- 1 root root 98327380 sparrow_1.5.0-1_amd64.deb
-rw-r--r-- 1 root root 102586743 sparrow-1.5.0-1.x86_64.rpm
sha256sum sparrow_1.5.0-1_amd64.deb
761944923ace5ee4b0fcf2fe98b93662e9e6e9fdea9aa4d54b69929cbb5de437 sparrow_1.5.0-1_amd64.deb
sha256sum sparrow-1.5.0-1.x86_64.rpm
4098db8fe2037e1f69c19b8c588605bd4ac0ffed48d8e98cf2b41d3a8a11e6f9 sparrow-1.5.0-1.x86_64.rpm
git describe --tags
1.5.0-beta1
Trying again:
git clone --recursive git@github.com:sparrowwallet/sparrow.git
cd sparrow/
git checkout 1.5.0-beta1
sudo ./gradlew jpackage
> Task :createDelegatingModules
/home/nyxnor/Documents/git/sparrow/build/jlinkbase/tmpjars/org.jdbi.v3.sqlobject/module-info.java:2: warning: [module] module name component v3 should avoid terminal digits
open module org.jdbi.v3.sqlobject {
^
1 warning
/home/nyxnor/Documents/git/sparrow/build/jlinkbase/tmpjars/org.apache.commons.lang3/module-info.java:2: warning: [module] module name component lang3 should avoid terminal digits
open module org.apache.commons.lang3 {
^
1 warning
/home/nyxnor/Documents/git/sparrow/build/jlinkbase/tmpjars/org.antlr.antlr4.runtime/module-info.java:2: warning: [module] module name component antlr4 should avoid terminal digits
open module org.antlr.antlr4.runtime {
^
1 warning
/home/nyxnor/Documents/git/sparrow/build/jlinkbase/tmpjars/org.jdbi.v3.core/module-info.java:2: warning: [module] module name component v3 should avoid terminal digits
open module org.jdbi.v3.core {
^
1 warning
/home/nyxnor/Documents/git/sparrow/build/jlinkbase/tmpjars/io.reactivex.rxjava2/module-info.java:2: warning: [module] module name component rxjava2 should avoid terminal digits
open module io.reactivex.rxjava2 {
^
1 warning
/home/nyxnor/Documents/git/sparrow/build/jlinkbase/tmpjars/de.mkammerer.argon2/module-info.java:2: warning: [module] module name component argon2 should avoid terminal digits
open module de.mkammerer.argon2 {
^
1 warning
> Task :jlink
WARNING: signed modular JAR /home/nyxnor/Documents/git/sparrow/build/jlinkbase/jlinkjars/bcprov-jdk15on-1.64.jar is currently not supported
> Task :jpackage
[23:23:48.624] Creating association with null extension.
[23:23:48.625] Creating association with null extension.
[23:23:48.869] Creating association with null extension.
[23:23:48.869] Creating association with null extension.
[23:24:02.119] Creating association with null extension.
[23:24:02.119] Creating association with null extension.
[23:24:04.530] Creating association with null extension.
[23:24:04.530] Creating association with null extension.
BUILD SUCCESSFUL in 2m 26s
19 actionable tasks: 19 executed
See the warning above about bcprovv-jdk15on-1.64.jar
.
cd build/jpackage/
ls -l
total 196216
drwxr-xr-x 4 root root 4096 Sparrow
-rw-r--r-- 1 root root 98329612 sparrow_1.5.0-1_amd64.deb
-rw-r--r-- 1 root root 102586919 sparrow-1.5.0-1.x86_64.rpm
I am in the sparrow telegram group if you prefer for fast test instructions.
Excellent, it worked, Final version POSIX compliant but uses debian package manager and sources.list.d, which is different for other distros. Adapt accordingly with this guide https://adoptopenjdk.net/installation.html#.
#!/bin/sh
GIT_TAG="1.5.0-beta1"
ADOPTOPENJDK_VERSION_MAJOR="16"
ADOPTOPENJDK_VERSION_COMPLETE="16.0.1+9-3"
CRAIG_64BIT_KEY="E946 1833 4C67 4B40" # spaced out | source: https://keybase.io/craigraw
CRAIG_EMAIL="craigraw@gmail.com"
NESSARY_PACKAGES="wget apt-transport-https gnupg rpm"
cd || exit 1
mkdir sparrow
cd sparrow || exit 1
mkdir sparrow-build
cd sparrow-build || exit 1
printf "\n# Installing necessary packages\n\n"
sudo apt install -y ${NESSARY_PACKAGES}
printf "\n\n# Adding adoptopenjdk signing key\n\n"
wget https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public
gpg --no-default-keyring --keyring ./adoptopenjdk-keyring.gpg --import public
gpg --no-default-keyring --keyring ./adoptopenjdk-keyring.gpg --export --output adoptopenjdk-archive-keyring.gpg
rm adoptopenjdk-keyring.gpg
sudo mv adoptopenjdk-archive-keyring.gpg /usr/share/keyrings
printf %s"deb [signed-by=/usr/share/keyrings/adoptopenjdk-archive-keyring.gpg] https://adoptopenjdk.jfrog.io/adoptopenjdk/deb $(lsb_release -sc) main\n" >/dev/null | sudo tee /etc/apt/sources.list.d/adoptopenjdk.list
printf "\n\n# Installing adoptopenjdk\n\n"
sudo apt update -y
sudo apt install -y adoptopenjdk-"${ADOPTOPENJDK_VERSION_MAJOR}"-hotspot="${ADOPTOPENJDK_VERSION_COMPLETE}"
printf "\n\n# Cloning recursively sparrow git repository\n\n"
git clone --recursive git@github.com:sparrowwallet/sparrow.git
cd sparrow || exit 1
git checkout --quiet "${GIT_TAG}"
printf "\n\n# Building binaries from source\n\n"
sudo ./gradlew jpackage
cd || exit 1
cd sparrow || exit 1
mkdir sparrow-github-binaries
cd sparrow-github-binaries || exit 1
printf "\n\n# Downloading Craig's pgp pub key and verifying with indicated 64bit key\n\n"
curl https://keybase.io/craigraw/pgp_keys.asc | gpg --import
KEY_VERIFICATION=$(gpg --fingerprint "${CRAIG_EMAIL}" | grep -c "${CRAIG_64BIT_KEY}")
[ "${KEY_VERIFICATION}" -ne 1 ] && { printf "64bit key wanted does NOT match the imported key\n" ; exit 1 ; }
printf "\n\n# Dowloading binaries provided on Github\n\n"
wget https://github.com/sparrowwallet/sparrow/releases/download/"${GIT_TAG}"/sparrow-"${GIT_TAG}"-manifest.txt
wget https://github.com/sparrowwallet/sparrow/releases/download/"${GIT_TAG}"/sparrow-"${GIT_TAG}"-manifest.txt.asc
wget https://github.com/sparrowwallet/sparrow/releases/download/"${GIT_TAG}"/sparrow-"${GIT_TAG}".tar.gz
VERIFY_MANIFEST_KEY=$(printf %s"$(gpg --verify sparrow-${GIT_TAG}-manifest.txt.asc sparrow-${GIT_TAG}-manifest.txt 2>&1)" | grep -c "Good signature")
[ "${VERIFY_MANIFEST_KEY}" -ne 1 ] && { printf "WARNING: manifest.txt.asc does NOT verify manifest.txt with a 'Good Signature'\n" ; exit 1 ; }
COMPARE_MANIFEST_WITH_TARGZ=$(sha256sum -c sparrow-"${GIT_TAG}"-manifest.txt --ignore-missing | grep -c "sparrow-${GIT_TAG}.tar.gz: OK")
[ "${COMPARE_MANIFEST_WITH_TARGZ}" -ne "1" ] && { printf %s"WARNING: manifest.txt sha256sum does NOT match with sparrow-${GIT_TAG}.tar.gz\n" ; exit 1 ; }
sudo tar -xf sparrow-"${GIT_TAG}".tar.gz
printf "\n"
sha256sum ~/sparrow/sparrow-github-binaries/Sparrow/bin/Sparrow # just to send to stdout
sha256sum ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/bin/Sparrow # just to send to stdout
SHASUM_DOWNLOADED_BINARIES=$(sha256sum ~/sparrow/sparrow-github-binaries/Sparrow/bin/Sparrow | cut -c1-64)
SHASUM_BUILT_BINARIES=$(sha256sum ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/bin/Sparrow | cut -c1-64)
[ "${SHASUM_DOWNLOADED_BINARIES}" = "${SHASUM_BUILT_BINARIES}" ] \
&& printf %s"\nEXCELLENT: Build is Reproducible for TAG=${GIT_TAG} --> Binaries provided on Github does match built binaries\n" \
|| printf %s"\nWARNING: Build is NOT reproducible for TAG=${GIT_TAG} --> Binaries provided on Github does NOT match built binaries\n"
cd || exit 1
Thanks for this, good work!
Note that you are checking the hash on the bin/Sparrow
executable only - it is better IMO to check all the files in the Sparrow
folder (for example using diff -r
).
I've created a first draft of instructions for creating a reproducible build at https://github.com/sparrowwallet/sparrow/blob/master/docs/reproducible.md. Feedback appreciated.
I'd like to add your script at the end for Debian/Ubuntu users - let me know if that's ok?
I'd like to add your script at the end for Debian/Ubuntu users - let me know if that's ok?
Of course, let me compare all of the file first as explained above and include in the script.
Running:
diff -r ~/sparrow/sparrow-github-binaries/Sparrow/ ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/
:( lib/runtime/lib/modules differ
Binary files /home/nyxnor/sparrow/sparrow-github-binaries/Sparrow/lib/runtime/lib/modules and /home/nyxnor/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules differ
$ sha256sum ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules
cfee1336f60670911a0696f88c486b60da205c84108921e074ef68618b284766 /home/nyxnor/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules
$ sha256sum ~/sparrow/sparrow-github-binaries/Sparrow/lib/runtime/lib/modules
22da75d7f2d5916450c4d2724309b1e9060da09dffc2afa06435e8d894bcbf53 /home/nyxnor/sparrow/sparrow-github-binaries/Sparrow/lib/runtime/lib/modules
Can you verify if yours match with mine?
java --version
java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
Damn, that's unfortunate. Would it be possible to install diffoscope to check what the differences are in the modules
file?
diffoscope ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules ~/sparrow/sparrow-github-binaries/Sparrow/lib/runtime/lib/modules
+[ Too much input for diff (SHA256: 2e1bf91ea64db6fab958dfea600b32564953d58432e232c530edb4651d966a45) ]
Sorry, I missed out a step. For each modules
file, you need to extract first using jimage
(which you should have as part of the JDK install. e.g.
jimage extract ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules
It will extract to whatever folder you're currently in, so I find it best to create two empty folders first, one for each module.
You can then run diffoscope to compare the folders against each other, which should be more manageable for it to handle.
When the result comes, will post, seems to be a long task.
It did not save to a file by default, will have to run again. From stdout it just seems to be the modificaton time of the file:
│ │ │ │ │ @@ -1,8 +1,8 @@
│ │ │ │ │
│ │ │ │ │ Size: 4096 Blocks: 8 IO Block: 4096 directory
│ │ │ │ │ Links: 3
│ │ │ │ │ Access: (0755/drwxr-xr-x) Uid: ( 1000/ nyxnor) Gid: ( 1000/ nyxnor)
│ │ │ │ │
│ │ │ │ │ -Modify: 2021-09-09 13:35:11.210034324 +0000
│ │ │ │ │ +Modify: 2021-09-09 13:36:13.711649829 +0000
│ │ │ │ │ --- build/modules-extracted/simple.json.rpc.server/com/github/arteam/simplejsonrpc
│ │ │ │ ├── +++ github-binaries/modules-extracted/simple.json.rpc.server/com/github/arteam/simplejsonrpc
│ │ │ │ │ ├── stat {}
│ │ │ │ │ │ @@ -1,8 +1,8 @@
│ │ │ │ │ │
│ │ │ │ │ │ Size: 4096 Blocks: 8 IO Block: 4096 directory
│ │ │ │ │ │ Links: 3
│ │ │ │ │ │ Access: (0755/drwxr-xr-x) Uid: ( 1000/ nyxnor) Gid: ( 1000/ nyxnor)
│ │ │ │ │ │
│ │ │ │ │ │ -Modify: 2021-09-09 13:35:11.210034324 +0000
│ │ │ │ │ │ +Modify: 2021-09-09 13:36:13.711649829 +0000
│ │ │ │ │ │ --- build/modules-extracted/simple.json.rpc.server/com/github/arteam/simplejsonrpc/server
│ │ │ │ │ ├── +++ github-binaries/modules-extracted/simple.json.rpc.server/com/github/arteam/simplejsonrpc/server
Diffoscope can be a bit too picky sometimes!
I think it would help to use diff -r
on the two folders to narrow things down. Then diffoscope can be used directly on the files that actually differ in content, not date (which is immaterial to us here). Sorry for not providing clear instructions from the start.
nyxnor@momma-deb:~/sparrow/modules$ diffoscope build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/Network.class github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/Network.class
--- build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/Network.class
+++ github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/Network.class
├── procyon -ec {}
@@ -4,15 +4,14 @@
public enum Network
{
MAINNET("mainnet", 0, "1", 5, "3", "bc", ExtendedKey.Header.xprv, ExtendedKey.Header.xpub, 8332),
TESTNET("testnet", 111, "mn", 196, "2", "tb", ExtendedKey.Header.tprv, ExtendedKey.Header.tpub, 18332),
REGTEST("regtest", 111, "mn", 196, "2", "bcrt", ExtendedKey.Header.tprv, ExtendedKey.Header.tpub, 18443),
SIGNET("signet", 111, "mn", 196, "2", "tb", ExtendedKey.Header.tprv, ExtendedKey.Header.tpub, 38332);
- public static final String BLOCK_HEIGHT_PROPERTY = "com.sparrowwallet.blockHeight";
private final String name;
private final int p2pkhAddressHeader;
private final String p2pkhAddressPrefix;
private final int p2shAddressHeader;
private final String p2shAddressPrefix;
private final String bech32AddressHrp;
private final ExtendedKey.Header xprvHeader;
nyxnor@momma-deb:~/sparrow/modules$ diffoscope build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType$9.class github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType$9.class
--- build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType.class
+++ github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType.class
├── procyon -ec {}
@@ -1064,15 +1064,15 @@
@Override
public TransactionSignature.Type getSignatureType() {
return TransactionSignature.Type.SCHNORR;
}
@Override
public List<PolicyType> getAllowedPolicyTypes() {
- return ((Network.get() == Network.MAINNET && LocalDate.now().isAfter(ScriptType.TAPROOT_MAINNET_ACTIVATION_DATE)) || (System.getProperty("com.sparrowwallet.blockHeight") != null && Integer.parseInt(System.getProperty("com.sparrowwallet.blockHeight")) >= 709632) || Network.get() == Network.TESTNET || Network.get() == Network.REGTEST || Network.get() == Network.SIGNET) ? List.of(PolicyType.SINGLE) : Collections.emptyList();
+ return ((Network.get() == Network.MAINNET && LocalDate.now().isAfter(ScriptType.TAPROOT_MAINNET_ACTIVATION_DATE)) || Network.get() == Network.TESTNET || Network.get() == Network.REGTEST || Network.get() == Network.SIGNET) ? List.of(PolicyType.SINGLE) : Collections.emptyList();
}
};
private static final LocalDate TAPROOT_MAINNET_ACTIVATION_DATE;
private final String name;
private final String description;
private final String defaultDerivationPath;
@@ -1253,15 +1253,15 @@
private static /* synthetic */ ScriptType[] $values() {
return new ScriptType[] { ScriptType.P2PK, ScriptType.P2PKH, ScriptType.MULTISIG, ScriptType.P2SH, ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH, ScriptType.P2TR };
}
static {
$VALUES = $values();
- TAPROOT_MAINNET_ACTIVATION_DATE = LocalDate.of(2021, Month.NOVEMBER, 17);
+ TAPROOT_MAINNET_ACTIVATION_DATE = LocalDate.of(2021, Month.NOVEMBER, 22);
SINGLE_KEY_TYPES = new ScriptType[] { ScriptType.P2PK, ScriptType.P2TR };
SINGLE_HASH_TYPES = new ScriptType[] { ScriptType.P2PKH, ScriptType.P2SH, ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH };
ADDRESSABLE_TYPES = new ScriptType[] { ScriptType.P2PKH, ScriptType.P2SH, ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH, ScriptType.P2TR };
NON_WITNESS_TYPES = new ScriptType[] { ScriptType.P2PK, ScriptType.P2PKH, ScriptType.P2SH };
WITNESS_TYPES = new ScriptType[] { ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH, ScriptType.P2TR };
}
}
nyxnor@momma-deb:~/sparrow/modules$ diffoscope build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType.class github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType.class
--- build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType.class
+++ github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/protocol/ScriptType.class
├── procyon -ec {}
@@ -1064,15 +1064,15 @@
@Override
public TransactionSignature.Type getSignatureType() {
return TransactionSignature.Type.SCHNORR;
}
@Override
public List<PolicyType> getAllowedPolicyTypes() {
- return ((Network.get() == Network.MAINNET && LocalDate.now().isAfter(ScriptType.TAPROOT_MAINNET_ACTIVATION_DATE)) || (System.getProperty("com.sparrowwallet.blockHeight") != null && Integer.parseInt(System.getProperty("com.sparrowwallet.blockHeight")) >= 709632) || Network.get() == Network.TESTNET || Network.get() == Network.REGTEST || Network.get() == Network.SIGNET) ? List.of(PolicyType.SINGLE) : Collections.emptyList();
+ return ((Network.get() == Network.MAINNET && LocalDate.now().isAfter(ScriptType.TAPROOT_MAINNET_ACTIVATION_DATE)) || Network.get() == Network.TESTNET || Network.get() == Network.REGTEST || Network.get() == Network.SIGNET) ? List.of(PolicyType.SINGLE) : Collections.emptyList();
}
};
private static final LocalDate TAPROOT_MAINNET_ACTIVATION_DATE;
private final String name;
private final String description;
private final String defaultDerivationPath;
@@ -1253,15 +1253,15 @@
private static /* synthetic */ ScriptType[] $values() {
return new ScriptType[] { ScriptType.P2PK, ScriptType.P2PKH, ScriptType.MULTISIG, ScriptType.P2SH, ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH, ScriptType.P2TR };
}
static {
$VALUES = $values();
- TAPROOT_MAINNET_ACTIVATION_DATE = LocalDate.of(2021, Month.NOVEMBER, 17);
+ TAPROOT_MAINNET_ACTIVATION_DATE = LocalDate.of(2021, Month.NOVEMBER, 22);
SINGLE_KEY_TYPES = new ScriptType[] { ScriptType.P2PK, ScriptType.P2TR };
SINGLE_HASH_TYPES = new ScriptType[] { ScriptType.P2PKH, ScriptType.P2SH, ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH };
ADDRESSABLE_TYPES = new ScriptType[] { ScriptType.P2PKH, ScriptType.P2SH, ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH, ScriptType.P2TR };
NON_WITNESS_TYPES = new ScriptType[] { ScriptType.P2PK, ScriptType.P2PKH, ScriptType.P2SH };
WITNESS_TYPES = new ScriptType[] { ScriptType.P2SH_P2WPKH, ScriptType.P2SH_P2WSH, ScriptType.P2WPKH, ScriptType.P2WSH, ScriptType.P2TR };
}
}
nyxnor@momma-deb:~/sparrow/modules$ diffoscope build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/Wallet.class github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/Wallet.class
--- build/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/Wallet.class
+++ github-binaries/modules-extracted/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/Wallet.class
├── procyon -ec {}
│ @@ -200,18 +200,14 @@
final Iterator<Wallet> iterator = this.getChildWallets().iterator();
while (iterator.hasNext()) {
set.remove(((Wallet)iterator.next()).getStandardAccountType());
}
return set.isEmpty();
}
- public boolean isWhirlpoolChildWallet() {
- return !this.isMasterWallet() && StandardAccount.WHIRLPOOL_ACCOUNTS.contains(this.getStandardAccountType());
- }
-
public boolean isWhirlpoolMixWallet() {
return !this.isMasterWallet() && StandardAccount.WHIRLPOOL_MIX_ACCOUNTS.contains(this.getStandardAccountType());
}
public void setName(final String name) {
this.name = name;
}
nyxnor@momma-deb:~/sparrow/modules$ diffoscope build/modules-extracted/java.base/jdk/internal/module/SystemModules$all.class github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules$all.class
nyxnor@momma-deb:~/sparrow/modules$ diffoscope build/modules-extracted/java.base/jdk/internal/module/SystemModules$default.class github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules$default.class
What is can see from the first diff, it was this new commit after the release https://github.com/sparrowwallet/drongo/commit/38783d68a49ecf5d8c8640edb299d693f455b2a9. My guess, I can checkout to any tag on sparrowwallet/sparrow, but it pulls the latest commits in sparrowwallet/drongo. Cloning recursively I see:
Submodule path 'drongo': checked out '38783d68a49ecf5d8c8640edb299d693f455b2a9'
As drongo does not tag to checkout, will need to reset --hard
to a commit before the release, which is https://github.com/sparrowwallet/drongo/commit/0b40c20ab252e29ac192bca34d834b8c3eed04a0
You could do the same tag for drongo OR indicate the commit in your code to act from there, but this is not good I think OR I will need to specify the commit everytime and check drongo repo for the commit hash.
Almost there, let me see the diff again...., will run on a clean machine when this works here.
sh sparrow-build.sh
# Installing necessary packages
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
apt-transport-https is already the newest version (2.2.4).
gnupg is already the newest version (2.2.27-2).
rpm is already the newest version (4.16.1.2+dfsg1-3).
wget is already the newest version (1.21-1+b1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# Adding adoptopenjdk signing key
public [ <=> ] 3.08K --.-KB/s in 0.02s
gpg: keybox './adoptopenjdk-keyring.gpg' created
gpg: key 8AC3B29174885C03: public key "AdoptOpenJDK (used for publishing RPM and DEB files) <adoptopenjdk@gmail.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
# Installing adoptopenjdk
Hit:1 http://deb.debian.org/debian bullseye InRelease
Get:2 http://security.debian.org/debian-security bullseye-security InRelease [44.1 kB]
Get:3 http://deb.debian.org/debian bullseye-updates InRelease [36.8 kB]
Hit:4 https://deb.torproject.org/torproject.org bullseye InRelease
Get:5 http://security.debian.org/debian-security bullseye-security/main Sources [19.4 kB]
Get:6 http://security.debian.org/debian-security bullseye-security/main amd64 Packages [30.4 kB]
Get:7 http://security.debian.org/debian-security bullseye-security/main Translation-en [16.3 kB]
Hit:8 https://packagecloud.io/firstlookmedia/code/debian bullseye InRelease
Fetched 147 kB in 2s (85.9 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
adoptopenjdk-16-hotspot is already the newest version (16.0.1+9-3).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
# Cloning recursively sparrow git repository
Cloning into 'sparrow'...
Enter passphrase for key '/home/nyxnor/.ssh/id_ed25519':
remote: Enumerating objects: 13322, done.
remote: Counting objects: 100% (2535/2535), done.
remote: Compressing objects: 100% (1626/1626), done.
remote: Total 13322 (delta 1172), reused 1801 (delta 494), pack-reused 10787
Receiving objects: 100% (13322/13322), 169.59 MiB | 527.00 KiB/s, done.
Resolving deltas: 100% (6894/6894), done.
Submodule 'drongo' (git@github.com:sparrowwallet/drongo.git) registered for path 'drongo'
Cloning into '/home/nyxnor/sparrow/sparrow-build/sparrow/drongo'...
Enter passphrase for key '/home/nyxnor/.ssh/id_ed25519':
remote: Enumerating objects: 3837, done.
remote: Counting objects: 100% (1465/1465), done.
remote: Compressing objects: 100% (873/873), done.
remote: Total 3837 (delta 561), reused 1137 (delta 260), pack-reused 2372
Receiving objects: 100% (3837/3837), 1.25 MiB | 785.00 KiB/s, done.
Resolving deltas: 100% (1683/1683), done.
Submodule path 'drongo': checked out '38783d68a49ecf5d8c8640edb299d693f455b2a9'
HEAD is now at 0b40c20 support required script types on child wallets
# Building binaries from source
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :createDelegatingModules
/home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/tmpjars/org.jdbi.v3.sqlobject/module-info.java:2: warning: [module] module name component v3 should avoid terminal digits
open module org.jdbi.v3.sqlobject {
^
1 warning
/home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/tmpjars/org.apache.commons.lang3/module-info.java:2: warning: [module] module name component lang3 should avoid terminal digits
open module org.apache.commons.lang3 {
^
1 warning
/home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/tmpjars/org.antlr.antlr4.runtime/module-info.java:2: warning: [module] module name component antlr4 should avoid terminal digits
open module org.antlr.antlr4.runtime {
^
1 warning
/home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/tmpjars/org.jdbi.v3.core/module-info.java:2: warning: [module] module name component v3 should avoid terminal digits
open module org.jdbi.v3.core {
^
1 warning
/home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/tmpjars/io.reactivex.rxjava2/module-info.java:2: warning: [module] module name component rxjava2 should avoid terminal digits
open module io.reactivex.rxjava2 {
^
1 warning
/home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/tmpjars/de.mkammerer.argon2/module-info.java:2: warning: [module] module name component argon2 should avoid terminal digits
open module de.mkammerer.argon2 {
^
1 warning
> Task :jlink
WARNING: signed modular JAR /home/nyxnor/sparrow/sparrow-build/sparrow/build/jlinkbase/jlinkjars/bcprov-jdk15on-1.64.jar is currently not supported
> Task :jpackage
[22:51:18.852] Creating association with null extension.
[22:51:18.852] Creating association with null extension.
[22:51:19.167] Creating association with null extension.
[22:51:19.168] Creating association with null extension.
[22:51:33.368] Creating association with null extension.
[22:51:33.369] Creating association with null extension.
[22:51:36.382] Creating association with null extension.
[22:51:36.382] Creating association with null extension.
BUILD SUCCESSFUL in 3m 23s
19 actionable tasks: 19 executed
# Downloading Craig's pgp pub key, importing it and verifying with indicated 64bit key
gpg: key E94618334C674B40: "Craig Raw <craigraw@gmail.com>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
# Dowloading binaries provided on Github
sparrow-1.5.0-beta1-manifest.txt 100%[===========================================================================================================>] 560 --.-KB/s in 0s
sparrow-1.5.0-beta1-manifest.txt.asc 100%[===========================================================================================================>] 873 --.-KB/s in 0s
sparrow-1.5.0-beta1.tar.gz 100%[===========================================================================================================>] 97.89M 617KB/s in 3m 35s
# Verifying files
$ gpg --verify sparrow-1.5.0-beta1-manifest.txt.asc sparrow-1.5.0-beta1-manifest.txt
gpg: Signature made Mon 06 Sep 2021 12:30:20 PM CEST
gpg: using RSA key D4D0D3202FC06849A257B38DE94618334C674B40
gpg: Good signature from "Craig Raw <craigraw@gmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: D4D0 D320 2FC0 6849 A257 B38D E946 1833 4C67 4B40
$ sha256sum -c --ignore-missing sparrow-1.5.0-beta1-manifest.txt
sparrow-1.5.0-beta1.tar.gz: OK
$ sha256sum ~/sparrow/sparrow-github-binaries/Sparrow/bin/Sparrow
1e273ebc51baabed4f0383db56a28fa2825baecba7b1b79f2edb502bda81bc99 /home/nyxnor/sparrow/sparrow-github-binaries/Sparrow/bin/Sparrow
$ sha256sum ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/bin/Sparrow
1e273ebc51baabed4f0383db56a28fa2825baecba7b1b79f2edb502bda81bc99 /home/nyxnor/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/bin/Sparrow
$ diff -r ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/ ~/sparrow/sparrow-github-binaries/Sparrow/
Binary files /home/nyxnor/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules and /home/nyxnor/sparrow/sparrow-github-binaries/Sparrow/lib/runtime/lib/modules differ
# Using sparrowwallet/sparrow tag=1.5.0-beta1 and sparrowwallet/drongo commit=0b40c20ab252e29ac192bca34d834b8c3eed04a0
# WARNING: Build is NOT reproducible --> Binaries provided on Github does NOT match built binaries
AAAAAAAA, most of the difference is gonne now, check what lasts:
mkdir -p ~/sparrow/modules/build/modules-extracted ~/sparrow/modules/github-binaries/modules-extracted
sudo cp ~/sparrow/sparrow-build/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules ~/sparrow/modules/build/
sudo cp ~/sparrow/sparrow-github-binaries/Sparrow/lib/runtime/lib/modules ~/sparrow/modules/github-binaries/
cd ~/sparrow/modules/build/modules-extracted || exit 1
jimage extract ../modules
cd ~/sparrow/modules/github-binaries/modules-extracted || exit 1
jimage extract ../modules
cd || exit 1
diff -r ~/sparrow/modules/build/modules-extracted ~/sparrow/modules/github-binaries/modules-extracted/
Binary files /home/nyxnor/sparrow/modules/build/modules-extracted/java.base/jdk/internal/module/SystemModules$all.class and /home/nyxnor/sparrow/modules/github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules$all.class differ
Binary files /home/nyxnor/sparrow/modules/build/modules-extracted/java.base/jdk/internal/module/SystemModules$default.class and /home/nyxnor/sparrow/modules/github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules$default.class differ
It appears the $
does not permit the file to be read correctly, see this:
diffoscope ~/sparrow/modules/build/modules-extracted/java.base/jdk/internal/module/SystemModules\$all.class ~/sparrow/modules/github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules\$all.class
Shows no result the above, need to transform to text \$
as below (I cut the output cause it is two big, but it is the same thing repetdly, see files at the end:
diffoscope ~/sparrow/modules/build/modules-extracted/java.base/jdk/internal/module/SystemModules\$all.class ~/sparrow/modules/github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules\$all.class
builder87.opens(new ModuleDescriptor.Opens[0]);
builder87.uses(of20);
builder87.provides(new ModuleDescriptor.Provides[0]);
builder87.packages(Set.of("com.github.arteam.simplejsonrpc.client", "com.github.arteam.simplejsonrpc.client.builder", "com.github.arteam.simplejsonrpc.client.exception", "com.github.arteam.simplejsonrpc.client.generator", "com.github.arteam.simplejsonrpc.client.metadata"));
builder87.version("1.0");
- array[72] = builder87.build(1494625572);
+ array[72] = builder87.build(1683523855);
final Builder builder88 = new Builder("simple.json.rpc.server");
builder88.open(true);
builder88.requires(new ModuleDescriptor.Requires[] { Builder.newRequires(of12, "com.fasterxml.jackson.databind"), Builder.newRequires(of12, "com.google.common"), Builder.newRequires(of12, "java.base"), Builder.newRequires(of12, "org.slf4j"), Builder.newRequires(of12, "simple.json.rpc.core") });
builder88.exports(new ModuleDescriptor.Exports[] { Builder.newExports(of, "com.github.arteam.simplejsonrpc.server") });
builder88.opens(new ModuleDescriptor.Opens[0]);
builder88.uses(of20);
builder88.provides(new ModuleDescriptor.Provides[0]);
builder88.packages(Set.of("com.github.arteam.simplejsonrpc.server", "com.github.arteam.simplejsonrpc.server.metadata"));
builder88.version("1.0");
- array[73] = builder88.build(555683016);
+ array[73] = builder88.build(744581299);
final Builder builder89 = new Builder("tornadofx.controls");
builder89.open(true);
builder89.requires(new ModuleDescriptor.Requires[] { Builder.newRequires(of12, "java.base"), Builder.newRequires(of12, "javafx.controls") });
builder89.exports(new ModuleDescriptor.Exports[] { Builder.newExports(of, "tornadofx.control") });
builder89.opens(new ModuleDescriptor.Opens[0]);
builder89.uses(of20);
builder89.provides(new ModuleDescriptor.Provides[0]);
builder89.packages(Set.of("tornadofx.control", "tornadofx.control.skin", "tornadofx.converter", "tornadofx.property", "tornadofx.table"));
builder89.version("1.0.4");
- array[74] = builder89.build(1570093334);
+ array[74] = builder89.build(1758991617);
final Builder builder90 = new Builder("com.sparrowwallet.sparrow");
builder90.open(true);
diffoscope ~/sparrow/modules/build/modules-extracted/java.base/jdk/internal/module/SystemModules\$default.class ~/sparrow/modules/github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules\$default.class
--- /home/nyxnor/sparrow/modules/build/modules-extracted/java.base/jdk/internal/module/SystemModules$default.class
+++ /home/nyxnor/sparrow/modules/github-binaries/modules-extracted/java.base/jdk/internal/module/SystemModules$default.class
├── procyon -ec {}
@@ -449,55 +449,55 @@
builder20.requires(new ModuleDescriptor.Requires[] { Builder.newRequires(of12, "java.base"), Builder.newRequires(of12, "javafx.base"), Builder.newRequires(of12, "javafx.controls"), Builder.newRequires(of12, "javafx.graphics") });
builder20.exports(new ModuleDescriptor.Exports[] { Builder.newExports(of, "de.codecentric.centerdevice") });
builder20.opens(new ModuleDescriptor.Opens[0]);
builder20.uses(of20);
builder20.provides(new ModuleDescriptor.Provides[0]);
builder20.packages(Set.of("de.codecentric.centerdevice", "de.codecentric.centerdevice.dialogs.about", "de.codecentric.centerdevice.glass", "de.codecentric.centerdevice.icns", "de.codecentric.centerdevice.labels", "de.codecentric.centerdevice.listener", "de.codecentric.centerdevice.util"));
builder20.version("2.1.7");
- array[9] = builder20.build(-218088662);
+ array[9] = builder20.build(-29190379);
final Builder builder21 = new Builder("co.nstant.in.cbor");
builder21.open(true);
builder21.requires(new ModuleDescriptor.Requires[] { Builder.newRequires(of12, "java.base") });
builder21.exports(new ModuleDescriptor.Exports[] { Builder.newExports(of, "co.nstant.in.cbor") });
builder21.opens(new ModuleDescriptor.Opens[0]);
builder21.uses(of20);
builder21.provides(new ModuleDescriptor.Provides[0]);
builder21.packages(Set.of("co.nstant.in.cbor", "co.nstant.in.cbor.builder", "co.nstant.in.cbor.decoder", "co.nstant.in.cbor.encoder", "co.nstant.in.cbor.model"));
builder21.version("0.9");
- array[10] = builder21.build(-1386751763);
+ array[10] = builder21.build(-1197853480);
final Builder builder22 = new Builder("com.beust.jcommander");
builder22.open(true);
builder22.requires(new ModuleDescriptor.Requires[] { Builder.newRequires(of12, "java.base") });
builder22.exports(new ModuleDescriptor.Exports[] { Builder.newExports(of, "com.beust.jcommander") });
builder22.opens(new ModuleDescriptor.Opens[0]);
builder22.uses(of20);
builder22.provides(new ModuleDescriptor.Provides[0]);
builder22.packages(Set.of("com.beust.jcommander", "com.beust.jcommander.converters", "com.beust.jcommander.defaultprovider", "com.beust.jcommander.internal", "com.beust.jcommander.validators"));
builder22.version("1.81");
- array[11] = builder22.build(121114450);
+ array[11] = builder22.build(310012733);
final Builder builder23 = new Builder("com.fasterxml.jackson.core");
builder23.open(true);
builder23.requires(new ModuleDescriptor.Requires[] { Builder.newRequires(of12, "java.base") });
Thanks for the detailed feedback. It looks like there is an element of Java's build process that is non-deterministic. I will need to see what kind of workarounds are possible.
Re checking out the right version of drongo, I used the following to do it in one step:
git clone --recursive --branch 1.5.0-beta1 git@github.com:sparrowwallet/sparrow.git
Will update the docs accordingly.
Following the current build guide and using skdman.io for managing the JDK I was able to reproducibility build sparrow1.5.0-beta1.
The hashes of the /Sparrow/bin/Sparrow
binary match and diff -r
between the provided and build /Sparrow
folder doesn't give me an output. The .deb and .rpm packages have a different sha256 hash though?
The .deb and .rpm packages have a different sha256 hash though?
Yes, there are still some known minor issues with them (generally around file timestamps). Good that you got the build to match though!
For clarity (this issue is getting quite long) I've added a separate issue in #197 to address the problem in https://github.com/sparrowwallet/sparrow/issues/192#issuecomment-916388002.
I've spun up another Ubuntu VM today and managed to reproduce the release. Investigation into the source has not yet turned up any interesting clues as to the cause for this particular difference.
@nyxnor one other thing that's probably worth trying is to clean the build system before building again, and checking to see if you get the same results. You can do this with:
./gradlew clean jpackage
@RequestPrivacy Just to be certain, the folder you compared where these: the first the one was cloned from github and built and the second the uncompressed tar.gz extracted from github release page?
diff -r ~/sparrow/build/jpackage/Sparrow/ ~/Sparrow/
Tried this: ./gradlew clean jpackage
, same result, output differences in modules.
sdk will be the nest step now to manage java version inside docker so I dont mess different java packages.
@nyxnor exactly, I downloaded the file from https://github.com/sparrowwallet/sparrow/releases/download/1.5.0-beta1/sparrow-1.5.0-beta1.tar.gz, extracted it and compared the whole Sparrow
-Folder with the one of my build (in /sparrow/build/jpackage/Sparrow
).
Tested now on a clean image on docker installing java only from sdk as instructed, did not work, modules continue to differ. I have no more ideas right now, using sdk or the adoptopenjdk debian package still results the same differences.
This is a video using the adoptopenjdk deb package, but same result using sdk
Would really like to help here but it was my first build ever, so don't know whats different on my machine (Linux Mint). Will probably spin up a VM to test again and also record it for NVKs bitcoinbinary site.
A solution is being sought in this thread: https://mail.openjdk.java.net/pipermail/jigsaw-dev/2021-September/014708.html
@nyxnor could I ask you to put SystemModules$default.class
and SystemModules$all.class
from your build into a .zip and attach to a new comment on #197 (as I have done for the release build)? @AlanBateman has requested these files for comparison.
Yes. Let me build.
Build doc is using the wrong temurin version, it should be the 18.
user@host:~$ sudo apt-get install temurin-17-jdk=18.0.1+10
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Version '18.0.1+10' for 'temurin-17-jdk' was not found
user@host:~$ apt-cache show temurin-18-jdk | grep Version
Version: 18.0.2+9
Version: 18.0.1+10
Version: 18+36
user@host:~$ apt-cache show temurin-17-jdk | grep Version
Version: 17.0.4.1.0+1
Version: 17.0.4.0.0+8
Version: 17.0.3.0.0+7
Version: 17.0.2.0.0+8-1
Version: 17.0.1.0.0+12-1
curl --tlsv1.2 --proto =https --location -o adoptium.asc https://packages.adoptium.net/artifactory/api/gpg/key/public
gpg --import --import-options show-only adoptium.asc
## should see: 3B04D753C9050D9A5D343F39843C48A565F8F04B
sudo cp adoptium.asc /usr/share/keyrings/
echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update -y
sudo apt-get install -y temurin-18-jdk=18.0.1+10
sudo update-alternatives --config java
git clone --recursive --branch master https://github.com/sparrowwallet/sparrow.git
cd sparrow
git checkout f1a662ba
## https://github.com/sparrowwallet/sparrow/issues/619#issuecomment-1209304845
./gradlew jpackage
Comparing against https://github.com/craigraw/beta/releases/tag/1.6.6-no-debug-stripping
diff -r /tmp/Sparrow/ ~/sparrow/build/jpackage/Sparrow/
Binary files /tmp/Sparrow/lib/runtime/lib/modules and /home/user/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules differ
$ diff -r /tmp/Sparrow/ ~/sparrow/build/jpackage/Sparrow/
Binary files /tmp/Sparrow/lib/runtime/lib/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/FinalizingPSBTWallet.class and /home/user/sparrow/build/jpackage/Sparrow/lib/runtime/lib/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/FinalizingPSBTWallet.class differ
Binary files /tmp/Sparrow/lib/runtime/lib/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/WalletModel.class and /home/user/sparrow/build/jpackage/Sparrow/lib/runtime/lib/com.sparrowwallet.drongo/com/sparrowwallet/drongo/wallet/WalletModel.class differ
Binary files /tmp/Sparrow/lib/runtime/lib/modules and /home/user/sparrow/build/jpackage/Sparrow/lib/runtime/lib/modules differ
The drongo problem is probably because I checkout out f1a662ba of sparrow, and I need to manually set the commit that was made on drongo repo before then this one on sparrow.
So I probably need to set drongo repo to checkout 8cdea77, which was the commit made to drongo before f1a662ba was made to sparrow.
But still difference in modules.
But really, when it is reproducible with correct documentation, let me know, it is simply not at this stage.
git clone --recursive --branch master https://github.com/sparrowwallet/sparrow.git
cd sparrow
git checkout f1a662ba
## https://github.com/sparrowwallet/sparrow/issues/619#issuecomment-1209304845
cd drongo
git checkout 8cdea77
## last commit made to drongo before f1a662ba was made to sparrow
cd ..
./gradlew jpackage
## the drongo commit will make the build fail for rpm, I just ignored it because the other files were already built
$ ./gradlew clean jpackage
> Configure project :
Project : => 'com.sparrowwallet.sparrow' Java module
> Task :createDelegatingModules
/home/user/sparrow/build/jlinkbase/tmpjars/org.antlr.antlr4.runtime/module-info.java:2: warning: [module] module name component antlr4 should avoid terminal digits
open module org.antlr.antlr4.runtime {
^
1 warning
/home/user/sparrow/build/jlinkbase/tmpjars/io.reactivex.rxjava2/module-info.java:2: warning: [module] module name component rxjava2 should avoid terminal digits
open module io.reactivex.rxjava2 {
^
1 warning
/home/user/sparrow/build/jlinkbase/tmpjars/de.mkammerer.argon2/module-info.java:2: warning: [module] module name component argon2 should avoid terminal digits
open module de.mkammerer.argon2 {
^
1 warning
/home/user/sparrow/build/jlinkbase/tmpjars/org.jdbi.v3.sqlobject/module-info.java:2: warning: [module] module name component v3 should avoid terminal digits
open module org.jdbi.v3.sqlobject {
^
1 warning
/home/user/sparrow/build/jlinkbase/tmpjars/org.jdbi.v3.core/module-info.java:2: warning: [module] module name component v3 should avoid terminal digits
open module org.jdbi.v3.core {
^
1 warning
/home/user/sparrow/build/jlinkbase/tmpjars/org.apache.commons.lang3/module-info.java:2: warning: [module] module name component lang3 should avoid terminal digits
open module org.apache.commons.lang3 {
^
1 warning
> Task :jlink
WARNING: signed modular JAR /home/user/sparrow/build/jlinkbase/jlinkjars/bcprov-jdk15on-1.64.jar is currently not supported
> Task :jpackage FAILED
[15:14:35.348] Creating association with null extension.
[15:14:35.348] Creating association with null extension.
[15:14:35.348] Creating association with null extension.
[15:14:35.694] Creating association with null extension.
[15:14:35.694] Creating association with null extension.
[15:14:35.695] Creating association with null extension.
java.io.IOException: Command [rpmbuild, -bb, /tmp/jdk.jpackage13588902113937676505/SPECS/sparrow.spec, --define, %_sourcedir /tmp/jdk.jpackage13588902113937676505/images, --define, %_rpmdir /home/user/sparrow/build/jpackage, --define, %_topdir /tmp/jdk.jpackage13588902113937676505, --define, %_rpmfilename sparrow-1.6.6-1.x86_64.rpm] exited with 1 code
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':jpackage'.
> Process 'command '/usr/lib/jvm/temurin-18-jdk-amd64/bin/jpackage'' finished with non-zero exit value 1
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 2m 28s
21 actionable tasks: 15 executed, 6 up-to-date
And finally:
$ diff -r build/jpackage/Sparrow/ /tmp/Sparrow/; echo $?
0
So when there is a proper release that is reproducible, let me know, because for now I have to checkout certain commits on the main repo and on the submodule which is simply not clean in the documentation.
Here is what I suggest, make a release on https://github.com/sparrowwallet/drongo/releases when you make on https://github.com/sparrowwallet/sparrow/releases
Use the same git tag or at least mention the tags on the reproducible docs.
Typo in the build doc fixed in 252ec580.
The file at https://github.com/craigraw/beta/releases/tag/1.6.6-no-debug-stripping is not an official release, but merely a test at the time to ensure that the binary debug stripping fix was working. From your results above I see that you have managed to reproduce as well. The next official release will include the debug stripping fix (which only manifested on recent systems), and will be tagged as per the build docs.
Great, please also tag drongo
repo with the same tag else everytime a builder will need to set the commit manually.
Hi 👋. I am trying to build from source. As instructed here https://t.me/sparrowwallet/4640 I used these instructions https://adoptopenjdk.net/installation.html?variant=openjdk16&jvmVariant=hotspot#linux-pkg. The adoptopenjdk successfully installs. Debian Stable (bullseye) amd64 install:
Problem occurs here
./gradlew jpackage
.with
--info
with
--stacktrace