From patchwork Fri Oct 29 01:22:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Attila Lendvai X-Patchwork-Id: 34129 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 5EB1727BBE3; Fri, 29 Oct 2021 02:28:17 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,T_DKIM_INVALID, URIBL_BLOCKED,URI_TRY_3LD autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id A910B27BBE1 for ; Fri, 29 Oct 2021 02:28:16 +0100 (BST) Received: from localhost ([::1]:43642 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mgGgp-0008VH-JO for patchwork@mira.cbaines.net; Thu, 28 Oct 2021 21:28:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mgGgd-0008Up-5W for guix-patches@gnu.org; Thu, 28 Oct 2021 21:28:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:42041) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mgGgc-0001Hc-TW for guix-patches@gnu.org; Thu, 28 Oct 2021 21:28:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mgGgc-0002Xy-LQ for guix-patches@gnu.org; Thu, 28 Oct 2021 21:28:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#51471] [PATCH] gnu: Add geth-binary. Resent-From: Attila Lendvai Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 29 Oct 2021 01:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 51471 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 51471@debbugs.gnu.org Cc: Attila Lendvai X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.16354708679752 (code B ref -1); Fri, 29 Oct 2021 01:28:02 +0000 Received: (at submit) by debbugs.gnu.org; 29 Oct 2021 01:27:47 +0000 Received: from localhost ([127.0.0.1]:53587 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mgGgJ-0002XB-OH for submit@debbugs.gnu.org; Thu, 28 Oct 2021 21:27:47 -0400 Received: from lists.gnu.org ([209.51.188.17]:47046) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mgGgG-0002Wz-Lf for submit@debbugs.gnu.org; Thu, 28 Oct 2021 21:27:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49062) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mgGgG-0008Ty-A5 for guix-patches@gnu.org; Thu, 28 Oct 2021 21:27:40 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:52788) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mgGg6-0001FE-1f for guix-patches@gnu.org; Thu, 28 Oct 2021 21:27:37 -0400 Received: by mail-wm1-x32a.google.com with SMTP id m42so7482970wms.2 for ; Thu, 28 Oct 2021 18:27:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=JO3PmuqPf8TfsXjBlr+bkH3w5WocHZO67EF4/QFTbOs=; b=Rine2AB6e8u7WIcTrsgPFXL723k9joUIO27sgarFBcF4RSa6kBaoUDl7ZWVZnBdrof LsiK5FjPrMri5T5FlomUsw63nmyAaBmovBNc+nO20sIAmQQlFPtHNf8PSLj3ysvm0f5y kW6yJF8jZ+A524ky6+jcv7TrCXGO6u+TpFM1nVlphCJgvwGlmnvytXheO0WP88aib4Mq lf54TYdCbV/+pmJ9ZhXE9uZIyA74wr7jWXHRKr5zQ4R4vYXGRFgdoCDINVcq4P19rNrk pFDnGp+CckwAGnxZWMad667YbsOH6lR+mTRSx/ZwzBjipYkJdnc58eOmqfXMkd4pTaGB vOYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=JO3PmuqPf8TfsXjBlr+bkH3w5WocHZO67EF4/QFTbOs=; b=YqZwswpdPrVTX6AiPg/kBV8Lz7UGA2/xLcoqr+JotvSSOFO2YR0fLkrDxxU+0rm0Zg TH416Tj+1xyuQ1WaLMetNwpamVsjn4yH0Sx433bEOb+TJlP5qPMSGZ/7sTkemvLjF3XB 7Qt22Ghbj8Weg/SOokg8cE5YdMFpGCiKn0l0hIa/CkK0p0weuiaGnq+VtAJ+QaHpKjJh T0+BaS1RtuDqoCQEHQcUi5O8D0WLj+so6KIbOmmo3KxYt/RbY827+dWUcOzP3WPth1xC H4T9onjqUb25MDtp+3Q6N1I3pkwjHXIDHsEZoSZ6eFC+GgkcukuYHYhyrijs48PZdEFy eT5A== X-Gm-Message-State: AOAM530cpBunODn4urWyIfSuTN7QRm+yA13TYmyhzGRRMEH6TYqhapid AbcfpA+ITHcNJgUul51HowtIrl/wCCg= X-Google-Smtp-Source: ABdhPJxp3emUqwm2FN7BtMNuMKGCYBqfn9vXpn/JqwCdzGFDxmK4OmwCfeusX3/qxkQMoBQuOs1gxw== X-Received: by 2002:a05:600c:ac2:: with SMTP id c2mr16049429wmr.118.1635470846668; Thu, 28 Oct 2021 18:27:26 -0700 (PDT) Received: from lelap.lan (catv-89-132-208-37.catv.broadband.hu. [89.132.208.37]) by smtp.gmail.com with ESMTPSA id g10sm4469348wmq.13.2021.10.28.18.27.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Oct 2021 18:27:26 -0700 (PDT) From: Attila Lendvai Date: Fri, 29 Oct 2021 03:22:00 +0200 Message-Id: <20211029012159.14007-1-attila@lendvai.name> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=attila.lendvai@gmail.com; helo=mail-wm1-x32a.google.com X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URI_TRY_3LD=1.999 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches It downloads, verifies, and patches the official binary release of the go-ethereum client using patchelf. * gnu/packages/geth-binary.scm (geth-binary): New variable. --- dear fellow Guix hackers, RFC: would Guix accept a package like this? if yes, then i welcome any feedback, this is my first binary package. i welcome also pointers to other packages from which i should mimic something. this is only lightly tested for now, but before i tidy everything up, i wanted to know whether such a beast would ever be accepted. gnu/packages/geth-binary.scm | 222 +++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 gnu/packages/geth-binary.scm diff --git a/gnu/packages/geth-binary.scm b/gnu/packages/geth-binary.scm new file mode 100644 index 0000000000..d8a5ea1550 --- /dev/null +++ b/gnu/packages/geth-binary.scm @@ -0,0 +1,222 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2021 Attila Lendvai +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages geth-binary) + #:use-module ((guix licenses) + #:select (gpl3+)) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages bootstrap) + #:use-module (gnu packages elf) + #:use-module (gnu packages gnupg) + #:use-module (ice-9 match)) + +;; as per https://geth.ethereum.org/downloads/#openpgp_signatures +(define +geth-linux-builder-key-fingerprint+ + "FDE5A1A044FA13D2F7ADA019A61A13569BA28146") + +(define +geth-linux-builder-key+ + "-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: Hostname: +Version: Hockeypuck ~unreleased + +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 +aD1XJM7Aqq5KSSLvJMap9uHNO3WQXuNOoeLsSg== +=1D3S +-----END PGP PUBLIC KEY BLOCK-----") + +(define +url-base+ "https://gethstore.blob.core.windows.net/builds/") + +(define (unsupported-arch system) + (raise (formatted-message + (G_ "The geth-binary package does not support Guix system '~a'") + system))) + +(define (guix-system-name->geth-system-name system) + (match system + ("x86_64-linux" "linux-amd64") + ("i686-linux" "linux-386") + ("aarch64-linux" "linux-arm64") + (_ (unsupported-arch system)))) + +(define (geth-directory system version commit-hash) + (string-append "geth-alltools-" + (guix-system-name->geth-system-name system) "-" + version "-" + commit-hash)) + +(define-public geth-binary + (let ((version "1.10.11") + (commit-hash "7231b3ef")) + (package + (name "geth-binary") + (version version) + (source #false) ; see below + (outputs '("out" "clef" "evm")) + (build-system gnu-build-system) + (arguments + `(#:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-26) + (srfi srfi-1)) + #:phases + (modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (delete 'build) + (delete 'check) + (add-before 'unpack 'check-singatures + (lambda* (#:key inputs #:allow-other-keys) + (let* ((gpg-homedir "gpg-homedir") + (key-file "geth-linux-builder.asc") + (gpg-options (list "gpg" + "--homedir" gpg-homedir + "--no-options" + "--trust-model" "tofu" + "--no-auto-check-trustdb" + "--no-default-keyring"))) + (mkdir-p gpg-homedir) + (chmod gpg-homedir #o700) + (with-output-to-file key-file + (lambda _ + (display ,+geth-linux-builder-key+))) + ;; import the key + (apply invoke (append gpg-options + (list "--import" key-file))) + ;; trust it + (apply invoke (append gpg-options + (list "--tofu-policy" "good" + ,+geth-linux-builder-key-fingerprint+))) + ;; verify the archive + (apply invoke (append gpg-options + (list "--verify" + (assoc-ref inputs "signature") + (assoc-ref inputs "source"))))) + #t)) + (replace 'unpack + (lambda* (#:key inputs #:allow-other-keys) + (invoke "tar" "--strip-components=1" "-xzvf" + (assoc-ref inputs "source")) + #t)) + (add-after 'unpack 'patchelf + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((binaries '("geth" "clef" "evm")) + (ld-so (string-append (assoc-ref inputs "libc") + ,(glibc-dynamic-linker)))) + (for-each (cut invoke "patchelf" "--set-interpreter" ld-so <>) + binaries)) + #t)) + (replace 'install + (lambda* (#:key system outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (clef (assoc-ref outputs "clef")) + (evm (assoc-ref outputs "evm")) + (doit (lambda (name target) + (let ((target-dir (string-append target "/bin"))) + (mkdir-p target-dir) + (copy-file name (string-append target-dir "/" name)))))) + (doit "geth" out) + (doit "clef" clef) + (doit "evm" evm)) + #t))))) + (native-inputs + `(("gnupg" ,gnupg) + ("patchelf" ,patchelf))) + (inputs + `(("source" + ,(origin + (method url-fetch) + (uri (string-append + +url-base+ + (geth-directory (%current-system) version commit-hash) + ".tar.gz")) + (sha256 + (match (%current-system) + ("x86_64-linux" + (base32 + "1r50i97aiksjx81lalh0rq0ffk2gc68b68lnrmm8c8rvarv547n3")) + ("i686-linux" + (base32 + "0f2dbswmahwqga2sxvf6037n4c7rpmr3vf4hfhbjankfknb4l8gv")) + ("aarch64-linux" + (base32 + "0s4f7254gv5v92nbddwvlbyb2gg3kz2v2g586zk3ygvga86yky6m")) + (_ (unsupported-arch (%current-system))))))) + ("signature" + ,(origin + (method url-fetch) + (uri (string-append + +url-base+ + (geth-directory (%current-system) version commit-hash) + ".tar.gz.asc")) + (sha256 + (match (%current-system) + ("x86_64-linux" + (base32 + "1j14bli8hq4nkcirbpkm1vgr3zr91glrxzix62imzahwhwkfsq9a")) + ("i686-linux" + (base32 + "1jb53xdp7qx45npdzlcxds7nnlinkzq55l1ygpsivr9gl4aryq0f")) + ("aarch64-linux" + (base32 + "1dglzi4lxpxih6pq6j2kyzl44yw7afhnmpmh06vbwazsqvhlil2k")) + (_ (unsupported-arch (%current-system))))))))) + + (supported-systems '("x86_64-linux" "i686-linux" "aarch64-linux")) + + (home-page "https://geth.ethereum.org/") + (synopsis "Official Go implementation of the Ethereum protocol") + (description + "Ethereum is a decentralized platform that runs smart contracts, +applications that run exactly as programmed without possibility of downtime, +censorship, fraud or third party interference.") + (license gpl3+))))