O erro "O Apt / Synaptic precisa reinstalar o pacote, mas não pode encontrá-lo", às vezes não é específico.
A hora mais comum que vejo este erro é quando atualizo o Ubuntu de uma versão para outra.
Nota : O Ubuntu está convertendo do apt-get para o apt, mas estou usando o apt-get neste post. Para obter informações adicionais, consulte man apt
e link
A causa mais comum desse erro é quando um usuário instalou um pacote e, em seguida, removeu o .deb, normalmente com sudo apt-get clean
link
limpar
clean clears out the local repository of retrieved package files. It removes everything but the lock file from /var/cache/apt/archives/ and /var/cache/apt/archives/partial/
Então, em algum momento, dpkg --reconfigure
é chamado, seja pelo usuário ou por upgrade, ou em algum momento o usuário tenta reinstalar o pacote é reinstalado sudo apt-get --reinstall foo
ou alguma variação.
Se o apt não puder localizar o .deb no repositório, seja porque os pacotes foram removidos (raros), o repositório foi removido do sistema ou o upgrade e o pacote não estão no novo repositório, você receberá o erro " O Apt / Synaptic precisa reinstalar o pacote, mas não consegue encontrar o arquivo para ele "
Mas o erro pode vir de outras causas.
Citando as seções relevantes da página de manual do dpkg (Veja link para detalhes)
INFORMAÇÕES SOBRE PACOTES O dpkg mantém algumas informações úteis sobre os pacotes disponíveis. o A informação é dividida em três classes: estados, estados de seleção e bandeiras. Estes valores devem ser alterados principalmente com o dselect.
Estados do pacote
not-installed The package is not installed on your system. config-files Only the configuration files of the package exist on the system. half-installed The installation of the package has been started, but not completed for some reason. unpacked The package is unpacked, but not configured. half-configured The package is unpacked and configuration has been started, but not yet completed for some reason. triggers-awaited The package awaits trigger processing by another package. triggers-pending The package has been triggered. installed The package is unpacked and configured OK.
AÇÕES
-i, --install package-file... Install the package. If --recursive or -R option is specified, package-file must refer to a directory instead. Installation consists of the following steps: 1. Extract the control files of the new package. 2. If another version of the same package was installed before the new installation, execute prerm script of the old package. 3. Run preinst script, if provided by the package. 4. Unpack the new files, and at the same time back up the old files, so that if something goes wrong, they can be restored. 5. If another version of the same package was installed before the new installation, execute the postrm script of the old package. Note that this script is executed after the preinst script of the new package, because new files are written at the same time old files are removed. 6. Configure the package. See --configure for detailed information about how this is done.
- configure o pacote ... | -a | --pending
Configure a package which has been unpacked but not yet configured. If -a or --pending is given instead of package, all unpacked but unconfigured packages are configured. To reconfigure a package which has already been configured, try the dpkg-reconfigure(8) command instead. Configuring consists of the following steps: 1. Unpack the conffiles, and at the same time back up the old conffiles, so that they can be restored if something goes wrong. 2. Run postinst script, if provided by the package. /var/lib/dpkg/status Statuses of available packages. This file contains information about whether a package is marked for removing or not, whether it is installed or not, etc. See section INFORMATION ABOUT PACKAGES for more info.
Se as páginas do manual forem tl; dr - & gt; Como parte da instalação, o .deb / dpkg / apt executa scripts pré / pós-instalação e outras funções. Se esses scripts de instalação / remoção falharem por vários motivos, um pacote será marcado como "meio-instalado" (ou algum outro estado que não seja instalado / instalado). Nesse estado impuro, você também pode ver o erro "O Apt / Synaptic precisa reinstalar o pacote, mas não consegue encontrar o arquivo para ele". Neste exemplo, o problema não é um arquivo ausente, mas um problema nos scripts de pré / pós-instalação que não podem ser resolvidos executando-os novamente. Assim, o erro é às vezes não específico.
Como gerenciar pacotes quebrados
-
Primeiro, corrija as dependências primeiro certificando-se de que os repositórios / ppa apropriados estejam habilitados, por exemplo, universo ou qualquer repositório necessário.
Então o infame
sudo apt-get install -f
Leia qualquer mensagem de saída e erro e poste o comando e a saída aqui se precisar de ajuda.
-
Tente reconfigurar
sudo dpkg --configure -a
Isto irá executar os scripts de configuração. Você pode especificar um pacote em vez de -a, mas -a é mais útil quando você está com problemas.
Leia qualquer mensagem de saída e erro e poste o comando e a saída aqui se precisar de ajuda.
Tente ver qualquer script com falha e, se possível, corrija o erro / problema no script.
-
Tente remover o pacote ofensivo, à força, se necessário. Você tem que ter muito cuidado aqui você pode forçar a remoção de um pacote crítico ou pior conjunto de pacotes críticos. Os comandos a seguir vão de educado a menos polido a força direta. Experimente-os em ordem.
sudo dpkg --remove $broken_package sudo dpkg --remove --force-remove-reinstreq $broken_package sudo dpkg --remove --force-all $broken_package
Se algum desses trabalhos executar
sudo apt-get update && sudo apt-get upgrade
, talvez seja necessário executarsudo apt-get -f install
e / ousudo dpkg --configure -a
. -
Se isso falhar, você precisará remover manualmente os pacotes. Isso pode envolver encontrar todos os componentes em seu sistema e excluí-los manualmente.
Use o seguinte procedimento
Remova as informações do dpkg (veja acima)
cd /var/lib/dpkg/info sudo rm -i package_name*
Tenha cuidado para não remover mais do que o necessário aqui.
Por fim, remova o pacote ofensivo
sudo dpkg --remove --force-remove-reinstreq package_name
Você deve então poder usar o apt
sudo apt-get update sudo apt-get install -f sudo apt-get upgrade
-
Somente se necessário, localize e remova manualmente todos os arquivos restantes no sistema. Este é um procedimento manual e pode incluir arquivos de configuração em
/etc
ou páginas de manual ou dados compartilhados. Use localizar ou localizar para identificar os arquivos restantes possíveis.Obviamente, você deve tomar muito cuidado ao excluir arquivos do sistema. Não exclua coisas que você não entende e não use
rm -Rf
sem entender o que esse comando fará.rm -i
é provavelmente melhor, pois a opção-i
pede confirmação.
Recrie este problema
Você pode reproduzir essa mensagem de erro editando manualmente o arquivo de status do dpkg de qualquer pacote em /var/lib/dpkg/info
e alterando o status para metade da instalação
sudo nano /var/lib/dpkg/info/some_package
Edite a linha Status para que ela seja lida
Status: Reinstreq de eliminação parcialmente instalado
Em seguida, tente executar apt-get
.
Se isso não funcionar, instale um pacote de um ppa, execute apt-get clean, remova o ppa e tente reinstalar ou reconfigurar o pacote.
Desculpe pela longa postagem, mas espero que isso lhe dê uma idéia da causa e resolução desta mensagem de erro complexa "O Apt / Synaptic precisa reinstalar o pacote, mas não consegue encontrar o arquivo para ele"