Subject: bug#22588: root: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

From: Mark H Weaver <[email-masked]>
Date: Mon, 08 Feb 2016 12:52:49 -0500

[email-masked] (Ludovic Courtès) writes:

> Mark H Weaver <[email-masked]> skribis:
>
>> [email-masked] (Ludovic Courtès) writes:
>
> [...]
>
>>> 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.)
>>
>> I'm not sure it would help much without also adding 'coreutils'.
>
> Good point.
>
>>> Another idea that comes to mind: what about providing a “shell” language
>>> in Guile?  It would automatically tokenize what the user types in and
>>> convert it to (system* …), plus it would have a few built-in commands
>>> like ‘cd’ and ‘ls’.
>>
>> I like the idea of having something like this in Guile, but I'm not sure
>> we should rush to implement a half-baked solution.
>
> OTOH, hacking it is very tempting, like:
>
> scheme@(guile-user)> ,use (guix build bournish)
> scheme@(guile-user)> ,bournish
> Happy hacking with Bournish!  To switch back, type `,L scheme'.
> bournish@(guile-user)> ls
> .                         gnu-dist.go               r-build-system.go         
> ..                        gnu-dist.scm              r-build-system.scm        
> activation.scm~           gnu-dist.scm~             relocate.scm~             
> bournish.scm              gnu.scm~                  rpath.go                  
> bournish.scm~             graft.go                  rpath.scm                 
> cmake-build-system.go     graft.scm                 rpath.scm~                
> cmake-build-system.scm    graft.scm~                ruby-build-system.go      
> cvs.go                    graft.scm.115             ruby-build-system.scm     
> cvs.scm                   graft.scm.bak             ruby-build-system.scm.orig
> download.go               gremlin.go                ruby-build-system.scm.rej 
> download.scm              gremlin.scm               store-copy.go             
> download.scm~             gremlin.scm~              store-copy.scm            
> download.scm.bak          haskell-build-system.go   store-copy.scm~           
> emacs-build-system.go     haskell-build-system.scm  svn.go                    
> emacs-build-system.scm    http.scm~                 svn.scm                   
> emacs-utils.go            install.scm~              syscalls.go               
> emacs-utils.scm           linux-initrd.scm~         syscalls.scm              
> ftp.scm~                  perl-build-system.go      syscalls.scm~             
> git.go                    perl-build-system.scm     union.go                  
> git.scm                   perl-build-system.scm~    union.scm                 
> git.scm~                  profile.go                union.scm~                
> glib-or-gtk-build-system.gprofile.scm~              url.scm~                  
> glib-or-gtk-build-system.sprofiles.go               utils.go                  
> gnome-build-system.scm    profiles.scm              utils.scm                 
> gnome-build-system.scm~   profiles.scm~             utils.scm~                
> gnu-build-system.go       pull.go                   vm.scm~                   
> gnu-build-system.scm      pull.scm                  waf-build-system.go       
> gnu-build-system.scm~     pull.scm~                 waf-build-system.scm      
> gnu-build-system.scm.bak  python-build-system.go                              
> gnu-cross-build.scm~      python-build-system.scm                             
> bournish@(guile-user)> cd /
> bournish@(guile-user)> pwd
> $2 = "/"
> bournish@(guile-user)> echo $PATH $LANGUAGE
> $3 = ("/home/ludo/soft/bin:/home/ludo/.opam/system/bin:/home/ludo/.guix-profile/bin:/home/ludo/.guix-profile/sbin:/run/setuid-programs:/run/current-system/profile/bin:/run/current-system/profile/sbin" "eo")
> bournish@(guile-user)> touch --version
> touch (GNU coreutils) 8.24
> Copyright © 2015 Free Software Foundation, Inc.
> Ĉi tiu estas libera programaro: vi rajtas ĝin ŝanĝi kaj redistribui.
> La ĝusta permesilo estas GPLv3+: GNU GPL versio 3 aŭ sekva;
> por la kompleta (angla) teksto vidu <http://gnu.org/licenses/gpl.html>.
> Ĉi tiu programaro ne garantiatas, ene de la limoj de la leĝo.
>
> Verkita de Paul Rubin, Arnold Robbins, Jim Kingdon,
> David MacKenzie kaj Randy Smith.
> $4 = 0
> bournish@(guile-user)> ,L scheme
> Happy hacking with Scheme!  To switch back, type `,L bournish'.
>
> :-)
>
> The point is, if we can allow users to avoid typing in parentheses and
> long procedure names and quoted argument lists when all they want is to
> run fsck, we should do that.
>
>> When we have something decent along the lines of Scsh, then
>> definitely!
>
> Scsh makes it super easy to deal with Unix processes, redirections, and
> all that (it would be awesome to use it on the build side), but AFAIK it
> doesn’t try to provide a Bourne-like interface, which is what we need
> here.
>
> So, WDYT?  :-)

Okay, I must admit that's a pretty great little hack, and a nice demo of
how easy it is to hack something together like this in Guile.

Let's do it :)

     Mark