Subject: Re: bug#22607: doc install from *Guix Package Info: profile* fails

From: myglc2 <[email-masked]>
Date: Tue, 09 Feb 2016 19:58:55 -0500

Alex Kost <[email-masked]> writes:

> myglc2 (2016-02-09 19:49 +0300) wrote:
>
>> Running: guixSD.
>>
>> Scenario: Finding and installing doc for a package (ncurses) used by a
>> by a global package (emacs) I hit the following error.
>
> A-a-a! What you tried is more or less the equivalent of:
>
>   guix package -i foo --profile=/run/current-system/profile

No, I was not trying to do that. I expected your _doc_ button to do ...

guix package -i <ncurses-6.0 doc>.

That is supported, isn't it?

> A system is "composed" during "guix system" command, and it is
> immutable, so you can't install packages to an existing system.
>
> The only proper way to install packages globally is by adding them to
> your system config.scm and running "guix system reconfigure".
>
> You shouldn't (!) try to install packages in a system profile in any
> other way.

I know. I was not trying to.

> [...]
>> user
>> ====
> [...]
>> guix/utils.scm:607:4: In procedure switch-symlinks:
>> guix/utils.scm:607:4: In procedure symlink: Read-only file system: "/var/guix/profiles/system-31-link/profile-1-link.new"
>
> Unsurprisingly, a user don't have rights to change /var/guix/...
>
> [...]
>> root
>> ====
>
> You are brave!  I wouldn't try to run Emacs as root and do some unknown
> actions.

Not brave. As I understand your doc, the root user can install packages
in a root profile. So, I expected your _doc_ button to do ...

guix package -i <ncurses-6.0 doc>

... for root. That is supported, isn't it it?

I only tried it on root because I thought not work for uer was a gut. I
expected it to work for root.

>> scheme@(guile-user)> (process-package-actions "/var/guix/profiles/system-32-link/profile" #:install '((32467968 "doc")) #:upgrade '() #:remove '() #:use-substitutes? #t #:dry-run? #f)
>> The process begins ...
>> The following package will be installed:
>>    ncurses:doc	6.0	/gnu/store/wng6fsgiiqi0rcc4p9655ga4b2j5jk53-ncurses-6.0-doc
>>
>> substitute: updating list of substitutes from 'http://hydra.gnu.org'... 100.0%
>> The following derivations will be built:
>>    /gnu/store/kdpgj81d7fi6pxzv0c43kwr9swzimixa-profile.drv
>>    /gnu/store/s0f0f0y32kjk9km8ki5i5hy6rlhwlxcx-gtk-icon-themes.drv
>>    /gnu/store/himj3dxych8xw300c1dkmyn8kyczry57-ca-certificate-bundle.drv
>>    /gnu/store/bdzjjck73nz1xb8m5f0cj0zzb1cplxg7-info-dir.drv
>> guix/utils.scm:607:4: In procedure switch-symlinks:
>> guix/utils.scm:607:4: In procedure symlink: Read-only file system: "/var/guix/profiles/system-32-link/profile-1-link.new"
>
> Thanks God /gnu/store on GuixSD is read-only even for root!
>
> A system is not just a set of packages.  Look at any
> "/var/guix/profiles/system-XX-link" file.  It is a symlink to the store.
> "profile" (which contains the installed packages) is only one of its
> subdirectories.  What you tried led to an attempt of making a new
> generation of this "profile" directory, and happily in failed even for
> root.
>
> Why do you install everything globally?

Well, let me count the reasons...

1) because that is the first thing you showed me how to do as I was
installing from USB

2) because that is what people who own and/or administer servers need
and/or expect to do

3) because this is how the Debian 8 servers that I want to convert to
guixSD are configured, and I want to see, as a start, a replication of
that situation

4) Because I have multiple accounts for various things that need to
share a base set of packages

5) Because you can't call guixSD a real distribution if it doesn't
support this mode of use

6) Because I am trying to help you test guixSD

7) Because if guixSD does not support this well I can't pitch a trial
deployment at my workplace

But, no, NOT because I am trying to make you CRAZY.

Also, just to be clear, I was not trying to install the curses.6 doc
globally. I was trying to install it locally as 1) user, and when that
failed as 2) root.

> IMO it is much more convenient
> to manage a user profile (no root involved, no "system reconfigure" all
> the time).

Yes and I was trying to use that guix feature to to add doc for a
package to my user profile.

> Really, it is a big feature of Guix to be able to install packages
> without using root rights.  Of course it's your choice, but I highly
> recommend to install your packages in ~/.guix-profile.  The only global
> packages I added to %base-packages are: 'nss-certs' and 'iproute'.

I understand why guix developers and packagers run this way and I
understand the attraction. I have other use cases where this approach
more closely apply. However, if you want to get other people that are
not guix developers or packagers to adopt guix and guixSD, you need to
support users are not so agile, or just want to user guixSD as a
distrubtion.

Recap: these are both bugs not operator error.