dpkg
utilise un fichier de verrouillage ( /var/lib/dpkg/lock
), lorsqu'il est utilisé.
- Pourquoi ces fichiers de verrouillage sont-ils nécessaires?
- Pourquoi plusieurs instances ne sont-elles pas possibles?
dpkg
utilise un fichier de verrouillage ( /var/lib/dpkg/lock
), lorsqu'il est utilisé.
Réponses:
Ce n'est pas un dpkg
problème spécifique (comme le titre de mon montage l'a suggéré). C'est plutôt quelque chose que fait tout gestionnaire de paquets (dont je suis au courant); et pour une bonne raison. Cependant, je comprends pourquoi cela pourrait prêter à confusion.
Les gestionnaires de packages s'appuient sur des bases de données pour suivre les informations des packages installés. Si plusieurs utilisateurs tentent d'écrire dans une base de données en même temps, il y a de fortes chances de corrompre les données (ce qui serait vraiment un problème avec le système).
Par conséquent, de nombreux (tous?) Gestionnaires de packages s'appuient sur un fichier de verrouillage pour signaler que la base de données est en cours d'écriture, de sorte qu'un autre client ne devrait pas être autorisé à le faire.
Notez que les gestionnaires de packages intelligents peuvent déterminer quand une demande est en lecture seule et peuvent ne pas avoir besoin de verrouiller la base de données. Par conséquent; il est possible que certaines actions puissent être exécutées simultanément alors que d'autres ne le seront pas.
Le fichier de verrouillage est utilisé pour empêcher l'exécution parallèle de plusieurs instances.
Pourquoi est-ce important pour un gestionnaire de package?
Un gestionnaire de paquets - à partir d'une vue de haut niveau - est un programme qui applique des modifications complexes au disque dur.
Les modifications ne peuvent pas être effectuées en une seule étape («atomique»), il y a donc plusieurs étapes; de nombreuses étapes dépendent du résultat des étapes précédentes.
Ainsi, le gestionnaire de packages doit soit analyser le disque dur avant d'exécuter chaque étape, soit simplement l'analyser une fois et suivre les modifications qu'il applique lui-même. La première option est extrêmement lente. La seconde nécessite qu'aucune autre instance n'apporte de modifications.
De nombreux autres problèmes pourraient apparaître.
Il n'est pas impossible d'implémenter un gestionnaire de packages pouvant fonctionner en parallèle, mais c'est trop compliqué pour en valoir la peine . Comme dans, Vous ne pouvez pas imaginer à quel point compliqué. Vraiment.
dkpg
(et la rpm
plupart des autres gestionnaires de packages traditionnels) fonctionnent en installant des packages dans un espace global, ce qui signifie que les packages peuvent entrer en conflit les uns avec les autres (par exemple A
et B
ne peuvent pas être installés en même temps, car ils s'installent tous les deux /usr/lib/libfoo.so
). Les gestionnaires de packages doivent détecter ces conflits et rejeter ces demandes d'installation afin de maintenir le système dans un état cohérent. Avoir plusieurs instances du gestionnaire de paquets en même temps serait très compliqué et sujet aux erreurs.
Les gestionnaires de paquets sans conflit (par exemple http://0install.net ) peuvent autoriser et permettent d'installer plusieurs packages en parallèle¹, et n'ont pas besoin de fichiers de verrouillage ( A/libfoo.so
et B/libfoo.so
iront dans différents répertoires).
1 Parallèle à la fois dans le sens d'être présent et disponible sur le système en même temps, et dans le sens d'être téléchargé et ajouté au système simultanément.