net-p2p/bitcoin: Add an option to use newer BDB

Make the new option the default, so that when the port is recompiled it
will link against BDB 5.x or 6.x (whichever is the default in the system).
This will keep old wallet files readable and will not automatically
convert them in an incompatible with BDB 4.8 way. Newly created wallet
files will not be readable by Bitcoin Core versions linked with BDB 4.8.

Next thing to consider is to remove the option to link against BDB 4.8 as
this will remove the net-p2p/bitcoin -> databases/db48 dependency and will
make it possible to ditch the latter, which is scheduled for removal from
the ports collection on Apr 30 2018.

PR:		226527
Approved by:	kbowling (maintainer), antoine
This commit is contained in:
Vasil Dimov 2018-03-29 17:52:54 +00:00
parent fcac8278a8
commit 7dc6eb0244
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=465909
4 changed files with 49 additions and 10 deletions

View file

@ -10,8 +10,10 @@ SLAVE_PORT= yes
NOT_FOR_ARCHS= powerpc powerpc64 sparc64
NOT_FOR_ARCHS_REASON= does not support big-endian architectures
OPTIONS_DEFINE= DEBUG HARDENING TESTS UPNP WALLET ZMQ
OPTIONS_DEFAULT= HARDENING UPNP WALLET
OPTIONS_DEFINE= DEBUG HARDENING TESTS UPNP ZMQ
# WALLET_BDBMODERN is a choice for WALLET, introduced via OPTIONS_RADIO=WALLET
# from ${MASTERDIR}/Makefile
OPTIONS_DEFAULT= HARDENING UPNP WALLET_BDBMODERN
USERS= bitcoin
GROUPS= bitcoin

View file

@ -10,8 +10,11 @@ NOT_FOR_ARCHS= powerpc powerpc64 sparc64
NOT_FOR_ARCHS_REASON= does not support big-endian architectures
OPTIONS_DEFINE= DEBUG HARDENING TESTS
OPTIONS_RADIO=
OPTIONS_DEFAULT= HARDENING TESTS
PKGHELP= ${NONEXISTENT}
CONFIGURE_ARGS= --without-daemon \
--without-gui \
--without-libs \

View file

@ -4,7 +4,7 @@
PORTNAME= bitcoin
PORTVERSION= 0.16.0
DISTVERSIONPREFIX= v
PORTREVISION?= 0
PORTREVISION?= 1
CATEGORIES= net-p2p finance
MAINTAINER= kbowling@FreeBSD.org
@ -36,14 +36,18 @@ TESTS_PLIST_FILES= bin/test_bitcoin-qt \
bin/test_bitcoin
.endif
OPTIONS_DEFINE?= DBUS DEBUG HARDENING QRCODES TESTS UPNP WALLET ZMQ
OPTIONS_DEFAULT?= DBUS HARDENING QRCODES UPNP WALLET
OPTIONS_DEFINE?= DBUS DEBUG HARDENING QRCODES TESTS UPNP ZMQ
OPTIONS_RADIO?= WALLET
OPTIONS_RADIO_WALLET?= WALLET_BDB48 WALLET_BDBMODERN
OPTIONS_DEFAULT?= DBUS HARDENING QRCODES UPNP WALLET_BDBMODERN
OPTIONS_SUB= yes
HARDENING_DESC= Attempt to harden binaries (PIE for ASLR, NX Stack)
QRCODES_DESC= Display QR Codes
TESTS_DESC= Build test binary and unit tests
WALLET_DESC= Wallet Management Support
WALLET_BDB48_DESC= Wallet using BDB 4.8
WALLET_BDBMODERN_DESC= Wallet using modern BDB 5.x or 6.x
ZMQ_DESC= Block and transaction broadcasting with ZeroMQ
DBUS_CONFIGURE_WITH= dbus
@ -68,11 +72,6 @@ UPNP_LIBS= -L${LOCALBASE}/lib
QRCODES_CONFIGURE_WITH= qrencode
QRCODES_LIB_DEPENDS= libqrencode.so:graphics/libqrencode
WALLET_CONFIGURE_ENABLE= wallet
WALLET_CXXFLAGS= -I${BDB_INCLUDE_DIR}
WALLET_LIBS= -L${BDB_LIB_DIR}
WALLET_USES= bdb:48
ZMQ_CONFIGURE_ENABLE= zmq
ZMQ_BUILD_DEPENDS= libzmq4>0:net/libzmq4
ZMQ_RUN_DEPENDS= libzmq4>0:net/libzmq4
@ -92,8 +91,25 @@ MAKE_ENV+= V=1
PLIST_FILES?= bin/bitcoin-qt man/man1/bitcoin-qt.1.gz \
share/applications/bitcoin-qt.desktop share/pixmaps/bitcoin128.png
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MWALLET_BDB48}
CONFIGURE_ARGS+= --enable-wallet
USES+= bdb:48
.elif ${PORT_OPTIONS:MWALLET_BDBMODERN}
CONFIGURE_ARGS+= --enable-wallet --with-incompatible-bdb
USES+= bdb:5+
.else
CONFIGURE_ARGS+= --disable-wallet
.endif
.include <bsd.port.pre.mk>
.if ${PORT_OPTIONS:MWALLET_BDB48} || ${PORT_OPTIONS:MWALLET_BDBMODERN}
CPPFLAGS+= -I${BDB_INCLUDE_DIR}
LIBS+= -L${BDB_LIB_DIR}
.endif
.if ${OSVERSION} < 1100000
CONFIGURE_ARGS+=--disable-asm
.endif

18
net-p2p/bitcoin/pkg-help Normal file
View file

@ -0,0 +1,18 @@
The wallet is stored in a Berkeley database file (BDB) (usually
~/.bitcoin/wallets/wallet.dat).
Bitcoin Core can use either BDB 4.8, 5.x or 6.x to create and access the
wallet file.
Wallets created using BDB 4.8 are also accessible by BDB 5.x and 6.x.
Wallets created using BDB 5.x or 6.x are not accessible by BDB 4.8.
Opening and using a wallet created by 4.8 with a higher major version (5.x
or 6.x) does not change its format, so it will still be accessible to 4.8
afterwards. But encrypting an unencrypted wallet recreates it, so encrypting
a 4.8 wallet with Bitcoin Core linked against BDB 5.x or 6.x will render it
unreadable for Bitcoin Core linked against BDB 4.8.
If you do not plan on copying the wallet file to another machine that uses
BDB 4.8 then it is recommended to use the modern versions of BDB 5.x or 6.x.