J'ai supprimé certains fichiers /var/lib/dpkg/
, à savoir:
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
Je comprends que Debian utilise ces fichiers pour conserver des informations sur les paquets installés. Maintenant, quand je le fais apt-get update
, j'obtiens l'erreur suivante:
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
Si je comprends bien le FHS , les fichiers situés dans /var
ne sont pas censés être critiques pour le système. Estimez que ces fichiers doivent être temporaires, journaux, caches et similaires.
Existe-t-il donc un moyen de recréer les fichiers supprimés?
apt
package-management
directory-structure
dpkg
Martin Vegter
la source
la source
/var/lib/dpkg/info
sont également très importants. Vous avez mal compris le FHS et AFAIK, les seuls chemins de récupération sont (a) restaurer à partir d'une sauvegarde ou (b) réinstaller.Réponses:
Si vous regardez l' objectif de / var comme indiqué dans la norme de hiérarchie du système de fichiers , il dit:
Notez que les fichiers "transitoires et temporaires" ne sont que l' une des choses qu'il contient. Il contient également des "répertoires et fichiers spoule" et des "données administratives et de journalisation". Vous avez supprimé les "données administratives" critiques.
Il explique ensuite pourquoi
/var
existe:C'est l'essentiel
/var
: les données qu'elles contiennent changent, contrairement à/usr
(qui ne change que lorsque vous ajoutez / supprimez / mettez à jour un logiciel).D'autres sections expliquent les différents sous-répertoires de
/var
; par exemple,/var/lib
(où les fichiers que vous avez supprimés résidaient auparavant) contient des «informations d'état relatives à une application ou au système», définies comme «des données que les programmes modifient pendant leur exécution et qui concernent un hôte spécifique».Vous ne devriez vraiment pas supprimer des fichiers sans savoir à quoi sert le fichier spécifique. Avec les fichiers que vous avez supprimés, sauf si vous avez une sauvegarde de ces fichiers, je pense que la seule chose qui reste à faire est de prendre une sauvegarde de
/home
,/etc
etc. et de réinstaller. Jusqu'à ce que vous le fassiez, vous ne pourrez pas utiliserdpkg
(et APT, etc.). À part cela, le système devrait continuer de fonctionner.la source
apt-get update
va reconstruire disponible, je crois. Les informations / éléments proviennent de chaque package installé, mais elles reflètent également l'historique, au moins pour les anciens fichiers de conf ... mais vous pourriez probablement vous en tirer avec la copie de cette même machine de packages)/var/lib
informations d'état. Les données persistantes modifiées par les programmes pendant leur exécution, par exemple, les bases de données, les métadonnées du système de conditionnement, etc."Vous ne pouvez pas "recréer"
/var/lib/dpkg/status
dans le sens de simplement exécuter une commande et le fichier apparaît comme par magie. Non. Vous devez utiliser une sauvegarde du fichier et apprendre à ne jamais supprimer les éléments du/var/lib
répertoire:Cela vous donnerait l'état du colis de la veille. Commencez à prier pour que cela ne brise pas autre chose.
la source
/var/backups
, il y a plusieurs copies là-bas./var/backups/dpkg.status.0
?Les fichiers situés dans
/var
sont très critiques pour le système. Par exemple,/var/mail
ou/var/spool/mail
contient l'e-mail des utilisateurs; vous ne supprimeriez pas cela plus que vous allumiez un feu dans la boîte aux lettres de votre voisin. Ce ne sont que des fichiers dans certains sous-répertoires/var
qui contiennent des fichiers plus ou moins transitoires: des fichiers journaux/var/log
, des caches qui peuvent généralement être recréés/var/cache
, des fichiers temporaires (que vous ne devez pas supprimer pendant leur utilisation!) Dans/var/tmp
.Les données
/var/lib
peuvent être assez critiques. Par exemple, MySQL est généralement configuré pour stocker ses bases de données/var/lib/mysql
par défaut: si vous effacez cela, vous effacez vos bases de données. Dpkg place également ses propres bases de données/var/lib
;/var/lib/dpkg/status
est une./var/lib/dpkg/status
contient des informations sur les packages installés. Si vous avez effacé cela, vous devez le restaurer à partir d'une sauvegarde. Si votre sauvegarde n'est pas entièrement à jour, consultez les journaux des dernières manipulations de packages sous/var/log/apt
et dans/var/log/dpkg.log
. Vous devrez créer ce fichier avant dedpkg
fonctionner./var/lib/dpkg/available
est construit à partir de données téléchargées sur Internet.apt-get update
devrait le reconstruire./var/lib/dpkg/info
contient des fichiers livrés avec les paquets Debian. Vous pouvez restaurer ces fichiers simplement en réinstallant les packages. Bien sûr, vous aurez besoin d'une liste de packages installés pour cela. Si vous avez restauré/var/lib/dpkg/status
, vous pouvez alors extraire la liste des packages.Si vous avez perdu
/var/lib/dpkg/status
, vous pourrez peut-être le recréer en créant un fichier vide, puis en exécutantapt-get install --reinstall
la liste des packages. Un endroit où la liste des packages est également enregistrée est/var/lib/apt/extended_states
, au moins si vous n'avez utilisé APT que pour installer des packages (par opposition àdpkg
directement) - utilisez ce fichier au lieu de/var/lib/dpkg/status
la commande ci-dessus. Si vous l'avez également supprimé, vous pouvez reconstruire une liste approximative de packages avec$(cd /usr/share/doc && ls)
, car la plupart des packages créent une entrée dans/usr/share/doc
. Il y a probablement quelques exceptions.Ne demandez aucune assistance sur la gestion des packages sur ce système. La récupération après la suppression de fichiers critiques pour le système n'est pas une science exacte. Si vous ne pouvez pas restaurer à partir de sauvegardes, vous devez installer un nouveau système propre dès que possible.
la source
Le
/var/lib/dpkg/available
peut être recréé à partir des données apt. La façon la plus simple que j'ai trouvée de le faire est d'utiliserdselect
et de choisir la mise à jour. J'espère que cela ne fonctionnera que si vous avez choisi comme méthode de mise à jour. On dirait quedselect
fait un:Notez que les choses ont peut-être changé depuis la mise à jour de Debian.
Il existe des astuces à recréer en
/var/lib/dpkg/status
fonction du fait que chaque package est nécessaire pour ajouter un répertoire dans le/usr/share/doc
répertoire. Voir l'article à http://linuxmafia.com/faq/Debian/package-database-rebuild.html . Un script présenté utilise une liste filtrée de / usr / share / doc pour créer une liste des packages installés, puis les réinstalle tous.la source
Eh bien, je suppose que vous pouvez recréer le fichier vide, puis faire la liste longue d'apt-get install, en supposant que vous savez ce que vous avez installé la première fois.
J'ai un ancien script qui fait essentiellement cela à partir du plus petit ensemble de packages pouvant exécuter apt-get. En l'utilisant, j'ai fini par rapporter des dizaines de dépendances non déclarées.
Si vous ne savez pas tout ce que vous avez installé, réinstallez le système.
la source
Sur Linux Mint 17, j'ai rencontré un problème de sondage similaire. J'étais zélé dans la suppression de fichiers et je me suis retrouvé là où le "Administration -> Upgrade Manager" ne semblait tout simplement pas heureux .......
La solution qui a fonctionné pour moi a été de créer un répertoire appelé "dpkg" selon le message d'erreur, et d'y créer un fichier vide appelé "status".
J'ai ensuite exécuté Update Manager.
Cela a fonctionné pour moi :-)
la source
Si vous aviez d'autres comptes d'utilisateurs que 'roo't', vous pouvez essayer apt-get dist-upgrade depuis l'un d'eux. Apt téléchargera les archives mais s'arrêtera de les installer en raison de certains répertoires manquants dans / var /. Les répertoires seront affichés. créez-les et exécutez à nouveau apt-get dist-upgrade. dans le cas où leur création échoue à partir du journal de compte alternatif vers la racine n créez les répertoires à partir de là, puis exécutez à nouveau apt. vous serez invité à propos de la configuration logrotate et quelques autres configurations tapez simplement Y n continuez jusqu'à la fin puis redémarrez lorsque apt dist-upgrade est terminé. tout devrait maintenant redevenir normal.
la source
Désolé pour le retard. Briam, recréez les répertoires et les fichiers manuellement, puis mettez à jour les dépôts (
mkdir
ettouch
, comme requis par l'erreur affichée), et utilisezdpkg --configure -a
.Votre système fonctionnerait bien, mais il est important de réinstaller pour vous assurer qu'il n'est pas corrompu; le précédent n'est que pour gagner du temps pour planifier une réinstallation ... et prendre soin de supprimer les
/var/lib/*
fichiers.la source
Si vous avez acheté un Raspberry Pi 3 et que vous avez rencontré le problème et que l'erreur "Impossible d'ouvrir le fichier / var / lib / dpkg / status analysé ou ouvert" est une solution de contournement qui a fonctionné pour moi:
Comment recréer le fichier "/ var / lib / dpkg / status"?, Juste parce que ce n'est pas un fichier inutile, c'est un fichier très important qui conserve des informations sur les packages installés dans votre système d'exploitation raspbian, alors voici comment j'ai été recréé :
Effectuez un wget dans votre système Raspbian:
Accordez des autorisations:
Analysez le dossier de documentation de votre système et régénérez le fichier d'état:
une fois terminé, téléchargez le fichier et lisez attentivement. Suivez les étapes décrites dans le fichier:
la source
recover1.sh
détruira votre courant/var/lib/dpkg/status
sans le tester s'il est déjà correct. Ensuite, il exécutera un mélange de trucs pour essayer de reconstruire une version quelque peu fonctionnelle. N'exécutez jamais le script ci-dessus à moins que le fichier / var / lib / dpkg / status ne vous manque totalement. Sinon, celastrings /var/lib/dpkg/status
pourrait être une meilleure façon de commencer à reconstruire le fichier corrompu.