Obiettivo
Il nostro obiettivo è garantire che l'aggiornamento del sistema operativo avvenga senza intoppi e senza errori.
Sistema operativo e versioni software
- Sistema operativo: Red Hat Enterprise Linux 6+
Requisiti
Accesso privilegiato ai sistemi
Difficoltà
FACILE
Convenzioni
- # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando
sudo
comando - $ – dati comandi linux da eseguire come un normale utente non privilegiato
Introduzione
Mantenere il sistema aggiornato è un'attività quotidiana per un amministratore di sistema, così come per un utente desktop. Applicando il software più recente (stabile) disponibile sul sistema, possiamo sfruttare le ultime funzionalità e saremo più protetti dai problemi di sicurezza e, si spera, soffriremo meno di bug. Per aggiornare il sistema è necessario configurare yum
repository che fungono da origine del software aggiornato.
Se ti siedi accanto alla macchina su cui è in esecuzione il sistema operativo da aggiornare, puoi facilmente agire se qualcosa va storto durante l'aggiornamento, come controllare l'output sul terminale, o avviare un sistema live se quello aggiornato non ritorna da riavviare, ma non è sempre così. Pensa a un data center con centinaia o migliaia di macchine (virtuali) o semplicemente a un PC fisico che devi aggiornare in remoto.
Ci sono semplici passaggi che possiamo eseguire per preparare il sistema per l'aggiornamento ed eventualmente eliminare qualsiasi problema che potrebbe mettere in pericolo un aggiornamento riuscito.
Procedura di aggiornamento
Quando si esegue un aggiornamento incondizionato (che significa "aggiorna tutto"), yum
recupererà tutti i metadati dai repository disponibili e calcolerà tutti i pacchetti da aggiornare rispetto a rpm
database che contiene tutti i metadati sui pacchetti installati nel sistema.
Il processo di aggiornamento calcola anche tutte le dipendenze dei pacchetti aggiornati, può sostituire i vecchi pacchetti e rimuovere le vecchie immagini del kernel in base alla sua configurazione. Il numero di immagini del kernel da conservare è impostato in /etc/yum.conf
file di configurazione, ed è 3 per impostazione predefinita:
installonly_limit=3
Dopo aver calcolato tutte le modifiche necessarie, yum
fornisce un elenco completo di tutti i pacchetti da aggiornare, rimuovere o installare per le dipendenze, allo stesso modo di quando si installano o si aggiornano pacchetti specifici.
In una sessione di aggiornamento interattiva yum
fornirà un riepilogo dei pacchetti da modificare, nonché il calcolo sulla dimensione dei dati da scaricare per l'aggiornamento come mostrato di seguito:
Dopo aver esaminato i risultati, possiamo decidere se avviare l'aggiornamento o annullarlo. Poiché yum aggiornerà tutto ciò per cui può trovare aggiornamenti, potremmo voler rimuovere in anticipo i pacchetti non necessari. Potremmo anche notare un pacchetto contrassegnato per l'aggiornamento con il blocco della versione che deve essere escluso dall'aggiornamento.
Dopo l'approvazione, yum scaricherà tutti i nuovi pacchetti e li installerà/aggiornerà uno per uno. Una volta completato, verificherà l'integrità dei pacchetti installati/aggiornati, ripulirà i file non necessari. Fornisce inoltre feedback durante il processo, fornendo una riga di testo per ogni passaggio, nonché un codice di uscita che suggerisce se l'aggiornamento è riuscito o se si è verificato un problema. Inoltre annullerà il processo di aggiornamento se si verifica un problema che sembra critico dal punto di vista del sistema coerente, ma a volte è già troppo tardi, quindi evitare che si verifichino problemi di aggiornamento è un approccio migliore.
Spazio su disco
Yum cache
Dal processo sopra descritto possiamo intuire che abbiamo bisogno di spazio su disco per il processo di aggiornamento:
- I metadati di tutti i repository configurati devono essere archiviati fino al termine del calcolo di tutti i pacchetti (e delle relative dipendenze) da aggiornare.
rpm
i pacchetti che costituiscono l'aggiornamento stesso devono essere archiviati localmente fino a quando non vengono installati correttamente.
Questi dati, chiamati yum cache
è necessario solo durante l'aggiornamento, ma può occupare molto spazio su disco. La posizione predefinita per questa cache è in /var/cache/yum
directory. Inutile dire che se non c'è abbastanza spazio per archiviare tutti i dati necessari, il processo di aggiornamento fallirà. Alcuni download non completati verranno eliminati, ma non tutto lo spazio potrebbe essere liberato, il che finisce per avere un sistema che non ha eseguito l'aggiornamento e il suo volume contiene /var/cache
quasi pieno.
Molte installazioni memorizzano il loro /var
directory su un volume dedicato alla registrazione, poiché la posizione predefinita per i file di registro è /var/log
sulla maggior parte delle distribuzioni e le applicazioni più efficaci smetteranno di funzionare o addirittura si arresteranno in modo anomalo se non riescono a scrivere i propri file di registro. Quindi riempire il volume a cui stanno scrivendo è una cosa negativa .
Più pacchetti devono essere aggiornati e più repository abbiamo, più spazio occuperà temporaneamente l'aggiornamento. Calcolare questo spazio dall'aggiornamento all'aggiornamento è difficile, ma può essere testato con la soluzione dry run descritta più avanti se disponiamo di una macchina di prova con l'esatto contenuto del software. Per un esempio in tempo reale, l'aggiornamento da RHEL 7.1 a 7.5 (installazione desktop con Gnome) può richiedere 4 GB di spazio nella cache, ma l'installazione di alcune correzioni su un sistema obsoleto di uno o due mesi richiederà solo pochi MB.
Per verificare quanto spazio abbiamo, possiamo usare il df
comando:
# df -h /var/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_sys-var 6.0G 1.7G 4.4G 28% /var
Nell'esempio sopra abbiamo 4,4 GB di spazio libero, che saranno sufficienti dato che il server è stato aggiornato solo pochi mesi fa. Per liberare spazio un passaggio banale sarebbe svuotare la yum cache
già memorizzato (forse all'ultimo aggiornamento). Per verificare quanto spazio occupa una cache al momento, possiamo usare du
:
# du -mcd 1 /var/cache/yum
1103 /var/cache/yum/x86_64
1103 /var/cache/yum
1103 total
I numeri sopra sono in MB, quindi la yum cache
in questo esempio occupa circa 1 GB di spazio su disco e occupa la maggior parte dello spazio su /var
volume.
Cancellazione della cache
Possiamo svuotare l'intera cache con il seguente comando:
yum clean all
Ma come yum
ci informa nell'output del comando precedente sulle versioni di RHEL 7, potrebbero esserci dati orfani da repository rimossi o disabilitati, cosa che molto probabilmente accadrà dopo aggiornamenti di rilascio minori, nel qual caso possiamo cancellare i dati in sicurezza a mano:
rm -rf /var/cache/yum/*
Potremmo ottenere più spazio per l'aggiornamento cancellando altri dati archiviati nel volume, ad esempio comprimendo/eliminando vecchi file di registro, spostando file di grandi dimensioni su altri volumi o estendendo le dimensioni del volume.
Spostare la cache
Per lavorare con le possibilità di yum
, se lo spazio su disco è molto basso, non possiamo cancellare altro e non possiamo aggiungere più spazio al volume, possiamo spostare la posizione della yum cache
ad un altro volume con più spazio libero. Possiamo configurare la posizione della cache in yum.conf
file di configurazione sopra menzionato. Considera l'impostazione predefinita:
cachedir=/var/cache/yum/$basearch/$releasever
Modificando il percorso prima di $basearch
la prossima operazione yum funzionerà con la stessa struttura di directory, ma su un percorso diverso, si spera con più spazio libero per l'aggiornamento. Possiamo anche spostare la cache su un altro volume spostando l'intera directory:
mv /var/cache/yum /extended_data_volume/
E creando un collegamento simbolico nella posizione originale che punta al nuovo luogo:
ln -s /extended_data_volume/yum /var/cache/yum
È opportuno sapere che l'aggiornamento non fallirà a causa di un errore banale come lo spazio su disco insufficiente. Su un sistema di grandi dimensioni gli amministratori di sistema implementano strumenti di monitoraggio come Nagios in grado di segnalare spazio su disco insufficiente su tutte le macchine, rendendo questo passaggio molto meno dispendioso in termini di tempo e soggetto a errori.
Errori di rete
In caso di problemi con la connettività tra i repository e la macchina che esegue l'aggiornamento, l'aggiornamento potrebbe non riuscire. Questo può accadere solo nei metadati, o nella nuova fase di download degli rpm, e non interromperà il sistema. Puoi riavviare il processo di aggiornamento una volta risolto il problema di rete.
Se invece l'aggiornamento viene inizializzato da una sessione interattiva, in caso di interruzione della rete la connessione potrebbe interrompersi, lasciando la macchina di aggiornamento senza amministratore per rispondere alle domande yum
potrebbe chiedere. Se la fase di installazione/aggiornamento del pacchetto è già stata avviata, continuerà incustodita e potrebbe non riuscire o essere completata se altrimenti sarebbe successo. Dopo la riconnessione, il processo può essere seguito in /var/log/yum.log
.
Yum dry run
A parte spazio su disco insufficiente e problemi di rete, l'aggiornamento in molti casi può non riuscire a causa di dipendenze di pacchetti non risolte. Questi devono essere risolti con strumenti in grado di calcolare e gestire le dipendenze dei pacchetti, ma sarebbe utile sapere che ci saranno problemi prima dell'aggiornamento vero e proprio (e quindi non sprecare i tempi di fermo sempre troppo brevi del sistema). Per ottenere queste preziose informazioni possiamo eseguire il processo di aggiornamento come se eseguisse l'aggiornamento effettivo, ma interromperlo prima che il download, l'installazione o l'aggiornamento del pacchetto effettivo abbiano avuto luogo.
Intorno a Redhat 6.6 è stata introdotta una nuova opzione che causerà yum
assumere "No" per ogni domanda che viene visualizzata durante l'aggiornamento, inclusa l'approvazione prima della fase di manipolazione del pacchetto effettiva, e di conseguenza non è necessaria alcuna interazione effettiva eseguire un ciclo di prova:
yum update --assumeno
Questo può essere lo strumento ideale per fornire una prova dell'aggiornamento in arrivo, inclusi i pacchetti da aggiornare e gli eventuali errori che potrebbero verificarsi. Considera il seguente semplice bash
sceneggiatura:
#!/bin/bash
yum update --assumeno &> $(hostname).yum.dryrun.$(date '+%Y-%m-%d').out
exit $?
Lo script di cui sopra può essere eseguito automaticamente e fornirà un rapporto di testo del ciclo di prova, nonché un codice di uscita generale che indica eventuali problemi. Non è necessario salvare l'output nel file system locale. La destinazione del reindirizzamento dell'output può essere un file system di rete, oppure il report può essere inviato a un server di report centrale, può essere raccolto da altri script o applicazioni. I report possono essere pubblicati e distribuiti ad altri reparti IT per l'approvazione, in questo modo tutti i soggetti coinvolti possono vedere esattamente quali pacchetti verranno aggiornati ea quale versione.
Il funzionamento a secco può essere programmato per l'esecuzione in un determinato intervallo di tempo (magari di notte per influire meno sulle prestazioni del sistema) con cron
, o eseguito da una fonte centrale con una configurazione di marionette. Il codice di uscita può anche essere memorizzato ed elaborato tramite monitoraggio o facter
, per aggregare i possibili risultati del prossimo aggiornamento prima di procedere.
Conclusione
Anche con uno o pochi computer, dovremmo raccogliere informazioni prima di iniziare un aggiornamento dell'intero sistema operativo, per sicurezza. Un giorno si verificherà un problema ed è molto meno stressante risolverlo prima che abbia un impatto sul lavoro effettivo di una determinata macchina. Su una scala più ampia, semplicemente non è possibile sedersi accanto a ciascun server o desktop e supportarlo con la tua presenza nella speranza che ciò aiuti l'aggiornamento a funzionare in modo impeccabile.
Conoscendo le fasi del processo di aggiornamento, le insidie e la soluzione ad esse è essenziale per il successo degli aggiornamenti. Iniziare la prossima fase di aggiornamento dell'intera infrastruttura con la certezza che non ci saranno problemi è farlo con stile.