diff mbox series

[bug#48729,v7,24/25] gnu: Add bitmask.

Message ID 20210701045728.7293-24-rg@raghavgururajan.name
State Accepted
Headers show
Series None | expand

Commit Message

Raghav Gururajan July 1, 2021, 4:57 a.m. UTC
* gnu/packages/vpn.scm (bitmask): New variable.

Co-authored-by: jgart <jgart@dismail.de>
---
 gnu/packages/vpn.scm | 205 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 205 insertions(+)

Comments

Tobias Geerinckx-Rice July 3, 2021, 2:42 a.m. UTC | #1
Thanks for this series, jgart and Rhagav!

I'd hoped to do more than mere proofreading no the next two 
patches, but my Guix refuses to build bitmask complaining about no 
code for module (guix build qt-utils).

I'm rebuilding my checkout but will have to leave before it 
completes.  Sorry: more surface level readings for now.

Raghav Gururajan via Guix-patches via 写道:
> +           ;; To remove bundled thirdparty sources.
> +           (delete-file-recursively "branding/thirdparty")
> +           ;; To generate version.go file.
> +           (call-with-output-file 
> "pkg/config/version/version.go"

Your code is sufficiently clear not to need these comments.

> +           ;; For some reason this package is left out.
> +           (lambda* (#:key inputs #:allow-other-keys)
> +             (let* ((shapeshifter
> +                     (assoc-ref inputs 
> "go-0xacab-org-leap-shapeshifter"))
> +                    (shapeshifter-src (string-append 
> shapeshifter "/src")))
> +               (copy-recursively shapeshifter-src "src"))))

That's interesting.  Did you see any upstream acknowledgment of 
this?

> +         (add-after 'install 'install-continued
> +           (lambda args
> +             (apply (assoc-ref copy:%standard-phases 'install)
> +                    #:install-plan
> +                    ;; To install bitmask program.
> + 
> '(("src/0xacab.org/leap/bitmask-vpn/release"
> +                       "bin"
> +                       #:include ("bitmask"))
> +                      ;; To install bitmask-root script.
> + 
> ("src/0xacab.org/leap/bitmask-vpn/helpers"
> +                       "sbin"
> +                       #:include ("bitmask-root"))
> +                      ;; To install polkit policy.
> + 
> ("src/0xacab.org/leap/bitmask-vpn/helpers"
> +                       "share/polkit-1/actions"
> +                       #:include ("se.leap.bitmask.policy")))
> +                    args)))

OK, good exercise :-)

> +               ;; To make bitmask-root script executable.
> +               (chmod bitmask-root #o776))))

Just write #o777.

> +    (synopsis "White-label VPN client by LEAP")

I read your explanation, but I still agree with Maxime:

> I'd drop "White-label" from the synopsis.

It's not that it's *wrong*, but there are less metaphorical ways 
to say the same thing, for example ‘VPN client that supports 
multiple providers’.

Kind regards,

T G-R
Raghav Gururajan July 3, 2021, 6:48 a.m. UTC | #2
Hi Tobias!

> I'd hoped to do more than mere proofreading no the next two patches, but 
> my Guix refuses to build bitmask complaining about no code for module 
> (guix build qt-utils).
Ah, I got this too after a git pull. Fixed it in v9.

Regards,
RG.
diff mbox series

Patch

diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index aecf9831ca..b38d989d8c 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -16,6 +16,8 @@ 
 ;;; Copyright © 2020 Ivan Kozlov <kanichos@yandex.ru>
 ;;; Copyright © 2020 David Dashyan <mail@davie.li>
 ;;; Copyright © 2021 Domagoj Stolfa <ds815@gmx.com>
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,9 +40,12 @@ 
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system linux-module)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
@@ -54,7 +59,9 @@ 
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
@@ -63,6 +70,7 @@ 
   #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages polkit)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
@@ -73,6 +81,203 @@ 
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xml))
 
+(define-public bitmask
+  (package
+    (name "bitmask")
+    (version "0.21.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://0xacab.org/leap/bitmask-vpn")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1b0cdgh4mqvalvknck1zjy7dhmjfyhbmn9knya6ymx8dqan308sr"))
+       (modules
+        '((guix build utils)))
+       (snippet
+        `(begin
+           ;; To remove bundled thirdparty sources.
+           (delete-file-recursively "branding/thirdparty")
+           ;; To generate version.go file.
+           (call-with-output-file "pkg/config/version/version.go"
+             (lambda (port)
+               (format port "package version\n")
+               (format port "\n")
+               (format port (string-append "var VERSION = \"" ,version "\""))))
+           #t))))
+    (build-system go-build-system)
+    (arguments
+     `(#:imported-modules
+       ((guix build cmake-build-system)
+        (guix build copy-build-system)
+        (guix build python-build-system)
+        (guix build qt-build-system)
+        ,@%go-build-system-modules)
+       #:modules
+       (((guix build copy-build-system)
+         #:prefix copy:)
+        ((guix build python-build-system)
+         #:prefix python:)
+        ((guix build qt-build-system)
+         #:prefix qt:)
+        (guix build utils)
+        (guix build go-build-system))
+       #:unpack-path "0xacab.org/leap/bitmask-vpn"
+       #:import-path "0xacab.org/leap/bitmask-vpn/cmd/bitmask-helper"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'setup-go-environment 'insert-missing-sources
+           ;; For some reason this package is left out.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((shapeshifter
+                     (assoc-ref inputs "go-0xacab-org-leap-shapeshifter"))
+                    (shapeshifter-src (string-append shapeshifter "/src")))
+               (copy-recursively shapeshifter-src "src"))))
+         (add-after 'unpack 'patch
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (with-directory-excursion "src/0xacab.org/leap/bitmask-vpn"
+               ;; To use 'emersion/go-autostart',
+               ;; instead of 'ProtonMail/go-autostart',
+               ;; as the latter no longer exists.
+               (substitute* (find-files "." "\\.go$")
+                 (("github.com/ProtonMail/go-autostart")
+                  "github.com/emersion/go-autostart"))
+               ;; To use correct paths for referenced items.
+               (let* ((out (assoc-ref outputs "out"))
+                      (policy-dir (string-append out "/share/polkit-1/actions"))
+                      (policy-file "se.leap.bitmask.policy")
+                      (policy-path (string-append policy-dir "/" policy-file))
+                      (ip (string-append (assoc-ref inputs "iproute")
+                                         "/sbin/ip"))
+                      (iptables (string-append (assoc-ref inputs "iptables")
+                                               "/sbin/iptables"))
+                      (ip6tables (string-append (assoc-ref inputs "iptables")
+                                                "/sbin/ip6tables"))
+                      (sysctl (string-append (assoc-ref inputs "procps")
+                                             "/sbin/sysctl"))
+                      (pkttyagent (string-append (assoc-ref inputs "polkit")
+                                                 "/bin/pkttyagent"))
+                      (openvpn (string-append (assoc-ref inputs "openvpn")
+                                              "/sbin/openvpn"))
+                      (bitmask-root (string-append (assoc-ref outputs "out")
+                                                   "/sbin/bitmask-root")))
+                 (substitute* (find-files "." "(\\.go$|\\.policy$|bitmask-root)")
+                   (("swhich\\(\"ip\"\\)")
+                    (string-append "\"" ip "\""))
+                   (("swhich\\(\"iptables\"\\)")
+                    (string-append "\"" iptables "\""))
+                   (("swhich\\(\"ip6tables\"\\)")
+                    (string-append "\"" ip6tables "\""))
+                   (("swhich\\(\"sysctl\"\\)")
+                    (string-append "\"" sysctl "\""))
+                   (("/usr/(bin|lib|libexec)/.*(kit|agent|agent-1)") pkttyagent)
+                   (("fingerprint-polkit-agent") "pkttyagent")
+                   (("/usr/sbin/openvpn") openvpn)
+                   (("/usr/sbin/bitmask-root") bitmask-root)
+                   (("/usr/local/sbin/bitmask-root") bitmask-root)
+                   (("/usr/share.*\\.policy") policy-path)))
+               (substitute* (find-files "." "\\.pro$")
+                 ;; To use correct path for goshim files,
+                 ;; which are generated in 'build-continued phase.
+                 (("-L.*/lib") "-L./lib")
+                 ;; FIXME: Unable to build i18n files.
+                 (("TRANSLATIONS.*i18n.*$") "")
+                 (("RESOURCES.*i18n.*$") "")))))
+         (add-after 'build 'build-continued
+           (lambda _
+             ;; To generate goshim library and header files.
+             (let* ((dir "src/0xacab.org/leap/bitmask-vpn")
+                    (source (string-append dir "/gui/backend.go"))
+                    (target (string-append dir "/lib/libgoshim.a")))
+               (mkdir-p (string-append dir "/lib"))
+               (invoke "go" "build" "-buildmode=c-archive" "-o" target source))
+             ;; To build bitmask application.
+             (with-directory-excursion "src/0xacab.org/leap/bitmask-vpn"
+               (delete-file "Makefile")
+               (invoke "qmake" "bitmask.pro")
+               (invoke "make" "release/bitmask"))))
+         (add-after 'check 'check-continued
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; To run bitmask test.
+               (with-directory-excursion "src/0xacab.org/leap/bitmask-vpn"
+                 (delete-file "Makefile")
+                 (invoke "qmake" "test.pro")
+                 ;; Tests require display-server.
+                 (setenv "QT_QPA_PLATFORM" "offscreen")
+                 ;; Tests look for $XDG_RUNTIME_DIR.
+                 (setenv "XDG_RUNTIME_DIR" (getenv "TEMP"))
+                 ;; Tests write to $HOME.
+                 (setenv "HOME" (getenv "TEMP"))
+                 (invoke "make" "check")))))
+         (add-after 'install 'install-continued
+           (lambda args
+             (apply (assoc-ref copy:%standard-phases 'install)
+                    #:install-plan
+                    ;; To install bitmask program.
+                    '(("src/0xacab.org/leap/bitmask-vpn/release"
+                       "bin"
+                       #:include ("bitmask"))
+                      ;; To install bitmask-root script.
+                      ("src/0xacab.org/leap/bitmask-vpn/helpers"
+                       "sbin"
+                       #:include ("bitmask-root"))
+                      ;; To install polkit policy.
+                      ("src/0xacab.org/leap/bitmask-vpn/helpers"
+                       "share/polkit-1/actions"
+                       #:include ("se.leap.bitmask.policy")))
+                    args)))
+         (add-after 'install-continued 'post-install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bitmask (string-append out "/bin/bitmask"))
+                    (bitmask-root (string-append out "/sbin/bitmask-root")))
+               ;; To make bitmask-root script executable.
+               (chmod bitmask-root #o776))))
+         (add-after 'post-install 'python-wrap
+           (assoc-ref python:%standard-phases 'wrap))
+         (add-after 'python-wrap 'qt-wrap
+           (assoc-ref qt:%standard-phases 'qt-wrap)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("iproute" ,iproute)
+       ("iptables" ,iptables)
+       ("mesa" ,mesa)
+       ("openvpn" ,openvpn)
+       ("polkit" ,polkit)
+       ("procps" ,procps)
+       ("python" ,python)
+       ("qtbase" ,qtbase-5)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtquickcontrols" ,qtquickcontrols)
+       ("qtquickcontrols2" ,qtquickcontrols2)))
+    (propagated-inputs
+     `(("go-0xacab-org-leap-shapeshifter"
+        ,go-0xacab-org-leap-shapeshifter)
+       ("go-github-com-apparentlymart-go-openvpn-mgmt"
+        ,go-github-com-apparentlymart-go-openvpn-mgmt)
+       ("go-github-com-emersion-go-autostart"
+        ,go-github-com-emersion-go-autostart)
+       ("go-github-com-keybase-go-ps"
+        ,go-github-com-keybase-go-ps)
+       ("go-github-com-rakyll-statik"
+        ,go-github-com-rakyll-statik)
+       ("go-github-com-sevlyar-go-daemon"
+        ,go-github-com-sevlyar-go-daemon)
+       ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+    (synopsis "White-label VPN client by LEAP")
+    (description "Bitmask, by @acronym{LEAP, LEAP Encryption Access Project},
+is an application to provide easy and secure encrypted communication with a
+@acronym{VPN, Virtual Private Network}.  It allows you to select from a variety
+of trusted service provider all from one app.  Current providers include Riseup
+Networks and The Calyx Institute.")
+    (home-page "https://bitmask.net/")
+    (license license:gpl3+)))
+
 (define-public gvpe
   (package
     (name "gvpe")