Como recriar o / var / lib / dpkg / status?

9

Eu deletei alguns arquivos em torno de /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 eu 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 FHS , os arquivos localizados em /var não devem ser críticos para o sistema. Rater estes devem ser arquivos temporários, logs, caches e similares.

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

    
por Martin Vegter 13.10.2014 / 19:38

8 respostas

13

Se você observar a finalidade de / var, conforme indicado no Padrão de hierarquia do sistema de arquivos , diz:

/var contains variable data files. This includes spool directories and files, administrative and logging data, and transient and temporary files.

Observe que os arquivos "transitórios e temporários" são apenas um das coisas que ele contém. Também contém "diretórios e arquivos de spool" e "dados administrativos e de registro". Você excluiu "dados administrativos" críticos.

Ele explica por que o /var existe:

/var is specified here in order to make it possible to mount /usr read-only. Everything that once went into /usr that is written to during system operation (as opposed to installation and software maintenance) must be in /var.

Essa é a principal coisa sobre /var : os dados nele mudam, ao contrário de /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 (em que os arquivos excluídos foram usados) 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". / p>

Você realmente nã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 de /home , /etc etc. e reinstalar. Até que você faça isso, você não poderá usar dpkg (e APT, etc.). Além disso, o sistema deve continuar funcionando.

    
por 13.10.2014 / 20:07
9

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 não excluir as coisas do diretório /var/lib :

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 não quebrar mais nada.

    
por 13.10.2014 / 19:49
6

Os arquivos localizados em /var são muito importantes para o sistema. Por exemplo, /var/mail ou /var/spool/mail contém o email dos usuários; você não mais apagaria isso do que acenderia um fogo na caixa de correio do vizinho. São apenas arquivos em determinados subdiretórios de /var que contêm arquivos 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 em /var/lib podem ser bastante críticos. Por exemplo, o MySQL geralmente é configurado para armazenar seus bancos de dados em /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 sob /var/lib ; /var/lib/dpkg/status é um.

/var/lib/dpkg/status contém informações sobre pacotes instalados. Se você apagou isso, você deve restaurá-lo de um backup. Se o backup não estiver totalmente atualizado, verifique os logs das manipulações recentes de pacotes em /var/log/apt e em /var/log/dpkg.log . Você precisará criar esse arquivo antes que dpkg funcione.

/var/lib/dpkg/available é criado a partir de dados baixados da Internet. apt-get update deve 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ê tiver restaurado /var/lib/dpkg/status , você pode 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 , talvez seja possível recriá-lo criando um arquivo vazio e, em seguida, 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ê já usou o APT para instalar pacotes (em oposição a dpkg diretamente) - use esse arquivo em vez de /var/lib/dpkg/status int no comando acima . Se você também excluiu isso, pode recriar 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 solicite assistência sobre o gerenciamento de pacotes neste sistema. Recuperar a partir da exclusão de arquivos críticos do sistema não é uma ciência exata. Se você não puder restaurar a partir de backups, instale um sistema novo e limpo o mais rápido possível.

    
por 14.10.2014 / 02:25
2

O /var/lib/dpkg/available pode ser recriado a partir dos dados do apt. A maneira mais fácil que encontrei foi fazer isso usando dselect e escolhendo atualizar. Espero que isso só funcione se você tiver escolhido como seu método de atualização. Parece que dselect faz a:

/bin/bash /usr/lib/dpkg/methods/apt/update /var/lib/dpkg apt apt

Note que as coisas podem ter mudado desde o Debian sarge.

Existem truques para recriar /var/lib/dpkg/status com base no fato de que cada pacote é necessário para adicionar um diretório no diretório /usr/share/doc . Veja a postagem no link . Existe um script apresentado que usa uma lista filtrada de / usr / share / doc para criar uma lista de pacotes que foram instalados e, em seguida, reinstala todos eles.

    
por 22.03.2016 / 04:18
1

Bem, eu suponho que você poderia recriar o arquivo vazio e então fazer o apt-get instalar a lista longa, assumindo que você sabe o que você instalou na primeira vez.

Eu tenho um script antigo que basicamente faz isso do menor conjunto de pacotes que podem rodar o apt-get. Ao usá-lo acabei relatando dezenas de dependências não declaradas.

Se você não sabe tudo o que instalou, reinstale o sistema.

    
por 13.10.2014 / 20:49
0

No Linux Mint 17, encontrei um problema semelhante. Eu estava zeleous em deletar arquivos e me encontrei onde o "Administrador - > Upgrade Manager" simplesmente não parecia feliz .......

A solução que funcionou para mim foi criar um diretório chamado "dpkg" de acordo com a mensagem de erro e criar um arquivo vazio chamado "status".

Eu então executei o Gerenciador de Atualizações.

Trabalhou para mim: -)

    
por 28.01.2016 / 23:34
0

Se você tivesse outras contas de usuário além de 'você poderia tentar o apt-get dist-upgrade de uma delas. O Apt baixará os arquivos, mas parará de instalá-los 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 contrário, criá-los falhará a partir do registro alternativo da conta de volta para o root n crie os diretórios a partir daí e execute o apt novamente. você será avisado sobre a configuração do logrotate e algumas outras configurações apenas tipo Y n prosseguir até o final e reinicializar quando o apt-upgrade for concluído. tudo deve estar de volta ao normal.

    
por 15.10.2017 / 17:43
-1

Se você comprou um raspberry pi 3 e enfrentou o problema e obteve o erro "não foi possível abrir o arquivo / var / lib / dpkg / status analisado ou aberto", esta é uma solução que funcionou para mim:

Como recriar o arquivo "/ var / lib / dpkg / status" ?, só porque este não é um arquivo incomum, este é um arquivo muito importante que guarda algumas informações sobre pacotes instalados em seu sistema operacional raspbian, então aqui está como Eu fui recriado:

  1. Execute um wget no seu sistema Raspbian:

    wget http://www.doglabscs.com/recover1.sh
    
  2. Conceda algumas permissões:

    chmod 777 recover1.sh
    
  3. Analise a pasta de documentação em seu sistema e gere novamente o arquivo de status:

    ./recover1.sh
    
  4. uma vez feito, baixe o arquivo e leia atentamente. Siga os passos descritos no arquivo:

    wget http://www.doglabscs.com/recover2.txt
    cat recover2.txt
    
por 20.02.2017 / 16:08