Qual è la migliore pratica per mantenere aggiornato un server Ubuntu Linux (compilare pacchetti, dist-upgrade, alt repos ...)


8

Stiamo eseguendo un server di produzione basato su Ubuntu 9.10 Karmic Koala , il kernel è quasi aggiornato (2.6.38.2-grsec-xxxx-grs-ipv6-64) ma il repository di pacchetti karmic è ora ridicolmente obsoleto, ad es. Nginx è 0.7.62 - veramente buggy - mentre l'ultima scuderia è 1.0.x !!

Inoltre Karmic ha appena raggiunto la fine della sua vita.

Questa domanda: le migliori pratiche per mantenere aggiornati i pacchetti UNIX? sembra simile ma in realtà include solo alcuni suggerimenti sui gestori di pacchetti; non è affatto quello di cui ho bisogno!

quindi le opzioni che vedo sono:

  1. ottenere una nuova macchina, installarla da zero, migrare
  2. aggiornamento della distribuzione
  3. usa un repository diverso ( launchpad / ppa / backport / pinning )
  4. costruisci il tuo

Gli svantaggi di 1. sono abbastanza evidenti.

Non oso però fare un percorso dist-upgrade, poiché i tempi di inattività e le possibili conseguenze catastrofiche sono semplicemente impossibili da prevedere per un server di produzione e attualmente stanno principalmente ricostruendo i miei pacchetti richiesti. Ma sono sicuro che mi mancherà un po '.

Non mi è veramente chiaro quali siano i rischi (stabilità / compatibilità) dell'utilizzo dei backport di Ubuntu, inoltre non è più previsto ufficialmente 9.10. I Launchpad sono build individuali, domande simili: quanto è meglio che compilare le tue.

La creazione di pacchetti sembra a posto, ma: 1. a volte ho difficoltà a riprodurre le opzioni ./configure corrette per riutilizzare i miei file di configurazione esistenti 1. Sono sicuro che ci sono tonnellate di pacchetti e dipendenze che ora sono piuttosto obsoleti e possibili fonti di bug

Finalmente ... che dire dei pacchetti "vecchi" in una distribuzione recente? Immagino non ci sia altro modo che ricostruirli da solo? Una combinazione di 2. e 4. è finalmente il percorso migliore?

Esiste un consenso oggettivo su qual è il modo migliore per farlo, o motivi per cui alcune delle mie opzioni vanno bene / no?

Se davvero non c'è, accetterò che la domanda venga chiusa prima di creare un thread infinito!


1
È per motivi che attualmente si verificano che per i server devono essere utilizzate solo versioni LTS. In risposta alla tua domanda, finché non puoi fare il numero 1 o il numero 2, rimarrai bloccato con il numero 4. Vedo che la # 3 inizia a fallire spesso man mano che passa il tempo in quanto le dipendenze non sono disponibili.
daemonofchaos,

in effetti @KayakJim, anche se in quel momento avremmo dovuto capirlo - ma quando il carico del server era basso la manutenzione sarebbe stata accettabile, non pensavamo abbastanza in anticipo. lezione imparata (si spera).
Stefano,

Risposte:


4

Mantenere la propria distribuzione richiede molto lavoro. Anche se mantieni i backport, sarai presto sopraffatto dai problemi di sicurezza da risolvere e dovrai estrarre librerie di basso livello per continuare ad aggiornare il tuo software, il che potrebbe interrompere altre cose (mantengo i server che eseguono distribuzioni di 6 anni, è non è divertente).

L'aggiornamento è generalmente una buona soluzione. do-release-upgradeè ben fatto e dovresti essere in grado di aggiornare senza problemi (specialmente se hai usato solo pacchetti ufficiali).

La mia soluzione preferita potrebbe essere il percorso di reinstallazione. Più specificamente, i server dovrebbero essere gestiti utilizzando un sistema di gestione della configurazione come Puppet, Cfengine o Chef. Se tutte le esigenze di configurazione / pacchetto sono specificate utilizzando tale strumento e i tuoi dati sono al sicuro su una partizione separata, è molto più facile reinstallare rapidamente. È sufficiente installare una nuova distribuzione senza cancellare le partizioni di dati, quindi eseguire lo strumento di gestione della configurazione per ripristinare i pacchetti / le configurazioni. Credo che questo sia il modo più pulito di fare, soprattutto se hai diversi server da gestire.

Se si utilizzano pacchetti non ufficiali, è possibile identificarli prima di aggiornare / reinstallare. manutenzione-controllo può aiutarti a identificare i pacchetti che non sono ufficialmente gestiti da Ubuntu:

$ bzr branch lp:ubuntu-maintenance-check
$ cd ubuntu-maintenance-check
$ ./maintenance-check -f n

Se si desidera reinstallare, è anche possibile esportare l'elenco dei pacchetti installati:

$ dpkg --get-selections > myinstall.txt

e il tuo database debconf:

$ debconf-get-selections > debconf.txt # from the debconf-utils package

Come nota, dal momento che stai usando Karmic, potrebbe non essere troppo violento aggiornare a Lucid, che è una versione LTS, ancora supportata fino al 2015 per i pacchetti del server principale. Ciò dovrebbe lasciarti abbastanza tempo per configurare un'installazione automatizzata praticabile per il futuro.

