diff options
| author | Mitch Taylor <mitch@mitchtaylor.xyz> | 2026-03-21 18:15:11 -0300 |
|---|---|---|
| committer | Mitch Taylor <mitch@mitchtaylor.xyz> | 2026-03-21 18:15:11 -0300 |
| commit | aefe11a3a1cbc7770fe7b1e080ae03cf03748adc (patch) | |
| tree | 747c40cd0ae89c197ce81100e8fb02f59663f1e9 | |
| parent | e47ce35075754570df3bca6173229d5285d63ebb (diff) | |
split tailscale into package and service modules
| -rw-r--r-- | mitch/packages/tailscale.scm | 31 | ||||
| -rw-r--r-- | mitch/services/tailscale.scm | 64 | ||||
| -rw-r--r-- | mitch/tailscale.scm | 87 |
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"))) |
