Chaque fois que je tape sudo apt-get remove
, puis appuie sur la Tabtouche de saisie semi-automatique, j'obtiens le message suivant:
grep-status: /var/lib/dpkg/status:15945: expected a colon
.
Je ne vois rien de particulièrement étrange à la ligne 15945 dans le fichier d'état. C'est un caractère point dans le champ de description d'un package de bibliothèque mono et l'insertion de deux points n'a pas aidé. La suppression de la ligne contenant le point n'a pas fonctionné non plus. L'écrasement du fichier avec status-old a donné le même message.
Existe-t-il un moyen de reconstruire le fichier d'état?
status
fichier: c'est une source principale d'informations, et bien qu'une grande partie soit redondante, ce n'est pas tout. Cependant, il est probablement possible de réparer le fichier manuellement. Postez une partie du fichier autour de la ligne problématique, disons 20 à 40 lignes, dont au moins unePackage:
ligne avant et après la ligne 15945.apt-get
,dpkg
et amis fonctionnent toujours correctement, et ce qui est la moindre erreur est auto-complétion?Réponses:
J'ai finalement corrigé mon système. La restauration d'une sauvegarde du fichier d'état n'a pas fonctionné car j'ai eu le problème pendant si longtemps, c'est dans toutes mes sauvegardes.
Le correctif consiste à rechercher les pauses de formatage réelles et à les corriger manuellement. Ce n'est pas aussi difficile qu'il y paraît.
http://thepcspy.com/read/fixing-dpkg-status-corruption/
la source
missing package name
et j'ai découvert que, pour une raison étrange, je ferais mieux de ne pas perdre mon temps à le découvrir, j'avais une lignePackaga: landscape-common
qui a été fixée orthographiquement et bam, problème résolu. Le fait est que je n'ai jamais touché à ce dossier, ni personne d'autre. Comment un ordinateur peut-il gâcher une faute d'orthographe?.
à cette ligne vide].Vous devriez être en mesure de travailler avec un fichier de bon état connu et de le mettre à jour à partir de là. Chaque fois que vous effectuez une installation ou une mise à jour, le fichier d'état est enregistré dans une sauvegarde compressée sous / var / backups . Faire un ls -l dpkg * sur le répertoire montre:
Il existe également une sauvegarde du fichier créé dans le répertoire / var / lib / dpkg / nommé status-old. Faire un état ls -l * sur le répertoire montre:
Ainsi, pour récupérer d'une corruption, vous devriez pouvoir effectuer les opérations suivantes:
1. Effectuez une sauvegarde du fichier d'état corrompu :
2. Copiez un fichier d'état récent de dpkg en place à partir de l'une des sources ci-dessus:
non plus
ou
3. Exécutez ensuite la mise à jour apt-get:
Ça devrait le faire.
la source
sudo apt update && sudo apt dist-upgrade
devrait résoudre la plupart des problèmes que l'ancienstatus
fichier peut provoquer. Si votre système a un plus gros gâchis,sudo aptitude dist-upgrade
au lieu desudo apt ...
peut parfois suggérer de meilleures façons de réparer la rupture.J'ai pu résoudre ce problème en supprimant les packages qui avaient des entrées corrompues dans le fichier d'état.
La solution acceptée via pcregrep n'a pas fonctionné (pcregrep n'a rien trouvé).
la source
Essayez un "dpkg -P" pour le package incriminé. Cela le purgera du référentiel local, supprimant toutes les traces. Sur mon système, c'était le correctif pour les packages supprimés (mais pas encore purgés) qui ont produit cette erreur.
la source
Dans ce cas, je voudrais sauvegarder le
/var/lib/dpkg/status
fichier corrompu , puis le corriger manuellement (autour des lignes 1888 et 9550) en utilisant les informations dela source
Il s'agit d'un bug (censé être corrigé): Launchpad Bug 613018
En amont: bogue Debian 590885
Cela devrait être une solution de contournement (sauvegarde, chaîne de version "fix"):
la source
Fils de...
D'accord, l'erreur réelle se trouvait sur la ligne 15266, bien qu'elle ait été signalée quelque 700 lignes plus bas. L'entrée problématique dans le fichier d'état a été causée par un deb que j'ai installé pour faire fonctionner mon imprimante Lexmark il y a longtemps. L'entrée était pour le paquet
lexmark-inkjet-08-driver
. Le champ Description n'avait pas de signe.
à la place d'un saut de ligne. Cela a provoqué l'erreur d'analyse.Pour trouver cela, j'ai eu recours à une méthode de dépannage du fusil de chasse et j'ai commencé à essayer les choses de manière assez aléatoire. L'une de mes tentatives maladroites était de
grep-status -P e
penser que e était la lettre la plus courante de l'alphabet. Bête, je sais, mais le dernier enregistrement de statut imprimé avant qu'il ne se plaigne d'un côlon manquant était pour le paquet lexmark et j'ai remarqué le manque de.
personnage après quelques minutes à regarder l'écran.Si possible, j'aimerais une autre réponse qui pourrait décrire une meilleure méthode pour trouver ce genre de problème au cas où quelqu'un rencontrerait un problème similaire à l'avenir. Merci.
la source
grep-status -r -P ^
doit toujours correspondre à n'importe quel package, il doit donc analyser l'intégralité du fichier et abandonner s'il ne peut pas l'analyser.Parce que mon statut était trop problématique même avec
apt-get update
,Cela a plutôt bien fonctionné pour moi:
(en tant que root)
CRÉDIT: http://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
Si vous êtes curieux de savoir ce qui a changé ou où seraient les dégâts: (peut-être long)
la source