Eu apaguei alguns arquivos /var/lib/dpkg/
, a saber:
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
Eu entendo que o Debian usa esses arquivos para manter algumas informações sobre pacotes instalados. Agora, quando o faço 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 entendi , o arquivo FHS/var
não deve ser crítico para o sistema. Avalie esses arquivos temporários, logs, caches e similares.
Existe, portanto, uma maneira de recriar os arquivos excluídos?
apt
package-management
directory-structure
dpkg
Martin Vegter
fonte
fonte
/var/lib/dpkg/info
é muito importante. Você entendeu mal o FHS e o AFAIK os únicos caminhos de recuperação são (a) restaurar a partir do backup ou (b) reinstalar.Respostas:
Se você observar o objetivo de / var, conforme indicado no Padrão de Hierarquia do Sistema de Arquivos , ele diz:
Observe que arquivos "temporários e temporários" são apenas uma das coisas que ele contém. Ele também contém "diretórios e arquivos de spool" e "dados administrativos e de log". Você excluiu "dados administrativos" críticos.
Continua explicando por que
/var
existe:Essa é a principal coisa
/var
: os dados nele mudam, diferentemente/usr
(o que só muda quando você adiciona / remove / atualiza software).Seções adicionais explicam os vários subdiretórios de
/var
; por exemplo,/var/lib
(onde os arquivos que você excluiu costumava viver) manté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ê realmente não deve excluir arquivos sem saber para que serve o arquivo específico. Com os arquivos apagados, a menos que você tenha um backup desses arquivos, acho que a única coisa que resta a fazer é fazer um backup de
/home
,/etc
etc. e reinstalação. Até você fazer isso, não poderá usardpkg
(e APT, etc.). Fora isso, o sistema deve continuar funcionando.fonte
apt-get update
vai reconstruir disponível, acredito. A informação / material vem de cada pacote instalado, mas também reflete o histórico, pelo menos para arquivos conf antigos ... mas você provavelmente pode se safar copiando exatamente dessa mesma máquina de pacotes)/var/lib
Informações do estado. Dados persistentes modificados pelos programas à medida que são executados, por exemplo, bancos de dados, metadados do sistema de empacotamento etc."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 coisas do/var/lib
diretório:Isso forneceria o status do pacote do dia anterior. Comece a orar para não quebrar mais nada.
fonte
/var/backups
, existem várias cópias lá./var/backups/dpkg.status.0
?Os arquivos localizados
/var
são muito críticos para o sistema. Por exemplo,/var/mail
ou/var/spool/mail
contém o email dos usuários; você não excluiria mais isso do que acenderia um incêndio na caixa de correio do seu vizinho. São apenas arquivos em determinados subdiretórios/var
que contêm arquivos mais ou menos transitórios: arquivos de log/var/log
, caches que geralmente podem ser recriados/var/cache
, arquivos temporários (que você não deve excluir enquanto estiverem em uso!)/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, limpe seus bancos de dados. O Dpkg também coloca seus próprios bancos de dados/var/lib
;/var/lib/dpkg/status
é um./var/lib/dpkg/status
contém informações sobre pacotes instalados. Se você apagou isso, restaure-o a partir de um backup. Se o seu backup não estiver totalmente atualizado, verifique os logs das manipulações recentes de pacotes em/var/log/apt
e dentro/var/log/dpkg.log
. Você precisará criar esse arquivo antes dedpkg
funcionar./var/lib/dpkg/available
é construído a partir de dados baixados da Internet.apt-get update
deve reconstruí-lo./var/lib/dpkg/info
contém arquivos fornecidos com os pacotes Debian. Você pode restaurar esses arquivos simplesmente reinstalando os pacotes. Obviamente, você precisará de uma lista de pacotes instalados para isso. Se você restaurou/var/lib/dpkg/status
, poderá extrair a lista de pacotes a partir daí.Se você perdeu
/var/lib/dpkg/status
, poderá recriá-lo criando um arquivo vazio e executandoapt-get install --reinstall
na lista de pacotes. Um local em que a lista de pacotes também é salva é/var/lib/apt/extended_states
, pelo menos se você já usou o APT para instalar pacotes (em vez dedpkg
diretamente) - use esse arquivo em vez de/var/lib/dpkg/status
int o comando acima. Se você também excluiu isso, poderá recriar uma lista aproximada de pacotes$(cd /usr/share/doc && ls)
, porque a maioria dos pacotes cria uma entrada/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 dos backups, instale um sistema novo e limpo o mais rápido possível.
fonte
O
/var/lib/dpkg/available
pode ser recriado a partir dos dados do apt. A maneira mais fácil que encontrei de fazer isso usandodselect
e escolhendo a atualização. Espero que isso funcione apenas se você tiver escolhido o método de atualização. Parece quedselect
faz um:Note que as coisas podem ter mudado desde o Debian sarge.
Existem truques para recriar com
/var/lib/dpkg/status
base no fato de que todos os pacotes são necessários para adicionar um diretório ao/usr/share/doc
diretório. Veja a publicação em http://linuxmafia.com/faq/Debian/package-database-rebuild.html . É apresentado um script que usa uma lista filtrada de / usr / share / doc para criar uma lista de pacotes que foram instalados e depois reinstala todos eles.fonte
Bem, suponho que você possa recriar o arquivo vazio e fazer uma lista longa do apt-get install, supondo que você saiba o que instalou pela primeira vez.
Eu tenho um script antigo que faz isso basicamente no menor conjunto de pacotes que podem executar o apt-get. Ao usá-lo, acabei relatando dezenas de dependências não declaradas.
Se você não souber tudo o que instalou, reinstale o sistema.
fonte
No Linux Mint 17, encontrei um problema semelhante. Eu estava zeloso ao excluir arquivos e me vi onde o "Administration -> Upgrade Manager" simplesmente não parecia feliz .......
A solução que funcionou para mim foi criar um diretório chamado "dpkg" conforme a mensagem de erro e criar um arquivo vazio chamado "status".
Eu executei o Update Manager.
Funcionou para mim :-)
fonte
Se você tiver outras contas de usuário diferentes de 'roo't', tente o apt-get dist-upgrade de uma delas. O Apt fará o download dos arquivos, mas os instalará devido a alguns diretórios ausentes em / var /. Os diretórios serão mostrados. crie-os e execute o apt-get dist-upgrade novamente. caso a criação deles falhe do log alternativo da conta de volta à raiz, crie os diretórios a partir daí e execute o apt novamente. você será solicitado sobre a configuração de rotação de log e algumas outras configurações apenas digitar Y n continuar até o final e reiniciar quando o dist-upgrade for concluído. agora tudo deve voltar ao normal.
fonte
Desculpe o atraso. Briam, recrie os diretórios e arquivos manualmente e, em seguida, atualize os repositórios (
mkdir
etouch
, conforme exigido pelo erro exibido), e usedpkg --configure -a
.Seu sistema funcionaria bem, mas é importante reinstalar para garantir que ele não esteja corrompido; anterior é apenas para ganhar tempo para agendar uma reinstalação ... e cuidar de excluir
/var/lib/*
arquivos.fonte
Se você comprou um raspberry pi 3 e enfrentou o problema e obtendo o erro "não foi possível abrir o arquivo / var / lib / dpkg / status analisado ou aberto", esta é uma solução alternativa que funcionou para mim:
Como recriar o arquivo "/ var / lib / dpkg / status" ?, apenas porque este não é um arquivo inutilizado, é um arquivo muito importante que mantém algumas informações sobre os pacotes instalados no seu sistema operacional raspbian, então aqui está como eu fui recriado :
Execute um wget dentro do seu sistema Raspbian:
Conceda algumas permissões:
Analise a pasta de documentação em seu sistema e gere novamente o arquivo de status:
Feito isso, baixe o arquivo e leia com atenção. Siga as etapas descritas no arquivo:
fonte
recover1.sh
destruirá sua corrente/var/lib/dpkg/status
sem testar se ela já estiver correta. Em seguida, ele executará um conjunto misto de truques para tentar reconstruir a versão um pouco funcional. Nunca execute o script acima, a menos que esteja totalmente ausente do arquivo / var / lib / dpkg / status. Caso contrário,strings /var/lib/dpkg/status
pode ser a melhor maneira de começar a reconstruir o arquivo corrompido.