Subject: Re: bug#64827: Texlive-biber not installable

From: Andreas Enge <[email-masked]>
Date: Wed, 26 Jul 2023 20:17:02 +0200

Am Wed, Jul 26, 2023 at 06:33:51PM +0200 schrieb Andreas Enge:
> > You seem to have some clues about the slowness; you reported there are
> > too many symlinks in monolithic TeX Live. This is not intended and
> > should be fixed.
> Clues, yes, but not a full understanding yet.

To clear things up, I have removed biber from my profile.

So now there is only texlive@2021, which contains this in
.guix-profile/share/ related to tex:
$ ll .guix-profile/share/ | grep texlive
lrwxrwxrwx   1 root root    77  1. Jan 1970  texmf-dist -> /gnu/store/31rs3m4fzdbal1v81qg1mvl29p39cyrp-texlive-20210325/share/texmf-dist
lrwxrwxrwx   1 root root    76  1. Jan 1970  texmf-var -> /gnu/store/31rs3m4fzdbal1v81qg1mvl29p39cyrp-texlive-20210325/share/texmf-var
lrwxrwxrwx   1 root root    72  1. Jan 1970  tlpkg -> /gnu/store/31rs3m4fzdbal1v81qg1mvl29p39cyrp-texlive-20210325/share/tlpkg

If I update to texlive@2023:
dr-xr-xr-x   3 root root  4096  1. Jan 1970  texmf-dist/
lrwxrwxrwx   1 root root    72  1. Jan 1970  tlpkg -> /gnu/store/88apcyl30irw6v03gmyav638wq31k9xq-texlive-20230313/share/tlpkg

And as mentioned before, texmf-dist contains symlinks of the kind
tex -> /gnu/store/88apcyl30irw6v03gmyav638wq31k9xq-texlive-20230313/share/texmf-dist/tex
as well as a "physical" subdirectory web2c with symlinks such as
xetex -> /gnu/store/88apcyl30irw6v03gmyav638wq31k9xq-texlive-20230313/share/texmf-dist/web2c/xetex

Whereas strangely, the texlive package itself has only this:
texmf-dist -> /gnu/store/s6w8r5q3aql1bhasv0nmwr5xgjv6qnhh-texlive-texmf-20230313/share/texmf-dist

Weird, where does the split come from?

Note that we also lost texmf-var compared to the previous release.
Actually things that used to be in texmf-var - the format file
texmf-var/web2c/xetex/xetex-fmt, for instance, can now be found in
texmf-dist.
This is another clue, since the split of the links happens along web2c
(but I still do not understand why).

>From https://www.tug.org/texlive/doc/texlive-en/texlive-en.html section 2.3
I surmise that we need the texmf-var directory back; this is where the
formats are supposed to reside.

It probably disappeared in commit 19fd1004138b60c4479d7516aa0cee261c0b6b57:
...
    (texlive-texmf)[build-system]: Use COPY-BUILD-SYSTEM.
    [arguments]: Set #:INSTALL-PLAN accordingly.  Replace TEXLIVE-BIN with
    TEXLIVE-BIN-FULL.
...
+      #:install-plan #~'(("texmf-dist/" "share/texmf-dist"))
...
+                     (web2c (string-append texmf-dist "/web2c"))
...
-                (invoke "fmtutil-sys" "--all")))))))
+                (invoke (string-append texlive-bin "/bin/fmtutil-sys")
+                        "--cnffile" fmtutil.cnf
+                        "--all"
+                        "--fmtdir" web2c)))))))

I suspect these to be the main difference between the old and the new
texlive-texmf.

There is also a somewhat suspicious
+                (setenv "GUIX_TEXMF" texmf-dist)
and
-                (setenv "TEXMFCNF" texmfroot)
of which I do not know what the results are.
And a lacking
-                (invoke "mktexlsr")
which is probably not very important.

Oh wait...
Before:
$ ll $HOME/.guix-profile/share/texmf-dist/ls-R
-r--r--r-- 5 root root 4812162  1. Jan 1970  /home/andreas/.guix-profile/share/texmf-dist/ls-R
After:
lrwxrwxrwx 1 root root 82  1. Jan 1970  /home/andreas/.guix-profile/share/texmf-dist/ls-R -> /gnu/store/88apcyl30irw6v03gmyav638wq31k9xq-texlive-20230313/share/texmf-dist/ls-R

Notice the difference in size. The latter gives only the names of the
subdirectories, the former all files.

I think the slowness comes from the fact that now with the monolithic
texlive every file needs to be searched for, instead of being just
picked up from the list in ls-R.

So I would suggest to revert dropping texmf-var by adding it to the
#:install-plan and not putting '"--fmtdir" web2c', and to re-add
running mktexlsr.

Now the question is, will this mktexlsr run disturb the modular texlive?
I suppose not.

In the worst case, we would need separate texlive-texmf for the two
texlive versions.

Andreas