(define-module (glicid services parallel) #:use-module (gnu packages bash) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu system shadow) #:use-module (guix) #:use-module (guix build utils) #:use-module (guix records) #:use-module (ice-9 match) #:use-module (gnu packages parallel) #:use-module (glicid system file-systems) #:use-module (glicid utils) #:export (munged-configuration munged-configuration? munged-service munged-service-type slurmdbd-configuration slurmdbd-configuration? slurmdbd-service slurmdbd-service-type slurmctld-configuration slurmctld-configuration? slurmctld-service slurmctld-service-type slurmd-configuration slurmd-configuration? slurmd-service slurmd-service-type %slurm-group %slurm-account %slurm-accounts)) ; ; Munged ; (define-record-type* munged-configuration make-munged-configuration munged-configuration? (munge munge-configuration-munge (default munge)) (key-file munged-key-file (default (file-append munge "/etc/munge/munged.key"))) (socket-path socket-path (default "/var/run/munge/munge.socket.2")) (log-file munged-log-file (default "/var/log/munged.log"))) (define munged-service (match-lambda (($ munge key-file socket-path log-file) (list (shepherd-service (provision '(munged)) (documentation "Run munged.") (requirement '(user-processes)) (respawn? #t) (start #~(make-forkexec-constructor (list #$(file-append munge "/sbin/munged") "-F" "-f" "-M" "-S" #$socket-path "--key-file" #$key-file) #:log-file #$log-file)) (stop #~(make-kill-destructor))))))) (define %munged-activation #~(begin (mkdir-p "/var/run/munge") (mkdir-p "/var/lib/munge") #t)) (define munged-service-type (service-type (name 'munged) (extensions (list (service-extension shepherd-root-service-type munged-service) (service-extension activation-service-type (const %munged-activation)))) (description "Run munged"))) ; ; Shared slurm account ; (define %slurm-group (user-group (name "slurm") (id 567) (system? #t))) (define %slurm-account (user-account (name "slurm") (group "slurm") (system? #t) (comment "slurm server user") (uid 567) ;«magic number…» ; (group 567) ;«magic number…» (home-directory "/var/spool/slurm") (shell (file-append bash "/bin/bash")))) (define %slurm-accounts (list %slurm-group %slurm-account)) ; ; slurmdbd ; (define-record-type* slurmdbd-configuration make-slurmdbd-configuration slurmdbd-configuration? (slurm slurm (default slurm)) (slurmdbd-conf slurmdbd-conf (default (file-append slurm "/etc/slurm/slurmdbd.conf"))) (log-file log-file (default "/var/log/slurm/slurmdbd.log"))) (define slurmdbd-service (match-lambda (($ slurm slurmdbd-conf log-file) (list (shepherd-service (provision '(slurmdbd)) (documentation "Run slurmdbd.") (requirement '(user-processes)) (respawn? #t) (start #~(make-forkexec-constructor (list #$(file-append slurm "/sbin/slurmdbd") "-D") #:log-file #$log-file #:user (passwd:uid (getpwnam "slurm")) #:group (passwd:gid (getpwnam "slurm")))) (stop #~(make-kill-destructor))))))) (define %slurmdbd-activation #~(begin (mkdir-p "/etc/slurm") (mkdir-p "/var/log/slurm") (mkdir-p "/var/lib/slurm-archives") (mkdir-p "/var/lib/slurm") (mkdir-p "/var/spool/slurmctld") (touch "/var/log/slurm/slurmdbd.log") (touch "/var/run/slurmdbd.pid") (chown "/var/run/slurmdbd.pid" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/log/slurm" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/log/slurm/slurmdbd.log" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/lib/slurm-archives" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/lib/slurm" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/spool/slurmctld" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/etc/slurm" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (for-each (lambda (slurm-file) (chown slurm-file (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chmod slurm-file #o600)) (find-files "/etc/slurm/")) #t)) (define slurmdbd-service-type (service-type (name 'slurmdbd) (extensions (list (service-extension shepherd-root-service-type slurmdbd-service) (service-extension activation-service-type (const %slurmdbd-activation)) (service-extension account-service-type (const %slurm-accounts)))) (description "Run slurmdbd"))) ; ; slurmctld ; (define-record-type* slurmctld-configuration make-slurmctld-configuration slurmctld-configuration? (slurm slurm (default slurm)) (slurmctld-conf slurmctld-conf (default (file-append slurm "/etc/slurm/slurmctld.conf"))) (log-file log-file (default "/var/log/slurm/slurmctld.log"))) (define slurmctld-service (match-lambda (($ slurm slurmctld-conf log-file) (list (shepherd-service (provision '(slurmctld)) (documentation "Run slurmctld.") (requirement '(user-processes)) (respawn? #t) (start #~(make-forkexec-constructor (list #$(file-append slurm "/sbin/slurmctld") "-D" "-R" "-f" #$slurmctld-conf) #:log-file #$log-file #:user (passwd:uid (getpwnam "slurm")) #:group (passwd:gid (getpwnam "slurm")))) (stop #~(make-kill-destructor))))))) (define %slurmctld-activation #~(begin (mkdir-p "/etc/slurm") (mkdir-p "/var/log/slurm") (mkdir-p "/var/lib/slurm-archives") (mkdir-p "/var/lib/slurm") (mkdir-p "/var/spool/slurmctld") (touch "/var/log/slurm/slurmctld.log") (touch "/var/run/slurmctld.pid") (chown "/var/log/slurm" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/log/slurm/slurmctld.log" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/run/slurmctld.pid" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/lib/slurm-archives" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/lib/slurm" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/var/spool/slurmctld" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chown "/etc/slurm" (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (for-each (lambda (slurm-file) (chown slurm-file (passwd:uid (getpwnam "slurm")) (passwd:gid (getpwnam "slurm"))) (chmod slurm-file #o600)) (find-files "/etc/slurm/")) #t)) (define slurmctld-service-type (service-type (name 'slurmctld) (extensions (list (service-extension shepherd-root-service-type slurmctld-service) (service-extension activation-service-type (const %slurmctld-activation)) (service-extension account-service-type (const %slurm-accounts)))) (description "Run slurmctld"))) ; ; slurmd ; (define-record-type* slurmd-configuration make-slurmd-configuration slurmd-configuration? (slurm slurm (default slurm)) (slurmd-conf slurmd-conf (default (file-append slurm "/etc/slurm/slurm.conf"))) (slurmctld-host slurmctld-host (default #f)) (log-level log-level (default #f)) (log-file log-file (default "/var/log/slurm/slurmd.log"))) (define slurmd-service (match-lambda (($ slurm slurmd-conf slurmctld-host log-level log-file) (list (shepherd-service (provision '(slurmd)) (documentation "Run slurmd.") (requirement '(user-processes)) (respawn? #t) (start #~(make-forkexec-constructor (list #$(file-append slurm "/sbin/slurmd") "-D" #$@(if slurmctld-host (list (string-append "--conf-server" slurmctld-host)) '()) #$@(if slurmd-conf (list (string-append "-f" slurmd-conf)) '()) #$@(if log-level (list log-level) '())) #:log-file #$log-file)) (stop #~(make-kill-destructor))))))) (define %slurmd-activation #~(begin (mkdir-p "/etc/slurm") (mkdir-p "/var/log/slurm") (mkdir-p "/var/lib/slurm-archives") (mkdir-p "/var/lib/slurm") (mkdir-p "/var/spool/slurmd") (touch "/var/log/slurm/slurmd.log") (touch "/var/run/slurmd.pid") #t)) (define slurmd-service-type (service-type (name 'slurmd) (extensions (list (service-extension shepherd-root-service-type slurmd-service) (service-extension activation-service-type (const %slurmd-activation)) (service-extension account-service-type (const %slurm-accounts)))) (description "Run slurmd")))