Heute bin ich endlich dazu gekommen, mich um die 1-Click-Installation von TeX Live für openSUSE 13.1 zu kümmern. Bisher war das Repository noch für openSUSE 12.3 und nur notfalls und eingeschränkt für openSUSE 13.1 verwendbar. Dabei bin ich auf Beschränkungen von spec-Dateien gestoßen, die es zu überwinden galt.
Um alle möglichen texlive-Abhängigkeiten von allen möglichen Paketen für openSUSE zu befriedigen, ermittle ich im build-Prozess für die spec-Datei alle existierenden openSUSE-texlive-Pakete. Diese werden in eine Variable eingetragen und dann sowohl für Provides:
als auch Obsoletes:
verwendet. Damit ist eigentlich sichergestellt, dass texlive-config die openSUSE-texlive-Pakete komplett ersetzt.
Schon bei der Erzeugung der spec-Datei für openSUSE 12.3 gab es das Problem, dass die Zeilenlänge einer spec-Datei offenbar beschränkt ist. Um diese Beschränkung zu umgehen, habe ich damals jeweils nur 100 Pakete einer Variablen zugewiesen und zum Schluss dann eine Variable gebaut, die aus all diesen Variablen besteht. Als ich jedoch texlive-config für openSUSE 13.1 installiert, fiel auf, dass damit eine Abhängigkeit von lyx nicht befriedigt werden konnte. Das wunderte mich dann sehr, denn in der spec-Datei ist explizit angegeben, dass diese Abhängigkeit von texlive-config befriedigt wird. Erst als ich die spec-Datei mit rpm --query
untersuchte, viel auf, dass rpm
dies ganz anders sieht. Nach einigen weiteren Tests stellte sich heraus, dass offenbar die Größe einer Variablen ebenfalls beschränkt ist. Dabei nützt es auch nichts, eine Variable aus mehreren anderen zusammenzusetzen, die dann wieder die eigentlichen Paketnamen enthalten. Die Variablen muss den expandierten String aufnehmen können, was sie nicht konnte.
Meine erste Lösung sah dann so aus, dass ich eine ganze Reihe an Unterpakten baute, die von texlive-config benötigt werden. Das hätte funktioniert, hätte aber auch bedeutet, dass man an Stelle eines rpms drei Dutzend rpms hätte installieren müssen. Auch wenn das per 1-Click möglich gewesen wäre, wäre es nicht schön gewesen.
Nach einigen Tests stellte sich schließlich heraus, dass es jedoch möglich ist, eine ganze Latte an Provides:
und Obsoletes:
in eine spec-Datei zu schreiben und die dann alle auch von rpm verarbeitet werden. Damit ist die spec-Datei nun zwar rund doppelt so groß wie zuvor, was sich leider auch auf die Größe des rpms auswirkt, aber es funktioniert. Leider braucht der build-Prozess nun ein zusätzliches Skript, weil es im Makefile zu unübersichtlich wurde. Nunja, man kann nicht alles haben …
Bis demnächst
Markus