He eliminado algunos archivos /var/lib/dpkg/
, a saber:
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
Entiendo que Debian usa estos archivos para mantener cierta información sobre los paquetes instalados. Ahora cuando lo hago apt-get update
, aparece el siguiente error:
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.
Según entiendo el FHS , /var
no se supone que los archivos ubicados en sean críticos para el sistema. Califique estos deben ser archivos temporales, registros, cachés y similares.
¿Existe, por lo tanto, una manera de recrear los archivos eliminados?
apt
package-management
directory-structure
dpkg
Martin Vegter
fuente
fuente
/var/lib/dpkg/info
son bastante importantes. Usted ha entendido mal el FHS, y AFAIK las únicas rutas de recuperación son (a) restaurar desde la copia de seguridad o (b) reinstalar.Respuestas:
Si observa el propósito de / var como se indica en el Estándar de jerarquía del sistema de archivos , dice:
Tenga en cuenta que los archivos "transitorios y temporales" son solo una de las cosas que contiene. También contiene "directorios y archivos de spool" y "datos administrativos y de registro". Eliminó "datos administrativos" críticos.
Continúa explicando por qué
/var
existe:De eso se trata
/var
: los datos que contiene cambian, a diferencia/usr
(solo cambia cuando agrega / elimina / actualiza software).Otras secciones explican los diversos subdirectorios de
/var
; por ejemplo,/var/lib
(donde los archivos que eliminó solían vivir) contiene "información de estado relacionada con una aplicación o el sistema", definida como "datos que los programas modifican mientras se ejecutan, y que pertenecen a un host específico".Usted realmente no debe borrar archivos sin saber lo que el archivo específico es para. Con los archivos que eliminó, a menos que tenga una copia de seguridad de estos archivos, creo que lo único que queda por hacer es hacer una copia de seguridad
/home
,/etc
etc. y reinstalar. Hasta que lo haga, no podrá usardpkg
(y APT, etc.). Aparte de eso, el sistema debería continuar funcionando.fuente
apt-get update
reconstruirá disponible, creo. La información / material proviene de cada paquete instalado, pero también refleja el historial, al menos para los viejos archivos conf ... pero probablemente podría salirse con la copia de esa misma máquina de paquetes)/var/lib
Información de estado. Datos persistentes modificados por los programas a medida que se ejecutan, por ejemplo, bases de datos, metadatos del sistema de empaquetado, etc."No se puede "recrear"
/var/lib/dpkg/status
en el sentido de simplemente ejecutar un comando y el archivo aparece mágicamente. No. Necesitas usar una copia de seguridad del archivo y aprender a no andar borrando cosas del/var/lib
directorio:Esto le daría el estado del paquete del día anterior. Comienza a rezar para que no haya roto otra cosa.
fuente
/var/backups
, hay varias copias allí./var/backups/dpkg.status.0
?Los archivos ubicados en
/var
son muy críticos para el sistema. Por ejemplo,/var/mail
o/var/spool/mail
contiene el correo electrónico de los usuarios; no eliminarías más de lo que encenderías un fuego en el buzón de tu vecino. Solo los archivos en ciertos subdirectorios/var
contienen archivos que son más o menos transitorios: archivos de inicio de sesión/var/log
, cachés que generalmente se pueden recrear/var/cache
, archivos temporales (que no debe eliminar mientras están en uso)/var/tmp
.Los datos
/var/lib
pueden ser bastante críticos. Por ejemplo, MySQL generalmente está configurado para almacenar sus bases de datos/var/lib/mysql
de forma predeterminada: si borra eso, borrará sus bases de datos. Dpkg también pone sus propias bases de datos/var/lib
;/var/lib/dpkg/status
es uno./var/lib/dpkg/status
contiene información sobre paquetes instalados. Si ha borrado eso, debe restaurarlo desde una copia de seguridad. Si su copia de seguridad no está completamente actualizada, revise los registros de las manipulaciones recientes de paquetes debajo/var/log/apt
y dentro/var/log/dpkg.log
. Tendrá que crear ese archivo antes dedpkg
que funcione./var/lib/dpkg/available
está construido a partir de datos descargados de Internet.apt-get update
Debería reconstruirlo./var/lib/dpkg/info
contiene archivos que se envían con paquetes Debian. Puede restaurar estos archivos simplemente reinstalando los paquetes. Por supuesto, necesitará una lista de paquetes instalados para eso. Si ha restaurado/var/lib/dpkg/status
, puede extraer la lista de paquetes desde allí.Si ha perdido
/var/lib/dpkg/status
, puede volver a crearlo creando un archivo vacío y luego ejecutándoloapt-get install --reinstall
en la lista de paquetes. Un lugar donde también se guarda la lista de paquetes es/var/lib/apt/extended_states
, al menos si alguna vez usó APT para instalar paquetes (en lugar dedpkg
directamente): use ese archivo en lugar de/var/lib/dpkg/status
int el comando anterior. Si también lo ha eliminado, puede reconstruir una lista aproximada de paquetes$(cd /usr/share/doc && ls)
, ya que la mayoría de los paquetes crean una entrada/usr/share/doc
. Probablemente hay algunas excepciones.No solicite asistencia sobre la administración de paquetes en este sistema. Recuperarse de la eliminación de archivos críticos para el sistema no es una ciencia exacta. Si no puede restaurar desde las copias de seguridad, debe instalar un sistema nuevo y limpio lo antes posible.
fuente
Se
/var/lib/dpkg/available
puede recrear a partir de los datos de apt. La forma más fácil que encontré para hacer esto fue usardselect
y elegir la actualización. Espero que esto solo funcione si has elegido como método de actualización. Parece quedselect
hace un:Tenga en cuenta que las cosas pueden haber cambiado desde Debian sarge.
Hay trucos para recrear
/var/lib/dpkg/status
basados en el hecho de que cada paquete es necesario para agregar un directorio en el/usr/share/doc
directorio. Ver publicación en http://linuxmafia.com/faq/Debian/package-database-rebuild.html . Se presenta un script que utiliza una lista filtrada de / usr / share / doc para crear una lista de paquetes que se instalaron y luego los reinstala todos.fuente
Bueno, supongo que podría volver a crear el archivo vacío y luego hacer apt-get install long-list, suponiendo que sepa lo que instaló la primera vez.
Tengo un script antiguo que básicamente hace esto desde el conjunto más pequeño de paquetes que pueden ejecutar apt-get. Al usarlo, terminé informando docenas de dependencias no declaradas.
Si no sabe todo lo que instaló, reinstale el sistema.
fuente
En Linux Mint 17 encontré un problema de sonido similar. Estaba entusiasmado con la eliminación de archivos y me encontré donde la "Administración -> Administrador de actualizaciones" no parecía feliz .......
La solución que funcionó para mí fue crear un directorio llamado "dpkg" según el mensaje de error, y crear un archivo vacío llamado "estado".
Luego ejecuté Update Manager.
Me funcionó :-)
fuente
Si tuviera otras cuentas de usuario distintas de 'roo't, podría intentar apt-get dist-upgrade de una de ellas. Apt descargará los archivos pero se detendrá al instalarlos debido a que faltan algunos directorios en / var /. Se mostrarán los directorios. créelos y ejecute apt-get dist-upgrade de nuevo. en caso de que su creación falle desde el registro de cuenta alternativo de nuevo a la raíz n cree los directorios desde allí y luego ejecute apt nuevamente. se le preguntará sobre la configuración de logrotate y algunas otras configuraciones simplemente escriba Y n continúe hasta el final y luego reinicie cuando termine apt dist-upgrade. ahora todo debería volver a la normalidad.
fuente
Perdón por el retraso. Briam, vuelve a crear los directorios y archivos manualmente y luego actualiza los repositorios (
mkdir
ytouch
, según lo requiera el error mostrado), y úsalodpkg --configure -a
.Su sistema funcionaría bien, pero es importante reinstalarlo para asegurarse de que no esté dañado; anterior es solo para ganar tiempo para programar una reinstalación ... y cuidar de eliminar
/var/lib/*
archivos.fuente
Si compró un raspberry pi 3 y se enfrentó al problema y obtuvo el error "no se pudo abrir el archivo / var / lib / dpkg / status analizado o abierto", esta es una solución que funcionó para mí:
¿Cómo recrear el archivo "/ var / lib / dpkg / status" ?, solo porque este no es un archivo inútil, este es un archivo muy importante que guarda información sobre los paquetes instalados en su sistema operativo raspbian, así que aquí es cómo me recreé :
Realice un wget dentro de su sistema Raspbian:
Conceder algunos permisos:
Analice la carpeta de documentación en su sistema y regenere el archivo de estado:
Una vez hecho esto, descargue el archivo y léalo detenidamente. Siga los pasos descritos en el archivo:
fuente
recover1.sh
destruirá su corriente/var/lib/dpkg/status
sin probar si ya está bien. Luego ejecutará una mezcla de trucos para intentar reconstruir una versión que funcione. Nunca ejecute el script anterior a menos que le falte totalmente el archivo / var / lib / dpkg / status. Destrings /var/lib/dpkg/status
lo contrario, podría ser una mejor manera de comenzar a reconstruir el archivo dañado.