Autor Thema: mehrer versionen installieren und aufrufen  (Gelesen 21317 mal)

eluze

  • Gast
mehrer versionen installieren und aufrufen
« am: Samstag, 13. Juli 2013, 11:59 »
ich habe mehrere LilyPond-versionen installiert (unter Windows) und zwar im ordner
Zitat
c:\Program Files (x86)\

diese heissen lilypond, lilypond2.12.3, lilypond2.13.2 usw. in lilypond ist die jeweils neuste version

der aufruf älterer versionen erfolgt über "c:\program files (x86)\lilypond2.12.3\usr\bin\lilypond.exe"
das programm lymv.bat erleichtert diese eingabe und führt lilypond mit allen vorhandenen versionen aus, die der spezifikation entsprechen.

lymv "c:\program files (x86^)" lilypond 2.17 test.ly
hoffe, das ist nützlich
Eluze


bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #1 am: Montag, 15. Juli 2013, 10:54 »
Ich benutze seit rund 30 Jahren nur Linux, eine BAT-Datei würde mir nichts nutzen. Dennoch interessiert mich das Thema. Zum Verständnis sei vorangestellt:
/ (slash) ist in Linux das, was bei M$ der back-slash \ ist.

In Linux befinden sich die Libraries in
/usr/local/lilypond/usr/lib
und die Binaries, guile, lilypond, lilypond-book .... und viele mehr in
/usr/local/lilypond/usr/bin/.

Beim Aufruf von lilypond wird ein Shell-Script mit dem Namen lilypond im Verzeichnis /usr/local/bin/lilypond
aufgerufen (ich glaube das Shellscript wird bei der Installation erstellt - oder habe ich da was selbst verändert?) und es werden diese oben aufgelisteten Pfade gesetzt und die Compilation ausgeführt. Das Shellscript:
#!/bin/sh
me=`basename $0`
export LD_LIBRARY_PATH="/usr/local/lilypond/usr/lib"
exec "/usr/local/lilypond/usr/bin/$me" "$@"

Es ist erkennbar, dass dort für den Aufruf einer ganz bestimmten Version die Pfade zu dieser Version unterscheidbar sein müssen.

Man müsste also für verschiedene Versionen diese Verzeichnisse unterscheidbar halten, was in der Standardinstallation (zumindest  in Linux) nicht vorgesehen ist.  Eine meines Erachtens gute Möglichkeit wäre den Teil des Pfades /usr/local/lilypond mit der Version zu erweitern, z. B zu /usr/local/lilypond/2.16.2/ oder /usr/local/lilypond-2.16.2 schon bei der Installation ändern. Der Aufruf der gewünschten Version von lilypond kann man einfach das jetzt vorhanden Shellscript  z. B. in der oben vorgeschlagenen Form
#!/bin/sh
me=`basename $0`
export LD_LIBRARY_PATH="/usr/local/lilypond/2.16.2/usr/lib"
exec "/usr/local/lilypond/2.16.2/usr/bin/$me" "$@"
würde die Version 2.16.2 aufgerufen.

Man könnte zum Testen der Idee versuchen, die Verzeichnisstruktur von Hand solcherart zu ändern, also die Verzeichnisse mit der Version von Hand zu erstellen und dann das Aufrufscript zu ändern. (Das werde ich in den nächsten Tagen mal ausprobieren, muss aber zuerst Anderes fertigstellen. Ich bin aber nicht böse, wenn ein Anderer schneller ist und das vor mir ausprobiert! Wäre dann schön über das Ergebnis und die möglichen Probleme/Fehler zu hören.)

Wenn mehrere Versionen (unterscheidbar) installiert sind, kann man ein Shellscript erstellen, das eben nach Wunsch eine bestimmte oder auch mehrere Versionen aufruft. (Etwa  so wie vermutlich Eluze das unter M$ mit seinem batch file macht. Shellscripte sind unter Linux das, was batchfiles unter M$ sind. Beides sind lediglich scripte, also Listen von Befehlen, die nacheinander abgearbeitet werden.)

