From 3650d4befe6cad275b259c78f5373f8e851d070f Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Thu, 1 Jun 2023 08:58:16 +0000 Subject: [PATCH] bitcoin: replace nixpkgs package with bitcoin{,d} 24.1 Bitcoin Core 25.0 may sometimes hang when shutting down. --- pkgs/bitcoin/default.nix | 107 +++++++++++++++++++++++++++++++++++++++ pkgs/default.nix | 15 ++++++ pkgs/pinned.nix | 2 - 3 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 pkgs/bitcoin/default.nix diff --git a/pkgs/bitcoin/default.nix b/pkgs/bitcoin/default.nix new file mode 100644 index 0000000..7ae0099 --- /dev/null +++ b/pkgs/bitcoin/default.nix @@ -0,0 +1,107 @@ +# Copied from nixpkgs 4a22f6f0a4b4354778f786425babce9a56f6b5d8 +{ lib +, stdenv +, fetchurl +, autoreconfHook +, pkg-config +, util-linux +, hexdump +, autoSignDarwinBinariesHook +, wrapQtAppsHook ? null +, boost +, libevent +, miniupnpc +, zeromq +, zlib +, db48 +, sqlite +, qrencode +, qtbase ? null +, qttools ? null +, python3 +, nixosTests +, withGui +, withWallet ? true +}: + +let + desktop = fetchurl { + # c2e5f3e is the last commit when the debian/bitcoin-qt.desktop file was changed + url = "https://raw.githubusercontent.com/bitcoin-core/packaging/c2e5f3e20a8093ea02b73cbaf113bc0947b4140e/debian/bitcoin-qt.desktop"; + sha256 = "0cpna0nxcd1dw3nnzli36nf9zj28d2g9jf5y0zl9j18lvanvniha"; + }; +in +stdenv.mkDerivation rec { + pname = if withGui then "bitcoin" else "bitcoind"; + version = "24.1"; + + src = fetchurl { + urls = [ + "https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz" + ]; + # hash retrieved from signed SHA256SUMS + sha256 = "8a0a3db3b2d9cc024e897113f70a3a65d8de831c129eb6d1e26ffa65e7bfaf4e"; + }; + + nativeBuildInputs = + [ autoreconfHook pkg-config ] + ++ lib.optionals stdenv.isLinux [ util-linux ] + ++ lib.optionals stdenv.isDarwin [ hexdump ] + ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [ autoSignDarwinBinariesHook ] + ++ lib.optionals withGui [ wrapQtAppsHook ]; + + buildInputs = [ boost libevent miniupnpc zeromq zlib ] + ++ lib.optionals withWallet [ db48 sqlite ] + ++ lib.optionals withGui [ qrencode qtbase qttools ]; + + postInstall = lib.optionalString withGui '' + install -Dm644 ${desktop} $out/share/applications/bitcoin-qt.desktop + substituteInPlace $out/share/applications/bitcoin-qt.desktop --replace "Icon=bitcoin128" "Icon=bitcoin" + install -Dm644 share/pixmaps/bitcoin256.png $out/share/pixmaps/bitcoin.png + ''; + + configureFlags = [ + "--with-boost-libdir=${boost.out}/lib" + "--disable-bench" + ] ++ lib.optionals (!doCheck) [ + "--disable-tests" + "--disable-gui-tests" + ] ++ lib.optionals (!withWallet) [ + "--disable-wallet" + ] ++ lib.optionals withGui [ + "--with-gui=qt5" + "--with-qt-bindir=${qtbase.dev}/bin:${qttools.dev}/bin" + ]; + + nativeCheckInputs = [ python3 ]; + + doCheck = true; + + checkFlags = + [ "LC_ALL=en_US.UTF-8" ] + # QT_PLUGIN_PATH needs to be set when executing QT, which is needed when testing Bitcoin's GUI. + # See also https://github.com/NixOS/nixpkgs/issues/24256 + ++ lib.optional withGui "QT_PLUGIN_PATH=${qtbase}/${qtbase.qtPluginPrefix}"; + + enableParallelBuilding = true; + + passthru.tests = { + smoke-test = nixosTests.bitcoind; + }; + + meta = with lib; { + description = "Peer-to-peer electronic cash system"; + longDescription = '' + Bitcoin is a free open source peer-to-peer electronic cash system that is + completely decentralized, without the need for a central server or trusted + parties. Users hold the crypto keys to their own money and transact directly + with each other, with the help of a P2P network to check for double-spending. + ''; + homepage = "https://bitcoin.org/en/"; + downloadPage = "https://bitcoincore.org/bin/bitcoin-core-${version}/"; + changelog = "https://bitcoincore.org/en/releases/${version}/"; + maintainers = with maintainers; [ prusnak roconnor ]; + license = licenses.mit; + platforms = platforms.unix; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 8075dc5..ada1707 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -10,6 +10,21 @@ in } }: let self = { + # TODO-EXTERNAL: + # Remove bitcoin and bitcoind 24.1 packages and replace with 25.0 from nixpkgs + # when https://github.com/bitcoin/bitcoin/issues/27722 has been resolved + bitcoin = pkgsUnstable.libsForQt5.callPackage ./bitcoin { + stdenv = if pkgsUnstable.stdenv.isDarwin then pkgsUnstable.darwin.apple_sdk_11_0.stdenv else pkgsUnstable.stdenv; + boost = pkgsUnstable.boost17x; + withGui = true; + inherit (pkgsUnstable.darwin) autoSignDarwinBinariesHook; + }; + + bitcoind = pkgsUnstable.callPackage ./bitcoin { + boost = pkgsUnstable.boost17x; + withGui = false; + inherit (pkgsUnstable.darwin) autoSignDarwinBinariesHook; + }; clightning-rest = pkgs.callPackage ./clightning-rest { inherit (self) fetchNodeModules; }; clboss = pkgs.callPackage ./clboss { }; clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); diff --git a/pkgs/pinned.nix b/pkgs/pinned.nix index 868d3fe..504e3d1 100644 --- a/pkgs/pinned.nix +++ b/pkgs/pinned.nix @@ -2,8 +2,6 @@ pkgs: pkgsUnstable: { inherit (pkgs) - bitcoin - bitcoind extra-container lightning-pool lndconnect;