operating-systems: buer: Move to impermanence setup

main
Luis Guilherme Coelho 2024-11-03 05:43:37 +01:00
parent 322e24af31
commit b4a4daa914
No known key found for this signature in database
GPG Key ID: 1F2E76ACE3F531C8
2 changed files with 148 additions and 104 deletions

View File

@ -75,6 +75,8 @@
#:prefix channel:) #:prefix channel:)
#|F|# #:use-module ((buer files) #|F|# #:use-module ((buer files)
#:prefix file:) #:prefix file:)
#|F|# #:use-module ((buer file-systems)
#:prefix file-system:)
#|P|# #:use-module ((buer privilege) #|P|# #:use-module ((buer privilege)
#:prefix privileged-programs:) #:prefix privileged-programs:)
#|R|# #:use-module ((buer rules) #|R|# #:use-module ((buer rules)
@ -104,7 +106,7 @@
(bootloader (bootloader
(bootloader-configuration (bootloader-configuration
(bootloader grub-bootloader) (bootloader grub-bootloader)
(targets `("/dev/sda")) (targets `("/dev/disk/by-id/wwn-0x50026b7785a0a591"))
(theme (grub-theme (theme (grub-theme
(color-normal (color-normal
'((fg . light-gray) (bg . black))) '((fg . light-gray) (bg . black)))
@ -124,15 +126,8 @@
%kicksecure-kernel-arguments))) %kicksecure-kernel-arguments)))
(file-systems (file-systems
(cons* (file-system (append file-system:volumes
(device (file-system-label "guix-root")) file-system:persistent-directories))
(mount-point "/")
(type "ext4"))
(file-system
(device (file-system-label "home"))
(mount-point "/home")
(type "ext4"))
%base-file-systems))
(users (users
(cons* user:radio (cons* user:radio
@ -309,6 +304,11 @@
(service special-files-service-type (service special-files-service-type
`(("/bin/sh" ,(file-append bash "/bin/bash")) `(("/bin/sh" ,(file-append bash "/bin/bash"))
("/usr/bin/env" ,(file-append coreutils "/bin/env")))) ("/usr/bin/env" ,(file-append coreutils "/bin/env"))))
(simple-service 'persistent-files-service
special-files-service-type
(map (juxt identity
(partial string-append "/gnu/persist/"))
file-system:persistent-files))
#|Sysctl services|# #|Sysctl services|#
(simple-service 'extra-sysctl-settings sysctl-service-type (simple-service 'extra-sysctl-settings sysctl-service-type

View File

@ -1,104 +1,148 @@
;; based on https://codeberg.org/squishypinkelephant/guix-random-junk
;; how to guix: / as tmpfs
;; /var/guix is REQUIRED to perform rollbacks
;; create the folders /gnu/persist/etc/ssh /gnu/persist/etc/wireguard and
;; the file /gnu/persist/etc/machine-id for dbus
(define-module (buer file-systems) (define-module (buer file-systems)
#:use-module (gnu system file-systems) #:use-module (gnu system file-systems)
#:export (rootfs #:export (partition:guix
bootfs persistent-directories
file-systems)) persistent-files
volumes))
;;; reminder: Send a patch to guix to make file-system-options and ;;; reminder: Send a patch to guix to make file-system-options and
;;; privileged-program-capabitilities receive a list-of-strings ;;; privileged-program-capabitilities receive a list-of-strings
(define rootfs (define partition:guix
(file-system (file-system-label "guix"))
(device (file-system-label "root"))
(mount-point "/")
(type "tmpfs")
(options "mode=755")))
(define bootfs (define volumes
(file-system (list #|base|#
(device (file-system-label "root") %immutable-store
(type "btrfs") %pseudo-terminal-file-system
(mount-point "/boot") %shared-memory-file-system
(dependencies (list rootfs))
(flags '(no-atime))
(options (format #f "compress=zstd:7,~
discard=async,~
ssd,~
subvol=@boot")))))
(define file-systems #|boot|#
(cons* rootfs (file-system
;; /gnu/store (device partition:guix)
(type "btrfs")
(mount-point "/boot")
(check? #f)
(needed-for-boot? #t)
(flags '(no-atime))
(options (format #f "subvol=@boot,~
discard=async,~
ssd")))
#|run|#
(file-system
(device "none")
(type "tmpfs")
(mount-point "/run")
(check? #f)
(needed-for-boot? #t)
(options "mode=0755"))
#|tmp|#
(file-system
(device "none")
(type "tmpfs")
(mount-point "/tmp")
(check? #f)
(needed-for-boot? #f))
#|root|#
(file-system
(device "none")
(type "tmpfs")
(mount-point "/")
(check? #f)
(needed-for-boot? #t)
(options "mode=0755"))
#|gnu|#
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/gnu/persist")
(needed-for-boot? #t)
(flags '(no-atime))
(options (format #f "subvol=@gnu/persist,~
ssd")))
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/gnu/store")
(needed-for-boot? #t)
(flags '(no-atime))
(options (format #f "compress=zstd,~
subvol=@gnu/store,~
ssd")))
#|var|#
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/var/guix")
(needed-for-boot? #t)
(flags '(no-atime))
(options (format #f "compress=zstd,~
subvol=@var/guix,~
ssd")))
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/var/lib")
(needed-for-boot? #t)
(flags '(no-atime))
(options (format #f "compress=zstd,~
subvol=@var/lib,~
ssd")))
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/var/log")
(check? #f)
(needed-for-boot? #t)
(flags '(no-atime))
(options (format #f "compress=zstd,~
subvol=@var/log,~
ssd")))
(file-system
(device "none")
(type "tmpfs")
(mount-point "/var/run")
(check? #f)
(needed-for-boot? #t)
(options "mode=0755"))
#|home|#
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/root")
(flags '(no-atime))
(options (format #f "subvol=@root,~
discard=async,~
ssd")))
(file-system
(device partition:guix)
(type "btrfs")
(mount-point "/home")
(flags '(no-atime))
(options (format #f "subvol=@home,~
discard=async,~
ssd")))))
(define persistent-directories
(map (lambda (filename)
(file-system (file-system
(device (file-system-label "root")) (mount-point filename)
(type "btrfs") (device (string-append "/gnu/persist" mount-point))
(mount-point "/gnu/store") (type "none")
(needed-for-boot? #t) (flags '(no-atime bind-mount))))
(dependencies (list rootfs)) `("/mnt"
(flags '(read-only bind-mount no-atime)) "/etc/guix"
(options (format #f "compress=zstd:7,~ "/etc/ssh"
discard=async,~ "/etc/wireguard")))
ssd,~
subvol=@gnu/store"))) (define persistent-files
;; /gnu/persist (list "/etc/config.scm"
(file-system "/etc/machine-id"
(device (file-system-label "root")) "/etc/wpa-supplicant.conf"))
(type "btrfs")
(mount-point "/gnu/persist")
(needed-for-boot? #t)
(dependencies (list rootfs))
(flags '(no-atime bind-mount))
(options (format #f "discard=async,~
ssd,~
subvol=@gnu/persist")))
;; /home
(file-system
(device (file-system-label "root"))
(type "btrfs")
(mount-point "/home")
(dependencies (list rootfs))
(flags '(no-atime bind-mount))
(options (format #f "compress=zstd:7,~
discard=async,~
ssd,~
subvol=@home")))
;; /var/guix
(file-system
(device (file-system-label "root"))
(type "btrfs")
(mount-point "/var/guix")
(dependencies (list rootfs))
(flags '(no-atime))
(options (format #f "compress=zstd:7,~
discard=async,~
ssd,~
subvol=@var/guix")))
;; /var/log
(file-system
(device (file-system-label "root"))
(type "btrfs")
(mount-point "/var/log")
(dependencies (list rootfs))
(flags '(no-atime))
(options (format #f "compress=zstd:7,~
discard=async,~
ssd,~
subvol=@var/log")))
;; /boot
bootfs
(file-system
(device (file-system-label "esp"))
(type "vfat")
(dependencies (list bootfs))
(mount-point "/boot/efi")
(create-mount-point? #t))
%base-file-systems))