Comment recréer / var / lib / dpkg / status?

J'ai supprimé certains files autour de /var/lib/dpkg/ , à savoir:

 /var/lib/dpkg/status /var/lib/dpkg/available /var/lib/dpkg/info/* 

Je comprends que Debian utilise ces files pour garder des informations sur les packages installés. Maintenant, quand je 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 files situés dans /var ne sont pas censés être critiques pour le système. Évaluer ceux-ci devraient être des files temporaires, des journaux, des caches, et similaires.

Existe-t-il donc un moyen de recréer les files supprimés?

Si vous regardez le but de / var comme indiqué dans la norme de hiérarchie de système de files , il est dit:

/var contient des files de données variables. Cela inclut les directorys et files de spoule, datatables d'administration et de journalisation, ainsi que les files temporaires et temporaires.

Notez que les files "transitoires et temporaires" ne sont que l' une des choses qu'il contient. Il contient également des "directorys et files spoulés" et des "données administratives et de journalisation". Vous avez supprimé les "données administratives" critiques.

Il explique ensuite pourquoi /var existe:

/var est spécifié ici pour permettre le assembly /usr lecture seule. Tout ce qui est écrit dans /usr qui est écrit pendant le fonctionnement du système (par opposition à l'installation et la maintenance du logiciel) doit être dans /var .

C'est la chose key à propos de /var : datatables y changent, contrairement à /usr (qui ne change que lorsque vous ajoutez / supprimez / mettez à jour le logiciel).

D'autres sections expliquent les différents sous-directorys de /var ; Par exemple, /var/lib (où les files que vous avez supprimés) contient des informations sur l'état d'une application ou du système, définies comme des données que les programmes modifient pendant leur exécution et qui appartiennent à un hôte spécifique.

Vous ne devriez pas vraiment supprimer des files sans savoir à quoi sert le file spécifique. Avec les files que vous avez supprimés, sauf si vous avez une sauvegarde de ces files, je pense qu'il ne rest plus qu'à sauvegarder /home , /etc etc. et à réinstaller. Jusqu'à ce que vous le fassiez, vous ne pourrez pas utiliser dpkg (et APT, etc.). Autre que cela, le système devrait continuer à fonctionner.

Vous ne pouvez pas "recréer" /var/lib/dpkg/status dans le sens de l'exécution d'une command et le file apparaît comme par magie. Non. Vous devez utiliser une sauvegarde du file et apprendre à ne jamais supprimer les éléments du directory /var/lib :

 sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status 

Cela vous donnerait le statut du package de la veille. Commencer à prier, cela n'a pas rompu autre chose.

Les files situés dans /var sont très critiques pour le système. Par exemple, /var/mail ou /var/spool/mail contient le /var/spool/mail des users; vous ne supprimeriez plus cela que vous allumeriez un feu dans la boîte aux lettres de votre voisin. Seuls les files de certains sous-directorys de /var contiennent des files plus ou less transitoires: les files journaux dans /var/log , les caches qui peuvent généralement être recréés dans /var/cache , les files temporaires (que vous ne devez pas supprimer, re en service!) dans /var/tmp .

Les données dans /var/lib peuvent être assez critiques. Par exemple, MySQL est généralement configuré pour stocker ses bases de données dans /var/lib/mysql par défaut: si vous l'effacez, vous effacez vos bases de données. Dpkg met également ses propres bases de données sous /var/lib ; /var/lib/dpkg/status est un.

/var/lib/dpkg/status contient des informations sur les packages installés. Si vous l'avez effacé, vous devriez le restaurer à partir d'une sauvegarde. Si votre sauvegarde n'est pas complètement à jour, vérifiez les logs des manipulations récentes du package sous /var/log/apt et dans /var/log/dpkg.log . Vous devrez créer ce file avant que dpkg fonctionne.

/var/lib/dpkg/available est construit à partir de données téléchargées sur Internet. apt-get update devrait le rebuild.

/var/lib/dpkg/info contient les files fournis avec les packages Debian. Vous pouvez restaurer ces files simplement en réinstallant les packages. Bien sûr, vous aurez besoin d'une list de packages installés pour cela. Si vous avez restauré /var/lib/dpkg/status , vous pouvez extraire la list des packages à partir de là.

 apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p') 

Si vous avez perdu /var/lib/dpkg/status , vous pouvez le recréer en créant un file vide, puis en exécutant apt-get install --reinstall sur la list des packages. Un seul endroit où la list des packages est également sauvegardée est /var/lib/apt/extended_states , du less si vous n'avez jamais utilisé APT pour installer les packages (contrairement à dpkg directement) – utilisez ce file au lieu de /var/lib/dpkg/status int la command ci-dessus. Si vous l'avez également supprimé, vous pouvez rebuild une list approximative de packages avec $(cd /usr/share/doc && ls) , car la plupart des packages créent une input dans /usr/share/doc . Il y a probablement quelques exceptions.

Ne requestz pas d'aide pour la gestion des packages sur ce système. Récupérer de la suppression des files critiques du 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.

Eh bien, je suppose que vous pourriez recréer le file vide et ensuite faire apt-get install longue list, en supposant que vous savez ce que vous avez installé la première fois.

J'ai un script ancien qui fait essentiellement cela à partir du plus petit set de packages qui peuvent exécuter apt-get. En l'utilisant, j'ai fini par signaler des dizaines de dependencies non déclarées.

Si vous ne connaissez pas tout ce que vous avez installé, réinstallez le système.

Le /var/lib/dpkg/available peut être recréé à partir des données apt. Le moyen le plus simple que j'ai trouvé pour faire cela en utilisant dselect et en choisissant la mise à jour. Je suppose que cela ne fonctionnera que si vous avez choisi comme méthode de mise à jour. On dirait que dselect fait un:

 /bin/bash /usr/lib/dpkg/methods/apt/update /var/lib/dpkg apt apt 

Notez bien que les choses peuvent avoir changé depuis Debian Sarge.

Il existe des astuces pour recréer /var/lib/dpkg/status fonction du fait que chaque package est nécessaire pour append un directory dans le /usr/share/doc . Voir le post à http://linuxmafia.com/faq/Debian/package-database-rebuild.html . Il y a un script présenté qui utilise une list filtrée de / usr / share / doc pour créer une list des packages qui ont été installés, puis les réinstaller tous.

Sur Linux Mint 17, j'ai rencontré un problème de son similaire. J'étais zélé dans la suppression des files et je me suis retrouvé là où "Administration -> Upgrade Manager" n'avait pas l'air heureux …….

La solution qui a fonctionné pour moi était de créer un directory appelé "dpkg" selon le message d'erreur, et de créer un file vide appelé "status".

J'ai ensuite exécuté Update Manager.

Cela a fonctionné pour moi 🙂

Si vous avez acheté un raspberry pi 3 et que vous avez fait face au problème et que vous avez trouvé l'erreur «Impossible d'ouvrir le file / var / lib / dpkg / status analysé ou ouvert»,

Comment recréer le file "/ var / lib / dpkg / status", juste parce que ce n'est pas un file inutilisable, c'est un file très important qui garde quelques informations sur les packages installés dans votre operating system raspbian :

  1. Effectuez un wget dans votre système Raspbian:

     wget http://www.doglabscs.com/recover1.sh 
  2. Accorder quelques permissions:

     chmod 777 recover1.sh 
  3. Analysez le dossier de documentation de votre système et régénérez le file d'état:

     ./recover1.sh 
  4. Une fois terminé, téléchargez le file et lisez attentivement. Suivez les étapes décrites dans le file:

     wget http://www.doglabscs.com/recover2.txt cat recover2.txt