Subject: bug#25775: Can't install packages after guix pull

From: Ben Sturmfels <[email-masked]>
Date: Tue, 11 Apr 2017 11:01:04 +1000

On 22/02/17 09:36, Ricardo Wurmus wrote:
> 
> Ben Sturmfels <[email-masked]> writes:
> 
>> On Tue, 21 Feb 2017 09:52:11 +1100
>> Ben Sturmfels <[email-masked]> wrote:
>>
>>>> Could I trouble you to walk through the steps for manually
>>>> installing a different version of guix-daemon? I'm stuck in the
>>>> same situation where I can't `guix package --install`.  
>>>
>>> (Also can't `guix pull` without an error)
>>
>> I'm attempting to fix my GuixSD system by downloading Guix
>> 0.12.0 Binary, extracting and running guix-daemon, then running `guix
>> pull` against that. The daemon runs ok, but `guix pull` is expecting
>> its dependencies to be at /gnu, when they're actually at
>> ~/Downloads/gnu. Any suggestions?
> 
> How did you end up having dependencies outside of /gnu?  All Guix
> packages depend only on things inside the store.  If you want to use
> substitutes you cannot avoid /gnu.

Sorry for the late reply. I had dependencies outside of /gnu
because I was attempting to upgrade guix-daemon without messing with the
nice clean read-only mounted /gnu/store filesystem. Turns out I didn't
use that approach in the end and used "rollback" instead.

I realised that the recovery steps in
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25775#35 were more for
Guix on a foreign distro.

For anyone else on GuixSD who can't `guix pull` or `guix package
--install` due to older guix-daemon mismatched with newer guix installed
for root, here's how I fixed my system:

1. I had a number of system generations available so I rolled back to
one before I ran the problematic "sudo guix pull", with `guix system
list-generations` and `guix system switch-generations`.

2. Ran `sudo guix pull
--url=http://git.savannah.gnu.org/cgit/guix.git/snapshot/afd532337.tar.gz`
to get the last version of guix compatible with older daemons.

3. Ran `sudo guix system reconfigure myconfig.scm`, which upgrades
guix-daemon. Note that `guix package --upgrade` as root doesn't upgrade
guix-daemon on GuixSD. Note also that I ended up reducing the services
in this config to just "%base-services" to avoid hours of unnecessary
compiling, when I really just needed guix-daemon. Ended up having to do
it in a virtual terminal.

4. Reboot and verify that I had an 0.12 version of guix-daemon running.

5. Ran `sudo guix pull` and `sudo guix system reconfigure myconfig2.scm`
to restore my full desktop services and upgrade system infrastructure to
latest version.

6. For good measure, ran `sudo guix pull` and `sudo guix package
--upgrade` to bring root's guix tools up to date (actually had zero
packages installed for root).

7. Ran `guix pull` and `guix package --upgrade` as my normal user to
update that too.

My actual path took a lot more than 7 steps, so I hope I got those
instructions right. ;)

Reinstalling probably would have been faster, but I've learnt a lot more
about how GuixSD works, and it's satisfying and reassuring to be able to
fix things by rolling back!

Regards,
Ben