LuaLaTeX non produce output in Flatpak TeXLive

Aug 23 2020

Attualmente sto lavorando per rendere TeXLive utilizzabile in Linux Flatpaks, tuttavia LuaLaTeX "silenziosamente" fallisce e non ho idea di cosa potrebbe essere sbagliato o da dove iniziare. L'output ei sintomi non sono dissimili da Lualatex non produce output (MiKTeX) , tuttavia non sono né su Windows con codifica UCS / ANSI, né i miei file o $HOMEin un percorso non ASCII, né utilizzo MikTeX.

Sto riutilizzando il mwe dalla domanda collegata:

Compilazione

abc \bye

con luatexfunziona ma se carico il pacchetto otf:

\input luaotfload.sty
abc \bye

Ottengo:

$ luatex mwe.tex 
This is LuaTeX, Version 1.12.0 (TeX Live 2020) 
 restricted system commands enabled.
(./mwe.tex
(/usr/lib/sdk/texlive/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
(/usr/lib/sdk/texlive/texmf-dist/tex/latex/base/ltluatex.tex)

Si può notare che nell'ultima riga dell'output / log manca una nuova riga che potrebbe indicare un crash del motore (?).

Inoltre, l'esecuzione luaotfload-tool -uanche con la massima verbosità non fornisce alcun output. Tuttavia, per quello che vale, ConTeXt MkIV (cioè usando LuaTeX come backend) funziona bene.

La mia prima ipotesi era che Flatpak fosse basato sulla versione DVD di TeXLive 2020 senza aggiornamenti poiché (incluse due versioni minori di luaotfload) era troppo vecchio. Attualmente sto lavorando per poter utilizzare istantanee giornaliere più recenti di TeXLive in Flatpak (https://github.com/flathub/org.freedesktop.Sdk.Extension.texlive/pull/28), tuttavia questo non ha modificato nessuno dei comportamenti precedenti (ho confermato che sto effettivamente eseguendo luaotfload 3.14 nel Flatpak).

Passaggi per riprodurre:

  1. Configura il telecomando flathub e la tua distribuzione per avere flatpaks nel tuo percorso, quindi installa TeXLive:

    $ flatpak install org.freedesktop.Sdk.Extension.texlive
    
  2. Esegui una shell all'interno della sandbox e inserisci l'SDK di TeXLive nel PERCORSO:

    $ flatpak run --command=/usr/bin/sh --devel org.freedesktop.Sdk
    [ org.freedesktop.Sdk ~ ]$ source /usr/lib/sdk/texlive/enable.sh 
    
  3. Crea un MWE e costruisci:

    [ org.freedesktop.Sdk ~ ]$ cat > mwe.tex
    \input luaotfload.sty
    abc \bye
    [ org.freedesktop.Sdk ~ ]$ luatex mwe.tex
    

Risposte

3 HenriMenke Aug 23 2020 at 10:43

Recentemente ho riscontrato lo stesso problema quando ho provato a creare documenti TeX con Nix . Dopo un po 'di debug ho scoperto che il problema fondamentale è che TEXMFCACHEnon è scrivibile. Esaminando texmf.cnftroviamo i valori predefiniti in

[📦 org.freedesktop.Sdk ~]$ cat /usr/lib/sdk/texlive/texmf-dist/web2c/texmf.cnf | grep -e '^TEXMFVAR' -e '^TEXMFSYSVAR' -e '^TEXMFCACHE' TEXMFSYSVAR = $TEXMFROOT/texmf-var
TEXMFVAR = ~/.texlive2020/texmf-var
TEXMFCACHE = $TEXMFSYSVAR;$TEXMFVAR

Per Flatpak, alcuni vengono sostituiti ./install-tl -portabledall'opzione come parte del processo di confezionamento del Flatpak:

[📦 org.freedesktop.Sdk ~]$ cat /usr/lib/sdk/texlive/texmf.cnf | grep -e '^[^%]' TEXMFLOCAL = $SELFAUTOPARENT/texmf-local
TEXMFHOME = $TEXMFLOCAL TEXMFVAR = $TEXMFSYSVAR
TEXMFCONFIG = $TEXMFSYSCONFIG ASYMPTOTE_HOME = $TEXMFCONFIG/asymptote

Quindi originariamente TEXMFCACHEè definito in termini di TEXMFSYSVARe TEXMFVAR. Il primo, di TEXMFSYSVARsolito non è scrivibile sulla maggior parte dei sistemi, mentre il secondo TEXMFVAR, si presume sia sempre scrivibile. Questa ipotesi ovviamente fallisce se tutto è montato come un overlay di sola lettura del sistema, come su Nix.

Nel Flatpak il problema non è lo stesso, ma correlati, come TEXMFVARe quindi anche TEXMFCACHEindicare TEXMFSYSVARsolo (a causa della -portableopzione). Poiché questa directory è di sola lettura, anche questo non riesce.

Fortunatamente puoi sovrascrivere i valori texmf.cnfimpostando semplicemente le variabili di ambiente con lo stesso nome. Quindi, ad esempio, potremmo usare

$ flatpak run --env=TEXMFVAR=/tmp --command=/usr/bin/sh --devel org.freedesktop.Sdk

Qui ho scelto TEXMFVAR=/tmp, ma funzionerebbe anche qualsiasi altra directory che è garantita come scrivibile, ad es TEXMFVAR=/run/user/$(id -u). Per Flatpaks sarebbe ragionevole impostarli sul valore (non sugli host!) $XDG_CACHE_HOME, Ad esempio ~/.var/app/com.visualstudio.code/cache/texmf-varquando si utilizza l'SDK all'interno di VS Code.

Anche la semplice impostazione TEXMFCACHErisolverebbe il luaotfloadproblema. Tuttavia, se devi generare tfmo pkcaratteri al volo, sbatterai di nuovo contro un muro, perché questo richiede l'accesso in scrittura a TEXMFVAR.