[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Replication question
From: |
Richard Sent |
Subject: |
Re: Replication question |
Date: |
Tue, 16 Apr 2024 13:47:11 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Hi Mauritz
Mauritz Stenek <mstenek@disroot.org> writes:
> Suppose you have these packages in your environment:
>
> A@old
> B
> C
>
> where `A` is pinned to the `old` version, which is not in the latest
> channel versions -- as per `guix describe`; the latest versions of
> both `B` and `C`, however, are in the latest channel versions but
> *not* in the channel versions where `A@old` is defined.
>
> How, then, is this environment replicable without some hacky
> gymnasitcs?
>
> What am I missing?
Your hunch is corect. Without knowing the Guix commit that the
environment/profile was built with, you would not be able to reproduce
the profile exactly.
There's two options I know of:
1. Guix time-machine. e.g.
guix time-machine --commit=XXX -- package -m manifest.scm
a. This will create a profile containing the exact packages at that
moment in time, including A@old.
b. All packages will be at whatever version the corresponding
Scheme package variable is at for that commit. See (info "(guix)
Invoking guix time-machine"). Probably not the best idea to use
long term.
2. Inferiors. This provides a mechanism for mixing and matching A@old
from commit XXX with packages B and C from commit YYY. See (info "(guix)
Inferiors").
a. To my knowledge this won't replace dependencies for B or C if
they depend on A@old. B and C would use the "primary" channel's A.
You probably could modify B and C to replace A with A@old though.
As you saw, A@old doesn't have any fancy logic for "go back to the most
recent Guix commit that has A@old". It's just a convenient way to
specify which version of package A to install when multiple are
packaged.
--
Take it easy,
Richard Sent
Making my computer weirder one commit at a time.