Subject: bug#50751: closed (Re: [bug#50751] [PATCH 2/2] gnu: update Trezor support)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 28 Nov 2021 20:36:02 +0000

Your bug report

#50751: [PATCH] gnu: update Trezor support

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
50751: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=50751
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#50751] [PATCH 2/2] gnu: update Trezor support
From: Nicolas Goaziou <[email-masked]>
To: Attila Lendvai <[email-masked]>
Cc: [email-masked]
Date: Sun, 28 Nov 2021 21:35:44 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

Attila Lendvai <[email-masked]> writes:

> * gnu/packages/finance.scm (python-trezor-agent): Update to 0.14.2.
> (python-trezor): Update to 0.12.3.
> (trezor-agent): Update to 0.11.0.
> (trezord): Update to 2.0.31.

I split the patch in four parts, and tweaked commit message. You may
want to have a look at them.

Thanks.

Regards,
-- 
Nicolas Goaziou

Subject: [PATCH] gnu: update Trezor support
From: Attila Lendvai <[email-masked]>
To: [email-masked]
Cc: Attila Lendvai <[email-masked]>
Date: Thu, 23 Sep 2021 10:30:46 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Fetch everything from their git repos, instead of pypi.

* gnu/packages/finance.scm (python-trezor-agent): Update to 0.14.2.
(python-trezor): Update to 0.12.3.
(trezor-agent): Update to 0.11.0.
(trezord): Update to 2.0.31.
* gnu/packages/patches/trezor-agent-fix-argv0.patch: New file.
---
 gnu/packages/finance.scm                      | 84 ++++++++++++++-----
 .../patches/trezor-agent-fix-argv0.patch      | 27 ++++++
 2 files changed, 92 insertions(+), 19 deletions(-)
 create mode 100644 gnu/packages/patches/trezor-agent-fix-argv0.patch

diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 9b073541de..34bb73016c 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -833,9 +833,11 @@ the Monero GUI client.")
     (license license:bsd-3)))
 
 (define-public python-trezor-agent
+  ;; It is called 'libagent' in pypi; i.e. this is the library as opposed to
+  ;; the toplevel app called trezor-agent.
   (package
     (name "python-trezor-agent")
-    (version "0.13.1")
+    (version "0.14.2")
     (source
      (origin
        (method git-fetch)
@@ -844,7 +846,8 @@ the Monero GUI client.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0q99vbfd3h85s8rnjipnmldixabqmmlk5w9karv6f0rhyi54f4zv"))))
+        (base32 "0nl44ldfw9s2v3p7g5bldfw3ds2hz9r28j42bpnp8bj0v5na3ivk"))
+       (patches (search-patches "trezor-agent-fix-argv0.patch"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -863,11 +866,12 @@ the Monero GUI client.")
              (add-installed-pythonpath inputs outputs)
              (invoke "py.test"))))))
     (propagated-inputs
-     `(("python-configargparse" ,python-configargparse)
+     `(("python-pynacl" ,python-pynacl)
+       ("python-configargparse" ,python-configargparse)
        ("python-daemon" ,python-daemon)
        ("python-docutils" ,python-docutils)
        ("python-ecdsa" ,python-ecdsa)
-       ("python-ed25519" ,python-ed25519)
+       ("python-hidapi" ,python-hidapi)
        ("python-mnemonic" ,python-mnemonic)
        ("python-pymsgbox" ,python-pymsgbox)
        ("python-semver" ,python-semver)
@@ -986,16 +990,35 @@ Nano dongle.")
 (define-public python-trezor
   (package
     (name "python-trezor")
-    (version "0.12.1")
+    (version "0.12.3")
     (source
       (origin
-        (method url-fetch)
-        (uri (pypi-uri "trezor" version))
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/trezor/trezor-firmware/")
+              (commit (string-append "python/v" version))))
+        (file-name (git-file-name name version))
         (sha256
-          (base32 "1w19m9lws55k9sjhras47hpfpqwq1jm5vy135nj65yhkblygqg19"))))
+         (base32 "0wdm1y5zli6w09zbpjqc6rbcs1b4hjq007mbh7xdr17prbnqprac"))
+        (modules '((guix build utils) (srfi srfi-26) (srfi srfi-1) (ice-9 ftw)))
+        (snippet
+         '(begin
+            ;; Delete everything except ./python/
+            (for-each delete-file-recursively
+                      (scandir "./" (negate (cut member <> '("python" "." "..")
+                                                 string=))))
+            ;; Move ./python/* to the toplevel
+            (for-each (lambda (file-name)
+                        (rename-file (string-append "./python/" file-name)
+                                     (string-append "./" file-name)))
+                      (scandir "./python/"
+                               (negate (cut member <> '("." "..") string=))))
+            (delete-file-recursively "./python")
+            #t))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-click" ,python-click)
+     `(("python-attrs" ,python-attrs)
+       ("python-click" ,python-click)
        ("python-construct" ,python-construct)
        ("python-ecdsa" ,python-ecdsa)
        ("python-libusb1" ,python-libusb1)
@@ -1074,16 +1097,39 @@ the KeepKey Hardware Wallet.")
 (define-public trezor-agent
   (package
     (name "trezor-agent")
-    (version "0.10.0")
+    (version "0.11.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "trezor_agent" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/romanz/trezor-agent")
+             ;; The version mismatch is not a mistake. Multiple python
+             ;; apps/packages are in the same git repo, and they have
+             ;; different versions. The git tag seems to track libagent,
+             ;; i.e. python-trezor-agent in the Guix namespace.
+             ;; See e.g. ./agents/trezor/setup.py
+             (commit "v0.14.2")))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "144657c7bn0a667dq5fv5r6j7iilxf3h9agj29v1m2qpq40g0az8"))))
+         "0nl44ldfw9s2v3p7g5bldfw3ds2hz9r28j42bpnp8bj0v5na3ivk"))
+       (modules '((guix build utils) (srfi srfi-26) (srfi srfi-1) (ice-9 ftw)))
+       (snippet
+        '(begin
+           ;; Delete everything except ./agents/trezor/
+           (for-each delete-file-recursively
+                     (filter (lambda (full-name)
+                               (not (string-prefix? "./agents/trezor/" full-name)))
+                             (find-files ".")))
+           ;; Move ./agents/trezor/* to the toplevel
+           (for-each (lambda (file-name)
+                       (rename-file (string-append "./agents/trezor/" file-name)
+                                    (string-append "./" file-name)))
+                     (scandir "./agents/trezor/"
+                              (negate (cut member <> '("." "..") string=))))
+           (delete-file-recursively "./agents")
+           #t))))
     (arguments
-     ;; Tests fail with "AttributeError: module 'attr' has no attribute 's'".
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'wrap 'fixup-agent-py
@@ -1091,14 +1137,14 @@ the KeepKey Hardware Wallet.")
              (let* ((out (assoc-ref outputs "out")))
                ;; overwrite the wrapper with the real thing.
                (install-file "./trezor_agent.py"
-                             (string-append out "/bin"))
-             #t))))))
+                             (string-append out "/bin")))
+             #t)))))
     (build-system python-build-system)
     (inputs
      `(("python-trezor" ,python-trezor)
        ("python-trezor-agent" ,python-trezor-agent)))
     (native-inputs
-     `(("python-hidapi" ,python-hidapi)))
+     `(("python-attrs" ,python-attrs))) ; for the tests
     (home-page "https://github.com/romanz/trezor-agent")
     (synopsis "Using Trezor as hardware SSH/GPG agent")
     (description "This package allows using Trezor as a hardware SSH/GPG
@@ -1301,7 +1347,7 @@ trezord as a regular user instead of needing to it run as root.")
 (define-public trezord
   (package
     (name "trezord")
-    (version "2.0.30")
+    (version "2.0.31")
     (source
      (origin
        (method git-fetch)
@@ -1310,7 +1356,7 @@ trezord as a regular user instead of needing to it run as root.")
              (commit (string-append "v" version))))
        (sha256
         (base32
-         "1hzvk0wfgg7b4wpqjk3738yqxlv3pj5i7zxwm0jady2h97hmrqrr"))
+         "130nhk1pnr3xx9qkcij81mm3jxrl5zvvdqhvrgvrikqg3zlb6v5b"))
        (file-name (git-file-name name version))))
     (build-system go-build-system)
     (arguments
diff --git a/gnu/packages/patches/trezor-agent-fix-argv0.patch b/gnu/packages/patches/trezor-agent-fix-argv0.patch
new file mode 100644
index 0000000000..9462067cd5
--- /dev/null
+++ b/gnu/packages/patches/trezor-agent-fix-argv0.patch
@@ -0,0 +1,27 @@
+diff --git a/libagent/gpg/__init__.py b/libagent/gpg/__init__.py
+index 3711bc8..67085de 100644
+--- a/libagent/gpg/__init__.py
++++ b/libagent/gpg/__init__.py
+@@ -122,15 +122,19 @@ def run_init(device_type, args):
+     verify_gpg_version()
+ 
+     # Prepare new GPG home directory for hardware-based identity
+-    device_name = os.path.basename(sys.argv[0]).rsplit('-', 1)[0]
+-    log.info('device name: %s', device_name)
++    exe_name = os.path.basename(sys.argv[0])
++    # drop the Guix wrapper's dot prefix from the name
++    if exe_name[0] == '.' and exe_name.endswith('-real'):
++        exe_name = exe_name[1:-5:]
++    device_name = exe_name.rsplit('-', 1)[0]
++    log.info('exe name: %s, device name: %s', exe_name, device_name)
+     homedir = args.homedir
+     if not homedir:
+         homedir = os.path.expanduser('~/.gnupg/{}'.format(device_name))
+ 
+     log.info('GPG home directory: %s', homedir)
+ 
+-    if os.path.exists(homedir):
++    if os.path.exists(homedir) and not args.subkey:
+         log.error('GPG home directory %s exists, '
+                   'remove it manually if required', homedir)
+         sys.exit(1)
-- 
2.33.0