dpkg
utilizza 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
utilizza un file di blocco ( /var/lib/dpkg/lock
), quando in uso.
Risposte:
Questo non è un dpkg
problema 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.
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.
dkpg
(e la rpm
maggior 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 A
e B
non 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.so
e B/libfoo.so
andranno 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.