Problem: pdflatex bzw. latex mit zus. Fonts über Browser auf dediziertem Server starten

Neue Frage »

rigo Auf diesen Beitrag antworten »
Problem: pdflatex bzw. latex mit zus. Fonts über Browser auf dediziertem Server starten
Hi,

ich schreibe in dieses Forum, weil das Problem nur auftritt, wenn ich pdflatex mittels exec-Kommando in meinem Script über den Webbrowser aufrufe.

Das Problem ist folgendes:
Ich habe eine tex-Datei die ich mittels pdflatex (oder latex) kompiliern möchte. Zusätzlich sind zwei Opentype-Fonts eingebunden (Helvetica Neue LT Pro). Die Fonts sind auf dem Server installiert und in Latex korrekt eingebunden (otftotfm, updmap etc.).

Eine Kompilierung der tex-Datei über die Konsole _funktioniert_ sowohl als root-User als auch als "meinuser", über den PHP als fcgid ausgeführt wird. Rufe ich als "meinuser" z.B.
code:
1:
php index.php
über die Konsole auf, klappt die Kompilierung auch.

Wenn ich jetzt aber das Script über den Webbrowser aufrufe, klappt die Kompilierung nicht. Als Ausgabe bekomme ich (u.a.) diesen (einzigen) Fehler:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
(see the transcript file for additional information)
pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Md-kern-liga): Font LY1-Helv
eticaNeueLTPro-Md-kern-liga at 1680 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Roman-liga): Font LY1-Helvet
icaNeueLTPro-Roman-liga at 780 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Roman-liga): Font LY1-Helvet
icaNeueLTPro-Roman-liga at 300 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Md-kern-liga): Font LY1-Helv
eticaNeueLTPro-Md-kern-liga at 1244 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Roman-liga): Font LY1-Helvet
icaNeueLTPro-Roman-liga at 420 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Md-kern-liga): Font LY1-Helv
eticaNeueLTPro-Md-kern-liga at 864 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Roman-liga): Font LY1-Helvet
icaNeueLTPro-Roman-liga at 600 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Roman-liga): Font LY1-Helvet
icaNeueLTPro-Roman-liga at 480 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Md-kern-liga): Font LY1-Helv
eticaNeueLTPro-Md-kern-liga at 600 not found

pdfTeX warning: latex (file LY1-HelveticaNeueLTPro-Roman-liga): Font LY1-Helvet
icaNeueLTPro-Roman-liga at 540 not found

Es wird auch eine Datei missfont.log erstellt:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
mktexpk --mfmode / --bdpi 600 --mag 2+480/600 --dpi 1680 LY1-HelveticaNeueLTPro-Md-kern-liga
mktexpk --mfmode / --bdpi 600 --mag 1+180/600 --dpi 780 LY1-HelveticaNeueLTPro-Roman-liga
mktexpk --mfmode / --bdpi 600 --mag 0+300/600 --dpi 300 LY1-HelveticaNeueLTPro-Roman-liga
mktexpk --mfmode / --bdpi 600 --mag 2+44/600 --dpi 1244 LY1-HelveticaNeueLTPro-Md-kern-liga
mktexpk --mfmode / --bdpi 600 --mag 0+420/600 --dpi 420 LY1-HelveticaNeueLTPro-Roman-liga
mktexpk --mfmode / --bdpi 600 --mag 1+264/600 --dpi 864 LY1-HelveticaNeueLTPro-Md-kern-liga
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 LY1-HelveticaNeueLTPro-Roman-liga
mktexpk --mfmode / --bdpi 600 --mag 0+480/600 --dpi 480 LY1-HelveticaNeueLTPro-Roman-liga
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 LY1-HelveticaNeueLTPro-Md-kern-liga
mktexpk --mfmode / --bdpi 600 --mag 0+540/600 --dpi 540 LY1-HelveticaNeueLTPro-Roman-liga

Warum funktioniert die Ausführung als "meinuser" über die Konsole, über den Browser jedoch nicht? Wie kann ich (pdf)latex dazu überreden, die tex-Datei _mit_ den zusätzlichen Fonts zu kompilieren?

Mein System: Ubuntu 9.04, Apache 2.2.11, PHP 5.2.6, TeXLive 2007 (alles Ubuntu-9.04-aktuell)

cu
rigo
Schweinebacke Auf diesen Beitrag antworten »

Web-Server laufen häufig mit eingeschränkten Rechten. Du solltest also zunächst einmal sicherstellen, dass die passenden Zugriffsrechte bei allen benötigten Dateien (hier wohl go+r für die Font-Dateien selbst) und Verzeichnissen (hier go+rx für die Verzeichnisse der Font-Dateien und deren Eltern) gesetzt sind.

Zur Kontrolle kannst Du auch einmal einen kpsewhich-Aufruf für die bemängelten Dateien in Dein Script einbauen. Du kannst Dir auch $USER, $UID und $GROUPS ausgeben lassen.
rigo Auf diesen Beitrag antworten »

Danke für den Tipp.

Über die Konsole liefert kpsewhich -expand-var $USER bzw. $UID oder $GROUP richtig "meinuser", 1001 und "leer". Über den Browser liefert es nur "leer", 1001 und "leer".

kpsewhich -var-value TFMFONTS über den Browser liefert richtig
code:
1:
2:
.:{{/.texmf-config,/.texmf-var,/texmf,/etc/texmf,!!/var/lib/texmf,!!/usr/local/share/texmf,!!/usr/share/texmf,!!/usr/share/texmf-texlive}/fonts,/tmp/texfonts}/tfm//:/usr/share/texmf-texlive/fonts/tfm//:/home/meinuser/.texmf-var/fonts/tfm//


Die Verzeichnis- und Dateirechte in /home/meinuser/.texmf-var sind go+r und go+rx (inklusive .texmf-var)

Ich habe mal zum testen die tfm-Dateien in den Ordner des Webskriptes kopiert. Der Fehler ist aber immer noch derselbe unglücklich
Schweinebacke Auf diesen Beitrag antworten »

Ich glaube nicht, dass die Font-Metriken, also die tfm-Dateien, das Problem sind. Ich glaube, das Problem ist eher der Zugriff auf die Font-Dateien selbst.

BTW: Ich hatte absichtlich $GROUPS und nicht $GROUP geschrieben. Normalerweise ist in $GROUPS eine Liste aller Gruppen zu finden, denen der aktuelle Benutzer angehört und mit deren Rechte er deshalb operieren darf. Da Du aber die others-Rechte entsprechend gesetzt hast, sollte das egal sein.

Ich würde wirklich mal ein »kpsewhich LY1-HelveticaNeueLTPro-Md-kern-liga.pfb« oder wie auch immer die Font-Datei heißt in das Script einbauen, um im Browser zu sehen, welche Datei er da findet. Falls keine, ist das das Problem. Falls eine, nochmal die Rechte dieser Datei prüfen.
rigo Auf diesen Beitrag antworten »

Hi Schweinebacke,

ein kpsewhich -expand-var $GROUPS liefert über den Browser mit shell_exec ein leeres Ergebnis, über die Konsole als "meinuser" 1000.

Wir kommen der Sache aber schon näher:
Ein kpsewhich LY1-HelveticaNeueLTPro-Md-kern-liga.pfb liefert über die Konsole (als "meinuser") /home/meinuser/.texmf-var/fonts/type1/lcdftools/HelveticaNeueLTPro/HelveticaNeueLTPro-Bd.pfb. Über den Browser ist das Ergebnis leer.

Ein kpsewhich LY1-HelveticaNeueLTPro-Roman-liga.tfm liefert über die Konsole als "meinuser" _und_ über den Browser /home/meinuser/.texmf-var/fonts/tfm/Linotype/helveticaneuelt/LY1-HelveticaNeueLTPro-Roman-liga.tfm

Daran liegt's wahrscheinlich. Was kann ich denn da tun?
Schweinebacke Auf diesen Beitrag antworten »

Ich weiß, ich komme immer wieder darauf zurück, aber zur Sicherheit (man beachte, dass das "X" ein Großbuchstabe ist!): »chmod -R ugo+rX /home/meinuser/.texmf-var/fonts/«

Langsam wird es aus der Ferne schwierig. Ich würde als nächstes mit »kpsewhich --show-path="type1 fonts"« den Suchpfad für pfb-Dateien prüfen. Achja, auch die Rechte an /home/meinuser/.texmf-var/ls-R sollten geprüft werden, falls diese Datei existiert. Im Zweifelsfall sollte die Datei gelöscht werden (weil .texmf-var einfach durchsucht wird, falls ls-R nicht existiert).

