Subject: bug#37347: 'guix environment' fails after trying to follow the steps from "Running Guix Before It Is Installed" page

From: Jesse Gibbons <[email-masked]>
Date: Sun, 08 Sep 2019 19:14:05 -0600

On Mon, 2019-09-09 at 02:49 +0200, Jan wrote:
> Hi, I'm a new Guix user and I wanted to hack on Guix and update a
> package, I hadn't known exactly how to do this, so I started
> following
> instructions from
> https://guix.gnu.org/manual/en/html_node/Running-Guix-Before-It-Is-In
> stalled.html#Running-Guix-Before-It-Is-Installed
> and
> https://guix.gnu.org/blog/2018/a-packaging-tutorial-for-guix/
> 
> The situation started to be interesting, when the tutorial told me to
> run "cd $GUIX_CHECKOUT" and "./pre-inst-env guix package
> --list-available=ruby"
> I was confused, because I couldn't find any "./pre-inst-env" file, so
> I
> used 'find' to search for it and there were one file with a similar
> name
> in $GUIX_CHECKOUT/build-aux - ./pre-inst-env.in (as I'm composing
> this
> email now I see that's stupid, but I tried using this file, as I
> don't
> know what I was doing (still don't know))
> So I started running the following stupid commands:
> 
> ----------------
> user@machine ~/Prog/repo/guix [env]$ sudo -E ./pre-inst-env.in
> guix-daemon --build-users-group=guixbuild
> 
> sudo: /gnu/store/z26h622slm8p61myhk45v3jjg8p7qm8z-profile/bin/sudo
> must
> be owned by uid 0 and have the setuid bit set 
> 
> user@machine ~/Prog/repo/guix [env]$ ./pre-inst-env.in
> bash: ./pre-inst-env.in: No such file or directory 
> user@machine ~/Prog/repo/guix [env]$ cd build-aux/ 
> user@machine ~/Prog/repo/guix/build-aux [env]$ sudo
> -E ./pre-inst-env.in guix-daemon --build-users-group=guixbuild
> sudo: /gnu/store/z26h622slm8p61myhk45v3jjg8p7qm8z-profile/bin/sudo
> must
> be owned by uid 0 and have the setuid bit set 
> user@machine ~/Prog/repo/guix/build-aux [env]$ exit
> ---------------
> 
> And then:
> 
> ------------------
> user@machine ~/Prog/repo/guix/build-aux$ chmod +x ./pre-inst-env.in 
> user@machine ~/Prog/repo/guix/build-aux$ sudo -E ./pre-inst-env.in
> guix-daemon --build-users-group=guixbuild Password: 
> ./pre-inst-env.in: line 33: cd: @abs_top_srcdir@:
> there is no such file or directory 
> ./pre-inst-env.in: line 34: cd:
> @abs_top_builddir@: there is no such file or directory
> --------------------
> 
> And after that I couldn't run "guix
> environment" anymore, it threw an error:
> 
> guix environment: error: failed to connect to
> `/var/guix/daemon-socket/socket': Connection refused
> 
> Restarting the computer helps, but doing the same stuff breaks it
> again, so guess it's reproducible.
> 
> After doing it I ran the "history" command so you can know what I did
> exactly (some commands were unfortunately run in an environment and I
> can't provide them), here it is:
> 
>   371  git clone --recurse-submodules
>   git://git.savannah.gnu.org/guix.git 
>   372  guix environment guix --pure
>   373  sudo -E
>   374  sudo --help
>   375  guix environment guix --pure
>   376  guix environment guix --pure --ad-hoc sudo 
>   377  ls
>   378  cd guix/
>   379  ls
>   380  cd build-aux/
>   381  ls
>   382  .
>   383  guix environment guix --pure
>   384  chmod +x ./pre-inst-env.in 
>   385  sudo -E ./pre-inst-env.in guix-daemon
>   --build-users-group=guixbuild 
>   386  ls
>   387  cd ..
>   388  ./configure 
>   389  guix environment guix --pure
>   390  history
> 
> As stupid and complicated as it is, something is definitely broken
> here.
> 
> Sincerely,
> Jan Wielkiewicz
> 
> 
> 

pre-inst-env.in is for generating the pre-inst-env script. Have you
tried:
./bootstrap
./configure

This should generate pre-inst-env for you.

Also, make sure the guix daemon is running after you restart.