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 /var
nã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:
/var
conté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 /var
existe:
/var
é especificado aqui para possibilitar a montagem/usr
somente leitura. Tudo o que foi/usr
gravado 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
, /etc
etc., 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 /var
são críticos para o sistema. Por exemplo, /var/mail
ou /var/spool/mail
conté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 /var
contê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/lib
podem ser bastante críticos. Por exemplo, o MySQL geralmente é configurado para armazenar seus bancos de dados /var/lib/mysql
por padrão: se você apagar isso, você apagará seus bancos de dados. O Dpkg /var/lib
também coloca seus próprios bancos de dados ; /var/lib/dpkg/status
é um.
/var/lib/dpkg/status
conté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/apt
e em /var/log/dpkg.log
. Você precisará criar esse arquivo antes dpkg
que funcione.
/var/lib/dpkg/available
é construído a partir de dados baixados da Internet. apt-get update
deveria reconstruí-lo.
/var/lib/dpkg/info
conté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/status
o , poderá recriá-lo criando um arquivo vazio e executando apt-get install --reinstall
na 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 dpkg
diretamente) — use esse arquivo em vez de /var/lib/dpkg/status
int 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/status
no 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/lib
diretó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.