BTW: kpathsea kann man auch im DEBUG-Modus betreiben, wenn man die Environment-Variable KPATHSEA_DEBUG auf entsprechende Werte setzt (siehe »texdoc kpathsea«, Abschnitt 2.6.3). Damit kann man ggf. ermitteln wo kpsewhich tatsächlich sucht und sehen, wo die Suche erfolglos ist. Wenn man zu viele Debug-Bits setzt, bekommt man allerdings einen rechten Wust an Informationen.
 
 
rigo Auf diesen Beitrag antworten »

Hi,

danke für den Hinweis.
Das X war natürlich groß.
Die Suchpfade werden sowohl für type1 als auch für tfm richtig angegeben.
"kpsewhich --debug -1 ..." funktioniert zwar über die Konsole, über den Browser allerdings nicht. Da die PDF-Erzeugung über die Konsole aber funktioniert, hilft das nicht wirklich weiter.
ls-R war im Pfad /home/meinuser/.texmf-var/ nicht vorhanden.

Ein
php:
1:
2:
echo "Font pfb: ".shell_exec("kpsewhich HelveticaNeueLTPro-Roman.pfb")."\n"; 
echo "Font tfm: ".shell_exec("kpsewhich LY1-HelveticaNeueLTPro-Roman-liga.tfm")."\n";
liefert übrigens
Zitat:
Font pfb: /usr/share/texmf-texlive/fonts/type1/lcdftools/HelveticaNeueLTPro/HelveticaNeueLTPro-Roman.pfb
Font tfm: /home/meinuser/.texmf-var/fonts/tfm/Linotype/helveticaneuelt/LY1-HelveticaNeueLTPro-Roman-liga.tfm
Ich hatte oben die pfb-Fontdatei falsch angegeben.

php:
1:
echo "Fontdir: ".shell_exec('kpsewhich --show-path="fonts tfm (oder type1)"')."\n";
liefert auch die richtigen Pfade, die alle die Rechte ugo+rX haben (die Files darin haben ugo+r).

php:
1:
2:
3:
echo "User: ".shell_exec('kpsewhich -expand-var $USER')."\n"; 
echo "UID: ".shell_exec('kpsewhich -expand-var $UID')."\n"; 
echo "Groups: ".shell_exec('kpsewhich -expand-var $GROUPS')."\n";
liefert
Zitat:
User: (leer) => komisch!!
UID: 1001
Groups: 1001


Also nochmal zusammenfassend: Pfade sind gesetzt, Rechte sind gesetzt. kpsewhich kennt die Pfade. Fonts werden von pdflatex nicht gefunden. Ich dreh am Rad...


Zitat:
Original von Schweinebacke
Ich weiß, ich komme immer wieder darauf zurück, aber zur Sicherheit (man beachte, dass das "X" ein Großbuchstabe ist!): »chmod -R ugo+rX /home/meinuser/.texmf-var/fonts/«

Langsam wird es aus der Ferne schwierig. Ich würde als nächstes mit »kpsewhich --show-path="type1 fonts"« den Suchpfad für pfb-Dateien prüfen. Achja, auch die Rechte an /home/meinuser/.texmf-var/ls-R sollten geprüft werden, falls diese Datei existiert. Im Zweifelsfall sollte die Datei gelöscht werden (weil .texmf-var einfach durchsucht wird, falls ls-R nicht existiert).

BTW: kpathsea kann man auch im DEBUG-Modus betreiben, wenn man die Environment-Variable KPATHSEA_DEBUG auf entsprechende Werte setzt (siehe »texdoc kpathsea«, Abschnitt 2.6.3). Damit kann man ggf. ermitteln wo kpsewhich tatsächlich sucht und sehen, wo die Suche erfolglos ist. Wenn man zu viele Debug-Bits setzt, bekommt man allerdings einen rechten Wust an Informationen.
Schweinebacke Auf diesen Beitrag antworten »

So leid es mir tut: Ich bin mit meinem Latein auch erst einmal am Ende. Wenn kpsewhich eine Datei findet, sollte pdftex das eigentlich auch. Das einige, was mir noch einfallen würde, wäre ein Fehler in der map-Datei, aber dann würde das über die Konsole auch nicht funktionieren. unglücklich
rigo Auf diesen Beitrag antworten »

Ich bin auch völlog ratlos. Langsam glaube ich, dass es sich dabei um einen Bug handelt (Bug)
rigo Auf diesen Beitrag antworten »

Das Problem ist an anderer Stelle auch aufgetaucht und wurde gelöst Tanzen
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »