¿Existe alguna forma de instalar varias versiones de un programa en Linux?

¿Existe alguna forma de instalar varias versiones de un programa en Linux?

Estoy intentando instalarlo php-5.3en Arch Linux, pero bisones demasiado nuevo, así que construí una versión anterior a bisonpartir de fuentes. Y parece que se instala solo /usr/localde forma predeterminada. (¿Es esto algún tipo de convención?) Así que ahora me pregunto si puedo instalar más de una versión de bisonie, al lado de la versión predeterminada del sistema y la que acabo de instalar. Es probable que este tipo de cosas rara vez sean necesarias. Sólo tengo curiosidad al respecto. ¿Es esto algo difícil de hacer? ¿Cómo debo hacerlo?

Respuesta1

Algún software específico se puede configurar con --program-suffix=-my-version-suffix. Es posible que necesites personalizar algunos de los otros directorios, pero si dejas el --prefixpredeterminado ( /usr/local), no colisionará con el que viene empaquetado en la distribución /usr.

En elgeneralSin embargo, en este caso, la única distribución que intenta permitir la coinstalación de versiones arbitrarias esNada, aunqueGentoointenta obtener más paquetes de los que la mayoría de las distribuciones se molestan (aunque para Bison solo permite una versión a la vez; al menos ofrece una opción).

Sin embargo, tenga en cuenta que si su código fuente falla con las versiones más nuevas de bison, eso generalmente significa un simple problema con su código fuente. Generalmente hay alguno %option(o --argument) que puede solucionarlo.

Respuesta2

Una forma de tratar este problema de manera consistente es usar elmodulespaquete. Funciona cambiando las variables ambientales (por ejemplo, las rutas a sus archivos binarios).

El paquete Environment Modules proporciona la modificación dinámica del entorno de un usuario a través de archivos de módulo. Los módulos se pueden cargar y descargar de forma dinámica y atómica, de forma limpia.

p.ej

$ module load gcc/3.1.1 
$ which gcc 
/usr/local/gcc/3.1.1/linux/bin/gcc 

$ module switch gcc gcc/3.2.0 
$ which gcc 
/usr/local/gcc/3.2.0/linux/bin/gcc 

En su caso, se selecciona la bisonversión que aparece primero en su variable ambiental. PATHPara inspeccionar o cambiar esta variable manualmente para el terminal actual, ejecute

$ echo $PATH
 ....

priorice /opt/bin_pre_pending en la RUTA:

$ export PATH="/opt/bin:$PATH"

o agregarlo /opt/bin/a PATH(solo se selecciona si no se encuentra ningún binario con el mismo nombre en otra parte de PATH)

$ export PATH="$PATH:/opt/bin"

Respuesta3

Solo para dar una respuesta más actualizada:

Sí, esto definitivamente es posible hoy en día.
El infierno de la dependencia es cosa del pasado, a menos que la distribución también lo sea. :)

Sin embargo, Arch no es suficiente. Necesita una distribución basada en fuentes. Como de lo contrario las dependencias estarían codificadas (para ciertas definiciones de codificadas), y ambas instalaciones apuntarían a las mismas bibliotecas, etc.
Pero al compilar desde el código fuente, puede compilarlo con rutas diferentes cada vez.

Gentoo ha tenido una característica llamada “ranura” para esto durante mucho tiempo, que hace que todo sea trivial. Las dependencias de una versión de un paquete se pueden especificar para que sean una determinada "ranura" de otro paquete. Una tragamonedas es una variedad de versiones que no entran en conflicto con ninguna otra tragamonedas. (Para la mayoría de los paquetes que he visto, cualquier versión puede tener su propia ranura. Especialmente para las bibliotecas. Pero a veces un paquete no puede manejarlo porque depende de cosas de las cuales solo hay una. O porque requiere un poco de trabajar desde el administrador de paquetes [por ejemplo, para modificar los archivos de configuración instalados durante la instalación])

Pero estoy seguro de que cualquier otra distribución de código completo tendrá algo similar.

De lo contrario, una solución alternativa siempre es configurar el mismo sistema de compilación con el que los mantenedores crean los paquetes de su distribución, clonar los paquetes requeridos con un nuevo nombre y allí alterar el proceso de compilación para que apunte a las diferentes versiones de las dependencias. , y luego simplemente constrúyalo en un nuevo paquete que no sea fuente, como lo harían los mantenedores de paquetes de su distribución. (Francamente, Gentoo me pareció más fácil de instalar. :)

información relacionada