Domanda

So che ci sono altre applicazioni anche, ma considerando yum / apt-get / aptitude / pacman sei manager Pacchetto principale per le distribuzioni Linux.

Oggi ho visto sulla mia fedora 13 scatola:

(7/7): yum-3.2.28-4.fc13_3.2.28-5.fc13.noarch.drpm       |  42 kB     00:00     

E ho cominciato a chiedermi come si fa l'aggiornamento del pacchetto come un sé? Che il design è necessaria per garantire un programma in grado di aggiornarsi?

Forse questa domanda è troppo generica, ma mi sentivo così era più adatto di programmers.SE per una questione del genere è che è più di natura tecnica. Se c'è un luogo più appropriato per questo si sentono domanda a farmelo sapere e posso chiudere o un moderatore posso muovermi.

Grazie.

È stato utile?

Soluzione

Non ho idea di come funzionano questi sistemi particolari, ma ...

  • sistemi Unix moderno generalmente tollerano la sovrascrittura di un file eseguibile in esecuzione senza un singhiozzo, quindi in teoria si può solo farlo.
  • Si potrebbe farlo in un chroot jail e quindi spostare o qualcosa di simile per ridurre il tempo durante il quale il sistema è vulnerabile. Aggiungere un filesystem journaling e questo è un po 'più sicuro ancora.

Mi viene da pensare che il pacchetto-manager ha bisogno di tenere il database di accesso pacchetto in memoria anche per assicurarsi contro una condizione di competizione lì. Anche in questo caso, il chroot jail e copia opzione è disponibile come alternativa a basso rischio.

Altri suggerimenti

  

E ho cominciato a chiedermi come si fa l'aggiornamento del pacchetto come un sé? Che cosa   è necessaria progettazione per garantire un programma in grado di aggiornarsi?

E 'come un sacco di cose, non c'è bisogno di "design" specifico per risolvere questo problema ... ma si ha bisogno di essere a conoscenza di alcuni "trucchi".

Per esempio Unix aiuta inode conteggio di riferimento in modo da "voi" possibile eliminare un file si sta ancora utilizzando, e va bene. Tuttavia questo implica alcune cose che hanno a che fare, per esempio se si dispone di plugin allora avete bisogno di caricare tutti prima si esegue avviare una transazione ... anche se il plugin sarebbe solo eseguire alla fine della transazione (perché si potrebbe avere una versione diversa alla fine).

Ci sono anche alcune cose che è necessario fare per fare in modo che tutto ciò che si sta aggiornando opere, quali: i nuovi file mettere giù prima di rimuovere i vecchi file. E non troncare i vecchi file, basta scollegare. Ma quelli aiuterà anche a:.)

Utilizzando problemi esterni, che si comunica, può essere difficile (perché non si può exec una nuova copia della vecchia versione dopo che è stato aggiornato). Ma questo non è spesso fatto, e quando è è per cose come scaricare ... che possono in qualche modo facilmente essere fatte per accadere prima eventuali aggiornamenti.

Ci sono anche cose che non sono un problema nei client di linea cmd come yum / apt, per esempio se si dispone di un programma che sta per eseguire 2+ "aggiornamenti" allora si può avere problemi se il primo aggiornamento è stato per il gestore di pacchetti. declassa rendono questo ancora più divertente :). Anche demone come i processi dovrebbero praticamente mai "caricare" il gestore di pacchetti, ma come con gli altri trucchi ... si tende a voler seguire questa in ogni caso, per altri motivi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top