blob: b6a5265555ee2bfbff5f0d167173ba563bba5743 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
(define-module (mitch tailscale)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix utils)
#:use-module (guix gexp)
#:use-module (guix download)
#:use-module (guix packages)
#:use-module (guix build-system copy)
#:use-module (guix records)
#:use-module (ice-9 match)
#:use-module (guix git-download)
#:use-module (gnu packages nss)
#:use-module (gnu packages compression)
#:use-module (gnu packages base)
#:use-module (gnu)
#:use-module (gnu services shepherd)
#:use-module (gnu packages linux))
(define-public tailscale
(let ((version "1.96.2"))
(package
(name "tailscale")
(version version)
(source (origin
(method url-fetch/tarbomb)
(uri (string-append "https://pkgs.tailscale.com/stable/tailscale_" version
"_amd64.tgz"))
(sha256
(base32
"00blgy5j5x0zp45xvy421mpkg5bdvzf2gnbywil3rnspxhysz8na"))))
(build-system copy-build-system)
(arguments
(list
#:install-plan
#~`((,(string-append "tailscale_" #$version "_amd64/") "/bin/"))))
(propagated-inputs ; iptables is required for setting up routing
(list iptables))
(home-page "https://tailscale.com")
(synopsis "Tailscale client")
(description "Tailscale client")
(license license:bsd-3))))
(define-public tailscaled
(let ((import-path "tailscale.com/cmd/tailscaled"))
(package
(inherit tailscale)
(name "tailscaled")
(arguments
(substitute-keyword-arguments (package-arguments tailscale)
((#:import-path _ #f)
import-path)
((#:phases phases #~%standard-phases)
#~(modify-phases #$phases
(replace 'build
(lambda _
;; idk why but we have to unset GO111MODULE in order for the build to work
;; [btv] maybe vendor stuff is not getting picked up in go path?
(unsetenv "GO111MODULE")
(chdir "./src/tailscale.com")
(invoke "go" "build" "-o" "tailscaled"
#$import-path)
(chdir "../..")))
(replace 'install
(lambda _
(install-file "src/tailscale.com/tailscaled" (string-append #$output "/bin"))))))))
(synopsis "Tailscale daemon")
(description "Tailscale daemon"))))
(define-public (tailscale-configuration) '())
(define (tailscale-shepherd-service config)
(list (shepherd-service
(documentation "Run the tailscale daemon")
(provision '(tailscaled tailscale))
(requirement '(user-processes))
(actions '())
(start
#~(lambda _
(fork+exec-command (list #$(file-append tailscaled "/bin/tailscaled")))))
(stop #~(make-kill-destructor)))))
(define-public tailscale-service-type
(service-type
(name 'tailscale)
(extensions
(list (service-extension shepherd-root-service-type tailscale-shepherd-service)))
(default-value (tailscale-configuration))
(description "Run and connect to tailscale")))
|