gnu: Add bitmask.

* gnu/packages/vpn.scm (bitmask): New variable.

Co-authored-by: jgart <jgart@dismail.de>
This commit is contained in:
Raghav Gururajan 2021-06-13 18:28:15 -04:00
parent e6ea0abd93
commit b30651aeca
No known key found for this signature in database
GPG key ID: 5F5816647F8BE551

View file

@ -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 @@ (define-module (gnu packages vpn)
#: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 @@ (define-module (gnu packages vpn)
#: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 @@ (define-module (gnu packages vpn)
#: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 @@ (define-module (gnu packages vpn)
#: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")