Subject: bug#61212: guix substitute: EEXISTS

From: Maxime Devos <[email-masked]>
Date: Wed, 1 Feb 2023 15:13:11 +0100

I'm getting the following error message when doing "guix home reconfigure":

retrying download of 
'/gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3' with other 
substitute URLs...
guix substitute: fout: mkdir: Bestand bestaat al
vervanging van /gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3 
mislukt

I.e.:
   guix substitute: error: mkdir: File already exists.
   substitution of [...] failed.

This "mkdir" error looks like a bug somewhere.
Note that I've configured the daemon with:

           (build-accounts 40)
           (extra-options '("--gc-keep-derivations" "--gc-keep-outputs" 
"--max-jobs=14"))

so maybe this is a concurrency bug in the subsitution code of Guix.

Interestingly, /gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3 
does indeed exist:

   stat /gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3/
   Bestand: /gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3/
   Grootte: 32           Blokken: 0            IO-blok: 4096   map
   Apparaat: 17h/23d   Inode: 48606737     Koppelingen: 1
   Toegang: (0755/drwxr-xr-x)   UID: (    0/    root)   GID: (    0/ 
root)
   Toegang:   2023-02-01 14:25:04.314541307 +0100
   Gewijzigd: 2023-02-01 14:25:12.290587598 +0100
   Veranderd: 2023-02-01 14:25:12.290587598 +0100
   Ontstaan:  2023-02-01 14:25:04.314541307 +0100

(Looking at the clock, this directory _appears_ to be made after the 
first run of "guix home reconfigure" and before the second run, but I 
didn't look at the clock when doing the first run, so don't take my word 
for it.)

Some untested hypotheses:

   * The substitution code first tried to download from substitute server
     A.  It seemed to work for a while, so a bunch of files were being
     written to /gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3.
     However, substitution server A bailed out for whatever reason, so
     the substitution code stopped downloading and started with
     downloading from server.  While reasonable on its own, the
     substitution code forgot that there still were some remains
     from the previous attempt by server A and forgot to delete them
     before unpacking the nar from server B.

   * For some reason, the substitution of efl is done twice, each time in
     a different max jobs (I'm running with --max-jobs=14, which I
     _think_ enables concurrency by default instead of only setting a
     maximum).  Hence the two jobs step on each other toes.

   * Maybe a previous build or substitution of efl was interrupted
     or failed, but for whatever reason Guix didn't clean up afterwards,
     and now during the substitution of efl, the substitution code
     neglected to clean up the remains.

