diff --git a/contrib/build-linux/appimage/Dockerfile b/contrib/build-linux/appimage/Dockerfile index 987616d51..d85e360d8 100644 --- a/contrib/build-linux/appimage/Dockerfile +++ b/contrib/build-linux/appimage/Dockerfile @@ -80,9 +80,11 @@ ARG UID=1000 RUN if [ "$UID" != "0" ] ; then useradd --uid $UID --create-home --shell /bin/bash "user" ; fi RUN usermod -append --groups sudo $(id -nu $UID || echo "user") RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers -RUN HOME_DIR=$(getent passwd $UID | cut -d: -f6) -ENV WORK_DIR="${HOME_DIR}/wspace" \ - PATH="${HOME_DIR}/.local/bin:${PATH}" +RUN HOME_DIR=$(getent passwd $UID | cut -d: -f6) && \ + echo "WORK_DIR=${HOME_DIR}/wspace" >> /etc/environment && \ + echo "PATH=${HOME_DIR}/.local/bin:${PATH}" >> /etc/environment +ENV WORK_DIR="/home/user/wspace" \ + PATH="/home/user/.local/bin:${PATH}" WORKDIR ${WORK_DIR} RUN chown --recursive ${UID} ${WORK_DIR} USER ${UID} diff --git a/contrib/build-linux/appimage/README.md b/contrib/build-linux/appimage/README.md index 7b230d0c5..7c5570671 100644 --- a/contrib/build-linux/appimage/README.md +++ b/contrib/build-linux/appimage/README.md @@ -4,14 +4,16 @@ 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_ +- _Minimum supported target system (i.e. what end-users need):_ + - _x86_64: glibc 2.31_ + - _aarch64 (ARM64): 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). +This assumes an Ubuntu (or similar Debian-based) host, but it should not be too hard +to adapt to another similar system. -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). +We support building AppImages for both x86_64 (amd64) and aarch64 (ARM64) architectures. +**Important**: The host architecture must match the target architecture (i.e., build +x86_64 AppImages on x86_64 hosts, and aarch64 AppImages on aarch64 hosts like Raspberry Pi). 1. Install Docker @@ -22,28 +24,44 @@ see [issue #5159](https://github.com/spesmilo/electrum/issues/5159). 2. Build binary + **For x86_64 (amd64):** ``` $ ./build.sh ``` - If you want reproducibility, try instead e.g.: + Or for reproducibility: ``` $ ELECBUILD_COMMIT=HEAD ./build.sh ``` + **For aarch64 (ARM64):** + ``` + $ ARCH=aarch64 ./build.sh + ``` + Or for reproducibility: + ``` + $ ARCH=aarch64 ELECBUILD_COMMIT=HEAD ./build.sh + ``` + + **Note**: By default, `ARCH` is set to `x86_64` if not specified. + 3. The generated binary is in `./dist`. + Output files are named with the architecture suffix: + - `pallectrum--x86_64.AppImage` + - `pallectrum--aarch64.AppImage` + ## FAQ ### How can I see what is included in the AppImage? -Execute the binary as follows: `./electrum*.AppImage --appimage-extract` +Execute the binary as follows: `./pallectrum*.AppImage --appimage-extract` ### How to investigate diff between binaries if reproducibility fails? ``` cd dist/ -./electrum-*-x86_64.AppImage1 --appimage-extract +./pallectrum-*-x86_64.AppImage1 --appimage-extract mv squashfs-root/ squashfs-root1/ -./electrum-*-x86_64.AppImage2 --appimage-extract +./pallectrum-*-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) @@ -51,6 +69,8 @@ diff sha256sum1 sha256sum2 > d cat d ``` +(Replace `x86_64` with `aarch64` for ARM64 builds) + For file metadata, e.g. timestamps: ``` rsync -n -a -i --delete squashfs-root1/ squashfs-root2/