aboutsummaryrefslogtreecommitdiff
path: root/container.scm
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2023-08-30 11:40:19 +0200
committerWojtek Kosior <koszko@koszko.org>2023-08-30 11:40:19 +0200
commit9e71165dd3fa31accbcce8d5875aa774ab8b8fe1 (patch)
tree6de9d1246e80fd8ad391840c5da47aca24999592 /container.scm
parent41d988a7ae42eb5038be051d208a6164b576e189 (diff)
downloadkoszko-org-server-9e71165dd3fa31accbcce8d5875aa774ab8b8fe1.tar.gz
koszko-org-server-9e71165dd3fa31accbcce8d5875aa774ab8b8fe1.zip
run Exim in container
Diffstat (limited to 'container.scm')
-rw-r--r--container.scm106
1 files changed, 99 insertions, 7 deletions
diff --git a/container.scm b/container.scm
index 7caf4fe..a513dda 100644
--- a/container.scm
+++ b/container.scm
@@ -4,15 +4,14 @@
;;
;; Available under the terms of Creative Commons Zero v1.0 Universal.
-(use-modules (gnu)
+(use-modules ((srfi srfi-1) #:select (append-map filter-map))
+ (gnu)
(koszko-org-website)
(sheets-websites)
(hydrilla-website)
(hydrilla-json-schemas)
(hydrilla-base)
(ice-9 match)
- ;; srfi-1 provides `append-map`.
- (srfi srfi-1)
;; srfi-26 provides `cut`.
(srfi srfi-26)
(guix records)
@@ -24,14 +23,17 @@
(guix packages)
(guix search-paths)
(guix modules)
+ ((guix utils) #:select (substitute-keyword-arguments))
;; The following exports account-service-type.
(gnu system shadow))
(use-package-modules web
python
- version-control)
+ version-control
+ mail)
(use-service-modules web
shepherd
- certbot)
+ certbot
+ mail)
(define %here
(getcwd))
@@ -376,6 +378,10 @@
"CustomLog /var/log/httpd/access.log combined" "\n"
"ScriptSock /var/run/cgid.sock" "\n")))))))
+(define (extension-of-type? ext type)
+ (eq? (service-type-name (service-extension-target ext))
+ (service-type-name type)))
+
(define %koszko-httpd-deploy-hook
(program-file
"httpd-deploy-hook"
@@ -416,8 +422,7 @@
;; Prevent certbot from pulling in Nginx — we use Apache here.
(extensions (filter
(lambda (ext)
- (not (eq? (service-type-name (service-extension-target ext))
- (service-type-name nginx-service-type))))
+ (not (extension-of-type? ext nginx-service-type)))
(service-type-extensions certbot-service-type))))
(certbot-configuration
(email "koszko@koszko.org")
@@ -437,6 +442,66 @@
(deploy-hook %koszko-httpd-deploy-hook)))))
%all-site-confs)))))
+(define koszko-exim-service-type
+ (service-type
+ (inherit exim-service-type)
+ (extensions (filter-map
+ (lambda (ext)
+ (cond
+ ((extension-of-type? ext account-service-type)
+ ;; Avoid double declaration of "exim" user and group.
+ #f)
+ ((extension-of-type? ext activation-service-type)
+ ;; Make exim logs accessible under /var/log
+ (let ((old-activation (service-extension-compute ext)))
+ (define (new-activation exim-config)
+ #~(begin
+ (symlink "../spool/exim/log" "/var/log/exim")
+ #$(old-activation exim-config)))
+
+ (service-extension activation-service-type
+ new-activation)))
+ (else
+ ext)))
+ (service-type-extensions exim-service-type)))))
+
+(define %koszko-exim-service
+ (service koszko-exim-service-type
+ (exim-configuration
+ (package (package/inherit exim
+ (arguments
+ (substitute-keyword-arguments
+ (package-arguments exim)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'configure 'configure-enable-maildir
+ (lambda _
+ (substitute* "Local/Makefile"
+ (("# (SUPPORT_MAILDIR=yes)" all line)
+ line))))))))))
+ (config-file (local-file "./exim.conf")))))
+
+(define %koszko-mail-aliases-service
+ (service mail-aliases-service-type
+ '(("mailer-daemon" "postmaster")
+ ("postmaster" "root")
+ ("nobody" "root")
+ ("hostmaster" "root")
+ ("usenet" "root")
+ ("news" "root")
+ ("webmaster" "root")
+ ("www" "root")
+ ("ftp" "root")
+ ("abuse" "root")
+ ("noc" "root")
+ ("security" "root")
+ ("root" "urz")
+ ("dmarc" "urz")
+ ("admin" "urz")
+ ("wk" "urz")
+ ("koszko" "urz")
+ ("my-contribution-is-licensed-cc0" "urz"))))
+
(operating-system
(host-name "koszko")
(timezone "Europe/Warsaw")
@@ -445,6 +510,10 @@
;; files that are readable by certain daemons and not readable by the
;; world.
(user-group
+ (name "exim")
+ (id 113)
+ (system? #t))
+ (user-group
(name "httpd")
(id 133)
(system? #t))
@@ -456,9 +525,21 @@
(name "certsaccess")
(id 1001)
(system? #t))
+ (user-group
+ (name "urz")
+ (id 1000))
+ (user-group
+ (name "joanna")
+ (id 1003))
%base-groups))
(users (cons*
(user-account
+ (name "exim")
+ (group "exim")
+ (supplementary-groups '("certsaccess"))
+ (uid 106)
+ (system? #t))
+ (user-account
(name "httpd")
(group "httpd")
(supplementary-groups '("gitolite3" "certsaccess"))
@@ -472,6 +553,15 @@
(group "gitolite3")
(uid 110)
(system? #t))
+ (user-account
+ (name "urz")
+ (group "urz")
+ (supplementary-groups '("cdrom" "floppy" "audio" "video" "netdev"))
+ (uid 1000))
+ (user-account
+ (name "joanna")
+ (group "joanna")
+ (uid 1001))
%base-user-accounts))
(file-systems (cons (file-system
(device (file-system-label "does-not-matter"))
@@ -498,4 +588,6 @@
(description "Make other services assume network is there."))
#f)
%koszko-certbot-service
+ %koszko-exim-service
+ %koszko-mail-aliases-service
%base-services)))