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 , /varno 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/infoson 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é
/varexiste: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,/etcetc. y reinstalar. Hasta que lo haga, no podrá usardpkg(y APT, etc.). Aparte de eso, el sistema debería continuar funcionando.fuente
apt-get updatereconstruirá 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/libInformació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/statusen 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/libdirectorio: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
/varson muy críticos para el sistema. Por ejemplo,/var/mailo/var/spool/mailcontiene 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/varcontienen 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/libpueden ser bastante críticos. Por ejemplo, MySQL generalmente está configurado para almacenar sus bases de datos/var/lib/mysqlde forma predeterminada: si borra eso, borrará sus bases de datos. Dpkg también pone sus propias bases de datos/var/lib;/var/lib/dpkg/statuses uno./var/lib/dpkg/statuscontiene 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/apty dentro/var/log/dpkg.log. Tendrá que crear ese archivo antes dedpkgque funcione./var/lib/dpkg/availableestá construido a partir de datos descargados de Internet.apt-get updateDebería reconstruirlo./var/lib/dpkg/infocontiene 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 --reinstallen 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 dedpkgdirectamente): use ese archivo en lugar de/var/lib/dpkg/statusint 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/availablepuede recrear a partir de los datos de apt. La forma más fácil que encontré para hacer esto fue usardselecty elegir la actualización. Espero que esto solo funcione si has elegido como método de actualización. Parece quedselecthace un:Tenga en cuenta que las cosas pueden haber cambiado desde Debian sarge.
Hay trucos para recrear
/var/lib/dpkg/statusbasados en el hecho de que cada paquete es necesario para agregar un directorio en el/usr/share/docdirectorio. 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 (
mkdirytouch, 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.shdestruirá su corriente/var/lib/dpkg/statussin 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/statuslo contrario, podría ser una mejor manera de comenzar a reconstruir el archivo dañado.