summaryrefslogtreecommitdiff
path: root/guix/fixed-fcgiwrap.scm
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-02-17 21:20:12 +0100
committerChristian Grothoff <christian@grothoff.org>2020-02-17 21:20:12 +0100
commit21c6b40156db5a505215d4ce57fcab0ff6691300 (patch)
tree9dd8b61796c86e1b6694406ad3660cf64d00ce09 /guix/fixed-fcgiwrap.scm
parentbe061b4da9a8850412c216bdf49589e6951527c5 (diff)
downloaddeployment-21c6b40156db5a505215d4ce57fcab0ff6691300.tar.gz
deployment-21c6b40156db5a505215d4ce57fcab0ff6691300.tar.bz2
deployment-21c6b40156db5a505215d4ce57fcab0ff6691300.zip
move unmaintained files to historic/
Diffstat (limited to 'guix/fixed-fcgiwrap.scm')
-rw-r--r--guix/fixed-fcgiwrap.scm161
1 files changed, 0 insertions, 161 deletions
diff --git a/guix/fixed-fcgiwrap.scm b/guix/fixed-fcgiwrap.scm
deleted file mode 100644
index 21b39d6..0000000
--- a/guix/fixed-fcgiwrap.scm
+++ /dev/null
@@ -1,161 +0,0 @@
-(define-module (fixed-fcgiwrap)
- #:use-module (ice-9 match)
- #:use-module (ice-9 regex)
- #:use-module (gnu services)
- #:use-module (gnu packages admin)
- #:use-module (gnu system shadow)
- #:use-module (gnu packages web)
- #:use-module (gnu services shepherd)
- #:use-module (guix modules)
- #:use-module (guix i18n)
- #:use-module (guix records)
- #:use-module (guix gexp)
- #:export (fcgiwrap-configuration
- fcgiwrap-service-type))
-
-
-;;;
-;;; Our definition of the fcgiwrap-service,
-;;; this should eventually go upstream.
-;;;
-
-
-(define-record-type* <fcgiwrap-configuration> fcgiwrap-configuration
- make-fcgiwrap-configuration
- fcgiwrap-configuration?
- (package fcgiwrap-configuration-package ;<package>
- (default fcgiwrap))
- (socket fcgiwrap-configuration-socket
- (default "tcp:127.0.0.1:9000"))
- (user fcgiwrap-configuration-user
- (default "fcgiwrap"))
- (group fcgiwrap-configuration-group
- (default "fcgiwrap"))
- (log-file fcgiwrap-log-file
- (default #f))
- ;; boolean or octal mode integer
- (adjusted-socket-permissions fcgiwrap-adjusted-socket-permissions?
- (default #f))
- (ensure-socket-dir? fcgiwrap-ensure-socket-dir?
- (default #f)))
-
-(define fcgiwrap-accounts
- (match-lambda
- (($ <fcgiwrap-configuration> package socket user group)
- (filter identity
- (list
- (and (equal? group "fcgiwrap")
- (user-group
- (name "fcgiwrap")
- (system? #t)))
- (and (equal? user "fcgiwrap")
- (user-account
- (name "fcgiwrap")
- (group group)
- (system? #t)
- (comment "Fcgiwrap Daemon")
- (home-directory "/var/empty")
- (shell (file-append shadow "/sbin/nologin")))))))))
-
-(define (parse-fcgiwrap-socket s)
- "Parse a fcgiwrap socket specification string into '(type args ...)"
- (cond
- ((string-prefix? "unix:" s)
- (list 'unix (substring s 5)))
- ((string-prefix? "tcp:" s)
- (match (string-match "^tcp:([.0-9]+):([0-9]+)$" s)
- ((? regexp-match? m)
- (list
- 'tcp
- (match:substring m 1)
- (string->number (match:substring m 2))))
- (_ (error "invalid tcp socket address"))))
- ((string-prefix? "tcp6:" s)
- (match (string-match "^tcp6:\\[(.*)\\]:([0-9]+)$" s)
- ((? regexp-match? m)
- (list
- 'tcp6
- (match:substring m 1)
- (string->number (match:substring m 2))))
- (_ (error "invalid tcp6 socket address"))))
- (else (error "unrecognized socket protocol"))))
-
-
-(define fcgiwrap-shepherd-service
- (match-lambda
- (($ <fcgiwrap-configuration> package socket user group log-file perm ensure-dir?)
- (define parsed-socket (parse-fcgiwrap-socket socket))
- (list
- (shepherd-service
- (provision '(fcgiwrap))
- (documentation "Run the fcgiwrap daemon.")
- (requirement '(networking))
- (modules `((shepherd support) (ice-9 match) ,@%default-modules))
- (start
- #~(lambda args
- (define (clean-up file)
- (catch 'system-error
- (lambda ()
- (delete-file file))
- (lambda args
- (unless (= ENOENT (system-error-errno args))
- (apply throw args)))))
- (define* (wait-for-file file #:key (max-delay 10))
- (define start (current-time))
- (local-output "w: waiting for file ~s" file)
- (let loop ()
- (cond
- ((file-exists? file)
- (local-output "w: file ~s exists" file)
- #t)
- ((< (current-time) (+ start max-delay))
- (local-output "w: file ~s does not exist yet" file)
- (sleep 1)
- (loop))
- (else
- (local-output "w: file ~s: giving up" file)
- #f))))
- (define (adjust-permissions file mode)
- (match mode
- (#t (chmod file #o660))
- (n (chmod file n))
- (#f 0)))
- (define (ensure-socket-dir dir user group)
- (unless (file-exists? dir)
- (mkdir dir) ; FIXME: use mkdir-p instead?
- (let ((uid (passwd:uid (getpwnam user)))
- (gid (group:gid (getgrnam group))))
- (chown dir uid gid))))
- (define start-fcgiwrap
- (make-forkexec-constructor
- '(#$(file-append package "/sbin/fcgiwrap")
- "-s" #$socket)
- #:user #$user
- #:group #$group
- #:log-file #$log-file))
- (match '#$parsed-socket
- (('unix path)
- ;; Clean up socket, otherwise fcgiwrap might not start properly.
- (clean-up path)
- (when #$ensure-dir?
- (ensure-socket-dir (dirname path) #$user #$group))
- (let ((pid (start-fcgiwrap))
- (socket-exists? (wait-for-file path)))
- (if socket-exists?
- (adjust-permissions path #$perm)
- (local-output
- #$(G_ "fcgiwrap: warning: waiting for socket ~s failed")
- path))
- pid))
- (_ (start-fcgiwrap)))))
- (stop #~(make-kill-destructor)))))))
-
-(define fcgiwrap-service-type
- (service-type (name 'fcgiwrap)
- (extensions
- (list (service-extension shepherd-root-service-type
- fcgiwrap-shepherd-service)
- (service-extension account-service-type
- fcgiwrap-accounts)))
- (default-value (fcgiwrap-configuration))))
-