Why are these derivations different?
Hi Guix, I'm trying to copy the store items for ungoogled-chromium from one of my hosts that has many computational resources to another one that does not, so that I do not have to build ungoogled-chromium on the less powerful host. However, even after copying the store items using guix archive --export | guix archive --import, the less powerful host wants to build ungoogled-chromium because the derivations differ (see attachments). How can I go about seeing why the derivations differ? Both hosts are using the same version of guix: $ guix describe Generation 35 Jun 07 2019 21:49:47(current) guix 07023eb repository URL: https://git.savannah.gnu.org/git/guix.git commit: 07023ebc1892a559cad1f80235a4afb0955b29ab and $ guix describe Generation 3Jun 06 2019 16:39:40(current) guix 07023eb repository URL: https://git.savannah.gnu.org/git/guix.git branch: master commit: 07023ebc1892a559cad1f80235a4afb0955b29ab Best, JackDerive([("out","/gnu/store/kpbfydvf16vvva7gy56p1d85b2ry9dgn-ungoogled-chromium-74.0.3729.169-0.d2beaef","","")],[("/gnu/store/05g7z2cndn7snvwmhb0ghjxd7bscdzr5-cups-2.2.11.drv",["out"]),("/gnu/store/0hg04ci30k9f46lycq3a38k5jnd6pkpv-cairo-1.16.0.drv",["out"]),("/gnu/store/0pqbf0jy7h29p7hm02a8lya8c6wgwrya-ffmpeg-4.1.3.drv",["out"]),("/gnu/store/0pswzqisl4frkahc8n25v0khzm5qwk9q-libjpeg-turbo-2.0.1.drv",["out"]),("/gnu/store/13lni3376l0asaryf5v7yx1pkclg724c-pango-1.42.4.drv",["out"]),("/gnu/store/14zh54fjfnrjm108mj857l4ckgn3w0wa-fontconfig-2.13.1.drv",["out"]),("/gnu/store/16i2br91zcamkq08jazhy0lxa0dxmlwg-openjpeg-2.3.1.drv",["out"]),("/gnu/store/1ywcgh6rwvjhs6qqj1h8izcg22idl2x3-module-import-compiled.drv",["out"]),("/gnu/store/2yzhaf13j1nrcag78y683z6kdnnnpmr0-cairo-1.16.0.drv",["out"]),("/gnu/store/37qkp6861qnmx2ixy7jg51jg1dywd9m2-harfbuzz-2.2.0.drv",["out"]),("/gnu/store/3r8d3h2l1dwbvad4p20bchk3ljlwqh6i-gtk+-3.24.7.drv",["out"]),("/gnu/store/5dl6856mpvqv1qwdp5vmri76ab8x4acz-nss-3.43.drv",["out"]),("/gnu/store/5q3kdzj1hq85i9a5nr6z8yl54xigjcc2-openjpeg-2.3.0.drv",["out"]),("/gnu/store/6343p3yq191mc8cxrz1y8jrm840v2whj-fontconfig-2.13.1.drv",["out"]),("/gnu/store/8ha35c10aghpwwd2v0c8xk46vlppbz19-lcms-2.9.drv",["out"]),("/gnu/store/9i3iz56a403km3b97mwvdavyi488yhpf-ffmpeg-4.1.3.drv",["out"]),("/gnu/store/bmgyx3il9i3qvwr2wyi4ak7my59dl5nk-libwebp-1.0.2.drv",["out"]),("/gnu/store/bp7hq2bwcy9d8937814c5gr15ylgp5k6-harfbuzz-2.2.0.drv",["out"]),("/gnu/store/c83y8vza2x19w03cav577a3mq4h80w81-gtk+-3.24.7.drv",["out"]),("/gnu/store/f1ajr6s8gy4ldmiaqr5s9i9m724r5a5r-freetype-2.9.1.drv",["out"]),("/gnu/store/fqg9n41z2ca66r9m6dcy2b1kmz2gpx7i-guile-2.0.14.drv",["out"]),("/gnu/store/ivighhym2js9xpj77c27qg4gfw16xxwr-freetype-2.9.1.drv",["out"]),("/gnu/store/js4ix1yhhhk2j184bc19ynq3cap1f3a5-gdk-pixbuf-2.38.1.drv",["out"]),("/gnu/store/kwnn6x7z45g8j1iha1087mpiv48pwz3j-cups-2.2.11.drv",["out"]),("/gnu/store/lkhd8g814l0c9wy9h4dii9gw44vi964f-libva-2.4.0.drv",["out"]),("/gnu/store/n07vg2agjv9m7yg6dyi59ys65aaqxjkv-lcms-2.9.drv",["out"]),("/gnu/store/nr087v1hy3x2byjvvvmbqk6nhrzcxrmg-libpng-1.6.34.drv",["out"]),("/gnu/store/qk80f8arfbsmsxrx0f7645ph5y3nrwnr-mesa-18.3.5.drv",["out"]),("/gnu/store/qr4vv4br4sspi1sllzzaqn7fiilbxg9f-pango-1.42.4.drv",["out"]),("/gnu/store/qz49ik2lvbff7xrl5685kvng6iv6qa7x-libpng-1.6.37.drv",["out"]),("/gnu/store/s9w71hlp4xaw65hn027gnbir6rl2pp3x-ungoogled-chromium-74.0.3729.169-0.d2beaef.drv",["out"]),("/gnu/store/shmm2wml357xpwyzl42hkl6wzjsw7jws-libwebp-1.0.2.drv",["out"]),("/gnu/store/svylcniwjvpv1hm12pbf0zrxp224pshz-libva-2.4.0.drv",["out"]),("/gnu/store/v9chjkf5fgqdm7igikszxm9y5zc6chdx-gdk-pixbuf-2.38.1.drv",["out"]),("/gnu/store/vhkrlh8g2jjrjpcr53w455297z8fqzn7-libevent-2.1.10.drv",["out"]),("/gnu/store/vq1alsi8yh55h4y4ggjqp1w8vp3prswf-nss-3.43.drv",["out"]),("/gnu/store/wq0v31rj2lbs63hvi9gg1dm27rck3mx8-libevent-2.1.10.drv",["out"]),("/gnu/store/x0v5hll1sw6sqf9wjclkw526hflaar1x-module-import.drv",["out"]),("/gnu/store/y7z4g1gf9knrjb44yspvsfab0ksfvjwy-libjpeg-turbo-2.0.2.drv",["out"]),("/gnu/store/ziyqnilzi6is9g79blw8q820liddfjf5-mesa-18.3.5.drv",["out"])],["/gnu/store/41wxjzb4yhwdqbn4bwjqprb8l5di34dc-ungoogled-chromium-74.0.3729.169-0.d2beaef-guile-builder"],"x86_64-linux","/gnu/store/1fl9vk8fpafkws4qyy25vcdfpybxyh1k-guile-2.0.14/bin/guile",["--no-auto-compile","-L","/gnu/store/d84nbv6r94i8ixvz7f6g22pwdyvnnx6g-module-import","/gnu/store/41wxjzb4yhwdqbn4bwjqprb8l5di34dc-ungoogled-chromium-74.0.3729.169-0.d2beaef-guile-builder"],[("GUILE_LOAD_COMPILED_PATH","/gnu/store/gza8djv7fmxh60pdh8jkkjj7shy3mnsz-module-import-compiled"),("allowSubstitutes","0"),("guix properties","((type . graft) (graft (count . 18)))"),("out","/gnu/store/kpbfydvf16vvva7gy56p1d85b2ry9dgn-ungoogled-chromium-74.0.3729.169-0.d2beaef"),("preferLocalBuild","1")])Derive([("out","/gnu/store/k1q4n62ph77vj24vbkkz5caibf6hakri-ungoogled-chromium-74.0.3729.169-0.d2beaef","","")],[("/gnu/store/0ag86rz9dz3v4z0dw7xvcwiqvww395c9-openssl-1.0.2p.drv",["out"]),("/gnu/store/0hg04ci30k9f46lycq3a38k5
Re: Why are these derivations different?
Jack Hill writes: > Hi Guix, > > I'm trying to copy the store items for ungoogled-chromium from one of my > hosts that has many computational resources to another one that does not, > so that I do not have to build ungoogled-chromium on the less powerful > host. > > However, even after copying the store items using guix archive --export | > guix archive --import, the less powerful host wants to build > ungoogled-chromium because the derivations differ (see attachments). I suspect this has to do with grafts. Guix is missing a substitute for the 'ungrafted' package and fails to realize the grafted derivation. Exporting with --no-grafts should do the trick. signature.asc Description: PGP signature
Re: Why are these derivations different?
On Sat, 8 Jun 2019, Marius Bakke wrote: Jack Hill writes: Hi Guix, I'm trying to copy the store items for ungoogled-chromium from one of my hosts that has many computational resources to another one that does not, so that I do not have to build ungoogled-chromium on the less powerful host. However, even after copying the store items using guix archive --export | guix archive --import, the less powerful host wants to build ungoogled-chromium because the derivations differ (see attachments). I suspect this has to do with grafts. Guix is missing a substitute for the 'ungrafted' package and fails to realize the grafted derivation. Exporting with --no-grafts should do the trick. Marius, Thanks! That was it. If you don't mind, I have a few follow up question to help me understand how everything works: How is guix archive --no-grafts different from guix build --no-grafts? Oh, or after reading the manual for --no-grafts again, maybe I used the wrong incantation (guix build --no-grafts package-name instead of guix build package-name --no-grafts)? What's really going on with --no-grafts. Is it that guix on my less powerful host has never seen the the ungoogled-chromium version build against the older dependencies, so doesn't accept the older version that could be grafted? I guess, I'm not sure exactly what you mean by "fails to realize the grafted derivation". Is that a bug? Sorry, I don't think that question was very clear. It probably means that while I think I know what grafts are, I don't know enough about what's going on to ask the question properly. I think this all could be summarized as, "please explain more." Many thanks, Jack
Re: Why are these derivations different?
Jack Hill writes: > On Sat, 8 Jun 2019, Marius Bakke wrote: > >> Jack Hill writes: >> >>> Hi Guix, >>> >>> I'm trying to copy the store items for ungoogled-chromium from one of my >>> hosts that has many computational resources to another one that does not, >>> so that I do not have to build ungoogled-chromium on the less powerful >>> host. >>> >>> However, even after copying the store items using guix archive --export | >>> guix archive --import, the less powerful host wants to build >>> ungoogled-chromium because the derivations differ (see attachments). >> >> I suspect this has to do with grafts. Guix is missing a substitute for >> the 'ungrafted' package and fails to realize the grafted derivation. >> >> Exporting with --no-grafts should do the trick. > > Marius, > > Thanks! That was it. > > If you don't mind, I have a few follow up question to help me understand > how everything works: > > How is guix archive --no-grafts different from guix build --no-grafts? Oh, > or after reading the manual for --no-grafts again, maybe I used the wrong > incantation (guix build --no-grafts package-name instead of guix build > package-name --no-grafts)? > > What's really going on with --no-grafts. Is it that guix on my less > powerful host has never seen the the ungoogled-chromium version build > against the older dependencies, so doesn't accept the older version that > could be grafted? I guess, I'm not sure exactly what you mean by "fails to > realize the grafted derivation". Is that a bug? Sorry, just a lazy and poor attempt at explaining what's going on... :-) > Sorry, I don't think that question was very clear. It probably means that > while I think I know what grafts are, I don't know enough about what's > going on to ask the question properly. I think this all could be summarized > as, "please explain more." Grafts are are ignored in some parts of Guix. In this case, if you inspect the profile derivation when doing 'guix install -n ungoogled-chromium', you can see that the computed profile.drv needs to produce the ungrafted ungoogled-chromium-x.y.z.drv, because the profile-builder references the _ungrafted_ package. I'm not sure of the exact mechanics that follow, but I guess grafts are only computed afterwards, recursively, for the generated profile. HTH, Marius signature.asc Description: PGP signature
Re: Why are these derivations different?
On Mon, 10 Jun 2019, Marius Bakke wrote: What's really going on with --no-grafts. Is it that guix on my less powerful host has never seen the the ungoogled-chromium version build against the older dependencies, so doesn't accept the older version that could be grafted? I guess, I'm not sure exactly what you mean by "fails to realize the grafted derivation". Is that a bug? Sorry, just a lazy and poor attempt at explaining what's going on... :-) No worries, I appreciate you taking the time to help me understand. Sorry, I don't think that question was very clear. It probably means that while I think I know what grafts are, I don't know enough about what's going on to ask the question properly. I think this all could be summarized as, "please explain more." Grafts are are ignored in some parts of Guix. In this case, if you inspect the profile derivation when doing 'guix install -n ungoogled-chromium', you can see that the computed profile.drv needs to produce the ungrafted ungoogled-chromium-x.y.z.drv, because the profile-builder references the _ungrafted_ package. I'm not sure of the exact mechanics that follow, but I guess grafts are only computed afterwards, recursively, for the generated profile. Ok, thank help. Thank you. Jack