Cada vez que escribo sudo apt-get remove
y luego presiono la Tabtecla para completar automáticamente, aparece el siguiente mensaje:
grep-status: /var/lib/dpkg/status:15945: expected a colon
.
No veo nada especialmente extraño en la línea 15945 en el archivo de estado. Es un carácter de punto en el campo de descripción de un paquete de biblioteca mono y la inserción de dos puntos no ayudó. La eliminación de la línea que contiene el punto tampoco funcionó. Sobrescribir el archivo con el estado anterior resultó en el mismo mensaje.
¿Hay alguna forma de reconstruir el archivo de estado?
status
archivo: es una fuente primaria de información, y aunque mucha de ella es redundante, no toda es. Sin embargo, probablemente sea posible reparar el archivo manualmente. Publique un trozo del archivo alrededor de la línea problemática, digamos 20–40 líneas incluyendo al menos unaPackage:
línea antes y después de la línea 15945.apt-get
,dpkg
y amigos siguen funcionando correctamente, y lo que se erroring cabo es auto-realización?Respuestas:
Finalmente he arreglado mi sistema de esto. Restaurar una copia de seguridad del archivo de estado no funcionó ya que he tenido el problema durante tanto tiempo, está en todas mis copias de seguridad.
La solución implica grepping para los saltos de formato reales y arreglarlos manualmente. No es tan difícil como parece.
http://thepcspy.com/read/fixing-dpkg-status-corruption/
fuente
missing package name
y descubrí que, por alguna extraña razón, es mejor que no pierda el tiempo descubriendo que tenía una líneaPackaga: landscape-common
que estaba arreglada ortográficamente y bam, problema resuelto. La cuestión es que nunca he tocado este archivo, ni nadie más. ¿Cómo puede una computadora equivocarse con un error ortográfico?.
a esa línea en blanco].Debería poder trabajar con un archivo de buen estado anterior conocido y actualizar desde allí. Cada vez que realiza una instalación o una actualización, el archivo de estado se guarda en una copia de seguridad comprimida en / var / backups . Haciendo un ls -l dpkg * en el directorio muestra:
También hay una copia de seguridad del archivo creado en el directorio / var / lib / dpkg / denominado status-old. Haciendo un estado ls -l * en el directorio muestra:
Por lo tanto, para recuperarse de una corrupción, debe poder hacer lo siguiente:
1. Haga una copia de seguridad del archivo de estado corrupto :
2. Copie un archivo de estado dpkg reciente de cualquiera de las fuentes anteriores:
ya sea
o
3. Luego ejecute apt-get update:
Deberias hacer eso.
fuente
sudo apt update && sudo apt dist-upgrade
debería solucionar la mayoría de los problemas questatus
puede causar un archivo antiguo . Si su sistema tiene un desorden más grande, ensudo aptitude dist-upgrade
lugar desudo apt ...
algunas veces puede sugerir mejores formas de solucionar la rotura.Pude solucionar este problema eliminando los paquetes que tenían entradas corruptas en el archivo de estado.
La solución aceptada a través de pcregrep no funcionó (pcregrep no encontró nada).
fuente
Pruebe con un "dpkg -P" para el paquete ofensivo. Eso lo purgará del repositorio local, eliminando todos los rastros. En mi sistema, esa fue la solución para los paquetes eliminados (pero aún no purgados) que produjeron ese error.
fuente
En este caso, haría una copia de seguridad del
/var/lib/dpkg/status
archivo dañado y luego lo corregiría manualmente (alrededor de las líneas 1888 y 9550) utilizando la información defuente
Esto ha sido un error (supuestamente corregido): Error de Launchpad 613018
Upstream: Debian Bug 590885
Esto debería ser una solución (copia de seguridad, cadena de versión "arreglo"):
fuente
Hijo de...
De acuerdo, el error real estaba en la línea 15266 a pesar de que se informaron unas 700 líneas más abajo. La entrada problemática en el archivo de estado fue causada por un deb que instalé para que mi impresora Lexmark funcionara hace mucho tiempo. La entrada era para el paquete
lexmark-inkjet-08-driver
. El campo Descripción no tenía un.
en lugar de un salto de línea. Esto provocó el error de análisis.Para encontrar esto, recurrí a un método de solución de problemas de escopeta y comencé a probar cosas al azar. Uno de mis intentos tontos fue
grep-status -P e
pensar que e era la letra más común del alfabeto. Tonto, lo sé, pero el último registro de estado impreso antes de quejarse de un colon perdido era para el paquete Lexmark y noté la falta de un.
personaje después de unos minutos de mirar la pantalla.Si es posible, me gustaría otra respuesta que podría describir un mejor método para encontrar este tipo de problema en caso de que alguien tenga un problema similar en el futuro. Gracias.
fuente
grep-status -r -P ^
siempre debe coincidir con cualquier paquete, por lo que debe analizar todo el archivo y abortar si no puede analizarlo.Porque mi estado anterior era demasiado problemático incluso con
apt-get update
,Esto funcionó bastante bien para mí:
(como root)
CRÉDITO: http://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
Si tiene curiosidad por saber qué ha cambiado o dónde sería el daño: (posiblemente largo)
fuente