Ecco una descrizione più dettagliata del processo. Mi dispiace che il testo sia arrivato così a lungo.
La mia esperienza deriva da Debian, per la quale è stato originariamente inventato l'intero sistema di packaging e aggiornamento utilizzato in Ubuntu. Gli aggiornamenti di sicurezza giornalieri di Ubuntu corrispondono a quelli in esecuzione apt-get upgrade
che normalmente non rimuovono alcun software. I grandi aggiornamenti di rilascio corrispondono a quelli apt-get dist-upgrade
durante i quali i pacchetti software possono essere scambiati completamente.
In realtà i componenti di livello molto basso normalmente non vengono scambiati durante un aggiornamento di rilascio. Immediatamente dopo l'aggiornamento dovresti trovare due immagini kernel e initrd nella tua directory / boot. Questo perché a differenza dei programmi i componenti del kernel non sono intercambiabili così bene. Se è necessario caricare nuovi driver di dispositivo durante l'aggiornamento, questi devono essere compatibili con il kernel in esecuzione. Dopo l'avvio del sistema con il nuovo kernel, è possibile rimuovere quello vecchio. L'ultima volta che ho verificato che una cosa doveva essere eseguita manualmente, non so come gestisca l'attuale programma di aggiornamento. Questo è BTW. il motivo principale, per cui l'immagine del kernel porta il suo numero di versione nel nome del file, in modo da poter avere diverse versioni del kernel installate contemporaneamente. Lo stesso per il percorso del modulo (/ lib / modules / ...)
I pacchetti software vengono aggiornati uno alla volta, iniziando con i pacchetti più bassi nella gerarchia delle dipendenze. Normalmente si tratta di librerie di programmi come libc e altri. La sequenza in cui i pacchetti vengono aggiornati non è tuttavia codificata ma calcolata in modo dinamico quando le dipendenze dei pacchetti vengono risolte. Nella maggior parte dei casi i vecchi programmi possono funzionare con nuove librerie, quindi non è così problematico se tali librerie vengono sostituite per prime.
Qui devi capire che il sistema distingue tra i pacchetti installati manualmente (ovvero i pacchetti che l'installazione hai richiesto direttamente, cioè il cromo) e i pacchetti installati automaticamente, che dove installati solo per soddisfare le dipendenze dei pacchetti installati manualmente (e le dipendenze di tali dipendenze ).
Per ogni programma installato manualmente, il programma di aggiornamento cerca solo una versione più recente. Spesso quei programmi sono solo meta-pacchetti come "ubuntu-desktop", che non contiene dati e solo dipendenze. Verranno inserite nuove versioni di librerie dipendenti, in quanto sono richieste da programmi direttamente aggiornati (richiesti manualmente). Il programma di aggiornamento tenterà sempre di installare la versione utilizzabile più recente di qualsiasi pacchetto dipendente (durante qualsiasi upgrdade non solo rilasci di aggiornamenti).
I programmi che non possono funzionare con le nuove versioni della libreria non possono essere avviati durante il periodo successivo all'aggiornamento della libreria e anche prima dell'aggiornamento del programma stesso. Se tali programmi dovrebbero essere già in esecuzione prima dell'aggiornamento della libreria, continueranno comunque a essere eseguiti, poiché la vecchia versione della libreria rimane in memoria finché rimane in uso. Lo stesso vale per i programmi avviati prima che vengano aggiornati. Quelle non forniranno nuove funzionalità fino a quando non saranno terminate e riavviate.
Dopo l'aggiornamento alcune librerie (o dipendenze in generale) saranno rese orfane. Quelle sono le librerie richieste dalle vecchie versioni del programma, ma non sono più richieste dalle nuove versioni. Poiché questi pacchetti sono contrassegnati come installati automaticamente e poiché nessun programma installato manualmente si collega ad essi, questi pacchetti possono essere facilmente individuati e rimossi. Puoi persino osservare questo come l'ultimo passaggio del processo di aggiornamento (il programma di aggiornamento dice "rimuovere i pacchetti obsoleti" o qualcosa di simile).
Verranno installati alcuni pacchetti, che dove prima non erano installati, si tratta semplicemente di nuove dipendenze, che sono contrassegnate come installate automaticamente e che possono essere rimosse qualora il requisito per loro svanisca in futuro.
Questo meccanismo consente persino lo scambio di interi programmi utente. Come ad esempio il passaggio da Gnome2 a Unity. Poiché entrambi sono solo dipendenze automatiche di ubuntu-desktop, che è uno dei pochi pacchetti, per il quale sono richieste nuove versioni in primo luogo.
I programmi normalmente non dipendono da una versione specifica del kernel del sistema operativo, quindi normalmente funzioneranno bene con il kernel in esecuzione.
A parte tutto ciò, sospetto che il programma di aggiornamento di Ubuntu lancia alcune soluzioni specifiche e soluzioni alternative nel mix, per aggirare le situazioni in cui questa teoria si rompe.
Come puoi vedere durante l'aggiornamento, ci sono ottime condizioni in cui il sistema è utilizzabile solo per una parte limitata. Se qualcosa dovesse andare storto durante l'aggiornamento , molto probabilmente rimarrai con un sistema guasto. Spesso anche uno che non può essere facilmente riparato, poiché anche il programma di aggiornamento può essere interessato. Ricorda, i programmi con dipendenze interrotte possono continuare a funzionare, ma non possono essere riavviati, purché le dipendenze siano interrotte, questo vale anche per il programma di aggiornamento.
È possibile utilizzare il programma da riga di comando apt-mark
per scoprire quali pacchetti sono contrassegnati come installati manualmente e quali sono stati installati automaticamente. Puoi anche cambiare quei segni usando lo stesso programma. Ciò influirà direttamente sul processo di aggiornamento.
In una configurazione software più complessa, a volte l'Updater ti chiederà di risolvere manualmente una dipendenza. Vale a dire quando un programma installato manualmente viene aggiornato e richiede una nuova versione di una libreria mentre un altro programma installato manualmente dipende dalla vecchia versione della stessa libreria e non può funzionare con quella nuova. Dovrai quindi fare la tua scelta, o di abbandonare uno di quei programmi o di astenervi dal potenziarli entrambi. Poiché le dipendenze sono spesso complesse, questo può diventare molto disordinato molto velocemente (potresti aver sentito parlare del termine "inferno delle dipendenze").
Ora alle domande specifiche:
- Quando viene modificata l'infrastruttura di basso livello (di basso livello come nel kernel, nei driver, nelle librerie, ecc. Qualsiasi cosa con cui un utente non interagisce direttamente), cosa succede ai binari deprecati?
- OK ... ho già coperto questo
- Cosa succede a un'app che è stata completamente deprecata? Ad esempio, Unity 2D (o qualsiasi altro software abbandonato / nessun manutentore il cui pacchetto non è in un nuovo repository).
- Se l'app è stata installata una volta manualmente rimarrà nel sistema, causando spesso l'inferno di dipendenza che ho descritto.
- ubuntu-desktop è un metapacchetto che estrae le applicazioni Ubuntu predefinite come dipendenze. Se ho rimosso Firefox e installato Chrome, Firefox verrà comunque inserito come parte degli aggiornamenti?
- Finché è il browser standard della nuova versione, sì. Chromium verrà anche aggiornato. Non sono sicuro di poter rimuovere Firefox senza rimuovere Ubuntu-Desktop. Si noti che a parte le dipendenze rigorose, il sistema di pacchetti conosce anche il concetto di raccomandazioni, in cui un software verrà normalmente installato come una dipendenza, ma può essere disinstallato in seguito senza influenzare nient'altro che le sue sole dipendenze.
- Inoltre, cosa succede se una singola app dipendeva dal pacchetto-x e non lo fa più nella nuova versione; package-x verrà aggiornato insieme al resto dei pacchetti nonostante sia orfano?
Chiedimi se hai ancora altre domande.