mirror of
				https://codeberg.org/hako/Rosenthal.git
				synced 2025-11-03 19:24:37 +00:00 
			
		
		
		
	services: Add cloudflare-tunnel-service-type.
rosenthal/services/child-error.scm: New file. (<cloudflare-tunnel-configuration>): New data type. (cloudflare-tunnel-service-type): New variable.
This commit is contained in:
		
							parent
							
								
									bbbdd6afec
								
							
						
					
					
						commit
						2b8d1603a7
					
				
							
								
								
									
										84
									
								
								rosenthal/services/child-error.scm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								rosenthal/services/child-error.scm
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
			
		||||
;; SPDX-FileCopyrightText: 2022 Hilton Chain <hako@ultrarare.space>
 | 
			
		||||
;;
 | 
			
		||||
;; SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
(define-module (rosenthal services child-error)
 | 
			
		||||
  #:use-module (ice-9 match)
 | 
			
		||||
  #:use-module (guix records)
 | 
			
		||||
  #:use-module (guix gexp)
 | 
			
		||||
  #:use-module (gnu home services)
 | 
			
		||||
  #:use-module (gnu home services shepherd)
 | 
			
		||||
  #:use-module (gnu services)
 | 
			
		||||
  #:use-module (gnu services configuration)
 | 
			
		||||
  #:use-module (gnu services shepherd)
 | 
			
		||||
  #:use-module (rosenthal utils home-services-utils)
 | 
			
		||||
  #:export (cloudflare-tunnel-configuration
 | 
			
		||||
            cloudflare-tunnel-service-type))
 | 
			
		||||
 | 
			
		||||
;; Child-error: services for packages not available in Guix, currently this
 | 
			
		||||
;; means some Go and Rust apps I build locally but don't want to package.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
;;
 | 
			
		||||
;; Cloudflare Tunnel
 | 
			
		||||
;;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(define-record-type* <cloudflare-tunnel-configuration>
 | 
			
		||||
  cloudflare-tunnel-configuration make-cloudflare-tunnel-configuration
 | 
			
		||||
  cloudflare-tunnel-configuration?
 | 
			
		||||
  (cloudflared   cloudflare-tunnel-configuration-cloudflared   ;string
 | 
			
		||||
                 (default "/bin/cloudflared"))
 | 
			
		||||
  ;; Tunnel command options
 | 
			
		||||
  (metrics       cloudflare-tunnel-configuration-metrics       ;string
 | 
			
		||||
                 (default "localhost:"))
 | 
			
		||||
  (log-level     cloudflare-tunnel-configuration-log-level     ;string
 | 
			
		||||
                 (default "info"))
 | 
			
		||||
  (log-file      cloudflare-tunnel-configuration-log-file      ;string
 | 
			
		||||
                 (default "/var/log/cloudflared.log"))
 | 
			
		||||
  ;; Subcommand options
 | 
			
		||||
  (token         cloudflare-tunnel-configuration-token         ;string
 | 
			
		||||
                 (default #f))
 | 
			
		||||
  (http2-origin? cloudflare-tunnel-configuration-http2-origin? ;boolean
 | 
			
		||||
                 (default #f))
 | 
			
		||||
  (post-quantum? cloudflare-tunnel-configuration-post-quantum? ;boolean
 | 
			
		||||
                 (default #f))
 | 
			
		||||
  (extra-options cloudflare-tunnel-configuration-extra-options ;list of string
 | 
			
		||||
                 (default '())))
 | 
			
		||||
 | 
			
		||||
(define cloudflare-tunnel-shepherd-service
 | 
			
		||||
  (match-lambda
 | 
			
		||||
    (($ <cloudflare-tunnel-configuration> cloudflared metrics
 | 
			
		||||
                                          log-level log-file
 | 
			
		||||
                                          token http2-origin? post-quantum?
 | 
			
		||||
                                          extra-options)
 | 
			
		||||
     (let ((tunnel-options
 | 
			
		||||
            (list "--no-autoupdate" "--metrics" metrics "--loglevel" log-level)))
 | 
			
		||||
       (list (shepherd-service
 | 
			
		||||
              (documentation "Run cloudflared.")
 | 
			
		||||
              (provision '(cloudflare-tunnel))
 | 
			
		||||
              (requirement '(loopback networking user-processes))
 | 
			
		||||
              (start #~(make-forkexec-constructor
 | 
			
		||||
                        (list #$cloudflared "tunnel" #$@tunnel-options "run"
 | 
			
		||||
                              "--token" #$token
 | 
			
		||||
                              #$@(if http2-origin?
 | 
			
		||||
                                     '("--http2-origin")
 | 
			
		||||
                                     '())
 | 
			
		||||
                              #$@(if post-quantum?
 | 
			
		||||
                                     '("--post-quantum")
 | 
			
		||||
                                     '())
 | 
			
		||||
                              #$@extra-options)
 | 
			
		||||
                        #:user "nobody"
 | 
			
		||||
                        #:group "nogroup"
 | 
			
		||||
                        #:log-file #$log-file))
 | 
			
		||||
              (stop #~(make-kill-destructor))))))))
 | 
			
		||||
 | 
			
		||||
(define cloudflare-tunnel-service-type
 | 
			
		||||
  (service-type
 | 
			
		||||
   (name 'cloudflare-tunnel)
 | 
			
		||||
   (extensions
 | 
			
		||||
    (list (service-extension shepherd-root-service-type
 | 
			
		||||
                             cloudflare-tunnel-shepherd-service)))
 | 
			
		||||
   (default-value (cloudflare-tunnel-configuration))
 | 
			
		||||
   (description "Run cloudflared, the Cloudflare Tunnel daemon.")))
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user