* How to install previous versions? @ 2020-10-09 17:00 Zelphir Kaltstahl 2020-10-09 16:37 ` zimoun 0 siblings, 1 reply; 6+ messages in thread From: Zelphir Kaltstahl @ 2020-10-09 17:00 UTC (permalink / raw) To: help-guix Hello Guix Users! I have not figured out yet how to install a specific version of a package, that is not the newest available version. For example I do the following: ~~~~ guix environment --ad-hoc 'python-redis@3.3.8' 'python@3.8.2' -- python3.8 ~~~~ I had this version of python-redis in a manifest.scm file. However, there seems to have been an update and now this manifest file cannot be used any longer, as it references an old version. It will tell me the same error as the one-liner above: ~~~~ guix environment: error: python-redis: package not found for version 3.3.8 ~~~~ However, I think that is strange, because I can definitely see, that version does exist on http://data.guix.gnu.org/repository/1/branch/master/package/python-redis. There are now the versions: '(3.5.3 3.3.8 3.2.1 3.2.0 2.10.6) So how would I need to write my manifest.scm or my one-liner to get back to that older version? I would like to have reproducible environments and I think that is also a goal of GNU Guix package manager? Otherwise how could it ever guarantee, that on 2 different machines at 2 different points in time, I can build the same environment? A package could have been updated in between the 2 setups and then the previously latest version would become unavailable. I must be missing something. Best regards, Zelphir ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to install previous versions? 2020-10-09 17:00 How to install previous versions? Zelphir Kaltstahl @ 2020-10-09 16:37 ` zimoun 2020-10-10 15:14 ` Zelphir Kaltstahl 0 siblings, 1 reply; 6+ messages in thread From: zimoun @ 2020-10-09 16:37 UTC (permalink / raw) To: Zelphir Kaltstahl; +Cc: help-guix Hi, On Fri, 9 Oct 2020 at 19:19, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote: > http://data.guix.gnu.org/repository/1/branch/master/package/python-redis. On this web page, you can click on the date: first commit and last commit known to have this version. You can even see the status (build, failed, pending, etc.) on this web page (appending 'output-history') http://data.guix.gnu.org/repository/1/branch/master/package/python-redis/output-history For example, clicking leads to: http://data.guix.gnu.org/revision/f5111b4d2b982d58387188bc3018e4dd2e9a9d4f And this gives you the commit with 'python-redis@3.8', using the command: guix time-machine --commit=f5111b \ -- environment --ad-hoc python-redis python \ -- python > So how would I need to write my manifest.scm or my one-liner to get back > to that older version? The best is to write a manifest file, say manifest.scm containing the package you need: --8<---------------cut here---------------start------------->8--- (specfications->manifest (list "python-redis" "python" "foo" "bar" "etc")) --8<---------------cut here---------------end--------------->8--- The other no-so-said is to track "guix describe", you *should* _track_ the file channels.scm: guix describe -f channels.scm Then later or on another machine, you simply run the command: guix time-machine -C path/to/channels.scm \ -- <subcommand> -m path/to/manifest.scm <options> Hope that helps, simon ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to install previous versions? 2020-10-09 16:37 ` zimoun @ 2020-10-10 15:14 ` Zelphir Kaltstahl 2020-10-10 16:44 ` zimoun 0 siblings, 1 reply; 6+ messages in thread From: Zelphir Kaltstahl @ 2020-10-10 15:14 UTC (permalink / raw) To: zimoun; +Cc: help-guix Hello Zimoun! Thank you for your reply! I have a few follow up questions. On 10/9/20 6:37 PM, zimoun wrote: > Hi, > > On Fri, 9 Oct 2020 at 19:19, Zelphir Kaltstahl > <zelphirkaltstahl@posteo.de> wrote: > >> http://data.guix.gnu.org/repository/1/branch/master/package/python-redis. > On this web page, you can click on the date: first commit and last > commit known to have this version. You can even see the status > (build, failed, pending, etc.) on this web page (appending > 'output-history') > > http://data.guix.gnu.org/repository/1/branch/master/package/python-redis/output-history So far so good, I get until this point. > For example, clicking leads to: > > http://data.guix.gnu.org/revision/f5111b4d2b982d58387188bc3018e4dd2e9a9d4f Here is where I am lost. Where do I need to click? I see a link named `/gnu/store/wlj2bq4g9ki9iz6vqlv366c0v5qmszg7-python-redis-3.3.8`, which seems to be the latest of the python-redis 3.3.8 version, but that one leads me elsewhere, leads me to `http://data.guix.gnu.org/gnu/store/wlj2bq4g9ki9iz6vqlv366c0v5qmszg7-python-redis-3.3.8`. > And this gives you the commit with 'python-redis@3.8', using the command: > > guix time-machine --commit=f5111b \ > -- environment --ad-hoc python-redis python \ > -- python OK, assume I get the commit id. I just tried this with the following command: ~~~~ guix time-machine --commit=f5111b -- environment --ad-hoc 'python-redis@3.3.8' 'python@3.8' -- python3.8 ~~~~ That runs for a quite while and then I get: ~~~~ Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'... guile: warning: failed to install locale guix environment: error: python: package not found for version 3.8.2 ~~~~ My guess is, that in this commit of Guix there was no Python 3.8.2 yet? Or perhaps `python-redis` was not build for that Python version? I do not have a specific use-case at this moment, but I would like to know how to get those specific versions, the same every single time I run the command. To compare, when I create a virtual environment using: ~~~~ python3 -m venv venv source venv/bin/activate pip install --requirement requirements.txt ~~~~ I can write the version of python-redis in my requirements.txt file and it will install just fine. That means, that is it compatible, so it's not a compatibility issue of python@3.8.2 and python-redis@3.3.8. However, those virtual environments are not reproducible, as there are no hashes stored or anything and everything relies on version numbers only. If anyone changed the code behind a version number, it would install different code. It would be cooler to have it in Guix and reproducible. >> So how would I need to write my manifest.scm or my one-liner to get back >> to that older version? > The best is to write a manifest file, say manifest.scm containing the > package you need: > > --8<---------------cut here---------------start------------->8--- > (specfications->manifest > (list > "python-redis" > "python" > "foo" > "bar" > "etc")) > --8<---------------cut here---------------end--------------->8--- But that is, what I already have, isn't it? There is no part in this, that indicates `guix time-machine`. If time-machine is necessary to get the older version of python-redis@3.3.8 in the command line, then there must be something I need to write in the manifest.scm file to let Guix know, that I want a specific commit id. Or perhaps this is not possible with a manifest? Or is the idea, that I need to have a tracked channel as well to achieve it? > The other no-so-said is to track "guix describe", you *should* _track_ > the file channels.scm: > > guix describe -f channels.scm OK this is probably the part, where I need to read the docs about it. I do not have a channels.scm and I do not know what does in there. I only have a vague idea about channels in my head. > > Then later or on another machine, you simply run the command: > > guix time-machine -C path/to/channels.scm \ > -- <subcommand> -m path/to/manifest.scm <options> If I understand this correctly, a manifest with specific versions can only be guaranteed to work, if I track a channel as well. And somehow in that channel definition, I must specify which commit of Guix I am on? But wouldn't that limit my choice of libraries to what was available in one commit? > Hope that helps, > simon Thanks for all that info. There are still many things unclear to me, but I hope to gain an understanding of those as well : ) Best regards, Zelphir -- repositories: https://notabug.org/ZelphirKaltstahl ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to install previous versions? 2020-10-10 15:14 ` Zelphir Kaltstahl @ 2020-10-10 16:44 ` zimoun 2020-10-12 13:58 ` Zelphir Kaltstahl 0 siblings, 1 reply; 6+ messages in thread From: zimoun @ 2020-10-10 16:44 UTC (permalink / raw) To: Zelphir Kaltstahl; +Cc: help-guix Dear, On Sat, 10 Oct 2020 at 17:15, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote: > For example, clicking leads to: > > http://data.guix.gnu.org/revision/f5111b4d2b982d58387188bc3018e4dd2e9a9d4f > > Here is where I am lost. Where do I need to click? Click on one date. The row is: Version Output Builds From To and From mean the date of the first commit where the package is at the version Version. To is the date of the last commit. > And this gives you the commit with 'python-redis@3.8', using the command: > > guix time-machine --commit=f5111b \ > -- environment --ad-hoc python-redis python \ > -- python > > OK, assume I get the commit id. > > I just tried this with the following command: > > ~~~~ > guix time-machine --commit=f5111b -- environment --ad-hoc 'python-redis@3.3.8' 'python@3.8' -- python3.8 > ~~~~ Remove the '@X.Y'. It does not make sense since it is somehow already included by the specification of the commit. > My guess is, that in this commit of Guix there was no Python 3.8.2 yet? Or perhaps `python-redis` was not build for that Python version? The "guix time-machine" gives you the exact same Guix as it was at the commit specification. Therefore, since the commit f5111b provides the version of python-redis you want, all the others do matter. > I do not have a specific use-case at this moment, but I would like to know how to get those specific versions, the same every single time I run the command. To compare, when I create a virtual environment using: As I have tried to explain. :-) In your project directory, you have to add 2 files about Guix: guix describe -f channels > channels.scm and the manifest.scm file containing the list of packages the project requires. Then at any point in time, you can always do: guix time-machine -C channels.scm -- <subcommand> -m manifest <options> > ~~~~ > python3 -m venv venv > source venv/bin/activate > pip install --requirement requirements.txt > ~~~~ The issue with this approach is that somehow you need a SAT solver. But that's another story. ;-) With Guix, AFAICT, the similar is: - channels.scm which specifies a Guix version and so packages versions - manifest.scm which specifies the list of packages. > But that is, what I already have, isn't it? There is no part in this, that indicates `guix time-machine`. If time-machine is necessary to get the older version of python-redis@3.3.8 in the command line, then there must be something I need to write in the manifest.scm file to let Guix know, that I want a specific commit id. Or perhaps this is not possible with a manifest? Or is the idea, that I need to have a tracked channel as well to achieve it? It is possible with the manifest but AFAIU it is a bit tricky and you should write some Scheme. The easiest is using a channels.scm file. See above. > The other no-so-said is to track "guix describe", you *should* _track_ > the file channels.scm: > > guix describe -f channels.scm > > OK this is probably the part, where I need to read the docs about it. I do not have a channels.scm and I do not know what does in there. I only have a vague idea about channels in my head. Maybe with the output is easier to get the point. :-) --8<---------------cut here---------------start------------->8--- $ guix describe -f channels (list (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit "a0d4aa2457d7e36012143ffe3fbc9dd4bc20ca4f") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" (openpgp-fingerprint "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) --8<---------------cut here---------------end--------------->8--- Basically, I have only one channel which is the official GNU Guix "%default-channels". The important information here are: - url: from where it fetch - commit: which checkout uses Therefore, "guix time-machine -C the/channel./file.scm -- help" will fetch from url and restore at the commit. The other parts are important too. ;-) But not for your question. :-) Well, basically you can even drop them and it will be fine. So yes, please go read the channel section. It has recently been reordered to be more "understandable". Feedback is very welcome. :-) > Then later or on another machine, you simply run the command: > > guix time-machine -C path/to/channels.scm \ > -- <subcommand> -m path/to/manifest.scm <options> > > If I understand this correctly, a manifest with specific versions can only be guaranteed to work, if I track a channel as well. And somehow in that channel definition, I must specify which commit of Guix I am on? But wouldn't that limit my choice of libraries to what was available in one commit? Yes, the same way the choice of libraries is limited at each commit state. :-) It is possible to mix libraries from different commits but the UI is not as easy as it should be. For example, imagine you are doing: guix pull guix install -m foo.scm /tmp/A [...] # time flies guix pull guix install -m bar.scm /tmp/B And let assume that foo and bar are *not* coming from the same Guix commit. You can still do: guix package --search-paths -p /tmp/A -p /tmp/B and therefore mix the two libraries. Well, using the time-machine, you need to track the commit which provided foo and the one of bar. Then: guix time-machine --commit=commit-A -- install -m foo.scm -p /tmp/AA guix time-machine --commit=commit-B -- install -m bar.scm -p /tmp/BB Then "guix package --search-paths -p /tmp/AA -p /tmp/BB" should provide the exact same thing as before. That's why it is important to track the Guix commit (guix describe -f channels) of software you are installing. Without this piece of information, it is (almost) impossible to reinstall (other point in time or space) the exact same version of the very software. Hope that helps, simon ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to install previous versions? 2020-10-10 16:44 ` zimoun @ 2020-10-12 13:58 ` Zelphir Kaltstahl 2020-10-12 14:29 ` zimoun 0 siblings, 1 reply; 6+ messages in thread From: Zelphir Kaltstahl @ 2020-10-12 13:58 UTC (permalink / raw) To: zimoun; +Cc: help-guix Hi Zimoun! Thank you for your detailed reply! You've given me something to chew on. In the meantime I wrote down everything I understood so far here: https://notabug.org/ZelphirKaltstahl/guix-package-manager-tutorials/src/master/guide.org I'll try to get the "versions of packages from multiple GNU Guix commits" part done there as well. I also have another question: What is the best way to find out about until which commit id a package was available in a specific version? Is that website the only way, or is there a way from command line to search for the GNU Guix commit? Something like: ~~~~ guix search-guix-commit-for-package-with-version python-redis@3.3.8 --last --> Revision c7011ff850420fdbe1319b3d218bd362f2f9d618 guix search-guix-commit-for-package-with-version python-redis@3.3.8 --first --> Revision f5111b4d2b982d58387188bc3018e4dd2e9a9d4f ~~~~ or at least something only involving command line and not requiring me to bisect on GNU Guix commits ^^? Best regards, Zelphir On 10/10/20 6:44 PM, zimoun wrote: > Dear, > > On Sat, 10 Oct 2020 at 17:15, Zelphir Kaltstahl > <zelphirkaltstahl@posteo.de> wrote: > >> For example, clicking leads to: >> >> http://data.guix.gnu.org/revision/f5111b4d2b982d58387188bc3018e4dd2e9a9d4f >> >> Here is where I am lost. Where do I need to click? > Click on one date. The row is: > > Version Output Builds From To > > and From mean the date of the first commit where the package is at the > version Version. > To is the date of the last commit. > > >> And this gives you the commit with 'python-redis@3.8', using the command: >> >> guix time-machine --commit=f5111b \ >> -- environment --ad-hoc python-redis python \ >> -- python >> >> OK, assume I get the commit id. >> >> I just tried this with the following command: >> >> ~~~~ >> guix time-machine --commit=f5111b -- environment --ad-hoc 'python-redis@3.3.8' 'python@3.8' -- python3.8 >> ~~~~ > Remove the '@X.Y'. It does not make sense since it is somehow already > included by the specification of the commit. > > >> My guess is, that in this commit of Guix there was no Python 3.8.2 yet? Or perhaps `python-redis` was not build for that Python version? > The "guix time-machine" gives you the exact same Guix as it was at the > commit specification. Therefore, since the commit f5111b provides the > version of python-redis you want, all the others do matter. > > >> I do not have a specific use-case at this moment, but I would like to know how to get those specific versions, the same every single time I run the command. To compare, when I create a virtual environment using: > As I have tried to explain. :-) > > In your project directory, you have to add 2 files about Guix: > > guix describe -f channels > channels.scm > > and the manifest.scm file containing the list of packages the project > requires. Then at any point in time, you can always do: > > guix time-machine -C channels.scm -- <subcommand> -m manifest <options> > > >> ~~~~ >> python3 -m venv venv >> source venv/bin/activate >> pip install --requirement requirements.txt >> ~~~~ > The issue with this approach is that somehow you need a SAT solver. > But that's another story. ;-) > > With Guix, AFAICT, the similar is: > - channels.scm which specifies a Guix version and so packages versions > - manifest.scm which specifies the list of packages. > > >> But that is, what I already have, isn't it? There is no part in this, that indicates `guix time-machine`. If time-machine is necessary to get the older version of python-redis@3.3.8 in the command line, then there must be something I need to write in the manifest.scm file to let Guix know, that I want a specific commit id. Or perhaps this is not possible with a manifest? Or is the idea, that I need to have a tracked channel as well to achieve it? > It is possible with the manifest but AFAIU it is a bit tricky and you > should write some Scheme. The easiest is using a channels.scm file. > See above. > > >> The other no-so-said is to track "guix describe", you *should* _track_ >> the file channels.scm: >> >> guix describe -f channels.scm >> >> OK this is probably the part, where I need to read the docs about it. I do not have a channels.scm and I do not know what does in there. I only have a vague idea about channels in my head. > Maybe with the output is easier to get the point. :-) > > --8<---------------cut here---------------start------------->8--- > $ guix describe -f channels > (list (channel > (name 'guix) > (url "https://git.savannah.gnu.org/git/guix.git") > (commit > "a0d4aa2457d7e36012143ffe3fbc9dd4bc20ca4f") > (introduction > (make-channel-introduction > "9edb3f66fd807b096b48283debdcddccfea34bad" > (openpgp-fingerprint > "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) > --8<---------------cut here---------------end--------------->8--- > > Basically, I have only one channel which is the official GNU Guix > "%default-channels". The important information here are: > > - url: from where it fetch > - commit: which checkout uses > > Therefore, "guix time-machine -C the/channel./file.scm -- help" will > fetch from url and restore at the commit. > > The other parts are important too. ;-) But not for your question. :-) > Well, basically you can even drop them and it will be fine. > > So yes, please go read the channel section. It has recently been > reordered to be more "understandable". Feedback is very welcome. :-) > > >> Then later or on another machine, you simply run the command: >> >> guix time-machine -C path/to/channels.scm \ >> -- <subcommand> -m path/to/manifest.scm <options> >> >> If I understand this correctly, a manifest with specific versions can only be guaranteed to work, if I track a channel as well. And somehow in that channel definition, I must specify which commit of Guix I am on? But wouldn't that limit my choice of libraries to what was available in one commit? > Yes, the same way the choice of libraries is limited at each commit state. :-) > > It is possible to mix libraries from different commits but the UI is > not as easy as it should be. > > For example, imagine you are doing: > > guix pull > guix install -m foo.scm /tmp/A > [...] # time flies > guix pull > guix install -m bar.scm /tmp/B > > And let assume that foo and bar are *not* coming from the same Guix > commit. You can still do: > > guix package --search-paths -p /tmp/A -p /tmp/B > > and therefore mix the two libraries. > > Well, using the time-machine, you need to track the commit which > provided foo and the one of bar. Then: > > guix time-machine --commit=commit-A -- install -m foo.scm -p /tmp/AA > guix time-machine --commit=commit-B -- install -m bar.scm -p /tmp/BB > > Then "guix package --search-paths -p /tmp/AA -p /tmp/BB" should > provide the exact same thing as before. > > That's why it is important to track the Guix commit (guix describe -f > channels) of software you are installing. Without this piece of > information, it is (almost) impossible to reinstall (other point in > time or space) the exact same version of the very software. > > Hope that helps, > simon -- repositories: https://notabug.org/ZelphirKaltstahl ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: How to install previous versions? 2020-10-12 13:58 ` Zelphir Kaltstahl @ 2020-10-12 14:29 ` zimoun 0 siblings, 0 replies; 6+ messages in thread From: zimoun @ 2020-10-12 14:29 UTC (permalink / raw) To: Zelphir Kaltstahl; +Cc: help-guix Hi, On Mon, 12 Oct 2020 at 15:58, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote: > ~~~~ > guix search-guix-commit-for-package-with-version python-redis@3.3.8 --last > --> Revision c7011ff850420fdbe1319b3d218bd362f2f9d618 > guix search-guix-commit-for-package-with-version python-redis@3.3.8 --first > --> Revision f5111b4d2b982d58387188bc3018e4dd2e9a9d4f > ~~~~ Not implemented (yet). Only via the website for now. > or at least something only involving command line and not requiring me to bisect on GNU Guix commits ^^? Note that there is JSON. I have an unpolished attempt to fetch the JSON files and then find the intersection of commits. Well, not ready yet. BTW, note that using the Data Service, you can only find commit after Dec. 2019, if I remember correctly. All the best, simon ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-10-12 14:30 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-10-09 17:00 How to install previous versions? Zelphir Kaltstahl 2020-10-09 16:37 ` zimoun 2020-10-10 15:14 ` Zelphir Kaltstahl 2020-10-10 16:44 ` zimoun 2020-10-12 13:58 ` Zelphir Kaltstahl 2020-10-12 14:29 ` zimoun
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.