Como recriar /var/lib/dpkg/status?

Como recriar /var/lib/dpkg/status?

Eu apaguei alguns arquivos /var/lib/dpkg/, a saber:

/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*

Entendo que o Debian usa esses arquivos para manter algumas informações sobre os pacotes instalados. Agora, quando faço isso apt-get update, recebo o seguinte erro:

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.

Pelo que entendiESF, os arquivos localizados em /varnão devem ser críticos para o sistema. Avaliadores devem ser arquivos temporários, logs, caches e similares.

Existe, portanto, uma maneira de recriar os arquivos excluídos?

Responder1

Se você olhar para opropósito de /var conforme fornecido no Padrão de Hierarquia do Sistema de Arquivos, diz:

/varcontém arquivos de dados variáveis. Isso inclui diretórios e arquivos em spool, dados administrativos e de registro e arquivos transitórios e temporários.

Observe que os arquivos "transitórios e temporários" são apenasumdas coisas que contém. Ele também contém "diretórios e arquivos de spool" e "dados administrativos e de registro". Você excluiu "dados administrativos" críticos.

Ele continua explicando por que /varexiste:

/varé especificado aqui para possibilitar a montagem /usrsomente leitura. Tudo o que foi /usrgravado durante a operação do sistema (em oposição à instalação e manutenção do software) deve estar no formato /var.

Essa é a principal coisa /var: os dados nele contidos mudam, ao contrário /usr(que só muda quando você adiciona/remove/atualiza software).

Outras seções explicam os vários subdiretórios de /var; por exemplo, /var/lib(onde os arquivos que você excluiu costumavam residir) contém "informações de estado pertencentes a um aplicativo ou sistema", definidas como "dados que os programas modificam enquanto são executados e que pertencem a um host específico".

Vocêrealmentenão deve excluir arquivos sem saber para que serve o arquivo específico. Com os arquivos que você excluiu, a menos que você tenha um backup desses arquivos, acho que a única coisa que resta a fazer é fazer um backup do /home, /etcetc., e reinstalar. Até fazer isso, você não poderá usar dpkg(e APT, etc.). Fora isso, o sistema deve continuar funcionando.

Responder2

Os arquivos localizados em /varsão críticos para o sistema. Por exemplo, /var/mailou /var/spool/mailcontém o email dos usuários; você não excluiria isso da mesma forma que acenderia uma fogueira na caixa de correio do seu vizinho. São apenas arquivos em determinados subdiretórios que /varcontêm arquivos que são mais ou menos transitórios: arquivos de log em /var/log, caches que geralmente podem ser recriados em /var/cache, arquivos temporários (que você não deve excluir enquanto estiverem em uso!) em /var/tmp.

Os dados /var/libpodem ser bastante críticos. Por exemplo, o MySQL geralmente é configurado para armazenar seus bancos de dados /var/lib/mysqlpor padrão: se você apagar isso, você apagará seus bancos de dados. O Dpkg /var/libtambém coloca seus próprios bancos de dados ; /var/lib/dpkg/statusé um.

/var/lib/dpkg/statuscontém informações sobre pacotes instalados. Se você apagou isso, deverá restaurá-lo a partir de um backup. Se o seu backup não estiver totalmente atualizado, verifique os logs de manipulações recentes de pacotes em /var/log/apte em /var/log/dpkg.log. Você precisará criar esse arquivo antes dpkgque funcione.

/var/lib/dpkg/availableé construído a partir de dados baixados da Internet. apt-get updatedeveria reconstruí-lo.

/var/lib/dpkg/infocontém arquivos que acompanham os pacotes Debian. Você pode restaurar esses arquivos simplesmente reinstalando os pacotes. Claro, você precisará de uma lista de pacotes instalados para isso. Se você restaurou /var/lib/dpkg/status, poderá extrair a lista de pacotes de lá.

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

Se você perdeu /var/lib/dpkg/statuso , poderá recriá-lo criando um arquivo vazio e executando apt-get install --reinstallna lista de pacotes. Um lugar onde a lista de pacotes também é salva é /var/lib/apt/extended_states, pelo menos se você só usou o APT para instalar pacotes (em vez de dpkgdiretamente) — use esse arquivo em vez de /var/lib/dpkg/statusint o comando acima. Se você também excluiu isso, poderá reconstruir uma lista aproximada de pacotes com $(cd /usr/share/doc && ls), porque a maioria dos pacotes cria uma entrada em /usr/share/doc. Provavelmente existem algumas exceções.

Não peça ajuda sobre gerenciamento de pacotes neste sistema. A recuperação da exclusão de arquivos críticos do sistema não é uma ciência exata. Se não conseguir restaurar a partir de backups, instale um sistema novo e limpo o mais rápido possível.

Responder3

Você não pode "recriar" /var/lib/dpkg/statusno sentido de apenas executar um comando e o arquivo aparece magicamente. Não. Você precisa usar um backup do arquivo e aprender a nunca excluir itens do /var/libdiretório:

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

Isso lhe daria o status do pacote do dia anterior. Comece a rezar para que não tenha quebrado mais alguma coisa.

Responder4

Se alguém acabar destruindo "/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.

informação relacionada