unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#39021] [PATCH] Add Keybase
@ 2020-01-07 20:00 Jakub Kądziołka
  2020-01-24 18:34 ` [bug#39021] go package rebuilds Jakub Kądziołka
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Jakub Kądziołka @ 2020-01-07 20:00 UTC (permalink / raw)
  To: 39021

[-- Attachment #1: Type: text/plain, Size: 730 bytes --]

Hi Guix,

please find attached a set of patches that adds the non-GUI parts of
Keybase (the GUI is an Electron application - as far as I am aware,
there are no similar packages in Guix, so packaging the GUI requires a
significant amount of further work).

Unresolved question: in other distributions, the package provides user
units for systemd. Should the Guix package provide Shepherd services to
be ran as the user? If so, are there any other examples I could look at
and draw inspiration from? Also, I haven't been able to find any
documentation on how to set up user shepherd, apart from a passing
mention of that being possible in the documentation. I would appreciate
any pointers on the topic.

Regards,
Jakub Kądziołka

[-- Attachment #2: 0001-build-system-go-Allow-providing-additional-build-fla.patch --]
[-- Type: text/x-diff, Size: 3026 bytes --]

From 0d744787c48c7184a70dda9fc1bb2c0d334fc080 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= <kuba@kadziolka.net>
Date: Sun, 5 Jan 2020 17:13:20 +0100
Subject: [PATCH 1/2] build-system/go: Allow providing additional build flags

* guix/build-system/go.scm (build-flags): New argument.
* guix/build/go-build-system.scm (build): Use apply to pass the
  additional arguments to invoke.
---
 guix/build-system/go.scm       | 3 +++
 guix/build/go-build-system.scm | 7 ++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm
index 1b916af8f9..86f57079b1 100644
--- a/guix/build-system/go.scm
+++ b/guix/build-system/go.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -82,6 +83,7 @@
                    (install-source? #t)
                    (import-path "")
                    (unpack-path "")
+                   (build-flags '())
                    (tests? #t)
                    (allow-go-reference? #f)
                    (system (%current-system))
@@ -109,6 +111,7 @@
                 #:install-source? ,install-source?
                 #:import-path ,import-path
                 #:unpack-path ,unpack-path
+                #:build-flags ,build-flags
                 #:tests? ,tests?
                 #:allow-go-reference? ,allow-go-reference?
                 #:inputs %build-inputs)))
diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm
index 4bc0156a88..49887848f6 100644
--- a/guix/build/go-build-system.scm
+++ b/guix/build/go-build-system.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -209,18 +210,18 @@ unpacking."
                 (_ #f))
               inputs))))
 
-(define* (build #:key import-path #:allow-other-keys)
+(define* (build #:key import-path build-flags #:allow-other-keys)
   "Build the package named by IMPORT-PATH."
   (with-throw-handler
     #t
     (lambda _
-      (invoke "go" "install"
+      (apply invoke "go" "install"
               "-v" ; print the name of packages as they are compiled
               "-x" ; print each command as it is invoked
               ;; Respectively, strip the symbol table and debug
               ;; information, and the DWARF symbol table.
               "-ldflags=-s -w"
-              import-path))
+              `(,@build-flags ,import-path)))
     (lambda (key . args)
       (display (string-append "Building '" import-path "' failed.\n"
                               "Here are the results of `go env`:\n"))
-- 
2.24.1


[-- Attachment #3: 0002-gnu-Add-keybase.patch --]
[-- Type: text/x-diff, Size: 3239 bytes --]

From 3de233a2d8e6bdb4723844337b69b6612616c9c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= <kuba@kadziolka.net>
Date: Tue, 7 Jan 2020 20:29:21 +0100
Subject: [PATCH 2/2] gnu: Add keybase.

* gnu/packages/crypto.scm
  (keybase-component): New function.
  (keybase, git-remote-keybase, kbfs): New variables.
---
 gnu/packages/crypto.scm | 49 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index dd49c12e5b..c78515ae68 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -69,6 +70,7 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system perl)
   #:use-module (guix build utils)
   #:use-module (srfi srfi-1)
@@ -1040,3 +1042,50 @@ minisign uses a slightly different format to store secret keys.  Minisign
 signatures include trusted comments in addition to untrusted comments.
 Trusted comments are signed, thus verified, before being displayed.")
     (license license:isc)))
