(define-module (resize-fs) #:use-module (gnu packages disk) #:use-module (gnu packages linux) #:use-module (guix build utils) #:use-module (guix packages) #:use-module (gnu services) #:use-module (guix gexp) #:use-module (guix records) #:use-module (gnu services shepherd)) (define (resize-fs-service config) (use-modules (guix gexp)) (define parted #$(string-append (or (resize-fs-configuration-parted config) parted) "/sbin/parted")) (define resize2fs #$(string-append (or (resize-fs-configuration-e2fsprogs config) e2fsprogs) "/sbin/resize2fs")) (define size #$(resize-fs-configuration-size config)) (define device #$(resize-fs-configuration-device config)) (define partition #$(resize-fs-configuration-partition config)) (define device+partition (string-append device "p" partition)) (shepherd-service (documentation "Resize a file-system. Intended for Guix Systems that are booted from an image") (provision '(resize-fs)) (one-shot? #t) (requirement '()) (start #~(invoke (plain-file "resize_partition.bash" (string-append "#!/bin/sh parted " #$device " ---pretend-input-tty < resize-fs-configuration make-resize-fs-configuration resize-fs-configuration? ;; the utilities doing the job (parted resize-fs-configuraiton-parted (default parted)) (e2fsprogs resize-fs-configuration-e2fsprogs (default e2fsprogs)) ;; path of a device (device resize-fs-configuration-device (default "/dev/mmcblk0")) ; #f may be preferrable here ;; integer (partition resize-fs-configuration-partition (default 2)) ;; size - as understood by parted (size resize-fs-configuration-size (default "100%"))) (define-public resize-fs-service-type (service-type (name 'resize-fs) (extensions (list (service-extension shepherd-root-service-type resize-fs-service))) (description "Resize a partition.") (default-value (resize-fs-configuration))))