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.