Merge #11702: [build] Add a script for installing db4
6e4cdd6
[docs] Add reference to install_db4.sh in OS X build instructions (James O'Beirne)af9103e
[build] Add a script for installing db4 (James O'Beirne) Pull request description: Instead of maintaining rote instructions for building BerkeleyDB in `doc/build-{unix,openbsd}.md`, reference a script that does the same thing and can be called from unanticipated contexts, e.g. Docker builds. The script was written with portability in mind, though I haven't tested it on openbsd. I wasn't sure if we wanted to create a separate directory for this sort of thing (e.g. `contrib/install`) so I just stuck it in `contrib/`; happy to move it around if anyone has another preference. Tree-SHA512: d2fc83c065d083458c448e6041e5e9ef67f8165974925560a83881d22d1e9448ea3dd4f7a38196800a8cd6dcf206208a2d6d12417bfe094902d4754e4ca67f18
This commit is contained in:
commit
41221126c8
5 changed files with 117 additions and 43 deletions
|
@ -42,6 +42,7 @@ DIST_CONTRIB = $(top_srcdir)/contrib/bitcoin-cli.bash-completion \
|
||||||
$(top_srcdir)/contrib/bitcoin-tx.bash-completion \
|
$(top_srcdir)/contrib/bitcoin-tx.bash-completion \
|
||||||
$(top_srcdir)/contrib/bitcoind.bash-completion \
|
$(top_srcdir)/contrib/bitcoind.bash-completion \
|
||||||
$(top_srcdir)/contrib/init \
|
$(top_srcdir)/contrib/init \
|
||||||
|
$(top_srcdir)/contrib/install_db4.sh \
|
||||||
$(top_srcdir)/contrib/rpm
|
$(top_srcdir)/contrib/rpm
|
||||||
DIST_SHARE = \
|
DIST_SHARE = \
|
||||||
$(top_srcdir)/share/genbuild.sh \
|
$(top_srcdir)/share/genbuild.sh \
|
||||||
|
|
87
contrib/install_db4.sh
Executable file
87
contrib/install_db4.sh
Executable 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 bitcoin 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 bitcoind, 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/" ...'
|
|
@ -38,28 +38,17 @@ The default C++ compiler that comes with OpenBSD 6.2 is g++ 4.2.1. This version
|
||||||
|
|
||||||
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 bitcoin 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:
|
||||||
|
|
|
@ -26,6 +26,20 @@ If you want to build the disk image with `make deploy` (.dmg / optional), you ne
|
||||||
|
|
||||||
NOTE: Building with Qt4 is still supported, however, could result in a broken UI. Building with Qt5 is recommended.
|
NOTE: Building with Qt4 is still supported, however, could result in a broken UI. Building with Qt5 is recommended.
|
||||||
|
|
||||||
|
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 Bitcoin Core
|
Build Bitcoin Core
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|
|
@ -165,33 +165,16 @@ turned off by default. See the configure options for upnp 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
|
||||||
BITCOIN_ROOT=$(pwd)
|
./contrib/install_db4.sh `pwd`
|
||||||
|
|
||||||
# Pick some path to install BDB to, here we create a directory within the bitcoin directory
|
|
||||||
BDB_PREFIX="${BITCOIN_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 Bitcoin Core to use our own-built instance of BDB
|
|
||||||
cd $BITCOIN_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 the section *Disable-Wallet mode* below).
|
**Note**: You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below).
|
||||||
|
|
||||||
Boost
|
Boost
|
||||||
|
|
Loading…
Reference in a new issue