(I consider the first the most likely, given the "retrying download ... 
with other substitute URLs" line.)

I've added the full output of "guix home reconfigure" below. As I did 
"guix home reconfigure" twice in a row because the first one failed, 
I've also included the output of the first command in case it's somehow 
relevant.

(Also, lots of missing newlines in 'substitute: updating list of 
substitutes ...')

> antipode@antipode ~$ guix home reconfigure ~/source-code/guix-configuration/home-configuration.scm
> substitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerkesubstitute: lijst van substituten van ‘https://ci.guix.gnu.org’ aan het bijwerken... 100.0%
> substitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bisubstitute: lijst van substituten van ‘https://bordeaux.guix.gnu.org’ aan het bijwerken... 100.0%
> substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het substitute: lijst van substituten van ‘https://substitutes.nonguix.org’ aan het bijwerken... 100.0%
> The following derivations will be built:
>   /gnu/store/vxp570dv8h5mswhrhxwkikv4m48844ib-icedove-102.7.0.drv
>   /gnu/store/g2ghyr5vzx9x2v5ry4w17crmx6g7j29l-libpng-apng-1.6.39.drv
>   /gnu/store/0ps6aaj6ylgq5ljcafzplbdna2xf4lk5-libpng-1.6.39-apng.patch.gz.drv
>   /gnu/store/kw34n5qiqk1y4nr6rjz07l9gdvhrf3v3-libpng-1.6.39.tar.xz.drv
>   /gnu/store/wy59zlpj9qz5bbcr41893v6wsc3vbj96-icecat-102.7.0-guix0-preview1.drv
> 
> 1.150,5 MB zal binnengehaald worden
>  emacs-compat-29.1.3.1  78KiB         1.4MiB/s 00:00 [##################] 100.0%
> /gnu/store/0ps6aaj6ylgq5ljcafzplbdna2xf4lk5-libpng-1.6.39-apng.patch.gz.drv bouwen...
> /
> substitutie van /gnu/store/bblks4c4i69jcpwarfbqzp724k0cgh84-xdg-utils-1.1.3 is klaar
> /gnu/store/kw34n5qiqk1y4nr6rjz07l9gdvhrf3v3-libpng-1.6.39.tar.xz.drv bouwen...
> /
> substitutie van /gnu/store/316vagyi04jy2mxy4d2r2wdc6r8r15gr-emacs-magit-3.3.0-2.c883fab is klaar
> -
> substitutie van /gnu/store/idzvf47w9x3wk6ycyc9n453cqp8y6pcg-libgnome-2.32.1 is klaar
> |
> substitutie van /gnu/store/yl8lc7skdha6fgv5snw1glc7hn72a2ga-rust-cbindgen-0.23.0 is klaar
> 
> substitutie van /gnu/store/3vyv00nfafqm2ngqj83jap50xkf4dnib-ffmpeg-5.1.2 is klaar
> /gnu/store/g2ghyr5vzx9x2v5ry4w17crmx6g7j29l-libpng-apng-1.6.39.drv bouwen...
> - 'build' fase
> substitutie van /gnu/store/i80akl23paxs4mqz70lmfaiknl94s31b-ffmpeg-jami-5.0.1 is klaar
> \ 'build' faseguix substitute: waarschuwing: tijdens het binnenhalen van https://substitutes.nonguix.org/nar/zstd/rk9njj43f1bllm2knsakq8iamnhrr688-firefox-109.0: de server is een beetje traag
> guix substitute: waarschuwing: probeer ‘--no-substitutes’ als het probleem hardnekkig is
> guix substitute: fout: connect*: Verbinding is verlopen
> vervanging van /gnu/store/rk9njj43f1bllm2knsakq8iamnhrr688-firefox-109.0 mislukt
> guix home: fout: some substitutes for the outputs of derivation `/gnu/store/ffgjc355r1warf1h1kqxhkk7laxy8kf9-firefox-109.0.drv' failed (usually happens due to networking issues); try `--fallback' to build derivation from source 
> antipode@antipode ~$ guix home reconfigure ~/source-code/guix-configuration/home-configuration.scm
> The following derivations will be built:
>   /gnu/store/vxp570dv8h5mswhrhxwkikv4m48844ib-icedove-102.7.0.drv
>   /gnu/store/g2ghyr5vzx9x2v5ry4w17crmx6g7j29l-libpng-apng-1.6.39.drv
>   /gnu/store/wy59zlpj9qz5bbcr41893v6wsc3vbj96-icecat-102.7.0-guix0-preview1.drv
> 
> 1.128,2 MB zal binnengehaald worden
> /gnu/store/g2ghyr5vzx9x2v5ry4w17crmx6g7j29l-libpng-apng-1.6.39.drv bouwen...
> - 'check' fase
> substitutie van /gnu/store/8qv0ih19dgv5v4svbvgygzd187fvq3d7-evolution-3.46.0 is klaar
> 
> substitutie van /gnu/store/znm70qmra0xjgrn8qd02k7p070cj6aiw-qtbase-6.3.1 is klaar
> guix substitute: waarschuwing: tijdens het binnenhalen van https://ci.guix.gnu.org/nar/lzip/xdd3wqszjpqdz42vxkjs62r9vn0a80db-qtpositioning-6.3.1: de server is een beetje traag
> guix substitute: waarschuwing: probeer ‘--no-substitutes’ als het probleem hardnekkig is
> guix substitute: waarschuwing: tijdens het binnenhalen van https://ci.guix.gnu.org/nar/lzip/88c7xwkk191b4rmhzhq2a2n4gca0psil-qtsvg-6.3.1: de server is een beetje traag
> guix substitute: waarschuwing: probeer ‘--no-substitutes’ als het probleem hardnekkig is
> guix substitute: waarschuwing: tijdens het binnenhalen van https://ci.guix.gnu.org/nar/lzip/pcvlf9irb3jrjvf1zl5434cijiqcvdd7-qtdeclarative-6.3.1: de server is een beetje traag
> guix substitute: waarschuwing: probeer ‘--no-substitutes’ als het probleem hardnekkig is
> 
> substitutie van /gnu/store/88c7xwkk191b4rmhzhq2a2n4gca0psil-qtsvg-6.3.1 is klaar
> 
> substitutie van /gnu/store/xdd3wqszjpqdz42vxkjs62r9vn0a80db-qtpositioning-6.3.1 is klaar
> guix substitute: waarschuwing: tijdens het binnenhalen van https://ci.guix.gnu.org/nar/lzip/08r8kp99wr7ckg12ns28ir89hm0ppr9d-qtnetworkauth-6.3.1: de server is een beetje traag
> guix substitute: waarschuwing: probeer ‘--no-substitutes’ als het probleem hardnekkig is
> 
> substitutie van /gnu/store/08r8kp99wr7ckg12ns28ir89hm0ppr9d-qtnetworkauth-6.3.1 is klaar
> 
> substitutie van /gnu/store/pcvlf9irb3jrjvf1zl5434cijiqcvdd7-qtdeclarative-6.3.1 is klaar
> 
> substitutie van /gnu/store/r4siy9s1vbzj0386mibdrkm3h8n836lm-qt5compat-6.3.1 is klaar
> 
> substitutie van /gnu/store/qylfyv55y8iahq7r5vqascmsqq6269sf-qtmultimedia-6.3.1 is klaar
> 
> substitutie van /gnu/store/akf2xghb77nj2iva7gbbb7yvqf1kqqag-libreoffice-7.4.3.2 is klaar
> 
> substitutie van /gnu/store/y194ch6dkn971xph16gyg6p0j48z6ql4-endless-sky-0.9.16.1 is klaar
> 
> substitutie van /gnu/store/zi56fka0w6s7ymm626kjfzz28bgkbapr-rust-1.60.0 is klaar
> 
> substitutie van /gnu/store/1l25vd3l6mz6wbj6y5smik15l2hqmisv-thunderbird-102.7.0-checkout is klaar
> retrying download of '/gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3' with other substitute URLs...
> guix substitute: fout: mkdir: Bestand bestaat al
> vervanging van /gnu/store/xv60bjqprqr1v90fiv94y99cd0mhkm46-efl-1.26.3 mislukt
> guix home: fout: some substitutes for the outputs of derivation `/gnu/store/hi1mnvra4ww1p03ljs02fj8jpij2v2yc-jami-20221220.0956.79e1207.drv' failed (usually happens due to networking issues); try `--fallback' to build derivation from