Installazione di versioni particolari quando repo ha versioni più recenti?


13

Facciamo un metapacchetto che dipende dai seguenti pacchetti

Depends: A (=2),
 B (=2),
 C (=2)

Nota '=' - Voglio installare queste versioni particolari, non le più recenti.

Inoltre:

B dipende da A (> = 1)

C dipende da B (> = 1) e A (> = 1)

Se le versioni più recenti di A, B, C nel repository sono 2, allora funziona.

Da quando ho inserito la versione 3 di A e la versione 3 di B nel repo sudo apt-get install il mio-meta-pacchetto si rifiuta di finire con le seguenti informazioni:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Se installo manualmente le versioni 2 di A e B, il metapacchetto viene installato correttamente, il che suggerisce fortemente che non vi è alcuna dipendenza nascosta su A3 o B3. Questa non è una soluzione al problema in quanto il metapacchetto viene installato automaticamente su molte macchine.

DOMANDA: Cosa fare per fare sudo apt-get install my-meta-package install versioni 2.2,2?

Inoltre, c'è un modo per ottenere informazioni estese che cosa crea effettivamente la necessità per la versione 3 di A e la versione 3 di B?


Oh, non ho letto l'intera domanda prima di rispondere. Puoi semplicemente riconfezionare il metapacchetto?
int_ua,

2
@int_ua Non capisco cosa farebbe il riconfezionamento del metapacchetto.
Tymtam,

@belacqua - Sono con te, ma abbiamo bisogno di una risposta solida che copra cosa succede quando ci sono inversioni, dipendenze rotte ecc. ecc.
RobotHumans

Il file di controllo del tuo metapacchetto include la versione esplicita no dei pacchetti dipendenti, come (a=2), (b=2)?
Anwar,

Risposte:


11

Devi selezionare le versioni particolari da installare e installarle tutte contemporaneamente all'installazione del meta-pacchetto.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Come dice la risposta di int_ua , puoi scoprire dipendenze inverse con questo:

apt-cache rdepends package

Se vuoi sapere maggiori informazioni su uno di questi pacchetti ( versioni disponibili, dipendenze e molto altro ), usa questo:

apt-cache show package

Dopo aver finito di installarli e desideri mantenerli in quelle versioni mentre esegui gli aggiornamenti di sistema, dovrai utilizzare il pin di apt- pin come suggerito da belacqua .

Appuntamento APT

La funzione di blocco APT consente agli amministratori di forzare APT a scegliere particolari versioni di pacchetti che potrebbero essere disponibili in diverse versioni da diversi repository. Ciò consente agli amministratori di garantire che i pacchetti non vengano aggiornati alle versioni che potrebbero entrare in conflitto con altri pacchetti sul sistema o che non siano stati sufficientemente testati per modifiche indesiderate. Per fare ciò, i pin nel file delle preferenze di APT (/ etc / apt / preferenze) devono essere modificati.


Credo che questa sia la risposta corretta, mettendo il = e quindi il nome del pacchetto con la versione
LnxSlck

1
Sono il collega di Tymek e questo in realtà risolve il problema. Peccato che dobbiamo invertire il metapacchetto per realizzarlo. Alcuni Python creativi sono in ordine. Grazie mille per la risposta.
Igor Zevaka,

1
Mi chiedo se sia apparsa una soluzione migliore dal passare del tempo?
Ygrek,

1

Puoi provare a installare le dipendenze prima con

sudo apt-get install package=2 dove 2 è la versione

Puoi scoprire con quali pacchetti dipendono dal pacchetto

apt-cache rdepends package


1
rdepends non fornisce informazioni dettagliate sulle versioni, giusto?
tymtam,

2
Installare prima le dipendenze sfiderebbe il metapacchetto. È una soluzione, ma non quella che sto cercando.
tymtam,

1
Si noti che per funzionare, i repository devono avere una versione disponibile di quella versione specificata, in caso contrario si verificherà un errore.
Thomas Ward
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.