commit: 2abfc2dd756a66f251b928103079a86c163f715e Author: Matt Whitlock <gentoo <AT> mattwhitlock <DOT> name> AuthorDate: Thu Oct 9 21:55:03 2025 +0000 Commit: Florian Schmaus <flow <AT> gentoo <DOT> org> CommitDate: Thu Oct 30 19:28:19 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2abfc2dd
net-p2p/bitcoin-core: bump to 30.0 Note: This release drops IUSE="berkdb" and replaces IUSE="sqlite" with IUSE="wallet" since the BDB wallet format is no longer supported. An automated detection is added in pkg_setup() to alert users if they have any auto-loaded wallets still in the obsolete format. Even if they miss seeing the warning, the worst that will happen is that their system service or manually executed BitcoinD will fail to start, and they will need to edit their settings.json to remove the offending wallets and then call the migratewallet RPC to migrate their old wallets to the new format. Bitcoin Core 30.0 introduces a minimal Berkeley DB reader (with no dependency on any Berkeley DB library) so that the wallet migration command remains usable. Note: This release drops the automated data directory migration that has been offered since 380aad5fc649a00ae46644c130fb9a3b8970ee09 (Oct 2023). Users who still have /var/lib/bitcoin/.bitcoin as a symlink to /var/lib/bitcoind will lose that symlink upon upgrading to this release. See: https://github.com/bitcoin/bitcoin/releases/tag/v30.0 Signed-off-by: Matt Whitlock <gentoo <AT> mattwhitlock.name> Part-of: https://github.com/gentoo/gentoo/pull/44118 Closes: https://github.com/gentoo/gentoo/pull/44118 Signed-off-by: Florian Schmaus <flow <AT> gentoo.org> net-p2p/bitcoin-core/Manifest | 1 + net-p2p/bitcoin-core/bitcoin-core-30.0.ebuild | 320 +++++++++++++++++++++ .../bitcoin-core/files/30.0-cmake-syslibs.patch | 78 +++++ net-p2p/bitcoin-core/metadata.xml | 1 + 4 files changed, 400 insertions(+) diff --git a/net-p2p/bitcoin-core/Manifest b/net-p2p/bitcoin-core/Manifest index 2ef90b761821..f7d8221c0125 100644 --- a/net-p2p/bitcoin-core/Manifest +++ b/net-p2p/bitcoin-core/Manifest @@ -1,3 +1,4 @@ DIST bitcoin-core-29.0.tar.gz 12931219 BLAKE2B ee4a9b67ceb3e7a1851f844a090a099267798f83fbeb4fb76e0dd30ec24ce3fb967ab032179492cb8c02f0e470b3c2546ad589f940487bb0a0cc4d469bf3e1f9 SHA512 1373348fff7ac978fd28a8e29eda9ba9af745f947153a2c6c099b1e997d0d55611627f4c5299e350be3a9b555406da6bf056d2c5f6c123077e2872f5db7b3459 DIST bitcoin-core-29.0-qt6.patch 16737 BLAKE2B bf863852ad8d313ad26612f149612944949b93f3b6f4f1891587226bbf11fcfc5c29b63a59965bfd56f7edec27c82cef2209e40201963d4227e46fa87664f694 SHA512 af19a7ddee9f0cce85684149a130715df8511b9e4f38e5e3a79cf14586f1f73bde671a5ed1d44da870b3f2352d3c8e561b1ffa01e224e253019c71dfc4544476 DIST bitcoin-core-29.1.tar.gz 12876068 BLAKE2B ed8afd0d4a9ef82ac3fb4ec440fbe166db027b1cc961b0cb4cbaf3497883902bc3e6af23296cbc04bf6404f51a1e725bdf536a0dc7976d1082ccd03b4a500879 SHA512 0110ea33787fc2fad152578dddd7c55e4219d9753d22b7fbb050755bdaa0f9dccd88c254f072ce855869ed9cddfb99015818ce1f44bbd1e25b2129a036d8fdf5 +DIST bitcoin-core-30.0.tar.gz 12676071 BLAKE2B 4204613d7b24193520bd5c539b45d368a5348a7aace365b8909ba439dbe0393d2e58b498431d492901abf09963408d3661998f1cbdf987e6074be117a3ad44f4 SHA512 290bdbffc945f34cb5571c19bcb41265cb3f209fd86018694a2426555456812c56bba5a4271e6928ccc4468a1f0175a6769d4745ecb213e521d3201cd557a21f diff --git a/net-p2p/bitcoin-core/bitcoin-core-30.0.ebuild b/net-p2p/bitcoin-core/bitcoin-core-30.0.ebuild new file mode 100644 index 000000000000..60c40b175420 --- /dev/null +++ b/net-p2p/bitcoin-core/bitcoin-core-30.0.ebuild @@ -0,0 +1,320 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{11..14} ) + +inherit bash-completion-r1 check-reqs cmake db-use desktop edo multiprocessing python-any-r1 systemd toolchain-funcs xdg-utils + +DESCRIPTION="Reference implementation of the Bitcoin cryptocurrency" +HOMEPAGE="https://bitcoincore.org/" +SRC_URI="https://github.com/bitcoin/bitcoin/archive/v${PV/_rc/rc}.tar.gz -> ${P}.tar.gz" +S="${WORKDIR}/${PN/-core}-${PV/_rc/rc}" + +LICENSE="MIT" +SLOT="0" +if [[ "${PV}" != *_rc* ]] ; then + KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux" +fi +IUSE="asm +cli +daemon dbus examples +external-signer gui qrcode +system-libsecp256k1 systemtap test test-full +wallet zeromq" +RESTRICT="!test? ( test )" + +REQUIRED_USE=" + dbus? ( gui ) + qrcode? ( gui ) + test-full? ( test ) +" +# dev-libs/univalue is now bundled, as upstream dropped support for system copy +# and their version in the Bitcoin repo has deviated a fair bit from upstream. +# Upstream also seems very inactive. +COMMON_DEPEND=" + >=dev-libs/boost-1.81.0:= + >=dev-libs/libevent-2.1.12:= + daemon? ( + acct-group/bitcoin + acct-user/bitcoin + ) + gui? ( + >=dev-qt/qtbase-6.2:6[dbus?,gui,network,widgets] + ) + qrcode? ( >=media-gfx/qrencode-4.1.1:= ) + system-libsecp256k1? ( >=dev-libs/libsecp256k1-0.6.0:=[asm=,ellswift,extrakeys,recovery,schnorr] ) + wallet? ( >=dev-db/sqlite-3.38.5:= ) + zeromq? ( >=net-libs/zeromq-4.3.4:= ) +" +RDEPEND=" + ${COMMON_DEPEND} + !dev-util/bitcoin-tx + cli? ( !net-p2p/bitcoin-cli ) + daemon? ( !net-p2p/bitcoind ) + gui? ( !net-p2p/bitcoin-qt ) +" +DEPEND=" + ${COMMON_DEPEND} + systemtap? ( >=dev-debug/systemtap-4.8 ) +" +BDEPEND=" + >=dev-build/cmake-3.25 + virtual/pkgconfig + daemon? ( + acct-group/bitcoin + acct-user/bitcoin + ) + gui? ( >=dev-qt/qttools-6.2:6[linguist] ) + test? ( + ${PYTHON_DEPS} + ) +" +IDEPEND=" + gui? ( dev-util/desktop-file-utils ) +" + +DOCS=( + doc/bips.md + doc/bitcoin-conf.md + doc/descriptors.md + doc/files.md + doc/i2p.md + doc/JSON-RPC-interface.md + doc/multisig-tutorial.md + doc/p2p-bad-ports.md + doc/psbt.md + doc/reduce-memory.md + doc/reduce-traffic.md + doc/release-notes.md + doc/REST-interface.md + doc/tor.md +) + +PATCHES=( + "${FILESDIR}/30.0-cmake-syslibs.patch" + "${FILESDIR}/26.0-init.patch" +) + +efmt() { + : ${1:?} ; local l ; while read -r l ; do "${!#}" "${l}" ; done < <(fmt "${@:1:$#-1}") +} + +pkg_pretend() { + if ! use daemon && ! use gui && ! has_version "${CATEGORY}/${PN}[-daemon,-gui(-),-qt5(-)]" ; then + efmt ewarn <<-EOF + You are enabling neither USE="daemon" nor USE="gui". This is a valid + configuration, but you will be unable to run a Bitcoin node using this + installation. + EOF + fi + if use daemon && ! use cli && ! has_version "${CATEGORY}/${PN}[daemon,-bitcoin-cli(-),-cli(-)]" ; then + efmt ewarn <<-EOF + You are enabling USE="daemon" but not USE="cli". This is a valid + configuration, but you will be unable to interact with your bitcoind node + via the command line using this installation. + EOF + fi + + # test/functional/feature_pruning.py requires 4 GB disk space + # test/functional/wallet_pruning.py requires 1.3 GB disk space + use test && CHECKREQS_DISK_BUILD="6G" check-reqs_pkg_pretend +} + +pkg_setup() { + if use test ; then + CHECKREQS_DISK_BUILD="6G" check-reqs_pkg_setup + python-any-r1_pkg_setup + fi + + # check for auto-loaded wallets in the obsolete (now unsupported) format + if use daemon && use wallet && [[ -r "${EROOT}/var/lib/bitcoind/settings.json" ]] ; then + local wallet bdb_wallets=() + while read -rd '' wallet ; do + # printf interprets any C-style escape sequences in ${wallet} + wallet="${EROOT}$(printf "/var/lib/bitcoind/wallets/${wallet:+${wallet//\%/%%}/}wallet.dat")" + [[ -r "${wallet}" && "$(file -b -- "${wallet}")" == *'Berkeley DB'* ]] && bdb_wallets+=( "${wallet}" ) + done < <( + # parsing settings.json using jq would be far cleaner, but jq might not be installed + sed -Enze 'H;${x;s/^.*"wallet"\s*:\s*\[\s*("([^"\\]|\\.)*"(\s*,\s*"([^"\\]|\\.)*")*)\s*\].*$/\1/;T' \ + -e 's/"(([^"\\]|\\.)*)"\s*(,\s*)?/\1\x0/gp}' -- "${EROOT}/var/lib/bitcoind/settings.json" + ) + if (( ${#bdb_wallets[@]} )) ; then + efmt -su ewarn <<-EOF + The following auto-loaded wallets are in the legacy (Berkeley DB) format, \ + which is no longer supported by this version of Bitcoin Core: + $(printf ' - %s\n' "${bdb_wallets[@]}") + You may need to remove these wallets from your auto-load configuration \ + at ${EROOT}/var/lib/bitcoind/settings.json$(use cli && cat <<-EOS + and convert them to descriptor wallets by executing \ + \`bitcoin-cli migratewallet "<wallet_name>" ["<passphrase>"]\` \ + after starting bitcoind + EOS + ). + EOF + fi + fi +} + +src_prepare() { + # https://bugs.gentoo.org/958361 + # https://github.com/google/crc32c/commit/2bbb3be42e20a0e6c0f7b39dc07dc863d9ffbc07 + sed -e '/^cmake_minimum_required(VERSION 3\.1)$/s/)$/6)/' -i src/crc32c/CMakeLists.txt || die + + eapply_user + ! use system-libsecp256k1 || rm -r src/secp256k1 || die + cmake_src_prepare + + sed -e 's/^\(complete -F _bitcoind\b\).*$/\1'"$(usev daemon ' bitcoind')$(usev gui ' bitcoin-qt')/" \ + -i contrib/completions/bash/bitcoind.bash || die +} + +src_configure() { + local mycmakeargs=( +# -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON # https://github.com/bitcoin/bitcoin/pull/32220 + -DBUILD_SHARED_LIBS=ON + -DENABLE_IPC=OFF + -DENABLE_WALLET=$(usex wallet) + -DWITH_USDT=$(usex systemtap) + -DBUILD_TESTS=$(usex test) + -DBUILD_BENCH=OFF + -DBUILD_{FOR_FUZZING,FUZZ_BINARY}=OFF + -DWITH_QRENCODE=$(usex qrcode) + -DWITH_CCACHE=OFF + -DWITH_ZMQ=$(usex zeromq) + -DENABLE_EXTERNAL_SIGNER=$(usex external-signer) + -DBUILD_CLI=$(usex cli) + -DBUILD_TX=ON + -DBUILD_WALLET_TOOL=$(usex wallet) + -DBUILD_UTIL=OFF + -DBUILD_DAEMON=$(usex daemon) + -DBUILD_GUI=$(usex gui) + -DWITH_DBUS=$(usex dbus) + -DWITH_SYSTEM_LIBSECP256K1=$(usex system-libsecp256k1 ON \ + "OFF -DSECP256K1_ASM=$(usex asm AUTO OFF)") + ) + cmake_src_configure +} + +src_compile() { + cmake_src_compile + + if use daemon && ! tc-is-cross-compiler ; then + TOPDIR="${S}" BUILDDIR="${BUILD_DIR}" bash contrib/devtools/gen-bitcoin-conf.sh || die + fi + sed -e 's/ To use, copy this file$//p;Tp;:0;n;/save the file\.$/!b0;d;:p;p' \ + -ni share/examples/bitcoin.conf || die +} + +src_test() { + cmake_src_test + + if use daemon ; then + cd -- "${BUILD_DIR}" || die + edo "${PYTHON}" test/functional/test_runner.py \ + --ansi $(usev test-full --extended) --jobs="$(get_makeopts_jobs)" --timeout-factor="${TIMEOUT_FACTOR:-15}" + fi +} + +src_install() { + dodoc -r doc/release-notes + + use external-signer && DOCS+=( doc/external-signer.md ) + use wallet && DOCS+=( doc/managing-wallets.md ) + use systemtap && DOCS+=( doc/tracing.md ) + use zeromq && DOCS+=( doc/zmq.md ) + + if use daemon ; then + # https://bugs.gentoo.org/757102 + DOCS+=( share/rpcauth/rpcauth.py ) + docompress -x "/usr/share/doc/${PF}/rpcauth.py" + fi + + einstalldocs + cmake_src_install + + find "${ED}" -type f -name '*.la' -delete || die + ! use test || rm -f -- "${ED}"/usr/libexec/test_bitcoin{,-qt} || die + + newbashcomp contrib/completions/bash/bitcoin-tx.bash bitcoin-tx + use cli && newbashcomp contrib/completions/bash/bitcoin-cli.bash bitcoin-cli + if use daemon ; then + newbashcomp contrib/completions/bash/bitcoind.bash bitcoind + use gui && bashcomp_alias bitcoind bitcoin-qt + elif use gui ; then + newbashcomp contrib/completions/bash/bitcoind.bash bitcoin-qt + fi + + if use daemon ; then + insinto /etc/bitcoin + doins share/examples/bitcoin.conf + fowners bitcoin:bitcoin /etc/bitcoin/bitcoin.conf + fperms 0660 /etc/bitcoin/bitcoin.conf + + newconfd contrib/init/bitcoind.openrcconf bitcoind + newinitd "${FILESDIR}/bitcoind.openrc" bitcoind + systemd_newunit contrib/init/bitcoind.service bitcoind.service + + keepdir /var/lib/bitcoind + fperms 0750 /var/lib/bitcoind + fowners bitcoin:bitcoin /var/lib/bitcoind + dosym -r {/etc/bitcoin,/var/lib/bitcoind}/bitcoin.conf + + insinto /etc/logrotate.d + newins "${FILESDIR}/bitcoind.logrotate-r1" bitcoind + fi + + if use gui ; then + insinto /usr/share/icons/hicolor/scalable/apps + newins src/qt/res/src/bitcoin.svg bitcoin128.svg + + domenu "${FILESDIR}/org.bitcoin.bitcoin-qt.desktop" + fi + + if use examples ; then + docinto examples + dodoc -r contrib/{linearize,qos} + use zeromq && dodoc -r contrib/zmq + fi +} + +pkg_postinst() { + # we don't use xdg.eclass because it adds unconditional IDEPENDs + if use gui ; then + xdg_desktop_database_update + xdg_icon_cache_update + fi + + if use daemon && [[ -z "${REPLACING_VERSIONS}" ]] ; then + efmt -su elog <<-EOF + To have ${PN} automatically use Tor when it's running, be sure your \ + 'torrc' config file has 'ControlPort' and 'CookieAuthentication' set up \ + correctly, and: + - Using an init script: add the 'bitcoin' user to the 'tor' user group. + - Running bitcoind directly: add that user to the 'tor' user group. + EOF + fi + + if use cli && use daemon ; then + efmt -su elog <<-EOF + To use bitcoin-cli with the /etc/init.d/bitcoind service: + - Add your user(s) to the 'bitcoin' group. + - Symlink ~/.bitcoin to /var/lib/bitcoind. + EOF + fi + + if use wallet && [[ -r "${EROOT}/etc/bitcoin/bitcoin.conf" ]] && + grep -q '^\s*deprecatedrpc\s*=.*\bcreate_bdb\b' -- "${EROOT}/etc/bitcoin/bitcoin.conf" + then + # https://github.com/bitcoin/bitcoin/pull/31250 + efmt ewarn <<-EOF + Creation of legacy (Berkeley DB) wallets is no longer possible starting with + Bitcoin Core 30.0. You must remove the following line from your bitcoin.conf: + + deprecatedrpc=create_bdb + EOF + fi +} + +pkg_postrm() { + if use gui ; then + xdg_desktop_database_update + xdg_icon_cache_update + fi +} diff --git a/net-p2p/bitcoin-core/files/30.0-cmake-syslibs.patch b/net-p2p/bitcoin-core/files/30.0-cmake-syslibs.patch new file mode 100644 index 000000000000..efb415d05b95 --- /dev/null +++ b/net-p2p/bitcoin-core/files/30.0-cmake-syslibs.patch @@ -0,0 +1,78 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d6368096e5..cff9157f70 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -7,7 +7,7 @@ + # + # Centos Stream 9, https://www.centos.org/cl-vs-cs/#end-of-life, EOL in May 2027: + # - CMake 3.26.5, https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/ +-cmake_minimum_required(VERSION 3.22) ++cmake_minimum_required(VERSION 3.25) + + if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "In-source builds are not allowed.") +@@ -150,6 +150,9 @@ if(ENABLE_IPC AND WITH_EXTERNAL_LIBMULTIPROCESS) + ) + endif() + ++option(WITH_SYSTEM_LIBSECP256K1 "Link with system-installed libsecp256k1." OFF) ++mark_as_advanced(WITH_SYSTEM_LIBSECP256K1) ++ + cmake_dependent_option(BUILD_GUI_TESTS "Build test_bitcoin-qt executable." ON "BUILD_GUI;BUILD_TESTS" OFF) + if(BUILD_GUI) + set(qt_components Core Gui Widgets LinguistTools) +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index a6fb12c009..810d793ae6 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -23,9 +23,50 @@ if (ENABLE_IPC AND NOT WITH_EXTERNAL_LIBMULTIPROCESS) + include(../cmake/libmultiprocess.cmake) + add_libmultiprocess(ipc/libmultiprocess) + endif() ++ ++if(WITH_SYSTEM_LIBSECP256K1) ++ ++find_package(PkgConfig REQUIRED) ++pkg_check_modules(libsecp256k1 REQUIRED IMPORTED_TARGET libsecp256k1) ++add_library(secp256k1 ALIAS PkgConfig::libsecp256k1) ++block() ++ string(APPEND CMAKE_REQUIRED_FLAGS " ${libsecp256k1_CFLAGS_OTHER}") ++ list(APPEND CMAKE_REQUIRED_INCLUDES ${libsecp256k1_INCLUDE_DIRS}) ++ list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${libsecp256k1_LDFLAGS}) ++ list(APPEND CMAKE_REQUIRED_LIBRARIES ${libsecp256k1_LIBRARIES}) ++ unset(missing_modules) ++ include(CheckSymbolExists) ++ macro(check_secp256k1_module module symbol) ++ string(TOUPPER "${symbol}" VAR) ++ set(VAR "libsecp256k1_HAS_${VAR}") ++ unset(${VAR}) ++ check_symbol_exists("${symbol}" "secp256k1_${module}.h" ${VAR}) ++ if(NOT ${VAR}) ++ list(APPEND missing_modules "${module}") ++ endif() ++ endmacro() ++ message(CHECK_START "Checking for required libsecp256k1 modules") ++ list(APPEND CMAKE_MESSAGE_INDENT " ") ++ check_secp256k1_module(ellswift secp256k1_ellswift_create) ++ check_secp256k1_module(extrakeys secp256k1_xonly_pubkey_parse) ++ check_secp256k1_module(musig secp256k1_musig_pubnonce_parse) ++ check_secp256k1_module(recovery secp256k1_ecdsa_recover) ++ check_secp256k1_module(schnorrsig secp256k1_schnorrsig_verify) ++ list(POP_BACK CMAKE_MESSAGE_INDENT) ++ if(missing_modules) ++ list(JOIN missing_modules ", " missing_modules) ++ message(FATAL_ERROR "System-installed libsecp256k1 lacks these required modules: ${missing_modules}.") ++ endif() ++ message(CHECK_PASS "all were found") ++endblock() ++ ++else() # !WITH_SYSTEM_LIBSECP256K1 ++ + include(../cmake/secp256k1.cmake) + add_secp256k1(secp256k1) + ++endif() # !WITH_SYSTEM_LIBSECP256K1 ++ + # Set top-level target output locations. + if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) diff --git a/net-p2p/bitcoin-core/metadata.xml b/net-p2p/bitcoin-core/metadata.xml index b1e961f48dff..688af2bee25d 100644 --- a/net-p2p/bitcoin-core/metadata.xml +++ b/net-p2p/bitcoin-core/metadata.xml @@ -20,6 +20,7 @@ <flag name="system-libsecp256k1">Link with <pkg>dev-libs/libsecp256k1</pkg> rather than embedding an internal copy</flag> <flag name="systemtap">Enable SystemTap/DTrace tracing</flag> <flag name="test-full">Run tests that take a long time</flag> + <flag name="wallet">Support creating and loading wallets</flag> <flag name="zeromq">Report blocks and transactions via zeromq</flag> </use> <upstream>
