merge bitcoin#11702: Add a script for installing db4

This commit is contained in:
Kittywhiskers Van Gogh 2023-04-25 03:23:50 +00:00
parent 014488041a
commit cb5ac0d292
5 changed files with 120 additions and 48 deletions

View File

@ -48,6 +48,7 @@ OSX_QT_TRANSLATIONS = ar,bg,ca,cs,da,de,es,fa,fi,fr,gd,gl,he,hu,it,ja,ko,lt,lv,p
DIST_CONTRIB = \ DIST_CONTRIB = \
$(top_srcdir)/contrib/debian/copyright \ $(top_srcdir)/contrib/debian/copyright \
$(top_srcdir)/contrib/install_db4.sh \
$(top_srcdir)/contrib/linearize/linearize-data.py \ $(top_srcdir)/contrib/linearize/linearize-data.py \
$(top_srcdir)/contrib/linearize/linearize-hashes.py $(top_srcdir)/contrib/linearize/linearize-hashes.py
DIST_SHARE = \ DIST_SHARE = \

87
contrib/install_db4.sh Executable file
View File

@ -0,0 +1,87 @@
#!/bin/sh
# Install libdb4.8 (Berkeley DB).
set -e
if [ -z "${1}" ]; then
echo "Usage: ./install_db4.sh <base-dir> [<extra-bdb-configure-flag> ...]"
echo
echo "Must specify a single argument: the directory in which db5 will be built."
echo "This is probably \`pwd\` if you're at the root of the dash repository."
exit 1
fi
expand_path() {
echo "$(cd "${1}" && pwd -P)"
}
BDB_PREFIX="$(expand_path ${1})/db4"; shift;
BDB_EXTRA_CONFIGURE_FLAGS="${@}"
BDB_VERSION='db-4.8.30.NC'
BDB_HASH='12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef'
BDB_URL="https://download.oracle.com/berkeley-db/${BDB_VERSION}.tar.gz"
check_exists() {
which "$1" >/dev/null 2>&1
}
sha256_check() {
# Args: <sha256_hash> <filename>
#
if check_exists sha256sum; then
echo "${1} ${2}" | sha256sum -c
elif check_exists sha256; then
echo "${1} ${2}" | sha256 -c
else
echo "${1} ${2}" | shasum -a 256 -c
fi
}
http_get() {
# Args: <url> <filename> <sha256_hash>
#
# It's acceptable that we don't require SSL here because we manually verify
# content hashes below.
#
if [ -f "${2}" ]; then
echo "File ${2} already exists; not downloading again"
elif check_exists curl; then
curl --insecure "${1}" -o "${2}"
else
wget --no-check-certificate "${1}" -O "${2}"
fi
sha256_check "${3}" "${2}"
}
mkdir -p "${BDB_PREFIX}"
http_get "${BDB_URL}" "${BDB_VERSION}.tar.gz" "${BDB_HASH}"
tar -xzvf ${BDB_VERSION}.tar.gz -C "$BDB_PREFIX"
cd "${BDB_PREFIX}/${BDB_VERSION}/"
# Apply a patch when building on OS X to make the build work with Xcode.
#
if [ "$(uname)" = "Darwin" ]; then
BDB_OSX_ATOMIC_PATCH_URL='https://raw.githubusercontent.com/narkoleptik/os-x-berkeleydb-patch/0007e2846ae3fc9757849f5277018f4179ad17ef/atomic.patch'
BDB_OSX_ATOMIC_PATCH_HASH='ba0e2b4f53e9cb0ec58f60a979b53b8567b4565f0384886196f1fc1ef111d151'
http_get "${BDB_OSX_ATOMIC_PATCH_URL}" atomic.patch "${BDB_OSX_ATOMIC_PATCH_HASH}"
patch -p1 < atomic.patch
fi
cd build_unix/
"${BDB_PREFIX}/${BDB_VERSION}/dist/configure" \
--enable-cxx --disable-shared --with-pic --prefix="${BDB_PREFIX}" \
"${BDB_EXTRA_CONFIGURE_FLAGS}"
make install
echo
echo "db4 build complete."
echo
echo 'When compiling dashd, run `./configure` in the following way:'
echo
echo " export BDB_PREFIX='${BDB_PREFIX}'"
echo ' ./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" ...'

View File

