summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mitch/packages/tailscale.scm31
-rw-r--r--mitch/services/tailscale.scm64
-rw-r--r--mitch/tailscale.scm87
3 files changed, 95 insertions, 87 deletions
diff --git a/mitch/packages/tailscale.scm b/mitch/packages/tailscale.scm
new file mode 100644
index 0000000..7ca7b7e
--- /dev/null
+++ b/mitch/packages/tailscale.scm
@@ -0,0 +1,31 @@
+(define-module (mitch packages tailscale)
+ #:use-module (guix packages)
+ #:use-module (gnu packages linux)
+ #:use-module (guix gexp)
+ #:use-module (guix build-system copy)
+ #:use-module (guix download)
+ #:use-module (guix licenses))
+
+(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))))
diff --git a/mitch/services/tailscale.scm b/mitch/services/tailscale.scm
new file mode 100644
index 0000000..bfc3e2e
--- /dev/null
+++ b/mitch/services/tailscale.scm
@@ -0,0 +1,64 @@
+(define-module (mitch services tailscale)
+ #:use-module (gnu services)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services configuration)
+ #:use-module (guix records)
+ #:use-module (guix gexp)
+ #:use-module (ice-9 match)
+ #:use-module (benwr packages tailscale)
+ #:use-module (gnu packages linux)
+ #:export (tailscaled-service-type tailscaled-configuration))
+
+;; TODO: https://tailscale.com/kb/1188/linux-dns/#dhcp-dhclient-overwriting-etcresolvconf
+
+(define-record-type* <tailscaled-configuration>
+ tailscaled-configuration make-tailscaled-configuration
+ tailscaled-configuration?
+ (tailscale tailscaled-configuration-tailscale
+ (default tailscale))
+ (listen-port tailscaled-configuration-listen-port
+ (default "41641"))
+ (state-file tailscaled-configuration-state-file
+ (default "tailscaled.state")))
+
+(define (tailscaled-activation config)
+ "Run tailscaled --cleanup"
+ #~(begin
+ (system* #$(file-append tailscale "/bin/tailscaled") "--cleanup")))
+
+(define (tailscaled-shepherd-service config)
+ "Return a <shepherd-service> for Tailscaled with CONFIG"
+ (let ((tailscale
+ (tailscaled-configuration-tailscale config))
+ (listen-port
+ (tailscaled-configuration-listen-port config))
+ (state-file
+ (tailscaled-configuration-state-file config))
+ (environment #~(list (string-append
+ "PATH=" ; iptables is required for tailscale to work
+ (string-append #$iptables "/sbin")
+ ":"
+ (string-append #$iptables "/bin")))))
+ (list
+ (shepherd-service
+ (provision '(tailscaled))
+ (requirement '(networking)) ;; services this depends on
+ (start #~(make-forkexec-constructor
+ (list #$(file-append tailscale "/bin/tailscaled")
+ "-state" #$state-file
+ ;"-port" #$listen-port
+ "-verbose" "10")
+ #:environment-variables #$environment
+ #:log-file "/var/log/tailscaled.log"))
+ (stop #~(make-kill-destructor))))))
+
+(define tailscaled-service-type
+ (service-type
+ (name 'tailscaled)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ tailscaled-shepherd-service)
+ (service-extension activation-service-type
+ tailscaled-activation)))
+ (default-value (tailscaled-configuration))
+ (description "Launch tailscaled.")))
diff --git a/mitch/tailscale.scm b/mitch/tailscale.scm
deleted file mode 100644
index b6a5265..0000000
--- a/mitch/tailscale.scm
+++ /dev/null
@@ -1,87 +0,0 @@
-(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")))