commit: a620392f7409cfe134407933df7b98f6e48b5e29 Author: Matt Whitlock <gentoo <AT> mattwhitlock <DOT> name> AuthorDate: Fri Oct 10 20:25:28 2025 +0000 Commit: Florian Schmaus <flow <AT> gentoo <DOT> org> CommitDate: Thu Oct 30 19:29:13 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a620392f
net-p2p/bitcoin-core: bump to 29.2 Note: An automated detection is added in pkg_setup() to alert users if they have any auto-loaded wallets still in the soon-to-be obsolete format. Even if they miss seeing the warning, the worst that will happen upon upgrading to 30.0 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/v29.2 Signed-off-by: Matt Whitlock <gentoo <AT> mattwhitlock.name> Part-of: https://github.com/gentoo/gentoo/pull/44122 Closes: https://github.com/gentoo/gentoo/pull/44122 Signed-off-by: Florian Schmaus <flow <AT> gentoo.org> net-p2p/bitcoin-core/Manifest | 1 + net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild | 340 ++++++++++++++++++++++++++ 2 files changed, 341 insertions(+) diff --git a/net-p2p/bitcoin-core/Manifest b/net-p2p/bitcoin-core/Manifest index f7d8221c0125..d0fcbaa8e338 100644 --- a/net-p2p/bitcoin-core/Manifest +++ b/net-p2p/bitcoin-core/Manifest @@ -1,4 +1,5 @@ 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-29.2.tar.gz 12874820 BLAKE2B 43c57637f9ae842935cc27c8d16cfbdc7a2abe7ed55f58666f3bd3a2aa2826532a2207a35a27ed846b86ea2b304e22a99446d6d7138d202029ce9bde82353577 SHA512 1c3eb5988e1f6b0292f103de3e7911dc9430429687158988c510e647520d094e55b7cc63fd9044db9225111811368c1998b8320066bcec4f154e771e2beee7eb DIST bitcoin-core-30.0.tar.gz 12676071 BLAKE2B 4204613d7b24193520bd5c539b45d368a5348a7aace365b8909ba439dbe0393d2e58b498431d492901abf09963408d3661998f1cbdf987e6074be117a3ad44f4 SHA512 290bdbffc945f34cb5571c19bcb41265cb3f209fd86018694a2426555456812c56bba5a4271e6928ccc4468a1f0175a6769d4745ecb213e521d3201cd557a21f diff --git a/net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild b/net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild new file mode 100644 index 000000000000..40e419072042 --- /dev/null +++ b/net-p2p/bitcoin-core/bitcoin-core-29.2.ebuild @@ -0,0 +1,340 @@ +# 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 + https://github.com/bitcoin/bitcoin/commit/6d4214925fadc36d26aa58903db5788c742e68c6.patch?full_index=1 -> ${PN}-29.0-qt6.patch +" +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 +berkdb +cli +daemon dbus examples +external-signer gui qrcode +sqlite +system-libsecp256k1 systemtap test test-full 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:= + berkdb? ( >=sys-libs/db-4.8.30:$(db_ver_to_slot 4.8)=[cxx] ) + 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:= ) + sqlite? ( >=dev-db/sqlite-3.38.5:= ) + system-libsecp256k1? ( >=dev-libs/libsecp256k1-0.6.0:=[asm=,ellswift,extrakeys,recovery,schnorr] ) + 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=( + "${DISTDIR}/${PN}-29.0-qt6.patch" + "${FILESDIR}/29.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 + if ! use berkdb && ! use sqlite && + { { use daemon && ! has_version "${CATEGORY}/${PN}[daemon,-berkdb,-sqlite]" ; } || + { use gui && ! has_version "${CATEGORY}/${PN}[gui,-berkdb,-sqlite]" ; } ; } + then + efmt ewarn <<-EOF + You are enabling neither USE="berkdb" nor USE="sqlite". This is a valid + configuration, but your Bitcoin node will be unable to open any wallets. + 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 (soon to be unsupported) format + if use daemon && use berkdb && [[ -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 will no longer be supported by the next major version of Bitcoin Core: + $(printf ' - %s\n' "${bdb_wallets[@]}") + EOF + use cli && efmt ewarn <<-EOF + You may want to convert them to descriptor wallets by executing + \`bitcoin-cli migratewallet "<wallet_name>" ["<passphrase>"]\` + after starting bitcoind. + 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 + + # we set BUILD_UTIL=OFF, so we can't test bitcoin-util + sed -ne '/^ {/{h;:0;n;H;/^ }/!b0;g;\|"exec": *"\./bitcoin-util"|d};p' \ + -i test/util/data/bitcoin-util-test.json || die + + 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 wallet ; if use berkdb || use sqlite ; then wallet=ON ; else wallet=OFF ; fi + local mycmakeargs=( +# -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON # https://github.com/bitcoin/bitcoin/pull/32220 + -DBUILD_SHARED_LIBS=ON + -DENABLE_WALLET=${wallet} + -DWITH_SQLITE=$(usex sqlite) + -DWITH_BDB=$(usex berkdb) + -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=${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 berkdb || use sqlite && 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/bin/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 berkdb ; then + # https://github.com/bitcoin/bitcoin/pull/28597 + # https://bitcoincore.org/en/releases/26.0/#wallet + efmt ewarn <<-EOF + Creation of legacy (Berkeley DB) wallets is refused starting with Bitcoin + Core 26.0, pending the deprecation and eventual removal of support for + legacy wallets altogether in future releases. At present you can still + force support for the creation of legacy wallets by adding the following + line to your bitcoin.conf: + + deprecatedrpc=create_bdb + EOF + fi +} + +pkg_postrm() { + if use gui ; then + xdg_desktop_database_update + xdg_icon_cache_update + fi +}
