all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Efraim Flashner <efraim@flashner.co.il>
To: "Wicki Gabriel (wicg)" <wicg@zhaw.ch>
Cc: "help-guix@gnu.org" <help-guix@gnu.org>
Subject: Re: Resize Filesystem Service
Date: Thu, 7 Dec 2023 12:14:31 +0200	[thread overview]
Message-ID: <ZXGbB-cFGnVXL1bx@3900XT> (raw)
In-Reply-To: <ZR0P278MB02687E7048271DE4B2C0918DC18BA@ZR0P278MB0268.CHEP278.PROD.OUTLOOK.COM>

[-- Attachment #1: Type: text/plain, Size: 5448 bytes --]

On Thu, Dec 07, 2023 at 09:25:43AM +0000, Wicki Gabriel (wicg) wrote:
> Hi
> 
> Thanks for the input, Felix.  I finally managed to get it to work (with additional input from ludo).  I attach the service to this mail.  If people think this might be a nice-to-have in upstream guix i'll happily craft a patch.
> 
> g
> ________________________________
> From: Felix Lechner <felix.lechner@lease-up.com>
> Sent: Monday, December 4, 2023 9:18 PM
> To: Wicki Gabriel (wicg) <wicg@zhaw.ch>; help-guix@gnu.org <help-guix@gnu.org>
> Subject: Re: Resize Filesystem Service
> 
> Hi Gabriel,
> 
> On Mon, Dec 04 2023, Wicki Gabriel wrote:
> 
> > I crafted the service in the file attached but this doesn't work and i
> > neither know where to look nor how to debug the issue.
> 
> Writing services is probably more complex than it should be, but it can
> be done.
> 
> Please have a look at the cachefilesd-service [1] which I wrote together
> with Bruno Victal (mirai) and which was accepted, or the Heimdal
> Kerberos services that are still waiting for review. [2]
> 
> My most immediate suggestion is that I would use define-configuration
> even when no serialization (which helps write configuration files) is
> needed. Also, you have to think carefully about where to place the
> G-Expressions, which can be tough to wrap your mind arround. Finally, I
> would use "file-append" instead of string-append for some of the
> configurable executable paths.
> 
> Kind regards
> Felix
> 
> [1] https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/services/linux.scm#n492
> [2] https://issues.guix.gnu.org/67555

> (define-module (services resize-fs)
>   #:use-module (guix gexp)
>   #:use-module (guix records)
>   #:use-module (gnu packages bash)
>   #:use-module (gnu packages disk) ; parted
>   #:use-module (gnu packages linux); e2fsprogs
>   #:use-module (guix build utils)
>   #:use-module (guix packages)
>   #:use-module (gnu services)
>   #:use-module (gnu services configuration)
>   #:use-module (gnu services shepherd)
>   #:export (resize-fs-configuration
>             resize-fs-configuration?
>             resize-fs-configuration-parted
>             resize-fs-configuration-e2fsprogs
>             resize-fs-configuration-device
>             resize-fs-configuration-partition
>             resize-fs-configuration-end
>             resize-fs-service-type))
> 
> (define-configuration/no-serialization resize-fs-configuration
>   (parted
>    (file-like parted)
>    "The parted package to use.")
>   (e2fsprogs
>    (file-like e2fsprogs)
>    "The e2fsprogs package providing the resize2fs utility.")
>   (device
>    (string "/dev/mmcblk0") ;; #f may be preferrable here to prevent accidental resizing of wrong file-system
>    "The device containing the partition to be resized.")
>   (partition
>    (number 2)
>    "The partition number that is to be resized.")
>   (end
>    (string "100%")
>    "The end position of the resized partition as understood by the parted \
>   utility (e.g. \"100%\", \"500M\" or \"16GiB\")."))
> 
> (define (resize-fs-script config)
>   (match-record
>       config <resize-fs-configuration> (parted e2fsprogs device partition end)
>     (let ((parted-bin (file-append parted "/sbin/parted"))
>           (resize2fs  (file-append e2fsprogs "/sbin/resize2fs"))
>           (device+partition (string-append device "p" (number->string partition))))
>       (mixed-text-file "resize-fs.sh"
>                        "#!/bin/sh
> echoerr() { printf \"$*\\n\" >&2 ; }
> 
> cmd() {
>     " parted-bin " " device " ---pretend-input-tty <<EOF && " resize2fs " " device+partition "
> resizepart
> " (number->string partition) "
> Yes
> " end "
> EOF
> }
> 
> set -o errexit
> set -o pipefail
> 
> echoerr hello from resize-fs script
> 
> if cmd; then
>   echoerr \"Resizing successful\"
> else
>   echoerr \"resize-script returned $?\"
> fi
> "))))
> 
> (define (resize-fs-shepherd-service config)
>   "Return a list of <shepherd-service> for resize-fs-service for CONFIG"
>   (let ((resize-script (resize-fs-script config)))
>     (shepherd-service
>      (documentation "Resize a file-system.  Intended for Guix Systems that are booted from an image")
>      (provision '(resize-fs))
>      (requirement '(user-processes))
>      (one-shot? #t)
>      (respawn? #f)
>      (start #~(make-forkexec-constructor
>                (list #$(file-append bash "/bin/sh") #$resize-script))))))
> 
> (define resize-fs-service-type
>   (service-type
>    (name 'resize-fs)
>    (description "Resize a partition.")
>    (extensions
>     (list
>      (service-extension shepherd-root-service-type
>                         (compose list resize-fs-shepherd-service))))
>    (default-value (resize-fs-configuration))))

I think it would be helpful to have upstream. I'm guessing it would be
useful not just on single board computers but also on VPSs and probably
other use cases.

Not directly related to upstreaming this service, this seems like a
useful service to offer for an 'on first boot' service, or as some sort
of special service to be loaded with 'sudo herd load root'.

-- 
Efraim Flashner   <efraim@flashner.co.il>   רנשלפ םירפא
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2023-12-07 10:15 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-04 15:33 Resize Filesystem Service Wicki Gabriel (wicg)
2023-12-04 20:18 ` Felix Lechner via
2023-12-07  9:25   ` Wicki Gabriel (wicg)
2023-12-07 10:14     ` Efraim Flashner [this message]
2023-12-10 17:03       ` Csepp
2023-12-12  9:46         ` Wicki Gabriel (wicg)
2023-12-12  9:46           ` Wicki Gabriel (wicg)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZXGbB-cFGnVXL1bx@3900XT \
    --to=efraim@flashner.co.il \
    --cc=help-guix@gnu.org \
    --cc=wicg@zhaw.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.