Volere pacchetti più recenti è un problema comune su qualsiasi sistema operativo. Il ciclo di rilascio di Debian è stato in media di 2 anni negli ultimi anni, quindi verso la fine di questo ciclo, è forse un problema più urgente. Un modo per mitigarlo è passare ai test verso la fine del ciclo di rilascio stabile, quando la versione successiva è quasi stabile. Non è chiaro dalla domanda se si tratti di stabile su più in generale di test e / o anche instabile. Indipendentemente da ciò, avere la versione più recente può essere un problema anche se in esecuzione instabile, poiché la versione più recente potrebbe non essere ancora impacchettata. Gli sviluppatori / packager Debian sono volontari, quindi possono annoiarsi o impegnarsi con altre cose, con il risultato che il pacchetto languisce.
Per semplicità e concretezza presumo in quanto segue che il piano è di riportare un pacchetto su stabile, ma si applica più in generale. Quindi, ecco cosa faccio se voglio una versione più recente del software che non è presente in modo stabile, in un ordine approssimativo.
Cerca il pacchetto in Debian Backports . A volte puoi trovare un pacchetto abbastanza recente da soddisfare i tuoi scopi. Tuttavia, spesso accade che questi pacchetti siano obsoleti rispetto alla versione in unstable o sperimentale o upstream.
Prova a installare il pacchetto direttamente dal test, instabile o sperimentale. Se stable non è molto diverso dalla versione da cui si sta tentando di installare, potrebbe funzionare. Saprai che questo approccio è negativo se il sistema inizia a provare a installare o aggiornare i pacchetti di base dalla versione più recente. Supponiamo che tu stia provando a installare da unstable, quindi
apt-get install packagename/unstable
è la prima cosa da provare. Con le versioni di apt in stable, ciò spesso fallirà, poiché richiede altri pacchetti da unstable, e questo incantesimo aumenta solo la preferenza di packagename
sufficientemente alta da poter essere installata in unstable. Se non capisci cosa significhi, vai via e leggi man
apt_preferences
. Continua ad aggiungere dipendenze da unstable, assicurandoti che non stia tentando di aggiornare i pacchetti di base. Ad esempio, se inizia a provare ad aggiornare libc6 o X o KDE o Gnome, interrompere immediatamente. Di solito va bene se si tenta di aggiornare altri pacchetti dallo stesso pacchetto sorgente, poiché questi sono solitamente strettamente accoppiati. Per vedere da quale pacchetto sorgente dipende un pacchetto binario, fare
apt-cache showsrc packagename
Dato che molte cose dipendono dalla libreria GNU C (libc6), questo era un problema. Più recentemente, l'API sembra essersi stabilizzata, quindi ora è più spesso possibile cavarsela senza dover aggiornarla. Se un pacchetto soddisfa le sue dipendenze di runtime su stable, ma continua a non funzionare correttamente, inviare un bug. Se il packager ti dice che non è un bug, si sbagliano. :-)
Esegui il backport del pacchetto da test, instabile o sperimentale.
Come accennato in precedenza, i backport sono un'opzione, ma spesso questi pacchetti sono obsoleti rispetto alla versione in unstable o sperimentale o upstream.
Questo può spesso richiedere un tipo di ciclo di compilazione di dipendenza ricorsiva. Per prima cosa devi ottenere le dipendenze di build
apt-get build-dep packagename
Se ciò non riesce perché una delle dipendenze non è abbastanza recente, è necessario eseguire prima il backport di tale dipendenza. Questo può sfuggire al controllo. Di solito mi arrendo se devo affrontare più di 2 livelli di ricorsione. Si noti tuttavia che le dipendenze reali non sono necessariamente strette come indicato, ad es. una versione precedente potrebbe funzionare. Il packager spesso non cerca di trovare la versione più vecchia di una dipendenza build (o, in effetti, di runtime) che funzionerà.
Verificare la disponibilità dei pacchetti dal corrispondente upstream. Idealmente questi corrisponderebbero alla versione di distribuzione, ma potresti anche essere in grado di ricostruirli se necessario.
Crea pacchetti per la versione del software più recente rispetto ai pacchetti più recenti in testing / unstable / sperimentale. Questo può essere relativamente impegnativo, ma a volte sorprendentemente fattibile. La prima cosa da notare è che se si sta cercando di impacchettare una versione più recente di un pacchetto che è già in Debian, si sta già iniziando con un grande vantaggio, vale a dire che si ha il pacchetto esistente con cui lavorare. Basta fare
apt-get source packagename
e apt-get
scaricherà il pacchetto sorgente corrispondente, inclusa la sottodirectory debian in cui risiede il pacchetto. Si noti inoltre che in questi giorni questo pacchetto spesso vive all'interno di un repository di controllo verson (git sembra popolare con Debian) e un apt stabile (attualmente 0.8.10.3 ) ti dice dove si trova quando invochi
apt-get source
. Dovresti dare un'occhiata a questo, perché i packager potrebbero avere versioni più recenti della confezione rispetto a qualsiasi pacchetto rilasciato. Per esempio.
$ apt-get source mercurial
Reading package lists... Done
Building dependency tree
Reading state information... Done
NOTICE: 'mercurial' packaging is maintained in the 'Svn' version control system at:
svn://svn.debian.org/python-apps/packages/mercurial/trunk
In alternativa, potresti semplicemente usare
apt-cache showsrc mercurial | grep Vcs
per elencare il repository.
Se il pacchetto non è aggiornato, potrebbe essere necessario apportare modifiche al
pacchetto, aggiornare le patch applicate ma di solito è comunque un buon
punto di partenza . Debian sembra essere in procinto di standardizzare la gestione dei pacchetti su
quilt secondo il formato dpkg-source 3.0 (quilt) , in modo da facilitare l'aggiornamento delle patch.
Concluderò con un esempio reale di come ho eseguito il backport del pacchetto Debian di
pgf . L'ultima versione in pacchetto di pgf era la 2.00 nel 2008 e da allora la 2.10 era stata rilasciata. Vedi la discussione in Si prega di aggiornare all'ultima versione stabile di pgf (2.10) e il mio bug di follow-up con una patch, pgf: patches contro il pacchetto Debian 2.0 . A quanto pare, il pacchetto Debian di pgf era molto semplice e ho dovuto cambiare una riga nel pacchetto 2.10 per farlo funzionare. Ho finito per reprimere anche tutte le
lamentele di lintian , ma era strettamente facoltativo.