+
+(define* (keybase-component #:key name repo-path synopsis description)
+  (package
+    (name name)
+    (version "5.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri
+                (string-append "https://github.com/keybase/client/releases/download/v"
+                               version "/keybase-v" version ".tar.xz"))
+              (sha256
+                (base32
+                  "1i6waaprdr89k3lrg36hn11f5z8j0n2iv6gpyrynbh2h128cfpwy"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path ,(string-append "github.com/keybase/client/go/" repo-path)
+       #:unpack-path "github.com/keybase/client"
+       #:build-flags '("-tags" "production")
+       #:install-source? #f))
+    (home-page "https://keybase.io")
+    (synopsis synopsis)
+    (description description)
+    (license license:bsd-3)))
+
+(define-public keybase
+  (keybase-component
+    #:name "keybase"
+    #:repo-path "keybase"
+    #:synopsis "Command-line client for Keybase"
+    #:description "Keybase is a key directory that maps social media identities
+to encryption keys in a publically auditable manner.  End-to-end encrypted chat,
+cloud storage and git hosting is also provided."))
+
+(define-public git-remote-keybase
+  (keybase-component
+    #:name "git-remote-keybase"
+    #:repo-path "kbfs/kbfsgit/git-remote-keybase"
+    #:synopsis "Git remote helper for Keybase encrypted repositories"
+    #:description "keybase-kbfsgit provides the git remote helper that handles
+@code{keybase://} URIs."))
+
+(define-public kbfs
+  (keybase-component
+    #:name "kbfs"
+    #:repo-path "kbfs/kbfsfuse"
+    #:synopsis "FUSE handler for the Keybase filesystem"
+    #:description "Handles mounting /keybase"))
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#39021] go package rebuilds
  2020-01-07 20:00 [bug#39021] [PATCH] Add Keybase Jakub Kądziołka
@ 2020-01-24 18:34 ` Jakub Kądziołka
  2020-01-28 21:54 ` [bug#39021] [PATCH 1/2 v2] build-system/go: Allow providing additional build flags Jakub Kądziołka
  2020-02-08  0:20 ` [bug#39021] [PATCH] Add Keybase Leo Famulari
  2 siblings, 0 replies; 8+ messages in thread
From: Jakub Kądziołka @ 2020-01-24 18:34 UTC (permalink / raw)
  To: 39021; +Cc: me

With regards to the modification of go-build-system in this patchstack,
it seems that this would cause "only" <180 packages to be rebuilt:

~/guix$ rg -w go-build-system gnu/packages | wc -l
172
~/guix$ guix refresh --list-dependent go
Building the following 52 packages would ensure 176 dependent packages
are rebuilt: [...]

This has been discussed on IRC, and since some time has since passed, I
want to put the relevant link here, for future reference:
http://logs.guix.gnu.org/guix/2020-01-19.log#215122

Regards,
Jakub Kądziołka

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#39021] [PATCH 1/2 v2] build-system/go: Allow providing additional build flags
  2020-01-07 20:00 [bug#39021] [PATCH] Add Keybase Jakub Kądziołka
  2020-01-24 18:34 ` [bug#39021] go package rebuilds Jakub Kądziołka
@ 2020-01-28 21:54 ` Jakub Kądziołka
  2020-02-08  0:20 ` [bug#39021] [PATCH] Add Keybase Leo Famulari
  2 siblings, 0 replies; 8+ messages in thread
From: Jakub Kądziołka @ 2020-01-28 21:54 UTC (permalink / raw)
  To: 39021

* guix/build-system/go.scm (build-flags): New argument.
* guix/build/go-build-system.scm (build): Use apply to pass the
  additional arguments to invoke.
---
I have discovered a bug when testing v1 of this patch locally - some Go
packages have been failing to build due to a quoting mishap. This is now
fixed.

Diff between patches:
-                   (build-flags '())
+                   (build-flags ''())
[this note should be automatically removed by git am]
---
 guix/build-system/go.scm       | 3 +++
 guix/build/go-build-system.scm | 7 ++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm
index 1b916af8f9..f8ebaefb27 100644
--- a/guix/build-system/go.scm
+++ b/guix/build-system/go.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -82,6 +83,7 @@
                    (install-source? #t)
                    (import-path "")
                    (unpack-path "")
+                   (build-flags ''())
                    (tests? #t)
                    (allow-go-reference? #f)
                    (system (%current-system))
@@ -109,6 +111,7 @@
                 #:install-source? ,install-source?
                 #:import-path ,import-path
                 #:unpack-path ,unpack-path
+                #:build-flags ,build-flags
                 #:tests? ,tests?
                 #:allow-go-reference? ,allow-go-reference?
                 #:inputs %build-inputs)))
diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm
index 4bc0156a88..49887848f6 100644
--- a/guix/build/go-build-system.scm
+++ b/guix/build/go-build-system.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -209,18 +210,18 @@ unpacking."
                 (_ #f))
               inputs))))
 
-(define* (build #:key import-path #:allow-other-keys)
+(define* (build #:key import-path build-flags #:allow-other-keys)
   "Build the package named by IMPORT-PATH."
   (with-throw-handler
     #t
     (lambda _
-      (invoke "go" "install"
+      (apply invoke "go" "install"
               "-v" ; print the name of packages as they are compiled
               "-x" ; print each command as it is invoked
               ;; Respectively, strip the symbol table and debug
               ;; information, and the DWARF symbol table.
               "-ldflags=-s -w"
-              import-path))
+              `(,@build-flags ,import-path)))
     (lambda (key . args)
       (display (string-append "Building '" import-path "' failed.\n"
                               "Here are the results of `go env`:\n"))
-- 
2.25.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#39021] [PATCH] Add Keybase
  2020-01-07 20:00 [bug#39021] [PATCH] Add Keybase Jakub Kądziołka
  2020-01-24 18:34 ` [bug#39021] go package rebuilds Jakub Kądziołka
  2020-01-28 21:54 ` [bug#39021] [PATCH 1/2 v2] build-system/go: Allow providing additional build flags Jakub Kądziołka
@ 2020-02-08  0:20 ` Leo Famulari
  2020-02-11 16:36   ` Jakub Kądziołka
  2 siblings, 1 reply; 8+ messages in thread
From: Leo Famulari @ 2020-02-08  0:20 UTC (permalink / raw)
  To: Jakub Kądziołka; +Cc: 39021

On Tue, Jan 07, 2020 at 09:00:39PM +0100, Jakub Kądziołka wrote:
> please find attached a set of patches that adds the non-GUI parts of
> Keybase (the GUI is an Electron application - as far as I am aware,
> there are no similar packages in Guix, so packaging the GUI requires a
> significant amount of further work).

I don't *think* we have any Electron packages, but we do have Chromium
(and qtwebengine) and Node.js, so I hope it's possible.

> Unresolved question: in other distributions, the package provides user
> units for systemd. Should the Guix package provide Shepherd services to
> be ran as the user? If so, are there any other examples I could look at
> and draw inspiration from? Also, I haven't been able to find any
> documentation on how to set up user shepherd, apart from a passing
> mention of that being possible in the documentation. I would appreciate
> any pointers on the topic.

We don't really do this kind of thing — adding features or service
manager files to upstream packages.

As for user shepherd, there's an example here:

https://git.dthompson.us/dotfiles.git/blob/HEAD:/dotfiles/.config/shepherd/init.scm

There's a lot going on there but the important parts are
(register-services ...), (make <service> ...), (action ...), and
(for-each start ...)

Then you just invoke `shepherd`.

> From 0d744787c48c7184a70dda9fc1bb2c0d334fc080 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= <kuba@kadziolka.net>
> Date: Sun, 5 Jan 2020 17:13:20 +0100
> Subject: [PATCH 1/2] build-system/go: Allow providing additional build flags
> 
> * guix/build-system/go.scm (build-flags): New argument.
> * guix/build/go-build-system.scm (build): Use apply to pass the
>   additional arguments to invoke.

Nice, LGTM!

> From 3de233a2d8e6bdb4723844337b69b6612616c9c5 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= <kuba@kadziolka.net>
> Date: Tue, 7 Jan 2020 20:29:21 +0100
> Subject: [PATCH 2/2] gnu: Add keybase.
> 
> * gnu/packages/crypto.scm
>   (keybase-component): New function.
>   (keybase, git-remote-keybase, kbfs): New variables.

This is enough of it's own thing that we can make a new (gnu packages
keybase) module.

> +(define* (keybase-component #:key name repo-path synopsis description)

We avoid abbreviations, so maybe "repository-path"? Bonus points if we
can make it more descriptive.

Can you take a look at the bundled ("vendored") dependencies:

https://github.com/keybase/client/tree/master/go/vendor

We strive to avoid using these, but sometimes we do, as in the Docker
package. It's not really idiomatic to unbundle things in Go. But we need
to at least make sure all the bundled dependencies are freely licensed.

Also, please run `guix lint` on these packages and make sure the
descriptions are written in complete sentences.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#39021] [PATCH] Add Keybase
  2020-02-08  0:20 ` [bug#39021] [PATCH] Add Keybase Leo Famulari
@ 2020-02-11 16:36   ` Jakub Kądziołka
  2020-02-11 17:36     ` Leo Famulari
  0 siblings, 1 reply; 8+ messages in thread
From: Jakub Kądziołka @ 2020-02-11 16:36 UTC (permalink / raw)
  To: Leo Famulari; +Cc: 39021

[-- Attachment #1: Type: text/plain, Size: 1457 bytes --]

> > From 3de233a2d8e6bdb4723844337b69b6612616c9c5 Mon Sep 17 00:00:00 2001
> > From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= <kuba@kadziolka.net>
> > Date: Tue, 7 Jan 2020 20:29:21 +0100
> > Subject: [PATCH 2/2] gnu: Add keybase.
> > 
> > * gnu/packages/crypto.scm
> >   (keybase-component): New function.
> >   (keybase, git-remote-keybase, kbfs): New variables.
> 
> This is enough of it's own thing that we can make a new (gnu packages
> keybase) module.

Sure, will do.

> > +(define* (keybase-component #:key name repo-path synopsis description)
> 
> We avoid abbreviations, so maybe "repository-path"? Bonus points if we
> can make it more descriptive.

I can't think of anything more descriptive, as it's literally the path
in the repository the component is at.

> Can you take a look at the bundled ("vendored") dependencies:
> 
> https://github.com/keybase/client/tree/master/go/vendor
> 
> We strive to avoid using these, but sometimes we do, as in the Docker
> package. It's not really idiomatic to unbundle things in Go. But we need
> to at least make sure all the bundled dependencies are freely licensed.

Apart from licensing concerns, what are the arguments for splitting this
into separate packages? I feel like this is just busywork...

> Also, please run `guix lint` on these packages and make sure the
> descriptions are written in complete sentences.

Ah, sure, somehow I forgot to do this before.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#39021] [PATCH] Add Keybase
  2020-02-11 16:36   ` Jakub Kądziołka
@ 2020-02-11 17:36     ` Leo Famulari
  2020-05-31  7:09       ` Efraim Flashner
  0 siblings, 1 reply; 8+ messages in thread
From: Leo Famulari @ 2020-02-11 17:36 UTC (permalink / raw)
  To: Jakub Kądziołka; +Cc: 39021

On Tue, Feb 11, 2020 at 05:36:54PM +0100, Jakub Kądziołka wrote:
> > We strive to avoid using these, but sometimes we do, as in the Docker
> > package. It's not really idiomatic to unbundle things in Go. But we need
> > to at least make sure all the bundled dependencies are freely licensed.
> 
> Apart from licensing concerns, what are the arguments for splitting this
> into separate packages? I feel like this is just busywork...

The question of licensing is unrelated to bundling, sorry if that wasn't
clear. The only thing you have to do here is make sure they are all
freely licensed.

To clarify, those bundled dependencies *are* separate packages,
developed by different organizations.

It's the standard in Guix (and every major GNU/Linux distro) to not
allow bundled dependencies because they make the graph of software
basically uninspectable and unmaintainable using the distro's normal
tools, as well as having the potential to waste time and space building
multiple versions of a package if it is bundled in more than one place
or already present as its own package. It negates all the advantages of
creating a distrubtion, especially for Go binaries, which can be
trivially deployed on any system, including Guix, without any extra
work.

But like I said, it's normal to bundle things in Go land, where there is
really no principled concept of dependency management or versioned
releases, and as time goes by changes to the Go compiler make it harder
and harder to unbundle. I did do it for Syncthing and I can confirm it
was a lot of work for no clear benefit. Excepting the standard library,
Go libraries do not even get security updates because nobody is looking
closely at them.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#39021] [PATCH] Add Keybase
  2020-02-11 17:36     ` Leo Famulari
@ 2020-05-31  7:09       ` Efraim Flashner
  2020-05-31 21:47         ` Jakub Kądziołka
  0 siblings, 1 reply; 8+ messages in thread
From: Efraim Flashner @ 2020-05-31  7:09 UTC (permalink / raw)
  To: Leo Famulari; +Cc: Jakub Kądziołka, 39021


[-- Attachment #1.1: Type: text/plain, Size: 369 bytes --]

I have a working version of keybase, although I haven't gotten around to
unbundling all the go dependencies yet. I figured I'd post my WIP stuff
here.


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #1.2: keybase.scm --]
[-- Type: text/plain, Size: 20625 bytes --]

;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is an addendum to 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 <http://www.gnu.org/licenses/>.

(define-module (dfsg main keybase)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix build utils)
  #:use-module (guix git-download)
  #:use-module (guix download)
  #:use-module (guix packages)
  #:use-module (guix build-system go)
  #:use-module (gnu packages golang)
  #:use-module (gnu packages syncthing))

;; TODO: Unbundle all the go dependencies.
(define-public keybase
  (package
    (name "keybase")
    (version "5.5.1")
    (source
      (origin
        (method url-fetch)
        (uri (string-append
               "https://github.com/keybase/client/releases/download/v"
               version "/keybase-v" version ".tar.xz"))
        (sha256
         (base32
          "0x683v50wq8b2rk4nv2gmchav71fxnqvkfglrkzixvwcqqwvy2m7"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            (with-directory-excursion "go/vendor"
              (delete-file-recursively "bazil.org")
              (delete-file-recursively "camlistore.org/pkg/buildinfo")
              ;(delete-file-recursively "camlistore.org/pkg/images")
              (delete-file-recursively "github.com/BurntSushi")
              ;(delete-file-recursively "github.com/PuerkitoBio/goquery")
              ;(delete-file-recursively "github.com/RoaringBitmap/roaring")
              ;(delete-file-recursively "github.com/StackExchange/wmi")
              ;(delete-file-recursively "github.com/akavel/rsrc")
              ;(delete-file-recursively "github.com/andybalholm/cascadia")
              ;(delete-file-recursively "github.com/antchfx/htmlquery")
              ;(delete-file-recursively "github.com/antchfx/xmlquery")
              ;(delete-file-recursively "github.com/antchfx/xpath")
              ;(delete-file-recursively "github.com/araddon/dateparse")
              ;(delete-file-recursively "github.com/asaskevich/govalidator")
              (delete-file-recursively "github.com/blang")
              ;(delete-file-recursively "github.com/blevesearch/bleve")
              ;(delete-file-recursively "github.com/blevesearch/go-porterstemmer")
              ;(delete-file-recursively "github.com/blevesearch/segment")
              ;(delete-file-recursively "github.com/btcsuite/btcutil")
              ;(delete-file-recursively "github.com/buger/jsonparser")
              ;(delete-file-recursively "github.com/coreos/go-systemd")
              ;(delete-file-recursively "github.com/coreos/pkg")
              ;(delete-file-recursively "github.com/couchbase/vellum")
              ;(delete-file-recursively "github.com/davecgh/go-spew")
              ;(delete-file-recursively "github.com/deckarep/golang-set")
              ;(delete-file-recursively "github.com/docopt/docopt-go")
              ;(delete-file-recursively "github.com/dustin/go-humanize")
              ;(delete-file-recursively "github.com/eapache/channels")
              ;(delete-file-recursively "github.com/eapache/queue")
              ;(delete-file-recursively "github.com/edsrzf/mmap-go")
              ;(delete-file-recursively "github.com/emirpasic/gods")
              ;(delete-file-recursively "github.com/etcd-io/bbolt")
              ;(delete-file-recursively "github.com/gammazero/deque")
              ;(delete-file-recursively "github.com/gammazero/workerpool")
              ;(delete-file-recursively "github.com/glycerine/go-unsnap-stream")
              ;(delete-file-recursively "github.com/go-errors/errors")
              ;(delete-file-recursively "github.com/go-ole/go-ole")
              (delete-file-recursively "github.com/gobwas")
              ;(delete-file-recursively "github.com/gocolly/colly")
              (delete-file-recursively "github.com/golang/groupcache/lru")
              ;(delete-file-recursively "github.com/golang/groupcache")
              ;(delete-file-recursively "github.com/golang/mock")
              (delete-file-recursively "github.com/golang/protobuf")
              (delete-file-recursively "github.com/golang/snappy")
              ;(delete-file-recursively "github.com/hashicorp/golang-lru")
              ;(delete-file-recursively "github.com/jbenet/go-context")
              ;(delete-file-recursively "github.com/josephspurrier/goversioninfo")
              ;(delete-file-recursively "github.com/kennygrant/sanitize")
              ;(delete-file-recursively "github.com/kevinburke/ssh_config")
              ;(delete-file-recursively "github.com/keybase/backoff")
              ;(delete-file-recursively "github.com/keybase/cli")
              ;(delete-file-recursively "github.com/keybase/clockwork")
              ;(delete-file-recursively "github.com/keybase/colly")
              ;(delete-file-recursively "github.com/keybase/go-codec")
              ;(delete-file-recursively "github.com/keybase/go-crypto")
              ;(delete-file-recursively "github.com/keybase/go-framed-msgpack-rpc")
              ;(delete-file-recursively "github.com/keybase/go-jsonw")
              ;(delete-file-recursively "github.com/keybase/go-kext")
              ;(delete-file-recursively "github.com/keybase/go-keychain")
              ;(delete-file-recursively "github.com/keybase/go-logging")
              ;(delete-file-recursively "github.com/keybase/go-merkle-tree")
              ;(delete-file-recursively "github.com/keybase/go-porterstemmer")
              ;(delete-file-recursively "github.com/keybase/go-ps")
              ;(delete-file-recursively "github.com/keybase/go-triplesec-insecure")
              ;(delete-file-recursively "github.com/keybase/go-triplesec")
              ;(delete-file-recursively "github.com/keybase/go-updater")
              ;(delete-file-recursively "github.com/keybase/go-winio")
              ;(delete-file-recursively "github.com/keybase/go.dbus")
              ;(delete-file-recursively "github.com/keybase/golang-ico")
              ;(delete-file-recursively "github.com/keybase/gomounts")
              ;(delete-file-recursively "github.com/keybase/keybase-test-vectors")
              ;(delete-file-recursively "github.com/keybase/msgpackzip")
              ;(delete-file-recursively "github.com/keybase/pipeliner")
              ;(delete-file-recursively "github.com/keybase/saltpack")
              ;(delete-file-recursively "github.com/keybase/stellarnet")
              ;(delete-file-recursively "github.com/keybase/xurls")
              (delete-file-recursively "github.com/kr")
              ;(delete-file-recursively "github.com/kyokomi/emoji")
              (delete-file-recursively "github.com/lib")
              ;(delete-file-recursively "github.com/manucorporat/sse")
              (delete-file-recursively "github.com/mattn")
              ;(delete-file-recursively "github.com/miekg/dns")
              (delete-file-recursively "github.com/mitchellh")
              ;(delete-file-recursively "github.com/mschoch/smat")
              ;(delete-file-recursively "github.com/nf/cr2")
              ;(delete-file-recursively "github.com/nfnt/resize")
              ;(delete-file-recursively "github.com/pelletier/go-buffruneio")
              ;(delete-file-recursively "github.com/philhofer/fwd")
              (delete-file-recursively "github.com/pkg/errors")
              ;(delete-file-recursively "github.com/pkg/xattrs")
              (delete-file-recursively "github.com/pmezard")
              ;(delete-file-recursively "github.com/qrtz/nativemessaging")
              ;(delete-file-recursively "github.com/rcrowley")
              ;(delete-file-recursively "github.com/rwcarlsen/goexif")
              ;(delete-file-recursively "github.com/saintfish/chardet")
              ;(delete-file-recursively "github.com/sergi/go-diff")
              (delete-file-recursively "github.com/shirou")
              ;(delete-file-recursively "github.com/shopspring/decimal")
              ;(delete-file-recursively "github.com/src-d/gcfg")
              (delete-file-recursively "github.com/stathat")
              ;(delete-file-recursively "github.com/stellar/go-xdr")
              ;(delete-file-recursively "github.com/stellar/go")
              ;(delete-file-recursively "github.com/steveyen/gtreap")
              ;(delete-file-recursively "github.com/stretchr/testify")
              ;(delete-file-recursively "github.com/syndtr/goleveldb")
              ;(delete-file-recursively "github.com/temoto/robotstxt")
              ;(delete-file-recursively "github.com/tinylib/msgp")
              (delete-file-recursively "github.com/urfave")
              ;(delete-file-recursively "github.com/vividcortex/ewma")
              (delete-file-recursively "github.com/willf")
              ;(delete-file-recursively "github.com/xanzy/ssh-agent")
              ;(delete-file-recursively "go.uber.org/zap/buffer")
              ;(delete-file-recursively "go.uber.org/zap/internal")
              ;(delete-file-recursively "go.uber.org/zap/zapcore")
              (delete-file-recursively "golang.org/x")
              (delete-file-recursively "google.golang.org")
              ;(delete-file-recursively "gopkg.in/src-d/go-billy.v4")
              ;(delete-file-recursively "gopkg.in/src-d/go-git.v4")
              ;(delete-file-recursively "rsc.io/qr/coding")
              ;(delete-file-recursively "rsc.io/qr/gf256")
              ;(delete-file-recursively "stathat.com/c/ramcache")
              )
            ;; Lets smallerize the source to audit less code and licenses.
            (delete-file-recursively "osx")
            (delete-file-recursively "shared/ios")
            ;; Delete everything for the GUI
            (delete-file-recursively "browser")
            ;; Delete the protocol generator and tester
            (delete-file-recursively "protocol")
            (delete-file-recursively "pvl-tools")
            ;; Remove non-free fonts.
            (with-directory-excursion "shared/fonts"
              (for-each (lambda (file)
                          (delete-file file))
                        (find-files "." "keybase.*ttf")))
            ;; Apparently we don't need any of this
            (delete-file-recursively "shared")
            (delete-file-recursively "media")
            (delete-file-recursively "packaging")
            #t))))
    (build-system go-build-system)
    (arguments
     `(#:install-source? #f
       #:import-path "github.com/keybase/client/go/keybase"
       #:unpack-path "github.com/keybase/client"
       #:phases
       (modify-phases %standard-phases
         (replace 'build
           (lambda* (#:key import-path #:allow-other-keys)
             (for-each
               (lambda (directory)
                 (invoke "go" "install"
                         "-tags" "production"
                         "-v" "-x" "-ldflags=-s -w"
                         directory))
               (list import-path
                     "github.com/keybase/client/go/kbfs/kbfsfuse"
                     "github.com/keybase/client/go/kbfs/kbfsgit/git-remote-keybase"
                     "github.com/keybase/client/go/kbfs/redirector"
                     "github.com/keybase/client/go/kbnm"))
             #t))
         (replace 'check
           (lambda* (#:key import-path #:allow-other-keys)
             (for-each
               (lambda (directory)
                 (invoke "go" "test"
                         "-v" "-x" "-ldflags=-s -w"
                         directory))
               (list import-path
                     "github.com/keybase/client/go/kbfs/kbfsfuse"
                     "github.com/keybase/client/go/kbfs/kbfsgit/git-remote-keybase"
                     "github.com/keybase/client/go/kbfs/redirector"
                     "github.com/keybase/client/go/kbnm"))
             #t))
         (add-after 'install 'install-license
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out")))
               (install-file "src/github.com/keybase/client/LICENSE"
                             (string-append out "/share/doc/"
                                            ,name "-" ,version "/"))
               #t))))))
    (inputs
     `(("go-bazil-org-fuse" ,go-bazil-org-fuse)
       ("go-camlistore-org-pkg-buildinfo" ,go-camlistore-org-pkg-buildinfo)
       ("go-github-com-blang-semver" ,go-github-com-blang-semver)
       ("go-github-com-burntsushi-toml" ,go-github-com-burntsushi-toml)
       ("go-github-com-gobwas-glob" ,go-github-com-gobwas-glob)
       ("go-github-com-golang-groupcache-lru" ,go-github-com-golang-groupcache-lru)
       ("go-github-com-golang-protobuf-proto" ,go-github-com-golang-protobuf-proto)
       ("go-github-com-golang-snappy" ,go-github-com-golang-snappy)
       ("go-github-com-kr-text" ,go-github-com-kr-text)
       ("go-github-com-lib-pq" ,go-github-com-lib-pq)
       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
       ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
       ("go-github-com-pmezard-go-difflib" ,go-github-com-pmezard-go-difflib)
       ;("go-github-com-rcrowley-go-metrics" ,go-github-com-rcrowley-go-metrics)
       ("go-github-com-shirou-gopsutil" ,go-github-com-shirou-gopsutil)
       ("go-github-com-stathat-go" ,go-github-com-stathat-go)
       ;("go-github-com-syndtr-goleveldb" ,go-github-com-syndtr-goleveldb)
       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
       ("go-github-com-willf-bitset" ,go-github-com-willf-bitset)
       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
       ("go-golang-org-x-image" ,go-golang-org-x-image)
       ("go-golang-org-x-net" ,go-golang-org-x-net)
       ("go-golang.org-x-sync-errgroup" ,go-golang.org-x-sync-errgroup)
       ("go-golang.org-x-sync-semaphore" ,go-golang.org-x-sync-semaphore)
       ("go-golang-org-x-sys" ,go-golang-org-x-sys)
       ("go-golang-org-x-text" ,go-golang-org-x-text)
       ("go-golang-org-x-time" ,go-golang-org-x-time)
       ("go-google-golang-org-appengine" ,go-google-golang-org-appengine)))
    (home-page "https://keybase.io")
    (synopsis "Secure messaging and file-sharing")
    (description "Keybase is a safe, secure, and private app for everything you
do online.")
    (license license:bsd-3)))

(define-public go-golang.org-x-sync-semaphore
  (package
    (inherit go-golang.org-x-sync-errgroup)
    (name "go-golang.org-x-sync-semaphore")
    (arguments
     '(#:import-path "golang.org/x/sync/semaphore"
       #:unpack-path "golang.org/x/sync"))))

(define-public go-google-golang-org-appengine
  (package
    (name "go-google-golang-org-appengine")
    (version "1.6.6")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/golang/appengine")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32
         "15c38h6fbv06cnkr6yknygfrpibyms2mya4w0l29kaxf42jn1qi5"))))
    (build-system go-build-system)
    (arguments
     '(#:import-path "google.golang.org/appengine"))
    (propagated-inputs
     `(("go-github-com-golang-protobuf-proto" ,go-github-com-golang-protobuf-proto)
       ("go-golang-org-x-net" ,go-golang-org-x-net)))
    (home-page "https://google.golang.org/appengine")
    (synopsis "Internal support for package appengine")
    (description "This package supports the Go runtime on App Engine standard.
It provides APIs for interacting with App Engine services.")
    (license license:asl2.0)))

(define-public go-bazil-org-fuse
  (let ((commit "5a45981690d8c47319ea10f5f1c1ba6e2cc0147b")
        (revision "1"))
    (package
      (name "go-bazil-org-fuse")
      (version (git-version "0.0.0" revision commit))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://github.com/bazil/fuse")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32
           "0didws29ca6xqvyqg3pfy4g1hd4ij9xhhxxc5ngvaxyxk5gd0rcy"))))
      (build-system go-build-system)
      (arguments
       '(#:import-path "bazil.org/fuse"
         #:tests? #f))  ; Tests require fusermount and a fuse device.
      (propagated-inputs
       `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
      (native-inputs
       `(("fuse" ,(@ (gnu packages linux) fuse))
         ("go-golang-org-x-net" ,go-golang-org-x-net)))
      (home-page "https://bazil.org/fuse/")
      (synopsis "Go library for writing filesystems")
      (description "This package is a Go library for writing filesystems.  It is
a from-scratch implementation of the kernel-userspace communication protocol,
and does not use the C library from the project called FUSE.")
      (license license:bsd-3))))

(define-public go-github-com-tv42-httpunix
  (let ((commit "2ba4b9c3382c77e7b9ea89d00746e6111d142a22")
        (revision "1"))
    (package
      (name "go-github-com-tv42-httpunix")
      (version (git-version "0.0.0" revision commit))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://github.com/tv42/httpunix")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32
           "0xbwpip2hsfhd2kd878jn5ndl8y1i9658lggha4x3xb5m1rsds9w"))))
      (build-system go-build-system)
      (arguments
       '(#:import-path "github.com/tv42/httpunix"))
      (home-page "https://github.com/tv42/httpunix")
      (synopsis "Go library to talk HTTP over Unix domain sockets")
      (description "Go library to talk HTTP over Unix domain sockets/")
      (license license:expat))))

(define-public go-camlistore-org-pkg-buildinfo
  (let ((commit "c55c8602d3cea4511081630e17bca7ed601abc44")
        (revision "1"))
    (package
      (name "go-camlistore-org-pkg-buildinfo")
      (version (git-version "0.9" revision commit))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://github.com/perkeep/perkeep")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32
           "1h9f6kj6ifwgx9hymwkn5w0ri291js1951mlc8fa5lagpbhnqd1g"))
         (modules '((guix build utils)))
         (snippet
          '(begin
             (delete-file-recursively "vendor")
             (delete-file-recursively "website")
             (delete-file-recursively "server/camlistored")
             (for-each make-file-writable (find-files "."))
             #t))))
      (build-system go-build-system)
      (arguments
       '(#:import-path "camlistore.org/pkg/buildinfo"
         #:unpack-path "camlistore.org"))
      (home-page "https://perkeep.org/pkg/")
      (synopsis "Go library for personal storage system")
      (description "Camlistore is your personal storage system for life: a way
of storing, syncing, sharing, modelling and backing up content.")
      (license license:asl2.0))))

(define-public go-camlistore-org-pkg-images
  (package
    (inherit go-camlistore-org-pkg-buildinfo)
    (name "go-camlistore-org-pkg-images")
    (arguments
     '(#:import-path "camlistore.org/pkg/images"
       #:unpack-path "camlistore.org"))
    (propagated-inputs
     `(
       ;("go-github-com-nf-cr2" ,go-github-com-nf-cr2)
       ;("go-github-com-rwcarlsen-goexif" ,go-github-com-rwcarlsen-goexif)
       ;("go-go4-org-readerutil" ,go-go4-org-readerutil)
       ("go-golang-org-x-image" ,go-golang-org-x-image)))
    ))

[-- Attachment #1.3: keybase.scm --]
[-- Type: text/plain, Size: 1254 bytes --]

;; https://github.com/keybase/client/blob/master/packaging/linux/systemd/keybase.service
(define keybase
  (make <service>
    #:provides '(keybase)
    #:docstring "Provide access to Keybase™"
    #:start (make-forkexec-constructor
              '("keybase" "service")
              #:log-file (string-append (getenv "HOME") "/log/keybase.log"))
    #:stop (make-system-destructor "keybase ctl stop")
    #:actions
    (make-actions
      (restart (lambda _ (system* "keybase" "ctl" "restart")))
      (reload (lambda _ (system* "keybase" "ctl" "reload"))))
    #:directory (string-append "/run/user/"
                               (number->string (passwd:uid (getpw "efraim")))
                               "/keybase")
    #:respawn? #t))

;; https://github.com/keybase/client/blob/master/packaging/linux/systemd/kbfs.service
(define kbfs
  (make <service>
    #:provides '(kbfs)
    #:depends '(keybase)
    #:docstring "Provide access to Keybase™ fuse store"
    #:start (make-forkexec-constructor
              '("kbfsfuse" "-debug" "-log-to-file")
              #:log-file (string-append (getenv "HOME") "/log/kbfs.log"))
    #:stop (make-kill-destructor)
    #:respawn? #t))

(register-services keybase kbfs)

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#39021] [PATCH] Add Keybase
  2020-05-31  7:09       ` Efraim Flashner
@ 2020-05-31 21:47         ` Jakub Kądziołka
  0 siblings, 0 replies; 8+ messages in thread
From: Jakub Kądziołka @ 2020-05-31 21:47 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: 39021, Leo Famulari

[-- Attachment #1: Type: text/plain, Size: 1148 bytes --]

On Sun, May 31, 2020 at 10:09:38AM +0300, Efraim Flashner wrote:
> I have a working version of keybase, although I haven't gotten around to
> unbundling all the go dependencies yet. I figured I'd post my WIP stuff
> here.

Hi Efraim,

thanks for your message! I like how you consolidated the binaries into a
single package with a custom phase. I was going to ask whether you got
the GUI working, but after taking another look at the unbundling part,
it's clear that this is still not there.

When it comes to my own efforts for packaging keybase, I have
categorized all the vendored dependencies according to their licenses.
I have found 3 libraries without a license. For 2 of them, I prodded the
authors a bit and they now include a license. However, I haven't
received a response on github.com/keybase/golang-ico (note that despite
the /keybase/ in the URL, this is just a fork, the original author has
no relation to keybase).

I am considering learning enough Go to replace that library with a
freely-licensed alternative and submitting a PR upstream, however it is
quite low on my TODOs.

Regards,
Jakub Kądziołka

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-05-31 21:48 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-07 20:00 [bug#39021] [PATCH] Add Keybase Jakub Kądziołka
2020-01-24 18:34 ` [bug#39021] go package rebuilds Jakub Kądziołka
2020-01-28 21:54 ` [bug#39021] [PATCH 1/2 v2] build-system/go: Allow providing additional build flags Jakub Kądziołka
2020-02-08  0:20 ` [bug#39021] [PATCH] Add Keybase Leo Famulari
2020-02-11 16:36   ` Jakub Kądziołka
2020-02-11 17:36     ` Leo Famulari
2020-05-31  7:09       ` Efraim Flashner
2020-05-31 21:47         ` Jakub Kądziołka

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).