¿Cómo instalar paquetes específicos de Ubuntu con la versión exacta?

188

Quiero configurar una nueva máquina virtual con algunos paquetes especificados (nombre y versión), que se proporcionan.

Por ejemplo, apache2 en la versión 2.2.20-1ubuntu1 con todas las dependencias. Incluso si hay una nueva versión de este paquete en los servidores, debería instalarse.

La solución tiene que funcionar / escalar con múltiples (n) "configuraciones". Otra máquina virtual podría necesitar una versión anterior de apache2.

Actualmente sé de algunas posibilidades que instalan los paquetes exactos, pero no escalan tan bien:

  1. Copia todos los *.deb necesarios a cada máquina virtual manualmente e ingresa: dpkg -i ... - & gt; Podría funcionar, pero es muy propenso a errores. (Guiones manuales, etc.)
  2. Crea y usa un nuevo repositorio de Ubuntu para cada configuración. - & gt; No funciona porque necesitaría n repositorios.
  3. Configure la máquina una vez y copie la VM / cree una instantánea. - & gt; No funciona porque necesitaría almacenar n VM.

Mi problema podría etiquetarse como administración de parches, pero no quiero actualizar mis paquetes a la versión actual. Mi objetivo es instalar paquetes viejos.

    
pregunta ayckoster 01.01.2012 - 21:39

4 respuestas

190

Puede usar apt-get para instalar una versión específica del paquete siempre y cuando esté en un archivo que conozca. Desde la página de manual de apt-get :

  

Se puede seleccionar una versión específica de un paquete para la instalación siguiendo el nombre del paquete con un igual y la versión del paquete para seleccionar. Esto hará que esa versión se ubique y seleccione para su instalación. Alternativamente, se puede seleccionar una distribución específica siguiendo el nombre del paquete con una barra y la versión de la distribución o el nombre del archivo (estable, congelado, inestable).

Por ejemplo, podrías hacer:

sudo apt-get install apache2=2.2.20-1ubuntu1

Tenga en cuenta que es posible que necesite hacer alguna resolución de dependencia en este caso, pero si hay algún problema, apt-get le dirá qué es lo que está causando. En mi sistema 11.10 necesitaría hacer lo siguiente para que esto funcione:

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1
    
respondido por el fader 01.01.2012 - 21:57
51

Para verificar qué versiones están disponibles, puede verificar a través de:

sudo apt-cache madison ^apache2

Si no funciona, considere ejecutar sudo apt-get update antes para actualizar la lista de paquetes.

Luego copie la versión o use la siguiente sintaxis:

sudo apt-get install apache2=2.2\*

Para verificar qué versión has instalado, ejecuta:

dpkg -l 'apache2*' | grep ^i
    
respondido por el kenorb 01.04.2015 - 14:44
10

Ampliaré las respuestas anteriores con otros comandos de control de versiones útiles en la familia apt . Para ver qué versiones están disponibles, ejecute apt-cache policy :

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Luego, como se mencionó en otra parte, instale una versión específica con apt-get :

# apt-get install apache2=2.4.7-1ubuntu4.5
...

Ahora puede ver qué versión ha instalado ejecutando apt-cache policy nuevamente:

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

Si no desea que se instalen versiones más nuevas en las actualizaciones, fije el paquete con apt-mark :

# apt-mark hold apache2
apache2 set on hold.

Digamos que se agrega una nueva versión de apache2 al índice del paquete y su máquina se sincroniza con apt-get update . Verás esto la próxima vez que ejecutes apt-get upgrade :

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
    
respondido por el gsf 15.07.2016 - 19:25
8

En términos prácticos, esto no es posible porque las versiones anteriores no se guardan en el archivo, de modo que a menos que tenga una copia de la versión anterior en alguna parte, no puede instalarla. Debería preguntarse por qué quiere instalar una versión anterior en primer lugar. En una versión estable, la razón principal para lanzar una nueva versión es corregir una vulnerabilidad de seguridad, ¿y no desea ejecutar un servidor vulnerable, verdad?

    
respondido por el psusi 02.01.2012 - 01:33

Lea otras preguntas en las etiquetas