Quando chiedi dei pacchetti di Launchpad, suppongo che intendi i PPA. Ci sono tonnellate di PPA diversi. Alcuni sono sperimentali, altri sono stabili. Alcuni sono gestiti da sviluppatori Ubuntu ufficiali, altri sono gestiti da persone che non sanno come fare correttamente un pacchetto. È difficile dire in generale se i pacchetti che trovi su PPA sono buoni, non esiste una regola generale. Il miglior suggerimento in questo caso potrebbe essere quello di guardare il proprietario dei PPA per avere un'idea della possibile qualità dei loro pacchetti.


ovviamente non abbiamo pensato a puppet & co. al tempo. Ma in effetti hai sottolineato molto bene che, se dovessimo seguire il percorso di reinstallazione, è meglio preparare correttamente un'installazione facile da replicare. PS. "specialmente se hai usato solo pacchetti ufficiali" ovviamente no, sfortunatamente!
Stefano,

Quindi il primo passo che potresti voler fare è identificare i pacchetti non ufficiali. maintenance-checkposso aiutarti in questo (vedi la mia modifica).
inkaphink,

Risposta selezionata per i suggerimenti aggiuntivi, incluso l'uso dei sistemi di gestione conf e del controllo di manutenzione e sui PPA. Mi sono appena reso conto, tuttavia, dopo aver esaminato gli ultimi repository, che i pacchetti non sono sempre aggiornati, ad es. anche nella versione 11.04 di nginx è VECCHIO (0.8.54-4) e non passeranno mai a 1.0.x in quella distribuzione. Qualche consiglio per quelle situazioni?
Stefano,

1
@Stefano: Ubuntu usa lo stesso tipo di politica di Debian, che prevede che il software non venga aggiornato nei repository principali dopo il rilascio (dopo il congelamento delle funzionalità per essere precisi). Ciò può effettivamente portare a versioni precedenti del software in una versione ancora mantenuta (soprattutto se il software viene rilasciato rapidamente). Puoi usare i backport per ottenere nuove versioni, ma probabilmente perderai aggiornamenti di stabilità e sicurezza. Non esiste una soluzione perfetta per questo, a meno che tu non sia disposto a mantenere i tuoi backport, che, come ho detto prima, è piuttosto costoso.
inkaphink,

2

Se il server non è esposto al mondo e ti fidi assolutamente dei tuoi utenti (in genere non è una buona idea), allora se funziona, potresti semplicemente lasciarlo.

Se è in qualche modo esposto al mondo esterno e / o intrattieni l'idea di un utente legittimo che ci gioca in modo illegittimo, allora hai assolutamente bisogno di correzioni e patch per il tuo software installato.

In questo caso, hai due opzioni:

  1. Esegui una distribuzione supportata e ottieni aggiornamenti per il tuo software o

  2. Esegui il backport di tutte le correzioni per la tua distribuzione non supportata, che, francamente, non sembra fattibile.

Non sono un utente Ubuntu, quindi non posso commentare la completezza delle patch che otterresti attraverso l'opzione 3, ma se hai qualche dubbio, suppongo che non avrai una copertura completa.

La soluzione migliore è passare a una versione LTS di Ubuntu, che ti fornirà supporto per le versioni del pacchetto indicate per qualche tempo. Con il tempo, alcuni dei pacchetti saranno obsoleti, ma l'ambiente avrà patch di sicurezza e sarà stabile (nessun aumento della versione del pacchetto). In base alla mia esperienza, la stabilità di un ambiente di lavoro noto è generalmente più preziosa delle nuove funzionalità.

Sembra che la tua posizione attuale non sia mantenibile e tu devi muoverti. L'unico modo sicuro è ottenere una seconda macchina (o una macchina virtuale) e testare le migrazioni fino a quando non si ha una procedura ripetibile riuscita, quindi applicarla alla macchina di produzione. Se si utilizzano i backup per eseguire migrazioni di prova, si avrà anche una buona opportunità di testare le procedure di backup.


grazie @ Pawel-Brodacki. Il server è sicuramente esposto! Capisco il tuo punto di vista sulla stabilità rispetto alle funzionalità. Il problema è che spesso la stabilità viene fornita con i passaggi principali della versione. Per esempio. La serie nginx 1.0. * è più stabile della serie 0.8 inclusa anche negli ultimi natty. Qualche suggerimento al riguardo?
Stefano,

1
Se al momento è abbastanza buono, si applica la regola "se non è rotto, non aggiustarlo". Dopodiché si tratta di calcolo aziendale: viene aggiunta la stabilità che ti farà risparmiare più di quanto ti costerà mantenere un set di pacchetti da solo. Se è solo nginx, o nginx e una manciata di librerie, quindi compilare da soli, testare e distribuire è qualcosa che può essere fatto. In tal caso, tuttavia, sarebbe prudente seguire da vicino lo sviluppo dei pacchetti per chiudere rapidamente eventuali bug rilevati.
Paweł Brodacki,

2

L'unica vera via da seguire è un aggiornamento della distribuzione. Posso capire che sei nervoso per questo, dato che ormai salterai diverse versioni (11.04 è appena stato rilasciato).

Vorrei raccomandare di creare un clone delle unità in questa macchina e quindi utilizzare un computer separato per eseguire con i cloni e utilizzarlo per eseguire una serie di aggiornamenti di prova. Prendi nota di tutti i problemi riscontrati e ripeti fino a quando non avrai una procedura chiara per tutti. Quindi applicare questo al tuo server live.

Se non puoi permetterti alcun tempo morto, la migrazione è la tua unica via d'uscita. Dimentica il pinning e i backport, che ti terranno in vita solo per un periodo di tempo limitato. E l'opzione "roll your own" non vale nemmeno la pena considerare. Vale solo i miei 2 penny.

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.