aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/vpn.scm203
1 files changed, 203 insertions, 0 deletions
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index aecf9831ca..d78590ecb2 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,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")