Latex-Server
Latex-Server
Hallo zusammen,
ich spiele mit dem Gedanken im lokalen Netz einen Dienst o.ä. zur Verfügung zu stellen, der es ermöglicht .tex Dateien zu Pdfs umzuwandeln. Dann müsste nicht jeder Rechner die große Latex-Bibliothek installieren.
Weiß jemand von euch wie ich das anstellen könnte?
Ich habe an ein PHP-Skript oder sowas gedacht.
schonmal danke,
gruß thomas
ich spiele mit dem Gedanken im lokalen Netz einen Dienst o.ä. zur Verfügung zu stellen, der es ermöglicht .tex Dateien zu Pdfs umzuwandeln. Dann müsste nicht jeder Rechner die große Latex-Bibliothek installieren.
Weiß jemand von euch wie ich das anstellen könnte?
Ich habe an ein PHP-Skript oder sowas gedacht.
schonmal danke,
gruß thomas
Re: Latex-Server
Bürokratie kann man nur durch ihre Anwendung bekämpfen.
Re: Latex-Server
Hallo,
danke für die Antwort, das sieht ja schonmal vielversprechend aus.
Ich probier das heut oder morgen mal aus und erstatte Bericht.
gruß thomas
danke für die Antwort, das sieht ja schonmal vielversprechend aus.
Ich probier das heut oder morgen mal aus und erstatte Bericht.
gruß thomas
Re: Latex-Server
Anstatt das dort verlinkte fsniper selbst am Paketsystem vorbei zu installieren, sollte man vielleicht das in dieser Hinsicht aequivalente inotifywait aus inotify-tools einsetzen.
Den Userdir-Anteil kann man sich fuer's Testen, oder wenn keine Benutzerverwaltung noetig ist, sparen. Mit dem dort verwendeten rubber als LaTeX-Buildserver hab' ich noch keine Erfahrungen, pdflatex sollte es auch tun. Im Prinzip braucht man nur
Gruss Cae
Den Userdir-Anteil kann man sich fuer's Testen, oder wenn keine Benutzerverwaltung noetig ist, sparen. Mit dem dort verwendeten rubber als LaTeX-Buildserver hab' ich noch keine Erfahrungen, pdflatex sollte es auch tun. Im Prinzip braucht man nur
- ein tmpdir anlegen
- jede relevante Datei dorthin kopieren (HTTP)
- pdflatex anwerfen
- das .pdf bereitstellen
- das tmpdir loeschen
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: Latex-Server
Hallo,
ich hab mir die Anleitung nochmal genauer angeschaut.
Müsste der Server dann entsprechend dieser Anleitung das freigegebene Verzeichnis "pollen" und nachdem er eine veränderte .tex Datei kompiliert hat diese selbst zur Verfügung stellen?
Ich würde dann eher eine Methode bevorzugen, bei der man dem Server die Datei explizit übermitteln muss und dafür direkt das Ergebnis bekommt.
gruß thomas
ich hab mir die Anleitung nochmal genauer angeschaut.
Müsste der Server dann entsprechend dieser Anleitung das freigegebene Verzeichnis "pollen" und nachdem er eine veränderte .tex Datei kompiliert hat diese selbst zur Verfügung stellen?
Ich würde dann eher eine Methode bevorzugen, bei der man dem Server die Datei explizit übermitteln muss und dafür direkt das Ergebnis bekommt.
gruß thomas
Re: Latex-Server
Hi,
wenn Du immer alles in einer Datei hast (was bei LaTeX ja nicht immer der Fall sein muss), dann kannst Du
die Datei auch direkt ueber SSH nach pdflatex pipen. Bei mehreren Dateien geht dann sicher ein Script, in das Du ein tar-Archiv
per SSH Pipe uebertraegst.
Ciao
Stefan
wenn Du immer alles in einer Datei hast (was bei LaTeX ja nicht immer der Fall sein muss), dann kannst Du
die Datei auch direkt ueber SSH nach pdflatex pipen. Bei mehreren Dateien geht dann sicher ein Script, in das Du ein tar-Archiv
per SSH Pipe uebertraegst.
Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.
Re: Latex-Server
Hallo,
das hört sich gut an
Bin gerade dabei den ssh Server einzurichten, aber irgendwie funktioniert meine lokale Namensauflösung nicht korrekt: der Name des Servers soll "latex" sein, meine /etc/hosts Datei sieht so aus:
Die IP 192.168.178.42 wurde per DHCP vom Router zugewiesen.
Weiß jemand wie ich es erreiche, dass der Name des Servers sichtbar ist?
gruß thomas
das hört sich gut an
Bin gerade dabei den ssh Server einzurichten, aber irgendwie funktioniert meine lokale Namensauflösung nicht korrekt: der Name des Servers soll "latex" sein, meine /etc/hosts Datei sieht so aus:
Code: Alles auswählen
127.0.0.1 localhost
127.0.1.1 latex
192.168.178.42 latex
Weiß jemand wie ich es erreiche, dass der Name des Servers sichtbar ist?
gruß thomas
Re: Latex-Server
Ja, ich wuerde auch die SSH-Variante bevorzugen, da hat man ein paar Probleme weniger. Von mir aus mit scponly, damit (fremde) Benutzer keinen Unfug treiben. Eine gewisse Aufmerksamkeit wuerde ich auf die Trennung der einzelnen Jobs legen. So als grobe Idee:als Daemon auf dem Server. Es gibt zwei magische Dateien, eine .go, die als allerletzte Datei geschrieben wird, wonach der Server mit der Arbeit beginnen kann; und eine .todo, in der die zu bearbeitenden *.tex als relative Pfade angegeben sind. Z.B. ergibt es eher wenig Sinn, ein cover.tex durch pdflatex zu jagen, wenn es von main.tex per include referenziert wird. Das Client-Skript dazu saehe so aus:Per Default wird das aktuelle Arbeitsverzeichnis rekursiv nach $in auf dem Account geschoben, worauf hin pdflatex alle *.tex zum Frass vorgeworfen bekommt. Anschliessend wird gewartet, bis der Job durch ist aka. bis ein Projektordner mit matchender $out/*/.go gefunden wurde. Dieser wird nach lokal kopiert und anschliessend das Build-Log ausgegeben.
Der Code ist haeppchenweise getestet und moeglicherweise nicht perfekt. Diese etwas verkrampfte SSH/SCP-Mischung soll dafuer sorgen, dass das System auch bei einer scponly-Shell korrekt laeuft. Ein bekanntes Problem bei meinem Konzept ist, dass Clients "boeswillig" ohne "Passwort", also dem md5-gehashten Zufallsdaten, an den Output anderer Benutzer kommen koennen (solange diese ihre Daten nicht abgeholt haben). Ebenso koennte die Lock-Datei ignoriert werden und so waehrend des "Auftragseingang" die Daten veraendert werden. Das koennte man z.B. mit einem ekligen peek-and-poke ueber SCP umgehen, aber nicht in diesem proof-of-concept hier.
Bei deiner hosts ist ist die zweite Zeile ueberfluessig, der erste Suchtreffer zaehlt, d.h. ein Lookup wuerde immer 127.0.1.1 zurueckgeben und dort abbrechen.
Gruss Cae
Code: Alles auswählen
#!/bin/sh
in=~/incoming
out=~/outgoing
while true; do
# wait for changes until $in/.go exists
while inotifywait -r "$in"; do
test -f "$in/.go" && break;
done
tmp="$(mktemp -d)";
mv "$in/"* "$tmp"; # other tasks can use $in now
cd "$tmp";
while read file; do
printf "==== %s\n" "$file" >&2;
if [ -e "$file" ]; then
pdflatex "$file"
else
printf "%s does not exist\n" "$file" >&2;
fi
done <.todo >log 2>&1
mv "$tmp" "$outgoing";
done
Code: Alles auswählen
#!/bin/sh
acc=user@host;
in=~/incoming;
out=~/outgoing
dummy="$(mktemp)";
trap "rm $dummy" INT EXIT;
if scp "$acc:$in/.lock" /dev/null >/dev/null 2>&1; then
echo "$acc:$in is locked, try later again" >&2;
exit 1;
fi
scp "$dummy" "$acc:$in/.lock"; # lock $in/
if [ ! -e .todo ]; then # asume default --> pdflatex *.tex
ls -1 *.tex >.todo;
fi
scp -r . "$acc:$in/";
secret="$(head -c 16 /dev/urandom | md5sum | cut -f1 -d\ | tee "$dummy")";
scp "$dummy" "$acc:$in/.go"; # let the fun begin
while sleep 1; do # wait for our finished job (forever)
ssh "$acc" ls -1d "$out" | while read file; do
scp "$acc:$out/$file/.go" "$dummy";
if [ "$secret" = "$(cat "$dummy")" ]; then # found "our" dir
outdir="$(mktemp -d)";
scp -r "$acc:$out/$file/" "$outdir";
ssh "$acc" rm -r "$out/$file/"; # cleanup
less "$outdir/log";
exit 0;
fi
done
done
Der Code ist haeppchenweise getestet und moeglicherweise nicht perfekt. Diese etwas verkrampfte SSH/SCP-Mischung soll dafuer sorgen, dass das System auch bei einer scponly-Shell korrekt laeuft. Ein bekanntes Problem bei meinem Konzept ist, dass Clients "boeswillig" ohne "Passwort", also dem md5-gehashten Zufallsdaten, an den Output anderer Benutzer kommen koennen (solange diese ihre Daten nicht abgeholt haben). Ebenso koennte die Lock-Datei ignoriert werden und so waehrend des "Auftragseingang" die Daten veraendert werden. Das koennte man z.B. mit einem ekligen peek-and-poke ueber SCP umgehen, aber nicht in diesem proof-of-concept hier.
Bei deiner hosts ist ist die zweite Zeile ueberfluessig, der erste Suchtreffer zaehlt, d.h. ein Lookup wuerde immer 127.0.1.1 zurueckgeben und dort abbrechen.
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: Latex-Server
Hallo,
@Cae: das sieht ja ganz schön kompliziert aus. Wenn ich das richtig verstehe regelt dein Skript den Gebrauch des Servers durch mehrere Benutzer?
Soweit bin ich noch nicht ganz
Wenn ich mehrere Benutzer in Betracht ziehe, dann sollte ich wahrscheinlich einen Benutzer anlegen, der einen Ordner in /home/ hat und sonst nirgends lesen oder schreiben darf (außer das notwendigste) und der die Rechte hat das Programm pdflatex bzw. rubber auszuführen.
So: wie erstelle ich so ein Benutzerkonto?
Mein bisheriger Ansatz war (noch ohne mehrere Benutzer) ein simples Bash-Skript (clientseitig):
(Bisher noch ungetestet, da der Server gerade nicht zur Verfügung steht)
gruß thomas
@Cae: das sieht ja ganz schön kompliziert aus. Wenn ich das richtig verstehe regelt dein Skript den Gebrauch des Servers durch mehrere Benutzer?
Soweit bin ich noch nicht ganz
Wenn ich mehrere Benutzer in Betracht ziehe, dann sollte ich wahrscheinlich einen Benutzer anlegen, der einen Ordner in /home/ hat und sonst nirgends lesen oder schreiben darf (außer das notwendigste) und der die Rechte hat das Programm pdflatex bzw. rubber auszuführen.
So: wie erstelle ich so ein Benutzerkonto?
Mein bisheriger Ansatz war (noch ohne mehrere Benutzer) ein simples Bash-Skript (clientseitig):
Code: Alles auswählen
#!/bin/bash
if [ $# == 1 ]; then
if [ -d "$1" ]; then
dir="$1"
dir=${dir%/*}
cd "$dir"
archiv="latex.tar.gz"
tar cfvz "$archiv" * --exclude="$archiv"
scp "$archiv" thomas@192.168.178.42:/home/thomas/latex/latex.tar.gz
ssh -t thomas@192.168.178.42 'cd /home/thomas/latex/ && \
tar xfvz latex.tar.gz && \
rm latex.tar.gz && \
pdflatex *.tex && \
tar cfvz latex.tar.gz * --exclude=latex.tar.gz'
scp thomas@192.168.178.42:/home/thomas/latex/latex.tar.gz "$archiv"
ssh -t thomas@192.168.178.42 'cd /home/thomas/latex/ && \
rm *'
else
echo "target must be a directory"
fi
else
echo "Usage: $0 directory"
fi
gruß thomas
Re: Latex-Server
Okay, man kann das natuerlich auch direkt vom Client aus anwerfen. Bei deinem Code kann man sich das Taren eigentlich sparen, weil scp das auch prima kann:Hmm... irgendwie habe ich da nicht viel uebrig gelassen, ausser der Idee... Das Ganze enthaelt eigentlich keine Bash-spezifischen Ausdruecke (wenn man anstatt [ .. == .. ] einfach [ .. -eq .. ] schreibt), daher ist die schnellere sh ausreichend. Die Tar-Operationen und damit verbundenes Loeschen spare ich mir durch scp -r. $dir wird sonst nicht gebraucht, da kann man auch direkt cden.
Man sollte ein bisschen aufpassen bei den rm -r ... *-Operationen.
Gruss Cae
Code: Alles auswählen
#!/bin/sh
acc="thomas@192.168.178.42"
target="/home/thomas/latex/"
if [ $# -eq 1 ]; then
if [ -d "$1" ]; then
cd "${1%/*}" # or: dirname(1)
scp -r * "$acc:$target"
ssh -t "$acc" ' \
cd '"$target"' && \
pdflatex *.tex \
'
scp -r "$acc:$target" .
ssh -t "$acc" 'rm -r '"$target"'*'
else
echo "target must be a directory" >&2
exit 2
fi
else
echo "Usage: $0 directory" >&2
exit 1
fi
Man sollte ein bisschen aufpassen bei den rm -r ... *-Operationen.
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: Latex-Server
Hallo Cae,
erstmal vielen Dank für deine Hilfe
Ich konnte da tatsächlich die ein oder andere Zeile wiedererkennen
und eine kleine Verbesserung hätte ich sogar noch: beim zurückkopieren würde ich eher verwenden, sonst bekommt man ziemlich viele Unterordner, da scp bei jedem Durchgang einen neuen Unterordner hinzufügen würde.
gruß thomas
erstmal vielen Dank für deine Hilfe
Ich konnte da tatsächlich die ein oder andere Zeile wiedererkennen
und eine kleine Verbesserung hätte ich sogar noch: beim zurückkopieren würde ich eher
Code: Alles auswählen
scp -r "$acc:$target*.pdf" .
gruß thomas
Re: Latex-Server
Hallo allerseits,
ich hatte dasselbe Problem wie Thomas, nur mit einer anderen Motivation: Vor einer LaTeX-Installation auf meinem lokalen Rechner schrecke ich nicht zurück. Allerdings ist mein Laptop so langsam, dass das Arbeiten mit LaTeX nicht wirklich Spaß macht, insbesondere dann nicht, wenn man schnell iterieren möchte.
Vor ein paar Wochen dann wurde die Frustration so groß, dass ich ein kurzes Programm geschrieben habe, das die Quelldateien auf einen Server kopiert, dort LaTeX ausführt und die entstehende PDF-Datei herunterlädt.
Gegenüber den in diesem Thread vorgeschlagenen Lösungen ist es in folgenden Punkten komplexer: die benötigten Eingabedateien werden automatisiert zusammengesucht (etwa werden mit \includegraphics eingebundene Bilder mitkopiert), LaTeX wird auf dem Server immer schon mit der Präambel des letzten Durchlaufs gestartet (damit, wenn sich dann später die Eingabedokumente ändern, LaTeX direkt loslegen kann und insbesondere nicht mehr die vielen Pakete laden muss) und der Download der PDF-Datei beginnt noch bevor LaTeX ihre Erstellung abgeschlossen hat (das bedingt mitunter das mehrfache Übertragen einiger Blöcke).
Ihr seid herzlich eingeladen, das Programm auszuprobieren und bei Schwierigkeiten mich zu kontaktieren. Es besteht aus nur einer Datei, ist in einem Mix aus Shell und Perl geschrieben und hat keinerlei Abhängigkeiten, die über eine Standard-Debian-Installation hinausgehen würden. https://github.com/iblech/sshlatex
Viele Grüße
Ingo
ich hatte dasselbe Problem wie Thomas, nur mit einer anderen Motivation: Vor einer LaTeX-Installation auf meinem lokalen Rechner schrecke ich nicht zurück. Allerdings ist mein Laptop so langsam, dass das Arbeiten mit LaTeX nicht wirklich Spaß macht, insbesondere dann nicht, wenn man schnell iterieren möchte.
Vor ein paar Wochen dann wurde die Frustration so groß, dass ich ein kurzes Programm geschrieben habe, das die Quelldateien auf einen Server kopiert, dort LaTeX ausführt und die entstehende PDF-Datei herunterlädt.
Gegenüber den in diesem Thread vorgeschlagenen Lösungen ist es in folgenden Punkten komplexer: die benötigten Eingabedateien werden automatisiert zusammengesucht (etwa werden mit \includegraphics eingebundene Bilder mitkopiert), LaTeX wird auf dem Server immer schon mit der Präambel des letzten Durchlaufs gestartet (damit, wenn sich dann später die Eingabedokumente ändern, LaTeX direkt loslegen kann und insbesondere nicht mehr die vielen Pakete laden muss) und der Download der PDF-Datei beginnt noch bevor LaTeX ihre Erstellung abgeschlossen hat (das bedingt mitunter das mehrfache Übertragen einiger Blöcke).
Ihr seid herzlich eingeladen, das Programm auszuprobieren und bei Schwierigkeiten mich zu kontaktieren. Es besteht aus nur einer Datei, ist in einem Mix aus Shell und Perl geschrieben und hat keinerlei Abhängigkeiten, die über eine Standard-Debian-Installation hinausgehen würden. https://github.com/iblech/sshlatex
Viele Grüße
Ingo