Come installare specifici pacchetti Ubuntu, con la versione esatta?

187

Voglio configurare una nuova macchina virtuale con alcuni pacchetti specificati (nome e versione) forniti.

Ad esempio apache2 nella versione 2.2.20-1ubuntu1 con tutte le dipendenze. Anche se c'è una nuova versione di questo pacchetto sui server, questa dovrebbe essere installata.

La soluzione deve funzionare / scalare con più (n) "setup". Un'altra macchina virtuale potrebbe necessitare di una versione precedente di apache2.

Al momento sono al corrente di alcune possibilità che installano i pacchetti esatti, ma non scalano così bene:

  1. Copia manualmente tutti i *.deb richiesti su ogni macchina virtuale e inserisci: dpkg -i ... - & gt; Potrebbe funzionare, ma è molto incline agli errori. (Script manuali ecc.)
  2. Crea e usa un nuovo repository Ubuntu per ogni configurazione. - & gt; Non funziona perché avrei bisogno di n repository.
  3. Imposta il dispositivo una volta e copia la VM / crea un'istantanea. - & gt; Non funziona perché avrei bisogno di memorizzare n VM.

Il mio problema potrebbe essere etichettato come gestione delle patch, ma non voglio aggiornare i miei pacchetti alla versione corrente. Il mio obiettivo è installare vecchi pacchetti.

    
posta ayckoster 01.01.2012 - 21:39

4 risposte

190

Puoi usare apt-get per installare una versione specifica del pacchetto tanto a lungo quanto in un archivio di cui apt sa. Dalla pagina di man di apt-get :

  

Una versione specifica di un pacchetto può essere selezionata per l'installazione seguendo il nome del pacchetto con un uguale e la versione del pacchetto da selezionare. Questo farà sì che quella versione sia localizzata e selezionata per l'installazione. In alternativa è possibile selezionare una distribuzione specifica seguendo il nome del pacchetto con una barra e la versione della distribuzione o il nome dell'archivio (stabile, congelato, instabile).

Ad esempio, puoi fare:

sudo apt-get install apache2=2.2.20-1ubuntu1

Tieni presente che in questo caso potresti dover risolvere autonomamente alcune dipendenze, ma se ci sono problemi, apt-get ti dirà cosa le causa. Sul mio sistema 11.10 avrei bisogno di fare quanto segue per farlo funzionare:

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
    
risposta data fader 01.01.2012 - 21:57
51

Per verificare quali versioni sono disponibili, puoi controllare tramite:

sudo apt-cache madison ^apache2

Se non funziona, considera di eseguire sudo apt-get update prima per aggiornare l'elenco dei pacchetti.

Quindi copia la versione o utilizza la seguente sintassi:

sudo apt-get install apache2=2.2\*

Per verificare quale versione hai installato, esegui:

dpkg -l 'apache2*' | grep ^i
    
risposta data kenorb 01.04.2015 - 14:44
10

Espanderò le risposte precedenti con altri comodi comandi di versioning nella famiglia apt . Per vedere quali versioni sono disponibili, esegui 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

Quindi, come detto altrove, installa una versione specifica con apt-get :

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

Ora puoi vedere quale versione hai installato eseguendo nuovamente apt-cache policy :

# 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

Se non vuoi che le versioni più recenti siano installate sugli aggiornamenti, pin il pacchetto con apt-mark :

# apt-mark hold apache2
apache2 set on hold.

Supponiamo che una nuova versione di apache2 sia aggiunta all'indice del pacchetto e che la tua macchina sia sincronizzata con apt-get update . Lo vedrai quando eseguirai di nuovo 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.
    
risposta data gsf 15.07.2016 - 19:25
8

In pratica, questo non è possibile perché le vecchie versioni non sono conservate nell'archivio, quindi a meno che non si abbia una copia della vecchia versione che gira da qualche parte, non è possibile installarla. Dovresti chiederti perché vuoi installare una versione precedente in primo luogo. In una versione stabile, il motivo principale per cui viene rilasciata una nuova versione è correggere una vulnerabilità della sicurezza e non si desidera eseguire un server vulnerabile?

    
risposta data psusi 02.01.2012 - 01:33

Leggi altre domande sui tag