Perché i gestori pacchetti hanno bisogno di bloccare i file?


10

dpkgutilizza un file di blocco ( /var/lib/dpkg/lock), quando in uso.

  • Perché sono necessari questi file di lock?
  • Perché non sono possibili più istanze?

Dpkg esegue le installazioni. Questa è una modalità di sicurezza per evitare conflitti. Una sola installazione contemporaneamente.
albfan,

Risposte:


15

Questo non è un dpkgproblema specifico (come suggerito dal titolo della mia modifica). Piuttosto, questo è qualcosa che fa ogni gestore di pacchetti (di cui sono a conoscenza); e per una buona ragione. Tuttavia, capisco perché potrebbe essere fonte di confusione.

I gestori pacchetti si affidano a database per tenere traccia delle informazioni per i pacchetti installati. Se più utenti tentano di scrivere su un database allo stesso tempo, ha un'alta probabilità di corrompere i dati (il che rovinerebbe davvero il sistema).

Di conseguenza, molti gestori di pacchetti (tutti?) Fanno affidamento su un file di blocco per segnalare che il database viene scritto, quindi un altro client non dovrebbe essere autorizzato a farlo.


Si noti che i gestori di pacchetti intelligenti potrebbero essere in grado di determinare quando una richiesta è di sola lettura e potrebbe non essere necessario bloccare il database. Di conseguenza; è possibile che alcune azioni possano essere eseguite simultaneamente dove altre non lo saranno.


2
Penso che portage e paludis (i gestori dei pacchetti di Gentoo) siano in grado di lavorare in parallelo, se usa i blocchi, lo fa solo brevemente quando aggiunge pacchetti all'elenco installato.
Valità,

Daremo un'occhiata ai gestori di pacchetti Gentoo e aggiornerò la mia risposta a breve.
HalosGhost,

Non riesco a trovare informazioni aggiornate su questo; ma almeno, per un po ', sia paludis che portage hanno utilizzato i file di blocco. Nota, questa è una strategia così comune perché è uno degli unici modi sicuri per prevenire la corruzione dei dati; Sarei sorpreso se portage o paludis non avessero ancora usato un tale metodo.
HalosGhost,

1
Ah, sembra che tu abbia ragione, tuttavia l'ambito di questi blocchi è diverso, vengono utilizzati solo durante l'aggiornamento dell'indice dei pacchetti (la perdita di pacchetti disponibili), l'installazione dei pacchetti in realtà è un'operazione di sola lettura e quindi non invoca il blocco. Tuttavia, sì, capisco cosa intendi, ha senso che la strategia sia così comune.
Valità,

9

Il file di blocco viene utilizzato per impedire l'esecuzione parallela di più istanze.

Perché è importante per i gestori di pacchetti?

Un gestore di pacchetti - da una vista di alto livello - è un programma che applica modifiche complesse al disco rigido.

Le modifiche non possono essere eseguite in un solo passaggio ("atomico"), quindi esistono più passaggi; molti passaggi dipendono dal risultato di passaggi precedenti.

Pertanto, il gestore pacchetti deve analizzare il disco rigido prima di eseguire ogni passaggio o semplicemente analizzarlo una volta e tenere traccia delle modifiche che si applica da solo. La prima opzione è estremamente lenta. Il secondo richiede che nessun'altra istanza apporti modifiche.

Ci sono molti altri problemi che potrebbero apparire.

Non è impossibile implementare un gestore di pacchetti che può funzionare in parallelo, ma è troppo complicato per valerne la pena . Come in, non puoi immaginare quanto sia complicato. Veramente.


2

dkpg(e la rpmmaggior parte degli altri gestori di pacchetti tradizionali) funzionano installando i pacchetti in uno spazio globale, il che significa che i pacchetti possono entrare in conflitto tra loro (ad esempio Ae Bnon possono essere installati contemporaneamente, poiché entrambi si installano /usr/lib/libfoo.so). I gestori dei pacchetti devono rilevare tali conflitti e rifiutare tali richieste di installazione al fine di mantenere il sistema in uno stato coerente. Avere più istanze del gestore pacchetti in esecuzione contemporaneamente sarebbe molto complicato e soggetto a errori.

I gestori di pacchetti senza conflitti (ad es. Http://0install.net ) possono e consentono di installare più pacchetti in parallelo¹ e non necessitano di file di blocco ( A/libfoo.soe B/libfoo.soandranno in directory diverse).


1 Parallelo sia nel senso di essere presente e disponibile sul sistema allo stesso tempo, sia nel senso di essere scaricato e aggiunto al sistema contemporaneamente.

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.