PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arch pacman - Programm in unterschiedlichen Versionen installieren?



jay-t
08.08.12, 18:15
Hallo!
Gibt es die Möglichkeit bei Arch Linux mit pacman ein Programm mehrmals zu installieren in unterschiedlichen Versionen?

Für ein selbstgeschriebenes Programm brauche ich SDL in Version 1.3.
Wenn ich aber jetzt die 1.3 Version installiere, dann laufen alle Programme
die 1.2 benötigen nicht mehr.

Kann ich beide Versionen irgendwie installieren?

marce
08.08.12, 20:21
ohne es beschwören zu können aber ich würde vermuten, daß Du Dir da selbst was basteln musst - Paketverwaltung und merfaches Installieren verschiedener Versionen aus den Standard-Repos schließt sich fast immer aus, egal welche Distribution.

... aber selbst ein Paket bauen, daß den gewünschten Versionen und Installationswünschen entspricht sollte kein Problem darstellen...

kreol
08.08.12, 22:02
Ich kenne Arch auch nicht, aber ein Beispiel aus der Debianwelt: Man kann durchaus mehrere gcc-Versionen parallel laufen lassen solange man auf die Verlinkung achtet bzw. den Pfad zur gewünschten Version jeweils mitgibt.

So oder so ähnlich könnte es auch bei pacman+SDL laufen. Versuch macht kluch...

Kreol

ThorstenHirsch
08.08.12, 23:00
gcc ist eine Ausnahme, da ist die Versionsnummer Bestandteil des Paketnamens (außer beim virtuellen Paket, das auf die neuste Version verlinkt). Normalerweise ist auch bei Debian nur eine Version installierbar, insbesondere von SDL.

Installier dir deine Version einfach in /usr/local, dafür ist das vorgesehen.

delix
09.08.12, 10:06
Das sind ja zwei paar Stiefel :
das eine Paar ist das Programm mit der neuen Version an sich, und das zweite ist die Verwaltung des Pakets mit pacman.
Bei ersterem hast du immer das Risiko, daß die Versionen auf gemeinsame Dateien zugreifen, die nicht ganz diesselben sind. Das ist eine Frage von Trial-and-Error wie bei jeder anderen Disti auch.

Das zweite ist die Verwaltung mit pacman.
Dafür würde es reichen, im PKGBUILD den Namen zu verändern und in den --prefix auf /usr/local zu stellen.

Das ist die aktuelle Datei :


# $Id$
# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor: Allan McRae <allan@archlinux.org>
# Contributor: dorphell <dorphell@archlinux.org>

#pkgname=sdl
pkgname=sdl_neu
pkgver=1.2.15
pkgrel=1
pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard"
arch=('i686' 'x86_64')
url="http://www.libsdl.org"
license=('LGPL')
depends=('glibc' 'libxext' 'libxrender' 'libx11')
makedepends=('alsa-lib' 'mesa' 'libpulse')
options=('!libtool')
source=(http://www.libsdl.org/release/SDL-${pkgver}.tar.gz
sdl-1.2.14-fix-mouse-clicking.patch
sdl-1.2.14-disable-mmx.patch)
md5sums=('9d96df8417572a2afb781a7c4c811a85'
'04d8c179f125e04bcd4c9d60e013c2d7'
'e5c16b7611f62c7cb25f0534eff68852')

build() {
cd ${srcdir}/SDL-${pkgver}
patch -Np1 -i $srcdir/sdl-1.2.14-fix-mouse-clicking.patch
patch -Np1 -i $srcdir/sdl-1.2.14-disable-mmx.patch
./configure --prefix=/usr/local --disable-nasm --enable-alsa --enable-esd \
--with-x --disable-rpath --disable-static
make
}

package() {
cd ${srcdir}/SDL-${pkgver}
make DESTDIR=${pkgdir} install
}

Die Versionsnummer, md5sums und Patches mußt du dann auch noch ändern.
Sicherheitshalber würde ich auch noch in der /etc/pacman.conf Datei das sdl Paket auf die IgnorePKG - Liste setzen, zumindest bis du sicher bist, daß alles so läuft wie du das haben willst.
Checken würde ich dann noch folgende Dinge :
1. reicht das -prefix wirklich aus, daß _ALLE_ erzeugten Dateien in /usr/local landen
2. ändert pacman bei der Installation etwas in deinen Konfig-Dateien
3. sind die Pfade für die neue Version richtig gesetzt
....

Ich würde das dann auch so machen, daß ein eigener User für die neue Version angelegt wird -- das verhindert, daß Konfig-Dateien im $HOME geändert werden.

DAS IST ABER ALLES OHNE GARANTIE UND ANSPRUCH AUF VOLLSTÄNDIGKEIT

jay-t
09.08.12, 21:21
Danke mal für die Hilfe hier.

Den Tipp von delix hatte ich noch nicht gesehen gehabt:

Ich habe die SDL 1.3 Version aus den Sourcen gebaut und mit pacinstall
installiert. Mit /usr/local als Prefix.

Danach die SDL 1.2 mit pacman neu installiert.

Jetzt habe ich aber dieses Problem: Weil beide Pakete ja den gleichen Namen haben:



root@mond stefan]# pacman -Syu
:: Synchronizing package databases...
core is up to date
extra 1412.7 KiB 197K/s 00:07 [######################] 100%
community 1753.8 KiB 307K/s 00:06 [######################] 100%
error: duplicated database entry 'sdl'
:: Starting full system upgrade...
resolving dependencies...
looking for inter-conflicts...

...


Wenn ich jetzt die 1.3 Version mit pacman deinstallieren würde, was ist dann mit der 1.2 er. Der Name ist ja gleich?

Dann könnte ich das mit dem neuen Paketnamen ausprobieren.

pferdefreund
10.08.12, 07:59
Mach mal eine Installation nur der 1.3er Version und
in /usr/lib nen symbolischen link von lib....1.3 auf lib....1.2.
Damit könnten dann, so sich die ABI nicht geändert hat, die alten Programme
weiterhin funktionieren. Hab ich auch schon mal mit gkt 1.2 irgendwas so gemacht und nie
Probleme bekommen.

delix
10.08.12, 09:58
Mach mal eine Installation nur der 1.3er Version und
in /usr/lib nen symbolischen link von lib....1.3 auf lib....1.2.
Damit könnten dann, so sich die ABI nicht geändert hat, die alten Programme
weiterhin funktionieren.

Funktionieren kann das schon so,aber dann benutzt das selbstgeschriebene Programm eben auch die alte Bibliothek.Was bei so einem Mix am Ende herauskommt ist kaum vorhersehbar. Kann gut gehen, muß aber nicht.....



Wenn ich jetzt die 1.3 Version mit pacman deinstallieren würde, was ist dann mit der 1.2 er. Der Name ist ja gleich?

Löschen kannst du das ja nur mit


pacman -R sdl

also hast du keinen Einfluß darauf, welche Version gelöscht wird. Vermutlich solltest du den Befehl zweimal ausführen (damit beide Versionen weg sind), dann Version 1.2 aus dem offiziellen Repo neu installieren und anschließen das neue Paket mit dem neuen Namen bauen und installieren.
Ab dann beziehen sich alle

pacman -??? sdl Befehle auf das Paket mit der 1.2er Version und alle

pacman -??? sdl_neu Befehle auf das mit der 1.3er.

Du erzeugst da nur einen neuen Paketnamen. Der Name des Programms bleibt gleich, d.h. du hast dann zwei sdl Binärdateien -- eine in /usr/bin und eine in /usr/local/bin.
Dann mußt du selbst dafür sorgen, daß dein selbstgeschriebenes Programm nur auf das im /usr/local/ bin zurückgreift.

EDIT: du solltest das auch nur mit den Befehlen makepkg und pacman -U machen....

pferdefreund
13.08.12, 05:54
Wieso die alte - die ist nach meinem Vorschlag doch gar nicht mehr da, die wird doch durch den
Symlink ersetzt. Er sollte doch 1.3 installieren. Außerdem ist die sdl ja keine grundlegende Systembibliothek - wenns Probleme gibt, kann man ja immer noch den Urzustand wieder herstellen. Was anderes wäre die libc6 oder libm oder sowas.