Soll eine Versionsunterscheidung schon bei der Installation erfolgen, müsste man dazu vermutlich viele Installations-Shell-Scripte, eventuell auch noch make und make install durchdacht ändern, denn - wie sonst? - erfolgt die Installation oder die Compilation unter Linux über Shell-Scripte. Diese Änderung ist sicher möglich, aber ziemlich viel Aufwand bis man das Gesamtsystem von Scripten  bug-free hat. Vielleicht können die Experten mit Überblick über den Installationsprozess den Installationsablauf dahin gehend ändern?

Grüße

« Letzte Änderung: Montag, 15. Juli 2013, 11:03 von bblochl »

eluze

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #2 am: Montag, 15. Juli 2013, 11:28 »
ergänzend dazu sei noch erwähnt wie es unter windows läuft:

defaultmässig wird LilyPond im ordner c:\Program Files (x86)\LilyPond  installiert (bei älteren versionen c:\Program Files\. dieser ordner kann jedoch beliebig anders heissen, also z.b. mit der angehängten version-nummer: LilyPond2.17.22 oder "LilyPond   2.17.22" (mit leerzeichen) - alle zu LilyPond gehörenden dateien/programme sind dort enthalten!

LilyPond kreiert dabei einen eintrag im registry, der ermöglicht einfach nur lilypond zu schreiben, um die kompilation anzukicken.

man kann also bei der installation den default beibehalten und jeweils vorher die aktuelle version umbenennen.

ich kann mir nur schwer vorstellen, dass das unter linux oder anderen betriebssystemen so viel komplizierter sein soll!

Eluze

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #3 am: Montag, 15. Juli 2013, 13:09 »
Vorsicht: Hab's gerade ausprobiert, gibt noch ein Problem mit der Fehlermeldung exec: /usr/local/lilypond/usr2.17.21/bin/lilypond2.17.21: not found Es stimmt wohl noch was mit den Pfden nicht ganz!!

Eluze:
Zitat
... defaultmässig wird LilyPond im ordner c:\Program Files (x86)\LilyPond  installiert (bei älteren versionen c:\Program Files\. dieser ordner kann jedoch beliebig anders heissen, also z.b. mit der angehängten version-nummer: LilyPond2.17.22 oder "LilyPond   2.17.22" (mit leerzeichen) - alle zu LilyPond gehörenden dateien/programme sind dort enthalten ...!

So wie Du schreibst, benennst Du ja offenbar die Verzeichnisse von Hand um, ich dachte das passiert bei M$ schon bei der Installation - war wohl falsch gedacht. Schwierig ist wohl nur diese "Versionierung" schon bei der Installation wegen der erforderlichen Änderung im Installationsprozess. (Ich habe ja vermutet, dass das bei M$ erfolgt.)

Du hast praktisch ja das gleiche Umbenennungsschema verweendet, wie ich das vorgeschlagen habe. Allerdings erkenne ich, dass eines der vorgeschlagenen Schemata Probleme machen könnte, nämlich das:
/usr/local/lilypond/2.16.2/Das funktioniert wohl nicht, weil lilypond ja in das Verzeichnis lilypond installiert wird und so wie ich bemerkt habe wird bei der Installation geprüft, ob lilypond schon installiert ist und im positiven Fall erfolgt eine Auffoerderung zur Deinstallation - vermutlich wird dabei geprüft, ob ein Verzeichnis
/usr/local/lilypond/ vorhanden ist. (Probiert habe ich's nicht.)

So sehr viel unterschiedlich ist das bei Linux nicht. Das Verzeichnis /usr/local/lilypond/ kann man natürlich auch unter Linux vor der Installation einer neuen Version zu beispielsweise /usr/local/lilypond2.16.2/ umbenennen. Unter Linux kann man das von der Zeileneingabe so machen:

desktop:~$ sudo mv /usr/local/lilypond/  /usr/local/lilypond2.16.2/
Das kann man natürlich auch im Dateibrowser machen. In beiden Fällen sind Administrationsrechte erforderlich. Im Fall der Umbenennung ist die Originaldatie unter dem alten Namen natürlich nicht mehr verfügbar.
Danach muss man noch das alte Lilypond-Aufrufshellscript  /usr/local/bin/lilypond zum neuen lilypond-Aufrufshellscript /usr/local/bin/lilypond2.16.2 umbennen und versionieren, also ändern von
#!/bin/sh
me=`basename $0`
export LD_LIBRARY_PATH="/usr/local/lilypond/usr/lib"
exec "/usr/local/lilypond/usr/bin/$me" "$@"
zu
#!/bin/sh
me=`basename $0`
export LD_LIBRARY_PATH="/usr/local/lilypond2.16.2/usr/lib"
exec "/usr/local/lilypond2.16.2/usr/bin/$me" "$@"
Das kann man mit einem einfachen ASCII-Texteditor (keinen Editor zum Briefe schreiben!) vornehmen (z.B. nedit, nano, gedit, pluma. Hardcore-Linuxer nehmen vi, vim oder vim-gnome). Z. B.:
desktop:~$ sudo gedit /usr/local/bin/lilypond
Nach dem Editieren speichern unter lilypond2.16.2 und die datei ausführbar für alle oder den User machen. Z. B.
desktop:~$  sudo chmod a+x /usr/local/bin/lilypond2.16.2
Danch sollte man Version 2.16.2 mittels lilypond2.16.2 aufrufen können.


Eleganter wäre es allerdings  das Script so zu erweitern, dass die gewünschte Version als zweiter Parameter zusätzlich zum Namen der  ly-Datei beim Aufruf übergeben werden kann. Dann würde die Umbennenung des Aufrufscripts natürlich entfallen können.

Grüße
« Letzte Änderung: Montag, 15. Juli 2013, 15:52 von bblochl »

fugenkomponist

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #4 am: Montag, 15. Juli 2013, 14:27 »
Hm, ich glaub, ich schau mir das nachher auch mal an, vielleicht nehm ich mir auch Zeit und schreib da was einfach zu handhabendes. Bin auch Linux-User (oder laut bblochl „Hardcore-Linuxer“), frage mich aber zwei Sachen: was sind denn vim-gnome und die Option -r bei mv? Letztere konnte ich in der man-page nicht finden …

Edit: mir ist grad noch ein Problem zumindest bei Ubuntu (und debian?) eingefallen: Das Paket frescobaldi hängt ab vom Paket lilypond, d. h. wenn man Frescobaldi installiert, ist automatisch auch ein LilyPond aus den Paketquellen dabei, was einem dazwischenfunkt. Oder kann man apt-get o. ä. beibringen, dass man frescobaldi, nicht aber lilypond installieren will? Oder müsste man dann Frescobaldi auch von Hand installieren?
« Letzte Änderung: Montag, 15. Juli 2013, 14:32 von fugenkomponist »

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #5 am: Montag, 15. Juli 2013, 14:58 »
Habe gerade eine Unstimmigkeit entdeckt, die in der internen Verzeichnisstruktur liegt.

Es funktioniert, wenn  man usr/local/binlilypond2.16.2 umschriebt:
#!/bin/sh
me=`basename $0`
me="lilypond"
export LD_LIBRARY_PATH="/usr/local/lilypond/usr/lib"
exec "/usr/local/lilypond/usr/bin/$me" "$@"
Das liegt daran, dass me=`basename $0` als Ergebnis lilypond2.16.2 liefertund dann exec zu
/usr/local/lilypond/usr2.17.21/bin/lilypond2.17.21wird (wobei mit $@" noch der Dateiname angehängt wird).
Lilypond heißt aber im Verzeichnis
/usr/local/lilypond2.17.21/usr/bin/einfach lilypond und nicht lilypond2.17.21. Das geht dann schief. "Schuld" daran ist, dass der Verzeichnispfad falsch zusammengesetzt wird. Im Verzeichnis
/usr/local/bin/lilypond
steht der Pfad
/usr/local/bin/lilypond
Bei
/usr/local/bin/lilypond2.16.2
steht aber
/usr/local/bin/lilypond2.16.2
Wenn der Texteintrag von dort in den Pfad übernommen wird, wird also versucht lilypond mittels lilypond2.16.2 statt richtig einfach als lilypond aufzurufen.

Warum der Pfad
/usr/local/bin/lilypond
in einem Verzeichnis
/usr/local/bin/lilypond
gleichen namens steht und übernommen wird, der also eigentlich schon bekannt ist, weiß ich nicht. (Das nennt man wohl Tautologie?) Linuxspezialisten oder besser die lilypond-Spezialisten könne das vielleicht erklären?? Steckt dahinter vielleicht die Idee für einen versionsdefinierten Aufruf?

Aber zunächst funktioniert das immerhin!

Grüße
« Letzte Änderung: Montag, 15. Juli 2013, 15:05 von bblochl »

eluze

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #6 am: Montag, 15. Juli 2013, 15:03 »
So wie Du schreibst, benennst Du ja offenbar die Verzeichnisse von Hand um, ich dachte das passiert bei M$ schon bei der Installation - war wohl falsch gedacht. Schwierig ist wohl nur diese "Versionierung" schon bei der Installation wegen der erforderlichen Änderung im Installationsprozess. (Ich habe ja vermutet, dass das bei M$ erfolgt.)
das ist einerlei - bei der installation kommt ein prompt, wo du entscheidest, wohin installiert wird. der befehl 'lilypond' verweist dann auf den entsprechenden pfad (der an die path variable angefügt wird - vorsicht wenn die path variable allzu lange wird!)

ich habe mich dafür entschieden, mit lilypond die zuletzt heruntergeladene version anzusprechen und die anderen versionen mit
Zitat
lymv … 2.17 …
aufzurufen. (dabei kann ich den 2. paramter recht frei gestalten oder sogar leerlassen (mit "", wie das bei positionellen parametern üblich ist)
das hilft mir v.a. bei der suche nach dem ersten auftauchen eines fehlers.

sonst verwende ich gerne die neuste version.

es ist natürlich auch möglich alle lilypond-versionen auf einen externen datenträger zu verlegen - mein lymv-programm funktioniert damit genauso gut.
Eluze

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #7 am: Montag, 15. Juli 2013, 15:50 »
Zitate von fugenkomponist:

Zitat
was sind denn vim-gnome ...

Zitat
Vi IMproved - enhanced vi editor - with GNOME2 GUI
 
Vim is an almost compatible version of the UNIX editor Vi.

Many new features have been added: multi level undo, syntax
highlighting, command line history, on-line help, filename
completion, block operations, folding, Unicode support, etc.

This package contains a version of vim compiled with a GNOME2 GUI
and support for scripting with Lua, Perl, Python, Ruby, and Tcl.

Zitat
... und die Option -r bei mv? Letztere konnte ich in der man-page nicht finden …
Gibt's auch nicht, ist ein Fehler. Ich habe nämlich zum Testen nicht mv verwendet, sondern cp um mir das Original zu erhalten und -r ist dann natürlich für rekursives kopieren erforderlich. mv wäre natürlich erforderlich um frei für die Neuinstallation zu machen (vermute ich mal). Werde das korrigieren.

Zitat
Edit: mir ist grad noch ein Problem zumindest bei Ubuntu (und debian?) eingefallen: Das Paket frescobaldi hängt ab vom Paket lilypond, d. h. wenn man Frescobaldi installiert, ist automatisch auch ein LilyPond aus den Paketquellen dabei, was einem dazwischenfunkt. Oder kann man apt-get o. ä. beibringen, dass man frescobaldi, nicht aber lilypond installieren will? Oder müsste man dann Frescobaldi auch von Hand installieren?
Ich verwende Frescobaldi nicht und kann deshalb dazu nicht viel sagen. Historisch war lilyKDE ein Kate-Plugin für KDE3, Frescobaldi ein Kate-Plugin für KDE4, daran kann's aber wohl nicht liegen? (Kate verwende ich sehr gerne!)  Man kann die Paketquellen überlisten, aber man begibt sich dann in die Versionsabhängigkeitshölle! Ich habe es mal vor mehreren Jahren unter Debian für Lazarus gemacht, als dieser nicht weiter unterstützt wurde. Am Anfang lief das noch gut, aber je weiter sich die Pakete auseinanderentwickelten ... endete mit Neuinstallation. Aber das war ein bisschen anders, weil ich ja alte Pakete halten wollte.

Ich habe gerade nachgeschaut, die meisten Paketquellen arbeiten ja noch mit lilypond 2.14.2. Ich könnte mir gut vorstellen, dass so wie hier für Probleme ein ähnliches Problem verschiedener lilypond-Versionen "mit überkreuzten Pfaden" verschiedener Versionen  eine Rolle spielen könnte?
Man müsste rausfinden, wie man den lilypond-Aufruf von Frescobaldi ändern kann und diesen dann auf die neue lilypond-Version setzen. Das müsste man bei jedem Update von Fresobaldi vermutlich wiederholen, nachdem lilypond und Frescobaldi über die Paketlisten verknüpft sind.
Ich habe mir gerade mal die Feature-List von Frescobaldi angescchaut:
Zitat
Use multiple versions of LilyPond, automatically selects the correct version
Da miuss es also was geben.

Grüße
 

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #8 am: Montag, 15. Juli 2013, 15:58 »
Frescobaldi fugenkomponist:

Das Naheliegende fällt mir erst jetzt ein, hast Du schon mal versucht Frescobaldi aus den Quellen zu installierren? Dann nimmt doch vermutlich Frescobaldi die lilypond-Version die Du installiert hast, unabhängig von den Paketverknüfungen des Linux-Brands das Du benutzt. Updaten musst Du dann allerdings selsbt, genau so wie Lilypond, wenn Du eine andere Version als die der Paketliste installierst.

Grüße

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #9 am: Montag, 15. Juli 2013, 16:33 »
Zitat
Zitat von Eluze Heute um 14:03:28

das ist einerlei - bei der installation kommt ein prompt, wo du entscheidest, wohin installiert wird. der befehl 'lilypond' verweist dann auf den entsprechenden pfad (der an die path variable angefügt wird - vorsicht wenn die path variable allzu lange wird!)
Eluze
Beim besten Willen kann ich mich nciht aran erinnern ob ich nach einem Installationsort gefragt werde. Aber ich werde lilypond nach dem Aufräumen nach den Versionierungsversuchen neu installieren - dann werde ich darauf achten.

Grüße

fugenkomponist

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #10 am: Montag, 15. Juli 2013, 16:34 »
Hmja, Frescobaldi auch von Hand installieren wär ne Idee, da hätt ich vielleicht auch mal drauf kommen sollen …
Man wird nicht wirklich gefragt, kann aber mit der Option --prefix den Pfad ändern.

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #11 am: Dienstag, 16. Juli 2013, 14:52 »
Zitat
Man wird nicht wirklich gefragt, kann aber mit der Option --prefix den Pfad ändern.

--prefix hilft nicht, weil damit eben nur ein prefix angegeben werden kann, aber die Default-Dateinamen  der nicht verändert werden können.

Wenn ich also als prefix beispielsweise ../configure --prefix = $HOME/lilypond-version eingebe (version ist dann die jeweilige Version), dann wird lilypond nach PREFIX/bin/lilypond und `PREFIX/lib/lilypond installiert, aber lilypond muss weiterhin als lilypond aufgerufen werden. (Natürlich muss dazu PATH erweitert werden.) Mein erster Versuch bei einer "Normalinstallation" lilypond in /usr/local/bin in lilypond-version umzubenennen funktionierte nicht - will es aber noch mal versuchen.

Man könnte sich natürlich ein shell-script schreiben für jede Version mit dem jeweiligen Pfad zu der Version  PREFIX/bin/lilypond/lilypond für den Programmaufruf schreiben. Ob lilypond dann funktioniert müsste man testen - sollte eigentlich funktionieren, solange lilypond intern nur relative Pfade benutzt, was ich aber nicht weiß und auch nicht verändern kann.

Grüße

bblochl

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #12 am: Dienstag, 16. Juli 2013, 16:12 »
Installation von der Source lilypond 2.16.2 64bit unter Linux gibt Fehler:

...
cd ./out && /home/ich/lilypond-2.16.2/build/scripts/build/out/run-and-check "/home/ich/lilypond-2.16.2/build/out/bin/lilypond --verbose /home/ich/lilypond-2.16.2/ly/generate-documentation" "generate-documentation.log"

Please check the logfile generate-documentation.log for errors

make[1]: *** [out/internals.texi] Error 1
make[1]: Leaving directory `/home/ich/lilypond-2.16.2/build/Documentation'
make: *** [all] Error 2
Der  Logfile generate-documentation.log wird auch nicht erstellt.

Hat das bei Irgendeinem richtig installiert?

Wo gibt es die Sourcen für altere Versionen und 2.17.X? Kann nur binaries mit shellscript finden?


harm6

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #13 am: Dienstag, 16. Juli 2013, 23:41 »
Hallo bblochl,


...
cd ./out && /home/ich/lilypond-2.16.2/build/scripts/build/out/run-and-check "/home/ich/lilypond-2.16.2/build/out/bin/lilypond --verbose /home/ich/lilypond-2.16.2/ly/generate-documentation" "generate-documentation.log"

Please check the logfile generate-documentation.log for errors

make[1]: *** [out/internals.texi] Error 1
make[1]: Leaving directory `/home/ich/lilypond-2.16.2/build/Documentation'
make: *** [all] Error 2

Das sieht so aus, als hättest Du versucht LilyPond selbst zu kompilieren.
Hast Du Dich an die Instruktionen hier gehalten?

Zitat
Hat das bei Irgendeinem richtig installiert?
Wenn ich mich an die oben verlinkten Instruktionen halte funktioniert 'make'
Allerdings mußt Du noch kyrillische fonts installieren.
Siehe auch hier (->Beobachtungen)

Ein Gedanke. Wenn Du sowieso selbst kompilierst, warum dann nicht gleich die jeweils neueste, noch nicht veröffentlichte Version? (Zumindest zusätzlich)
D.h. git repository, Infos dazu ebenfalls im Contributors Guide.

Zitat
Wo gibt es die Sourcen für altere Versionen und 2.17.X?
http://download.linuxaudio.org/lilypond/binaries/linux-64/
bzw
http://download.linuxaudio.org/lilypond/sources/

Zitat
Kann nur binaries mit shellscript finden?
Weiß ich nicht. Hab' ich nie probiert.

Wenn ich mal mehr Zeit habe schreibe ich auch mal wie ich mehrere Versionen gleichzeitig handhabe.
Ich mach das allerdings komplett manuel, da ich nicht so viele brauche wie Eluze als bug-squad-Mitglied.
(Ich habe nur die letzten stable, die neuste, released devel und die selbst kompilierte von 'master'.
Wenn ich doch eine zusätzliche brauche lade ich die source runter und kompiliere selbst oder benutze den jeweiligen installer)


HTH,
  Harm
« Letzte Änderung: Mittwoch, 17. Juli 2013, 03:16 von harm6 »

trulli

  • Gast
Re: mehrer versionen installieren und aufrufen
« Antwort #14 am: Mittwoch, 17. Juli 2013, 11:28 »
Mein erster Versuch bei einer "Normalinstallation" lilypond in /usr/local/bin in lilypond-version umzubenennen funktionierte nicht - will es aber noch mal versuchen.

Ja, solche Experimente habe ich auch gemacht - hat aber alles nicht geklappt. Die erste installierte Version fordert einen unveränderten Lilypond-Ordner.
Ich bin immer wieder auf die Lösung, die du schon genannt hast, zurückgekommen:
- usr/local/bin/lilypond beliebig umbenennen
- die nächste Version installieren
- usr/local/bin/lilypond zu usr/local/bin/lilypond-2-x-y umbenennen
- usr/local/bin/lilypond zurückbenennen

Gruß