diff --git a/.gitignore b/.gitignore index 739ef9783..8ac25d80a 100644 --- a/.gitignore +++ b/.gitignore @@ -34,14 +34,10 @@ contrib/build-wine/build/ contrib/build-wine/.cache/ contrib/build-wine/dist/ contrib/build-wine/signed/ -contrib/build-wine/fresh_clone/ -contrib/build-linux/sdist/fresh_clone/ contrib/build-linux/appimage/build/ contrib/build-linux/appimage/.cache/ -contrib/build-linux/appimage/fresh_clone/ contrib/osx/.cache/ contrib/osx/build-venv/ -contrib/android/fresh_clone contrib/android/android_debug.keystore contrib/secp256k1/ contrib/zbar/ diff --git a/contrib/android/Dockerfile b/contrib/android/Dockerfile index 3d002f6a6..1139d7a45 100644 --- a/contrib/android/Dockerfile +++ b/contrib/android/Dockerfile @@ -141,11 +141,12 @@ RUN apt -y update -qq \ # create new user to avoid using root; but with sudo access and no password for convenience. +ARG UID=1000 ENV USER="user" ENV HOME_DIR="/home/${USER}" ENV WORK_DIR="${HOME_DIR}/wspace" \ PATH="${HOME_DIR}/.local/bin:${PATH}" -RUN useradd --create-home --shell /bin/bash ${USER} +RUN useradd --uid $UID --create-home --shell /bin/bash ${USER} RUN usermod -append --groups sudo ${USER} RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers WORKDIR ${WORK_DIR} diff --git a/contrib/android/build.sh b/contrib/android/build.sh index eed613c20..0c58faaf8 100755 --- a/contrib/android/build.sh +++ b/contrib/android/build.sh @@ -11,6 +11,7 @@ PROJECT_ROOT_OR_FRESHCLONE_ROOT="$PROJECT_ROOT" CONTRIB="$PROJECT_ROOT/contrib" CONTRIB_ANDROID="$CONTRIB/android" DISTDIR="$PROJECT_ROOT/dist" +BUILD_UID=$(/usr/bin/stat -c %u "$PROJECT_ROOT") . "$CONTRIB"/build_tools_util.sh @@ -36,6 +37,10 @@ if [ ! -z "$ELECBUILD_NOCACHE" ] ; then DOCKER_BUILD_FLAGS="--pull --no-cache" fi +if [ -z "$ELECBUILD_COMMIT" ] ; then # local dev build + DOCKER_BUILD_FLAGS="$DOCKER_BUILD_FLAGS --build-arg UID=$BUILD_UID" +fi + info "building docker image." docker build \ $DOCKER_BUILD_FLAGS \ @@ -47,11 +52,11 @@ docker build \ # maybe do fresh clone if [ ! -z "$ELECBUILD_COMMIT" ] ; then info "ELECBUILD_COMMIT=$ELECBUILD_COMMIT. doing fresh clone and git checkout." - FRESH_CLONE="$CONTRIB_ANDROID/fresh_clone/electrum" && \ - rm -rf "$FRESH_CLONE" && \ - umask 0022 && \ - git clone "$PROJECT_ROOT" "$FRESH_CLONE" && \ - cd "$FRESH_CLONE" + FRESH_CLONE="/tmp/electrum_build/android/fresh_clone/electrum" + rm -rf "$FRESH_CLONE" 2>/dev/null || ( info "we need sudo to rm prev FRESH_CLONE." && sudo rm -rf "$FRESH_CLONE" ) + umask 0022 + git clone "$PROJECT_ROOT" "$FRESH_CLONE" + cd "$FRESH_CLONE" git checkout "$ELECBUILD_COMMIT" PROJECT_ROOT_OR_FRESHCLONE_ROOT="$FRESH_CLONE" else @@ -67,6 +72,13 @@ fi info "building binary..." mkdir --parents "$PROJECT_ROOT_OR_FRESHCLONE_ROOT"/.buildozer/.gradle +# check uid and maybe chown. see #8261 +if [ ! -z "$ELECBUILD_COMMIT" ] ; then # fresh clone (reproducible build) + if [ $(id -u) != "1000" ] || [ $(id -g) != "1000" ] ; then + info "need to chown -R FRESH_CLONE dir. prompting for sudo." + sudo chown -R 1000:1000 "$FRESH_CLONE" + fi +fi docker run -it --rm \ --name electrum-android-builder-cont \ -v "$PROJECT_ROOT_OR_FRESHCLONE_ROOT":/home/user/wspace/electrum \ diff --git a/contrib/build-linux/appimage/.dockerignore b/contrib/build-linux/appimage/.dockerignore index d75fb8304..a4fb4fb12 100644 --- a/contrib/build-linux/appimage/.dockerignore +++ b/contrib/build-linux/appimage/.dockerignore @@ -1,3 +1,2 @@ build/ .cache/ -fresh_clone/ diff --git a/contrib/build-linux/appimage/Dockerfile b/contrib/build-linux/appimage/Dockerfile index e92b6eb0d..c93f73513 100644 --- a/contrib/build-linux/appimage/Dockerfile +++ b/contrib/build-linux/appimage/Dockerfile @@ -71,11 +71,12 @@ RUN apt-get update -q && \ apt-get clean # create new user to avoid using root; but with sudo access and no password for convenience. +ARG UID=1000 ENV USER="user" ENV HOME_DIR="/home/${USER}" ENV WORK_DIR="${HOME_DIR}/wspace" \ PATH="${HOME_DIR}/.local/bin:${PATH}" -RUN useradd --create-home --shell /bin/bash ${USER} +RUN useradd --uid $UID --create-home --shell /bin/bash ${USER} RUN usermod -append --groups sudo ${USER} RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers WORKDIR ${WORK_DIR} diff --git a/contrib/build-linux/appimage/build.sh b/contrib/build-linux/appimage/build.sh index 6f48142a2..a6f5cabeb 100755 --- a/contrib/build-linux/appimage/build.sh +++ b/contrib/build-linux/appimage/build.sh @@ -11,6 +11,7 @@ PROJECT_ROOT_OR_FRESHCLONE_ROOT="$PROJECT_ROOT" CONTRIB="$PROJECT_ROOT/contrib" CONTRIB_APPIMAGE="$CONTRIB/build-linux/appimage" DISTDIR="$PROJECT_ROOT/dist" +BUILD_UID=$(/usr/bin/stat -c %u "$PROJECT_ROOT") . "$CONTRIB"/build_tools_util.sh @@ -21,6 +22,10 @@ if [ ! -z "$ELECBUILD_NOCACHE" ] ; then DOCKER_BUILD_FLAGS="--pull --no-cache" fi +if [ -z "$ELECBUILD_COMMIT" ] ; then # local dev build + DOCKER_BUILD_FLAGS="$DOCKER_BUILD_FLAGS --build-arg UID=$BUILD_UID" +fi + info "building docker image." docker build \ $DOCKER_BUILD_FLAGS \ @@ -30,11 +35,11 @@ docker build \ # maybe do fresh clone if [ ! -z "$ELECBUILD_COMMIT" ] ; then info "ELECBUILD_COMMIT=$ELECBUILD_COMMIT. doing fresh clone and git checkout." - FRESH_CLONE="$CONTRIB_APPIMAGE/fresh_clone/electrum" && \ - rm -rf "$FRESH_CLONE" && \ - umask 0022 && \ - git clone "$PROJECT_ROOT" "$FRESH_CLONE" && \ - cd "$FRESH_CLONE" + FRESH_CLONE="/tmp/electrum_build/appimage/fresh_clone/electrum" + rm -rf "$FRESH_CLONE" 2>/dev/null || ( info "we need sudo to rm prev FRESH_CLONE." && sudo rm -rf "$FRESH_CLONE" ) + umask 0022 + git clone "$PROJECT_ROOT" "$FRESH_CLONE" + cd "$FRESH_CLONE" git checkout "$ELECBUILD_COMMIT" PROJECT_ROOT_OR_FRESHCLONE_ROOT="$FRESH_CLONE" else @@ -42,6 +47,13 @@ else fi info "building binary..." +# check uid and maybe chown. see #8261 +if [ ! -z "$ELECBUILD_COMMIT" ] ; then # fresh clone (reproducible build) + if [ $(id -u) != "1000" ] || [ $(id -g) != "1000" ] ; then + info "need to chown -R FRESH_CLONE dir. prompting for sudo." + sudo chown -R 1000:1000 "$FRESH_CLONE" + fi +fi docker run -it \ --name electrum-appimage-builder-cont \ -v "$PROJECT_ROOT_OR_FRESHCLONE_ROOT":/opt/electrum \ diff --git a/contrib/build-linux/sdist/.dockerignore b/contrib/build-linux/sdist/.dockerignore index d364c6400..e69de29bb 100644 --- a/contrib/build-linux/sdist/.dockerignore +++ b/contrib/build-linux/sdist/.dockerignore @@ -1 +0,0 @@ -fresh_clone/ diff --git a/contrib/build-linux/sdist/Dockerfile b/contrib/build-linux/sdist/Dockerfile index 2caf62cf7..1a7a468a9 100644 --- a/contrib/build-linux/sdist/Dockerfile +++ b/contrib/build-linux/sdist/Dockerfile @@ -18,11 +18,12 @@ RUN apt-get update -q && \ apt-get clean # create new user to avoid using root; but with sudo access and no password for convenience. +ARG UID=1000 ENV USER="user" ENV HOME_DIR="/home/${USER}" ENV WORK_DIR="${HOME_DIR}/wspace" \ PATH="${HOME_DIR}/.local/bin:${PATH}" -RUN useradd --create-home --shell /bin/bash ${USER} +RUN useradd --uid $UID --create-home --shell /bin/bash ${USER} RUN usermod -append --groups sudo ${USER} RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers WORKDIR ${WORK_DIR} diff --git a/contrib/build-linux/sdist/build.sh b/contrib/build-linux/sdist/build.sh index 361dadcd6..11a746273 100755 --- a/contrib/build-linux/sdist/build.sh +++ b/contrib/build-linux/sdist/build.sh @@ -11,6 +11,7 @@ PROJECT_ROOT_OR_FRESHCLONE_ROOT="$PROJECT_ROOT" CONTRIB="$PROJECT_ROOT/contrib" CONTRIB_SDIST="$CONTRIB/build-linux/sdist" DISTDIR="$PROJECT_ROOT/dist" +BUILD_UID=$(/usr/bin/stat -c %u "$PROJECT_ROOT") . "$CONTRIB"/build_tools_util.sh @@ -21,6 +22,10 @@ if [ ! -z "$ELECBUILD_NOCACHE" ] ; then DOCKER_BUILD_FLAGS="--pull --no-cache" fi +if [ -z "$ELECBUILD_COMMIT" ] ; then # local dev build + DOCKER_BUILD_FLAGS="$DOCKER_BUILD_FLAGS --build-arg UID=$BUILD_UID" +fi + info "building docker image." docker build \ $DOCKER_BUILD_FLAGS \ @@ -30,11 +35,11 @@ docker build \ # maybe do fresh clone if [ ! -z "$ELECBUILD_COMMIT" ] ; then info "ELECBUILD_COMMIT=$ELECBUILD_COMMIT. doing fresh clone and git checkout." - FRESH_CLONE="$CONTRIB_SDIST/fresh_clone/electrum" && \ - rm -rf "$FRESH_CLONE" && \ - umask 0022 && \ - git clone "$PROJECT_ROOT" "$FRESH_CLONE" && \ - cd "$FRESH_CLONE" + FRESH_CLONE="/tmp/electrum_build/sdist/fresh_clone/electrum" + rm -rf "$FRESH_CLONE" 2>/dev/null || ( info "we need sudo to rm prev FRESH_CLONE." && sudo rm -rf "$FRESH_CLONE" ) + umask 0022 + git clone "$PROJECT_ROOT" "$FRESH_CLONE" + cd "$FRESH_CLONE" git checkout "$ELECBUILD_COMMIT" PROJECT_ROOT_OR_FRESHCLONE_ROOT="$FRESH_CLONE" else @@ -42,6 +47,13 @@ else fi info "building binary..." +# check uid and maybe chown. see #8261 +if [ ! -z "$ELECBUILD_COMMIT" ] ; then # fresh clone (reproducible build) + if [ $(id -u) != "1000" ] || [ $(id -g) != "1000" ] ; then + info "need to chown -R FRESH_CLONE dir. prompting for sudo." + sudo chown -R 1000:1000 "$FRESH_CLONE" + fi +fi docker run -it \ --name electrum-sdist-builder-cont \ -v "$PROJECT_ROOT_OR_FRESHCLONE_ROOT":/opt/electrum \ diff --git a/contrib/build-wine/.dockerignore b/contrib/build-wine/.dockerignore index f1aa3647c..a3e70a019 100644 --- a/contrib/build-wine/.dockerignore +++ b/contrib/build-wine/.dockerignore @@ -3,4 +3,3 @@ build/ .cache/ dist/ signed/ -fresh_clone/ diff --git a/contrib/build-wine/Dockerfile b/contrib/build-wine/Dockerfile index 9b4dfbbdb..8fb6acf5c 100644 --- a/contrib/build-wine/Dockerfile +++ b/contrib/build-wine/Dockerfile @@ -59,11 +59,12 @@ RUN wget -nc https://dl.winehq.org/wine-builds/Release.key && \ apt-get clean # create new user to avoid using root; but with sudo access and no password for convenience. +ARG UID=1000 ENV USER="user" ENV HOME_DIR="/home/${USER}" ENV WORK_DIR="${HOME_DIR}/wspace" \ PATH="${HOME_DIR}/.local/bin:${PATH}" -RUN useradd --create-home --shell /bin/bash ${USER} +RUN useradd --uid $UID --create-home --shell /bin/bash ${USER} RUN usermod -append --groups sudo ${USER} RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers WORKDIR ${WORK_DIR} diff --git a/contrib/build-wine/build.sh b/contrib/build-wine/build.sh index e73dec054..f3bc4e6a9 100755 --- a/contrib/build-wine/build.sh +++ b/contrib/build-wine/build.sh @@ -10,6 +10,7 @@ PROJECT_ROOT="$(dirname "$(readlink -e "$0")")/../.." PROJECT_ROOT_OR_FRESHCLONE_ROOT="$PROJECT_ROOT" CONTRIB="$PROJECT_ROOT/contrib" CONTRIB_WINE="$CONTRIB/build-wine" +BUILD_UID=$(/usr/bin/stat -c %u "$PROJECT_ROOT") . "$CONTRIB"/build_tools_util.sh @@ -23,6 +24,10 @@ if [ ! -z "$ELECBUILD_NOCACHE" ] ; then DOCKER_BUILD_FLAGS="--pull --no-cache" fi +if [ -z "$ELECBUILD_COMMIT" ] ; then # local dev build + DOCKER_BUILD_FLAGS="$DOCKER_BUILD_FLAGS --build-arg UID=$BUILD_UID" +fi + info "building docker image." docker build \ $DOCKER_BUILD_FLAGS \ @@ -32,11 +37,11 @@ docker build \ # maybe do fresh clone if [ ! -z "$ELECBUILD_COMMIT" ] ; then info "ELECBUILD_COMMIT=$ELECBUILD_COMMIT. doing fresh clone and git checkout." - FRESH_CLONE="$CONTRIB_WINE/fresh_clone/electrum" && \ - rm -rf "$FRESH_CLONE" && \ - umask 0022 && \ - git clone "$PROJECT_ROOT" "$FRESH_CLONE" && \ - cd "$FRESH_CLONE" + FRESH_CLONE="/tmp/electrum_build/windows/fresh_clone/electrum" + rm -rf "$FRESH_CLONE" 2>/dev/null || ( info "we need sudo to rm prev FRESH_CLONE." && sudo rm -rf "$FRESH_CLONE" ) + umask 0022 + git clone "$PROJECT_ROOT" "$FRESH_CLONE" + cd "$FRESH_CLONE" git checkout "$ELECBUILD_COMMIT" PROJECT_ROOT_OR_FRESHCLONE_ROOT="$FRESH_CLONE" else @@ -44,6 +49,13 @@ else fi info "building binary..." +# check uid and maybe chown. see #8261 +if [ ! -z "$ELECBUILD_COMMIT" ] ; then # fresh clone (reproducible build) + if [ $(id -u) != "1000" ] || [ $(id -g) != "1000" ] ; then + info "need to chown -R FRESH_CLONE dir. prompting for sudo." + sudo chown -R 1000:1000 "$FRESH_CLONE" + fi +fi docker run -it \ --name electrum-wine-builder-cont \ -v "$PROJECT_ROOT_OR_FRESHCLONE_ROOT":/opt/wine64/drive_c/electrum \