attempt at reproducible tarballs (sdist)
This commit is contained in:
@@ -1,16 +0,0 @@
|
||||
Source tarballs
|
||||
===============
|
||||
|
||||
✗ _This script does not produce reproducible output (yet!)._
|
||||
|
||||
1. Prepare python dependencies used by Electrum.
|
||||
|
||||
```
|
||||
contrib/make_packages
|
||||
```
|
||||
|
||||
2. Create source tarball.
|
||||
|
||||
```
|
||||
contrib/make_tgz
|
||||
```
|
||||
@@ -61,6 +61,11 @@ 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
|
||||
|
||||
16
contrib/build-linux/sdist/Dockerfile
Normal file
16
contrib/build-linux/sdist/Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
||||
FROM ubuntu:18.04@sha256:b58746c8a89938b8c9f5b77de3b8cf1fe78210c696ab03a1442e235eea65d84f
|
||||
|
||||
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8
|
||||
|
||||
RUN apt-get update -q && \
|
||||
apt-get install -qy \
|
||||
git \
|
||||
gettext \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
faketime \
|
||||
&& \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get clean
|
||||
50
contrib/build-linux/sdist/README.md
Normal file
50
contrib/build-linux/sdist/README.md
Normal file
@@ -0,0 +1,50 @@
|
||||
Source tarballs
|
||||
===============
|
||||
|
||||
✗ _This script does not produce reproducible output (yet!)._
|
||||
|
||||
This assumes an Ubuntu (x86_64) host, but it should not be too hard to adapt to another
|
||||
similar system. The docker commands should be executed in the project's root
|
||||
folder.
|
||||
|
||||
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-sdist-builder-img contrib/build-linux/sdist
|
||||
```
|
||||
|
||||
3. Build source tarballs
|
||||
|
||||
It's recommended to build from a fresh clone
|
||||
(but you can skip this if reproducibility is not necessary).
|
||||
|
||||
```
|
||||
$ FRESH_CLONE=contrib/build-linux/sdist/fresh_clone && \
|
||||
sudo rm -rf $FRESH_CLONE && \
|
||||
mkdir -p $FRESH_CLONE && \
|
||||
cd $FRESH_CLONE && \
|
||||
git clone https://github.com/spesmilo/electrum.git && \
|
||||
cd electrum
|
||||
```
|
||||
|
||||
And then build from this directory:
|
||||
```
|
||||
$ git checkout $REV
|
||||
$ sudo docker run -it \
|
||||
--name electrum-sdist-builder-cont \
|
||||
-v $PWD:/opt/electrum \
|
||||
--rm \
|
||||
--workdir /opt/electrum/contrib/build-linux/sdist \
|
||||
electrum-sdist-builder-img \
|
||||
./build.sh
|
||||
```
|
||||
4. The generated distributables are in `./dist`.
|
||||
20
contrib/build-linux/sdist/build.sh
Executable file
20
contrib/build-linux/sdist/build.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
PROJECT_ROOT="$(dirname "$(readlink -e "$0")")/../../.."
|
||||
CONTRIB="$PROJECT_ROOT/contrib"
|
||||
CONTRIB_SDIST="$CONTRIB/build-linux/sdist"
|
||||
DISTDIR="$PROJECT_ROOT/dist"
|
||||
|
||||
. "$CONTRIB"/build_tools_util.sh
|
||||
|
||||
|
||||
"$CONTRIB"/make_packages || fail "make_packages failed"
|
||||
|
||||
"$CONTRIB_SDIST"/make_tgz || fail "make_tgz failed"
|
||||
|
||||
|
||||
info "done."
|
||||
ls -la "$DISTDIR"
|
||||
sha256sum "$DISTDIR"/*
|
||||
46
contrib/build-linux/sdist/make_tgz
Executable file
46
contrib/build-linux/sdist/make_tgz
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
CONTRIB_SDIST="$(dirname "$(readlink -e "$0")")"
|
||||
CONTRIB="$CONTRIB_SDIST"/../..
|
||||
ROOT_FOLDER="$CONTRIB"/..
|
||||
PACKAGES="$ROOT_FOLDER"/packages/
|
||||
LOCALE="$ROOT_FOLDER"/electrum/locale/
|
||||
|
||||
if [ ! -d "$PACKAGES" ]; then
|
||||
echo "Run make_packages first!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git submodule update --init
|
||||
|
||||
(
|
||||
rm -rf "$LOCALE"
|
||||
cd "$CONTRIB/deterministic-build/electrum-locale/"
|
||||
if ! which msgfmt > /dev/null 2>&1; then
|
||||
echo "Please install gettext"
|
||||
exit 1
|
||||
fi
|
||||
for i in ./locale/*; do
|
||||
dir="$ROOT_FOLDER"/electrum/$i/LC_MESSAGES
|
||||
mkdir -p $dir
|
||||
msgfmt --output-file=$dir/electrum.mo $i/electrum.po || true
|
||||
cp $i/electrum.po "$ROOT_FOLDER"/electrum/$i/electrum.po
|
||||
done
|
||||
)
|
||||
|
||||
(
|
||||
cd "$ROOT_FOLDER"
|
||||
|
||||
echo "'git clean -fd' would delete the following files: >>>"
|
||||
git clean -fd --dry-run
|
||||
echo "<<<"
|
||||
|
||||
# we could build the kivy atlas potentially?
|
||||
#(cd electrum/gui/kivy/; make theming) || echo "building kivy atlas failed! skipping."
|
||||
|
||||
find -exec touch -h -d '2000-11-11T11:11:11+00:00' {} +
|
||||
|
||||
TZ=UTC faketime -f '2000-11-11 11:11:11' python3 setup.py --quiet sdist --format=zip,gztar
|
||||
)
|
||||
Reference in New Issue
Block a user