gnu: Add bitmask.
* gnu/packages/vpn.scm (bitmask): New variable. Co-authored-by: jgart <jgart@dismail.de>
This commit is contained in:
		
							parent
							
								
									e6ea0abd93
								
							
						
					
					
						commit
						b30651aeca
					
				
					 1 changed files with 203 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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,201 @@
 | 
			
		|||
  #:use-module (gnu packages tls)
 | 
			
		||||
  #:use-module (gnu packages xml))
 | 
			
		||||
 | 
			
		||||
(define-public bitmask
 | 
			
		||||
  (package
 | 
			
		||||
    (name "bitmask")
 | 
			
		||||
    (version "0.21.6")
 | 
			
		||||
    (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 "0xmn0pkpn0mcwi1jlgm5skydcnfxk5fawg5hl2inn50m0ikgxk1c"))
 | 
			
		||||
       (modules
 | 
			
		||||
        '((guix build utils)))
 | 
			
		||||
       (snippet
 | 
			
		||||
        `(begin
 | 
			
		||||
           (delete-file-recursively "branding/thirdparty")
 | 
			
		||||
           (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)
 | 
			
		||||
        (guix build qt-utils)
 | 
			
		||||
        ,@%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* ((name "go-0xacab-org-leap-shapeshifter")
 | 
			
		||||
                    (shapeshifter (assoc-ref inputs name))
 | 
			
		||||
                    (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"
 | 
			
		||||
               ;; 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"))
 | 
			
		||||
               ;; 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)
 | 
			
		||||
                   (("/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$")
 | 
			
		||||
                 ;; 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 _
 | 
			
		||||
             ;; 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))
 | 
			
		||||
             ;; Build bitmask application.
 | 
			
		||||
             (with-directory-excursion "src/0xacab.org/leap/bitmask-vpn"
 | 
			
		||||
               (delete-file "Makefile")
 | 
			
		||||
               (invoke "qmake" "bitmask.pro")
 | 
			
		||||
               (invoke "make"))))
 | 
			
		||||
         (add-after 'check 'check-continued
 | 
			
		||||
           (lambda* (#:key tests? #:allow-other-keys)
 | 
			
		||||
             (when tests?
 | 
			
		||||
               ;; Run bitmask test-suite.
 | 
			
		||||
               (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
 | 
			
		||||
                    ;; Install bitmask program.
 | 
			
		||||
                    '(("src/0xacab.org/leap/bitmask-vpn/release"
 | 
			
		||||
                       "bin"
 | 
			
		||||
                       #:include ("bitmask"))
 | 
			
		||||
                      ;; Install bitmask-root script.
 | 
			
		||||
                      ("src/0xacab.org/leap/bitmask-vpn/helpers"
 | 
			
		||||
                       "sbin"
 | 
			
		||||
                       #:include ("bitmask-root"))
 | 
			
		||||
                      ;; 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")))
 | 
			
		||||
               ;; Make bitmask-root script executable.
 | 
			
		||||
               (chmod bitmask-root #o777))))
 | 
			
		||||
         (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 "Generic 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, where the former is default.")
 | 
			
		||||
    (home-page "https://bitmask.net/")
 | 
			
		||||
    (license license:gpl3+)))
 | 
			
		||||
 | 
			
		||||
(define-public gvpe
 | 
			
		||||
  (package
 | 
			
		||||
    (name "gvpe")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue