|  |  |  | @ -53,6 +53,9 @@ | 
		
	
		
			
				|  |  |  |  |   #:export (%metznet-desktop-services) | 
		
	
		
			
				|  |  |  |  |   #:export (%metznet-server-services) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   #:export (metznet-service-type) | 
		
	
		
			
				|  |  |  |  |   #:export (metznet-system-configuration) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   #:export (%metznet-base-server-system) | 
		
	
		
			
				|  |  |  |  |   #:export (%metznet-base-desktop-system)) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -157,28 +160,51 @@ | 
		
	
		
			
				|  |  |  |  | (define alist-of-file-like? | 
		
	
		
			
				|  |  |  |  |   (list-of file-like-pair?)) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define-maybe file-like) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define-configuration/no-serialization metznet-system-configuration | 
		
	
		
			
				|  |  |  |  |                                        (certs (file-like le-certs) | 
		
	
		
			
				|  |  |  |  |                                               "certificate package") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-ta-key (file-like (computed-file "ta.key" (with-imported-modules '((guix build utils)) #~(begin | 
		
	
		
			
				|  |  |  |  |                                                                                                                             (use-modules (guix build utils)) | 
		
	
		
			
				|  |  |  |  |                                                                                                                             (invoke #$(file-append openvpn "/sbin/openvpn") "--genkey" "secret" #$output))))) | 
		
	
		
			
				|  |  |  |  |                                        (vpn-ta-key (file-like (computed-file | 
		
	
		
			
				|  |  |  |  |                                                                "ta.key" | 
		
	
		
			
				|  |  |  |  |                                                                (with-imported-modules ' | 
		
	
		
			
				|  |  |  |  |                                                                 ((guix build | 
		
	
		
			
				|  |  |  |  |                                                                        utils)) | 
		
	
		
			
				|  |  |  |  |                                                                 #~(begin | 
		
	
		
			
				|  |  |  |  |                                                                     (use-modules | 
		
	
		
			
				|  |  |  |  |                                                                      (guix | 
		
	
		
			
				|  |  |  |  |                                                                       build | 
		
	
		
			
				|  |  |  |  |                                                                       utils)) | 
		
	
		
			
				|  |  |  |  |                                                                     (invoke #$ | 
		
	
		
			
				|  |  |  |  |                                                                      (file-append | 
		
	
		
			
				|  |  |  |  |                                                                       openvpn | 
		
	
		
			
				|  |  |  |  |                                                                       "/sbin/openvpn") | 
		
	
		
			
				|  |  |  |  |                                                                      "--genkey" | 
		
	
		
			
				|  |  |  |  |                                                                      "secret" | 
		
	
		
			
				|  |  |  |  |                                                                      #$output))))) | 
		
	
		
			
				|  |  |  |  |                                                    "ta.key for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-ca (file-like (local-file (or (getenv "VPN_CA") "pki/ca.crt"))) "ca.crt for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-cert (file-like (local-file (or (getenv "VPN_CERT") "pki/vpn.crt"))) "certificate for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-key (file-like (local-file (or (getenv "VPN_KEY") "pki/vpn.key"))) "key for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-ca (file-like (local-file (or (getenv | 
		
	
		
			
				|  |  |  |  |                                                                            "VPN_CA") | 
		
	
		
			
				|  |  |  |  |                                                                        "pki/ca.crt"))) | 
		
	
		
			
				|  |  |  |  |                                                "ca.crt for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-cert (file-like (local-file (or (getenv | 
		
	
		
			
				|  |  |  |  |                                                                              "VPN_CERT") | 
		
	
		
			
				|  |  |  |  |                                                                          "pki/vpn.crt"))) | 
		
	
		
			
				|  |  |  |  |                                                  "certificate for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (vpn-key (file-like (local-file (or (getenv | 
		
	
		
			
				|  |  |  |  |                                                                             "VPN_KEY") | 
		
	
		
			
				|  |  |  |  |                                                                         "pki/vpn.key"))) | 
		
	
		
			
				|  |  |  |  |                                                 "key for openvpn") | 
		
	
		
			
				|  |  |  |  |                                        (user-shells (alist-of-file-like (list (cons | 
		
	
		
			
				|  |  |  |  |                                                                                "/bin/zsh" | 
		
	
		
			
				|  |  |  |  |                                                                                zsh))) | 
		
	
		
			
				|  |  |  |  |                                                     "user shells to link") | 
		
	
		
			
				|  |  |  |  |                                        (channels-file (file-like (scheme-file | 
		
	
		
			
				|  |  |  |  |                                        (channels-file (maybe-file-like (scheme-file | 
		
	
		
			
				|  |  |  |  |                                                                   "channels.scm" | 
		
	
		
			
				|  |  |  |  |                                                                   #~(cons | 
		
	
		
			
				|  |  |  |  |                                                                              (channel | 
		
	
		
			
				|  |  |  |  |                                                                               (name 'metznet-channel) | 
		
	
		
			
				|  |  |  |  |                                                                                | 
		
	
		
			
				|  |  |  |  |                                                                               (url | 
		
	
		
			
				|  |  |  |  |                                                                                "https://git.metznet.ca/MetzNet/metznet-channel.git")) | 
		
	
		
			
				|  |  |  |  |                                                                   #~(cons (channel | 
		
	
		
			
				|  |  |  |  |                                                                            (name 'metznet-channel) | 
		
	
		
			
				|  |  |  |  |                                                                            (url | 
		
	
		
			
				|  |  |  |  |                                                                             "https://git.metznet.ca/MetzNet/metznet-channel.git")) | 
		
	
		
			
				|  |  |  |  |                                                                      %default-channels))) | 
		
	
		
			
				|  |  |  |  |                                                       "channels.scm") | 
		
	
		
			
				|  |  |  |  |                                        (pam-services (list-of-strings (list | 
		
	
	
		
			
				
					|  |  |  | @ -223,13 +249,17 @@ | 
		
	
		
			
				|  |  |  |  |               (list #$@(shell-packages configuration)))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define (metznet-etc-service configuration) | 
		
	
		
			
				|  |  |  |  |         `(("guix/channels.scm" ,(metznet-system-configuration-channels-file configuration)) | 
		
	
		
			
				|  |  |  |  |           ("openvpn/ta.key" ,(metznet-system-configuration-vpn-ta-key configuration)) | 
		
	
		
			
				|  |  |  |  |           ("openvpn/ca.crt" ,(metznet-system-configuration-vpn-ca configuration)) | 
		
	
		
			
				|  |  |  |  |           ("openvpn/client.key" ,(metznet-system-configuration-vpn-cert configuration)) | 
		
	
		
			
				|  |  |  |  |           ("openvpn/client.crt" ,(metznet-system-configuration-vpn-key configuration)))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define metznet-service-type | 
		
	
		
			
				|  |  |  |  |   `(,@(if (maybe-value-set? (metznet-system-configuration-channels-file configuration)) | 
		
	
		
			
				|  |  |  |  |        `("guix/channels.scm" ,(metznet-system-configuration-channels-file | 
		
	
		
			
				|  |  |  |  |                            configuration)) | 
		
	
		
			
				|  |  |  |  |        '()) | 
		
	
		
			
				|  |  |  |  |     ("openvpn/ta.key" ,(metznet-system-configuration-vpn-ta-key configuration)) | 
		
	
		
			
				|  |  |  |  |     ("openvpn/ca.crt" ,(metznet-system-configuration-vpn-ca configuration)) | 
		
	
		
			
				|  |  |  |  |     ("openvpn/client.key" ,(metznet-system-configuration-vpn-cert | 
		
	
		
			
				|  |  |  |  |                             configuration)) | 
		
	
		
			
				|  |  |  |  |     ("openvpn/client.crt" ,(metznet-system-configuration-vpn-key configuration)))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define-public metznet-service-type | 
		
	
		
			
				|  |  |  |  |   (service-type (name 'metznet-service) | 
		
	
		
			
				|  |  |  |  |                 (description "MetzNet Services") | 
		
	
		
			
				|  |  |  |  |                 (extensions (list (service-extension activation-service-type | 
		
	
	
		
			
				
					|  |  |  | @ -290,26 +320,31 @@ | 
		
	
		
			
				|  |  |  |  |                                                                           (list | 
		
	
		
			
				|  |  |  |  |                                                                            network-manager-openvpn))))))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %metznet-server-services | 
		
	
		
			
				|  |  |  |  | (define %base-services-nscd | 
		
	
		
			
				|  |  |  |  |   (modify-services %base-services | 
		
	
		
			
				|  |  |  |  |     (nscd-service-type config => %metznet-nscd-configuration))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %server-services | 
		
	
		
			
				|  |  |  |  |   (append %metznet-services | 
		
	
		
			
				|  |  |  |  |           (list (service dbus-root-service-type) | 
		
	
		
			
				|  |  |  |  |                 (service dhcp-client-service-type) | 
		
	
		
			
				|  |  |  |  |                 (service openvpn-client-service-type (openvpn-client-configuration | 
		
	
		
			
				|  |  |  |  |                                                   (openvpn openvpn) | 
		
	
		
			
				|  |  |  |  |                                                   (pid-file | 
		
	
		
			
				|  |  |  |  |                                                    "/var/run/openvpn/client.pid") | 
		
	
		
			
				|  |  |  |  |                                                   (persist-key? #f) | 
		
	
		
			
				|  |  |  |  |                                                   (remote (list (openvpn-remote-configuration | 
		
	
		
			
				|  |  |  |  |                                                                  (name | 
		
	
		
			
				|  |  |  |  |                                                                   "vpn.metznet.ca")))) | 
		
	
		
			
				|  |  |  |  |                                                   (tls-auth | 
		
	
		
			
				|  |  |  |  |                                                    "/etc/openvpn/ta.key")))) | 
		
	
		
			
				|  |  |  |  |           (modify-services %base-services | 
		
	
		
			
				|  |  |  |  |             (nscd-service-type config => %metznet-nscd-configuration)))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %metznet-base-operating-system | 
		
	
		
			
				|  |  |  |  |                 (service openvpn-client-service-type | 
		
	
		
			
				|  |  |  |  |                          (openvpn-client-configuration (openvpn openvpn) | 
		
	
		
			
				|  |  |  |  |                                                        (pid-file | 
		
	
		
			
				|  |  |  |  |                                                         "/var/run/openvpn/client.pid") | 
		
	
		
			
				|  |  |  |  |                                                        (persist-key? #f) | 
		
	
		
			
				|  |  |  |  |                                                        (remote (list (openvpn-remote-configuration | 
		
	
		
			
				|  |  |  |  |                                                                       (name | 
		
	
		
			
				|  |  |  |  |                                                                        "vpn.metznet.ca")))) | 
		
	
		
			
				|  |  |  |  |                                                        (tls-auth | 
		
	
		
			
				|  |  |  |  |                                                         "/etc/openvpn/ta.key")))))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %metznet-server-services | 
		
	
		
			
				|  |  |  |  |   (append %server-services %base-services-nscd)) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %metznet-base-server-system | 
		
	
		
			
				|  |  |  |  |   (operating-system | 
		
	
		
			
				|  |  |  |  |     (host-name "base") | 
		
	
		
			
				|  |  |  |  |     (host-name "metznet-base-server") | 
		
	
		
			
				|  |  |  |  |     (timezone "America/Edmonton") | 
		
	
		
			
				|  |  |  |  |     (locale "en_CA.utf8") | 
		
	
		
			
				|  |  |  |  |     (keyboard-layout %default-keyboard-layout) | 
		
	
	
		
			
				
					|  |  |  | @ -332,20 +367,12 @@ | 
		
	
		
			
				|  |  |  |  |     (users %metznet-base-user-accounts) | 
		
	
		
			
				|  |  |  |  |     (groups %metznet-base-groups) | 
		
	
		
			
				|  |  |  |  |     (packages %metznet-base-packages) | 
		
	
		
			
				|  |  |  |  |     (services | 
		
	
		
			
				|  |  |  |  |      (append %metznet-services %base-services)))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %metznet-base-server-system | 
		
	
		
			
				|  |  |  |  |   (operating-system | 
		
	
		
			
				|  |  |  |  |     (inherit %metznet-base-operating-system) | 
		
	
		
			
				|  |  |  |  |     (host-name "metznet-base-server") | 
		
	
		
			
				|  |  |  |  |     (packages %metznet-base-packages) | 
		
	
		
			
				|  |  |  |  |     (services | 
		
	
		
			
				|  |  |  |  |      %metznet-server-services))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (define %metznet-base-desktop-system | 
		
	
		
			
				|  |  |  |  |   (operating-system | 
		
	
		
			
				|  |  |  |  |     (inherit %metznet-base-operating-system) | 
		
	
		
			
				|  |  |  |  |     (inherit %metznet-base-server-system) | 
		
	
		
			
				|  |  |  |  |     (host-name "metznet-base-desktop") | 
		
	
		
			
				|  |  |  |  |     (setuid-programs %desktop-setuid-programs) | 
		
	
		
			
				|  |  |  |  |     (packages %metznet-desktop-packages) | 
		
	
	
		
			
				
					|  |  |  | 
 |