guix-machines/.guix/rekahsoft/guix-config/vms/cloud0-home-rekahsoft-ca.scm

65 lines
2.7 KiB
Scheme

(define-module (rekahsoft guix-config vms cloud0-home-rekahsoft-ca)
#:use-module (gnu)
#:use-module (gnu system)
#:use-module (gnu packages docker)
#:use-module (gnu packages shells)
#:use-module (gnu packages storage)
#:use-module (gnu services docker)
#:use-module (gnu services shepherd)
#:use-module (rekahsoft guix-config proxmox-vm-lvm-minimal)
#:export (system))
(define base-system (proxmox-vm-lvm-minimal "cloud0"))
(define cephfs-service
(simple-service 'cephfs shepherd-root-service-type
(list (shepherd-service
(provision '(cephfs))
(requirement '(networking file-system-/mnt/cephfs))
(start #~(make-system-constructor "/run/setuid-programs/mount /mnt/cephfs"))
(stop #~(make-system-constructor "/run/setuid-programs/umount /mnt/cephfs"))
(respawn? #f)))))
;; TODO: run nextcloud docker container as shepherd service
;; TODO: Manually setup basic nextcloud cron on guix host; this should be replaced with configuration as code - THIS DOESN'T ACTUALLY WORK. The manually created crontab is not exected.
;; TODO: add mcron job for nextcloud cron: 'docker exec -t -u www-data nextcloud php --define apc.enable_cli=1 -f /var/www/html/cron.php'
;; TODO: add mcron job for nextcloud preview generation: 'docker exec -t -u www-data nextcloud php occ preview:pre-generate'
(define system
(operating-system
(inherit base-system)
(users (cons*
(user-account
(name "collin")
(comment "Master User")
(group "users")
(shell #~(string-append #$zsh "/bin/zsh"))
(supplementary-groups
'("wheel" "netdev" "audio" "video" "docker"))
(home-directory "/home/collin"))
(operating-system-users base-system)))
(file-systems
(append
(list (file-system
(device "172.16.0.20,172.16.0.21,172.16.0.22:/file-vault/nextcloud")
(options "rw,relatime,name=file-vault-nextcloud,secretfile=/etc/ceph/ceph.client.file-vault-nextcloud.key,acl")
;; Filesystem cannot be mounted as its not a real device; instead a shepherd service is used to mount the file-system
(mount? #f)
(create-mount-point? #t)
(mount-point "/mnt/cephfs")
(type "ceph")))
(operating-system-file-systems base-system)))
(packages
(append
(map specification->package
'("ceph"))
(operating-system-packages base-system)))
(services
(append
(list (service docker-service-type)
cephfs-service)
%proxmox-vm-lvm-minimal-services))))