Forum Linux.général Cohabitation de versions différentes d'un même paquet

Posté par  .
Étiquettes :
0
24
mai
2010
Bonjour,

Il arrive parfois que l'on souhaite disposer au même moment un logiciel dans deux versions différentes. L'un des cas courants est, j'imagine, celui d'un langage du programmation (PHP 5.2 et 5.3, Python 2.6 et 3.1 ...).

Comment faire de manière générique ? Je pense à une compilation / installation qui se ferait sans conflit avec la version proposée par défaut et le fait de pouvoir choisir à postériori si un logiciel doit lancer la version x ou y du paquet.

Si une distribution comme Gentoo ou un système comme FreeBSD semblent proposer nativement la cohabitation (je me trompe ?), je me demande s'il est possible de la réaliser dans la plupart des distributions et que cela reste relativement aisé à maintenir.

Ce type de cohabitation pourrait également permettre de combler l'ancienneté de certains paquets sous Debian / RHEL et assimilées, lorsque la solution ne réside ni dans les backports ni dans le mélange entre branches (exemple de Python 2.5 dans Debian, Sid comprise).

Merci par avance.
  • # Un bout de solution

    Posté par  . Évalué à 3.

    Bon, quand tu parles de solution "générique", je pense voir ce que tu veux dire, mais c'est très difficile : tu parles de lancer un programme, par exemple. Faire ça se fait en mettant le PATH de la version choisie en tête, c'est facile. Mais ça ne marchera pas si le programme appelant code les chemins en dur (ça arrive, même si c'est mal). Parfois, le programme est aussi lancé "indirectement" (par exemple, ton programme appelant ajoute une entrée cron, qui va lancer le soft en question) et c'est difficile de savoir comment lui faire exécuter la bonne version.

    Et encore, là on ne parle que d'exécutable : tu peux très bien vouloir une version particulière d'une bibliothèque. Ça se fait "normalement" en jouant du LD_LIBRARY_PATH, mais pareil, il y a sûrement plein de manières de faire qui font que ça ne va pas marcher avec certains programmes.

    Bref, pour un "simple" exécutable, la solution du PATH devrait marcher (quoiqu'après, il faut savoir où le modifier exactement – je pensais à Apache par exemple, puisque tu cites des langages web – on doit sûrement avoir à toucher qqch dans le conf à l'intérieur des bonnes balises conditionnelles ; encore un exemple que rien n'est "générique").

    Par contre, je ne comprends pas bien en quoi Gentoo ou FreeBSD y arriveraient mieux là-dessus ? (bon, je ne les connais pas bien)
    • [^] # Re: Un bout de solution

      Posté par  . Évalué à 1.

      Bonjour et tout d'abord merci.

      En fait il s'agirait de rester sur le choix proposé par défaut et de pouvoir, dans certains cas, employer une autre version. Un exemple serait de dire à son serveur HTTP qu'il va utiliser PHP 5.3 et non la version 5.1 proposée par défaut.

      De fait, n'est-il pas possible de compiler ladite nouvelle version dans /usr/local et d'appeler un exécutable différent (/usr/local/bin/php53 et non /usr/bin/php) ? J'ai bien conscience que cela peut impliquer de compiler davantage de choses que le seul langage.

      Dans cet ordre d'idée, j'ai d'ailleurs re-découvert tout à l'heure une possible solution sous Debian avec le script update-alternatives[1, 2 et 3]. Visiblement, il est grâce à lui possible de choisir quelle alternative sera préférée, au niveau du système et certainement au niveau de l'utilisateur.

      Par contre, je ne comprends pas bien en quoi Gentoo ou FreeBSD y arriveraient mieux là-dessus ? (bon, je ne les connais pas bien)

      En effet, c'est peut-être un à priori. Je vois que sous FreeBSD il est souvent proposé de multiples versions de certains programmes, dont les langages de programmation[4]. J'avais l'impression qu'il était possible de facilement définir quelle serait celle préférée par défaut[5], tout en pouvant en appeler d'autres.

      1 : http://linux.die.net/man/8/update-alternatives
      2 : http://linuxbasics.org/tutorials/using/debian_update-alterna(...)
      3 : http://www.debian.org/doc/FAQ/ch-customizing.en.html#s-diver(...)
      4 : http://www.freebsd.org/cgi/cvsweb.cgi/ports/lang/#dirlist
      5 : http://forums.freebsd.org/showthread.php?t=1390
      • [^] # Re: Un bout de solution

        Posté par  . Évalué à 3.

        Un exemple serait de dire à son serveur HTTP qu'il va utiliser PHP 5.3 et non la version 5.1 proposée par défaut.

        Ça doit se faire pas trop difficilement. Ma remarque était surtout sur le côté "générique" : la solution pour apache sera différente de celle pour une autre application.

        De fait, n'est-il pas possible de compiler ladite nouvelle version dans /usr/local et d'appeler un exécutable différent (/usr/local/bin/php53 et non /usr/bin/php) ?

        Je pense que c'est tout à fait possible, et c'est comme ça qu'on fait d'habitude (i.e. mettre dans /usr/local, ou dans /opt). Je n'ai pas la solution pour PHP car je ne l'utilise pas, mais j'ai déjà modifié le PATH pour certains CGI (bon, je ne l'ai plus en tête, mais c'est dans la doc).

        j'ai d'ailleurs re-découvert tout à l'heure une possible solution sous Debian avec le script update-alternatives[1, 2 et 3]. Visiblement, il est grâce à lui possible de choisir quelle alternative sera préférée, au niveau du système et certainement au niveau de l'utilisateur.

        Oui, update-alternatives sert exactement à ça, mais choisit pour le système entier, pas par utilisateur.

        J'avais l'impression qu'il était possible de facilement définir quelle serait celle préférée par défaut[5], tout en pouvant en appeler d'autres.

        Effectivement, ça a l'air pas mal. C'est géré dans Debian avec update-alternatives, mais généralement seulement pour des versions _majeures_ différentes. Car on ne peut pas installer une 2.5.x et une 2.5.y en parallèle (c'est un choix de Debian).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.