¿Cómo recrear /var/lib/dpkg/status?

¿Cómo recrear /var/lib/dpkg/status?

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 conservar 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 tengo entendido elFHS, se supone que los archivos ubicados en /varno son críticos para el sistema. Califique que estos deben ser archivos temporales, registros, cachés y similares.

¿Existe entonces alguna forma de recrear los archivos eliminados?

Respuesta1

Si miras elpropósito de /var como se indica en el Estándar de jerarquía del sistema de archivos, dice:

/varContiene archivos de datos variables. Esto incluye directorios y archivos de spool, datos administrativos y de registro, y archivos transitorios y temporales.

Tenga en cuenta que los archivos "transitorios y temporales" son sólounode las cosas que contiene. También contiene "archivos y directorios de spool" y "datos administrativos y de registro". Eliminaste "datos administrativos" críticos.

Continúa explicando por qué /varexiste:

/varse especifica aquí para hacer posible el montaje /usrde sólo lectura. Todo lo que alguna vez /usrse escribió durante la operación del sistema (a diferencia de la instalación y el mantenimiento del software) debe estar en formato /var.

Esa es la clave /var: los datos que contiene cambian, a diferencia de /usr(que solo cambian cuando agrega/elimina/actualiza software).

Secciones adicionales explican los distintos subdirectorios de /var; por ejemplo, /var/lib(donde solían vivir los archivos que eliminó) 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".

en realidadNo debería eliminar archivos sin saber para qué sirve el archivo específico. 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 de /home, /etcetc. y reinstalarlos. Hasta que lo haga, no podrá utilizar dpkg(ni APT, etc.). Aparte de eso, el sistema debería seguir funcionando.

Respuesta2

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 borrarías eso, como tampoco encenderías un fuego en el buzón de tu vecino. Solo los archivos en ciertos subdirectorios de /varcontienen archivos que son más o menos transitorios: archivos de registro en /var/log, cachés que generalmente se pueden recrear en /var/cache, archivos temporales (¡que no debes eliminar mientras están en uso!) en /var/tmp.

Los datos ingresados /var/lib​​pueden ser bastante críticos. Por ejemplo, MySQL generalmente está configurado para almacenar sus bases de datos de /var/lib/mysqlforma predeterminada: si lo borra, borra sus bases de datos. Dpkg /var/libtambién incluye sus propias bases de datos ; /var/lib/dpkg/statuses uno.

/var/lib/dpkg/statuscontiene información sobre los paquetes instalados. Si lo borraste, debes restaurarlo desde una copia de seguridad. Si su copia de seguridad no está completamente actualizada, verifique los registros de manipulaciones recientes de paquetes en /var/log/apty en /var/log/dpkg.log. Deberá crear ese archivo antes de dpkgque funcione.

/var/lib/dpkg/availablese construye a partir de datos descargados de Internet. apt-get updatedebería reconstruirlo.

/var/lib/dpkg/infocontiene archivos que se envían con los paquetes de Debian. Puede restaurar estos archivos simplemente reinstalando los paquetes. Por supuesto, necesitará una lista de paquetes instalados para ello. Si ha restaurado /var/lib/dpkg/status, puede extraer la lista de paquetes desde allí.

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

Si ha perdido /var/lib/dpkg/status, es posible que pueda recrearlo creando un archivo vacío y luego ejecutándolo apt-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 solo ha usado APT para instalar paquetes (en lugar de dpkgdirectamente), 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 con $(cd /usr/share/doc && ls), porque la mayoría de los paquetes crean una entrada en /usr/share/doc. Probablemente haya algunas excepciones.

No solicite ayuda sobre la gestió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.

Respuesta3

No se puede "recrear" /var/lib/dpkg/statusen el sentido de simplemente ejecutar un comando y el archivo aparece mágicamente. No. Necesita utilizar una copia de seguridad del archivo y aprender a no borrar nunca cosas del /var/libdirectorio:

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

Esto le daría el estado del paquete del día anterior. Empiece a rezar para que no se rompa nada más.

Respuesta4

Si alguien termina bombardeando "/var/lib/dpkg":

sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives

sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch

sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.

información relacionada