Mark H Weaver <m...@netris.org> skribis: > I've been bitten by this once before, and a user on #guix did as well. > When there are problems in the root filesystem that fsck doesn't want to > fix automatically, the user is dumped into a guile prompt where PATH is > not set, and it's very inconvenient to run fsck manually.
AFAICS, ‘PATH’ is set in ‘base-initrd’ in (gnu system linux-initrd), and ‘check-file-system’ in (gnu build file-systems) indeed expects it to be set. > This is what I just suggested that the user type, with apologies: > > (use-modules (ice-9 ftw) (srfi srfi-26)) > (define dirs (scandir "/gnu/store" (cut string-suffix? "e2fsprogs-1.42.13" > <>))) > (define e2fsck (string-append "/gnu/store/" (car dirs) "/sbin/e2fsck")) > (system* e2fsck "/dev/XXX") > > Is there a better way? I think one can run: (system* "fsck.ext4" "/foo/bar") What about changing the message to explicitly mention this command? > Speaking from personal experience, it's very painful to do anything > non-trivial in that REPL. Even just adding readline would help a lot. The statically-linked Guile in the initrd lacks Readline support. We could maybe work around that, but the initrd would become much larger. > Maybe we should at least set PATH to include the available /bin and > /sbin directories before entering the REPL. Done, AFAICS. > We should probably also handle errors from fsck specially. Currently there’s no Bash in the initrd. Should we add one? Our ‘bash-static’ package takes 1.4 MiB (I don’t think we can make it smaller.) Thanks, Ludo’.