This exits as expected:
```
$ cat s1.sh
#!/bin/bash
set -e
(
echo "a"
false
echo "b"
)
$ ./s1.sh
a
```
This does NOT exit, seemingly because of the outer context?!
```
$ cat s2.sh
#!/bin/bash
set -e
(
echo "a"
false
echo "b"
) || echo "c"
$ ./s2.sh
a
b
```
ref https://unix.stackexchange.com/questions/65532/why-does-set-e-not-work-inside-subshells-with-parenthesis-followed-by-an-or
AppImage binary for Electrum
✓ This binary should be reproducible, meaning you should be able to generate binaries that match the official releases.
- Minimum supported target system (i.e. what end-users need): x86_64, glibc 2.31
This assumes an Ubuntu host, but it should not be too hard to adapt to another similar system. The host architecture should be x86_64 (amd64).
We currently only build a single AppImage, for x86_64 architecture. Help to adapt these scripts to build for (some flavor of) ARM would be welcome, see issue #5159.
-
Install Docker
(worth reading even if you already have docker)
-
Build binary
$ ./build.shIf you want reproducibility, try instead e.g.:
$ ELECBUILD_COMMIT=HEAD ./build.sh -
The generated binary is in
./dist.
FAQ
How can I see what is included in the AppImage?
Execute the binary as follows: ./electrum*.AppImage --appimage-extract
How to investigate diff between binaries if reproducibility fails?
cd dist/
./electrum-*-x86_64.AppImage1 --appimage-extract
mv squashfs-root/ squashfs-root1/
./electrum-*-x86_64.AppImage2 --appimage-extract
mv squashfs-root/ squashfs-root2/
$(cd squashfs-root1; find -type f -exec sha256sum '{}' \; > ./../sha256sum1)
$(cd squashfs-root2; find -type f -exec sha256sum '{}' \; > ./../sha256sum2)
diff sha256sum1 sha256sum2 > d
cat d
For file metadata, e.g. timestamps:
rsync -n -a -i --delete squashfs-root1/ squashfs-root2/
Useful binary comparison tools:
- vbindiff
- diffoscope