Latex-Server

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
thomas235
Beiträge: 71
Registriert: 28.04.2012 14:36:19

Latex-Server

Beitrag von thomas235 » 18.04.2013 22:55:21

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

Benutzeravatar
shoening
Beiträge: 918
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Latex-Server

Beitrag von shoening » 19.04.2013 07:22:46

Hi,

ich glaube Du meinst so etwas: http://blog.fbs-fulda.info/?p=8

Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

thomas235
Beiträge: 71
Registriert: 28.04.2012 14:36:19

Re: Latex-Server

Beitrag von thomas235 » 19.04.2013 17:41:40

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

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Latex-Server

Beitrag von Cae » 19.04.2013 19:22:29

Anstatt das dort verlinkte fsniper selbst am Paketsystem vorbei zu installieren, sollte man vielleicht das in dieser Hinsicht aequivalente inotifywait aus Debianinotify-tools einsetzen.

Den Userdir-Anteil kann man sich fuer's Testen, oder wenn keine Benutzerverwaltung noetig ist, sparen. Mit dem dort verwendeten Debianrubber als LaTeX-Buildserver hab' ich noch keine Erfahrungen, pdflatex sollte es auch tun. Im Prinzip braucht man nur
  1. ein tmpdir anlegen
  2. jede relevante Datei dorthin kopieren (HTTP)
  3. pdflatex anwerfen
  4. das .pdf bereitstellen
  5. das tmpdir loeschen
. Ich hab' da gerade mal rumgespielt und gucke gerade, wie man mehrere Dateien aus einer <form> gesplittet bekommt.

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

thomas235
Beiträge: 71
Registriert: 28.04.2012 14:36:19

Re: Latex-Server

Beitrag von thomas235 » 19.04.2013 21:26:15

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

Benutzeravatar
shoening
Beiträge: 918
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Latex-Server

Beitrag von shoening » 20.04.2013 12:14:08

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
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

thomas235
Beiträge: 71
Registriert: 28.04.2012 14:36:19

Re: Latex-Server

Beitrag von thomas235 » 20.04.2013 14:57:54

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:

Code: Alles auswählen

127.0.0.1    localhost
127.0.1.1    latex
192.168.178.42 latex
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

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Latex-Server

Beitrag von Cae » 20.04.2013 19:02:26

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:

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
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:

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
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
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

thomas235
Beiträge: 71
Registriert: 28.04.2012 14:36:19

Re: Latex-Server

Beitrag von thomas235 » 20.04.2013 21:09:02

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):

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
(Bisher noch ungetestet, da der Server gerade nicht zur Verfügung steht)

gruß thomas

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Latex-Server

Beitrag von Cae » 20.04.2013 22:43:04

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:

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
Hmm... irgendwie habe ich da nicht viel uebrig gelassen, ausser der Idee... :oops: 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
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

thomas235
Beiträge: 71
Registriert: 28.04.2012 14:36:19

Re: Latex-Server

Beitrag von thomas235 » 21.04.2013 00:15:09

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

Code: Alles auswählen

scp -r "$acc:$target*.pdf" .
verwenden, sonst bekommt man ziemlich viele Unterordner, da scp bei jedem Durchgang einen neuen Unterordner hinzufügen würde.

gruß thomas

iblech
Beiträge: 2
Registriert: 08.12.2015 20:07:48

Re: Latex-Server

Beitrag von iblech » 08.12.2015 20:19:32

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

Antworten