Instale una versión específica del paquete con el comando Apt en Ubuntu

¿Quiere instalar una versión específica de un paquete en Ubuntu ? Puede hacerlo ‘fácilmente’ de la siguiente manera:

                      
                        sudo apt install package_name=package_version
                      
                    

¿Cómo sabe qué versiones están disponibles para un determinado paquete? Usa este comando:

                      
                        apt list --all-versions package_name
                      
                    

En la captura de pantalla a continuación, puede ver que tengo dos versiones de VLC disponibles y uso el comando para instalar la versión anterior:

Instalar versiones específicas con Ubuntu

Suena como una tarea simple, ¿verdad? Pero las cosas no son tan simples como parecen. Hay varios sis y peros involucrados aquí.

Este tutorial cubrirá todos los aspectos importantes de la instalación de una versión específica del programa usando los comandos apt o apt-get.

Cosas que debe saber sobre la instalación de una versión específica de un programa

Debe saber algunas cosas sobre cómo funcionan APT y los repositorios en las distribuciones basadas en Ubuntu y Debian .

No hay versiones anteriores de la misma fuente

Ubuntu no guarda versiones anteriores de paquetes en el repositorio. Es posible que vea más de una versión en casos específicos, temporalmente. Para example, ejecuta la actualización de apt (pero no la actualización) y hay una nueva versión disponible. Es posible que vea dos versiones para el mismo paquete en el caché de apt. Pero tan pronto como el paquete se actualiza a la nueva versión, la versión anterior se elimina del caché y de los repositorios.

Use múltiples fuentes para diferentes versiones

Para obtener varias versiones del mismo paquete, deberá agregar varias fuentes. Para example, VLC está en la versión 3.x. Agregando el PPA de compilación diaria de VLC dará la (inestable) versión 4.x.

Similarmente, puede descargar un archivo DEB con una versión diferente e instalarlo .

La versión superior siempre tiene prioridad.

Si tiene el mismo paquete disponible de más de una fuente, de forma predeterminada, Ubuntu instalará la versión más alta disponible.

En el anterior examplesi instalo VLC, instalará la versión 4.x, no la 3.x.

La versión anterior se actualiza a la versión más nueva disponible

Ese es otro problema potencial. Incluso si instala la versión anterior de un paquete, se actualiza a la versión más nueva (si está disponible). Tienes que retener el paquete y evitar que se actualice.

Las dependencias también necesitan ser instaladas.

Si el paquete tiene dependencias, también deberá instalar la versión requerida de los paquetes dependientes.

Ahora que conoce algunos problemas potenciales, veamos cómo abordarlos.

Instalación de una versión específica de un paquete

estoy tomando el example de VLC en este tutorial. VLC versión 3.0.16 está disponible en los repositorios de Ubuntu. Agregué el PPA de compilación diaria y eso me da el candidato de lanzamiento de VLC versión 4.0.

Como puede ver, tengo dos versiones de VLC disponibles en el sistema ahora mismo:

Múltiples versiones del mismo paquete

                      
                        [email protected]:~$ apt list -a vlc
Listing... Done
vlc/jammy 4.0.0~rc1~~git20220516+r92284+296~ubuntu22.04.1 amd64
vlc/jammy 3.0.16-1build7 amd64
vlc/jammy 3.0.16-1build7 i386
                      
                    

Dado que la versión superior tiene prioridad, el uso de ‘apt install vlc’ dará como resultado la instalación de VLC 4.0. Pero quiero instalar la versión anterior 3.0.16 por el bien de este tutorial.

                      
                        sudo apt install vlc=3.0.16-1build7
                      
                    

Pero aquí está la cosa. El paquete vlc tiene varias dependencias y esas dependencias también necesitan versiones específicas. Sin embargo, Ubuntu intenta instalar las versiones superiores disponibles para ellos y, por lo tanto, obtiene el clásico error ‘ha guardado paquetes rotos’.

Para solucionar esto, debe proporcionar versiones específicas de todos los paquetes dependientes de los que se queja. Entonces ese comando se convierte en algo como esto:

                      
                        sudo apt install vlc=3.0.16-1build7 
		 vlc-bin=3.0.16-1build7 
		 vlc-plugin-base=3.0.16-1build7 
		 vlc-plugin-qt=3.0.16-1build7 
		 vlc-plugin-video-output=3.0.16-1build7 
		 vlc-l10n=3.0.16-1build7 
		 vlc-plugin-access-extra=3.0.16-1build7 
		 vlc-plugin-notify=3.0.16-1build7 
		 vlc-plugin-samba=3.0.16-1build7 
		 vlc-plugin-skins2=3.0.16-1build7 
		 vlc-plugin-video-splitter=3.0.16-1build7 
		 vlc-plugin-visualization=3.0.16-1build7
                      
                    

En caso de que se lo pregunte, la final al final de cada línea es solo una forma de escribir un solo comando en varias líneas.

¿Funciona? En muchos casos, lo hará. Pero he elegido un complicado example de VLC, que tiene muchas dependencias. Incluso las dependencias mencionadas tienen dependencias en otros paquetes. Se vuelve desordenado.

Una alternativa es especificar la fuente durante la instalación.

Alternativamente, especifique la fuente del repositorio

Ha agregado varias fuentes, por lo que debe tener una idea de las fuentes de las que proviene el paquete.

Use el siguiente comando y busque el repositorio:

                      
                        apt-cache policy | less
                      
                    

Concéntrese en las líneas que vienen después del nombre del repositorio:

                      
                        500 https://security.ubuntu.com/ubuntu jammy-security/multiverse i386 Packages
     release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=multiverse,b=i386
     origin security.ubuntu.com
                      
                    

Puede especificar los parámetros o,l,a, etc.

en mi original examplequiero instalar VLC desde el repositorio de Ubuntu (para obtener 3.16) en lugar del PPA (que me da 4).

Entonces, el siguiente comando instalará VLC 3.16 junto con todas las dependencias:

                      
                        sudo apt install -t "o=ubuntu" vlc
                      
                    

¿Se ve bien? Pero el problema viene cuando hay que actualizar el sistema. Luego se queja de no encontrar la versión especificada.

Qué más se puede hacer?

Para instalar una versión anterior, elimine la fuente de la versión más nueva de su sistema (si es posible). Ayuda a deshacerse de los problemas de las dependencias.

Si eso no es posible, verifique si puede obtenerlo en otros formatos de empaque como Snap, Flatpak, AppImage, etc. De hecho, Snap y Flatpak también le permiten elegir e instalar entre las versiones disponibles. Dado que las aplicaciones están en un espacio aislado, es más fácil administrar las dependencias para diferentes versiones.

Mantenga el paquete y evite la actualización

Si logra instalar una versión específica del programa, es posible que desee evitar actualizar accidentalmente a la versión más nueva. No es demasiado complicado lograr esto.

                      
                        sudo apt-mark hold package_name
                      
                    

Puede eliminar la retención para que pueda actualizarse más tarde:

                      
                        sudo apt-mark unhold package_name
                      
                    

Tenga en cuenta que las dependencias de un paquete no se mantienen automáticamente. Deben mencionarse individualmente.

Conclusión

Como puede ver, existe una disposición para instalar la versión seleccionada de un programa. Las cosas solo se complican si el paquete tiene dependencias. Entonces te metes en el infierno de la dependencia.

Espero que hayas aprendido algunas cosas nuevas en este tutorial. Si tiene preguntas o sugerencias para mejorarlo, hágamelo saber en la sección de comentarios.


Related Posts