@ -39,28 +39,17 @@ This compiler will not overwrite the system compiler, it will be installed as `e
BerkeleyDB is only necessary for the wallet functionality. To skip this, pass `--disable-wallet` to `./configure`. BerkeleyDB is only necessary for the wallet functionality. To skip this, pass `--disable-wallet` to `./configure`.
See "Berkeley DB" in [build-unix.md](build-unix.md#berkeley-db) for instructions on how to build BerkeleyDB 4.8. It is recommended to use Berkeley DB 4.8. You cannot use the BerkeleyDB library
You cannot use the BerkeleyDB library from ports, for the same reason as boost above (g++/libstd++ incompatibility). from ports, for the same reason as boost above (g++/libstd++ incompatibility).
If you have to build it yourself, you can use [the installation script included
in contrib/](contrib/install_db4.sh) like so:
```bash ```shell
# Pick some path to install BDB to, here we create a directory within the dash directory ./contrib/install_db4.sh `pwd` CC=egcc CXX=eg++ CPP=ecpp
BITCOIN_ROOT=$(pwd)
BDB_PREFIX="${BITCOIN_ROOT}/db4"
mkdir -p $BDB_PREFIX
# Fetch the source and verify that it is not tampered with
curl -o db-4.8.30.NC.tar.gz 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256 -c
# MUST output: (SHA256) db-4.8.30.NC.tar.gz: OK
tar -xzf db-4.8.30.NC.tar.gz
# Build the library and install to specified prefix
cd db-4.8.30.NC/build_unix/
# Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX CC=egcc CXX=eg++ CPP=ecpp
make install # do NOT use -jX, this is broken
``` ```
from the root of the repository.
### Resource limits ### Resource limits
The standard ulimit restrictions in OpenBSD are very strict: The standard ulimit restrictions in OpenBSD are very strict:

View File

@ -30,7 +30,19 @@ If you want to build the disk image with `make deploy` (.dmg / optional), you ne
brew install librsvg brew install librsvg
``` ```
**Note**: You only need Berkeley DB if the wallet is enabled (see [*Disable-wallet mode*](/doc/build-osx.md#disable-wallet-mode)). ## Berkeley DB
It is recommended to use Berkeley DB 4.8. If you have to build it yourself,
you can use [the installation script included in contrib/](contrib/install_db4.sh)
like so:
```shell
./contrib/install_db4.sh .
```
from the root of the repository.
**Note**: You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below).
## Build Dash Core ## Build Dash Core

View File

@ -99,8 +99,6 @@ SQLite is required for the wallet:
sudo apt install libsqlite3-dev sudo apt install libsqlite3-dev
To build Dash Core without wallet, see [*Disable-wallet mode*](/doc/build-unix.md#disable-wallet-mode)
Optional port mapping libraries (see: `--with-miniupnpc`, `--enable-upnp-default`, and `--with-natpmp`, `--enable-natpmp-default`): Optional port mapping libraries (see: `--with-miniupnpc`, `--enable-upnp-default`, and `--with-natpmp`, `--enable-natpmp-default`):
sudo apt install libminiupnpc-dev libnatpmp-dev sudo apt install libminiupnpc-dev libnatpmp-dev
@ -198,33 +196,18 @@ turned off by default. See the configure options for NAT-PMP behavior desired:
Berkeley DB Berkeley DB
----------- -----------
It is recommended to use Berkeley DB 4.8. If you have to build it yourself: It is recommended to use Berkeley DB 4.8. If you have to build it yourself,
you can use [the installation script included in contrib/](contrib/install_db4.sh)
like so:
```bash ```shell
DASH_ROOT=$(pwd) ./contrib/install_db4.sh `pwd`
# Pick some path to install BDB to, here we create a directory within the dash directory
BDB_PREFIX="${DASH_ROOT}/db4"
mkdir -p $BDB_PREFIX
# Fetch the source and verify that it is not tampered with
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256sum -c
# -> db-4.8.30.NC.tar.gz: OK
tar -xzvf db-4.8.30.NC.tar.gz
# Build the library and install to our prefix
cd db-4.8.30.NC/build_unix/
# Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
make install
# Configure Dash Core to use our own-built instance of BDB
cd $DASH_ROOT
./autogen.sh
./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" # (other args...)
``` ```
from the root of the repository.
**Note**: You only need Berkeley DB if the wallet is enabled (see [*Disable-wallet mode*](/doc/build-unix.md#disable-wallet-mode)).
Boost Boost
----- -----
If you need to build Boost yourself: If you need to build Boost yourself: