AppImage binary for Electrum ============================ ✓ _This binary should be reproducible, meaning you should be able to generate binaries that match the official releases._ 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). The docker commands should be executed in the project's root folder. 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](https://github.com/spesmilo/electrum/issues/5159). 1. Install Docker ``` $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" $ sudo apt-get update $ sudo apt-get install -y docker-ce ``` 2. Build image ``` $ sudo docker build -t electrum-appimage-builder-img contrib/build-linux/appimage ``` 3. Build binary ``` $ sudo docker run -it \ --name electrum-appimage-builder-cont \ -v $PWD:/opt/electrum \ --rm \ --workdir /opt/electrum/contrib/build-linux/appimage \ electrum-appimage-builder-img \ ./build.sh ``` 4. 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 ``` Useful binary comparison tools: - vbindiff - diffoscope