erro pacman “existe no sistema de arquivos”

erro pacman “existe no sistema de arquivos”

Corri sudo pacman -Syue recebi alguns erros interessantes ao ler:

erro: falha ao confirmar a transação (arquivos conflitantes)

e uma longa lista de arquivos seguida por exists in filesystem. A saída completa está aqui:http://ix.io/lLw

Parece que muitos desses arquivos não estão associados a um pacote quando os verifiquei pacman -Qo <path-to-file>, mas não verifiquei todos. Tive uma conexão fraca quando executei o pacman -Syu, mas recebo os mesmos erros quando atualizo mais tarde:http://ix.io/lLx

O que devo fazer? Devo verificar todos os arquivos e excluir aqueles que não possuem um pacote associado? Devo forçar a atualização (com sudo pacman -S --force <package-name>?)

Atualizar

Tentei correr sudo pacman -S --force <package-name>e consegui isso:

[my-pc]/home/average-joe$ pacman -Qo /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
error: No package owns /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info

Parece que pacman -S --force <packagenão substitui diretórios que contêm arquivos. Do homem:

Usar --force não permitirá sobrescrever um diretório por um arquivo ou instalar pacotes com arquivos e diretórios conflitantes.

Devo apenas excluir os diretórios conflitantes? (eles não possuem pacotes associados)

Responder1

Depois que o pacman finalmente descontinuou a --forceopção e fez a --overwriteopção substituta funcionar conforme o esperado, o seguinte padrão de uso deve ser observado.

Um comando para reproduzir a --forceopção que substitui cegamente qualquer coisa que entre em conflito é este:

sudo pacman -S --overwrite \* <package_name>

Ou

sudo pacman -S --overwrite "*" <package_name>

A parte complicada é escapar do curinga para impedir que o shell o expanda primeiro.

Responder2

Ok, parece que a execução sudo pacman -S --force <package-name>funciona, mas não resolve diretórios conflitantes. Nesses casos, a execução sudo rm -rfnos diretórios conflitantes é sudo pacman -S --force <package-name>executada em seguida.

Agora meu pacman -Syuresolve bem.

Responder3

dr: Desinstale o aplicativo conflitante antes de executar o pacman.

pacman(e outros gerenciadores de pacotes) mantêm umíndice de pacotes e arquivosque eles administram ( pacman --query --list). Alguns arquivos, como os de configuração, serão marcados como modificáveis ​​e não serão substituídos durante a atualização (exceto em circunstâncias especiais, onde o gerenciador de pacotes normalmente removerá o arquivo antigo antes de criar o novo). Outros arquivos serão marcados como não modificáveis.Se outro aplicativo alterar esses arquivos de alguma forma sem atualizar o índice adequadamente, não haverá como o gerenciador de pacotes saber o que fazer com esses arquivos durante uma atualização.

Muitos aplicativos instalados usando o ./configure && make && sudo make installpadrão padrão podem ser desinstalados usandosudo make uninstall. Se você instalou o aplicativo de alguma outra forma, talvez seja necessário fazer outra coisa para desinstalá-lo. Em geral, pode ser uma boa ideiamantenha uma cópia dos arquivos de instalaçãoem algum lugar (por exemplo ~/install) para poder desinstalá-los com segurança nesses casos. Apenas remover os arquivos conflitantes provavelmente deixará outros arquivos espalhados, o que poderia causar outros problemas.

Ao instalar software com outros gerenciadores de pacotes, existem maneiras de isolá-los dos arquivos do sistema. Esta é uma prática recomendada estabelecida, por exemplo, durante o desenvolvimento de software, onde você realmente deseja manter as versões consistentes e evitar conflitos com outros softwares. Exemplos incluem:

Responder4

TLDR;

  1. Obtenha uma lista dos arquivos incorretos (copie e cole a saída do pacman em um arquivo).
  2. Usarestranhopara remover tudo, exceto os caminhos dos arquivos, em uma nova lista.
  3. Usarenquantopara remover os arquivos incorretos, com base na lista.
  4. Corra sudo pacman -Syunovamente.

    editado para adicionar TLDR e corrigir erros de digitação

Embora eu tenha certeza de que não tenho feito nada estúpido, tive esse problema talvez todas as outras vezes que tentei atualizar desde que comecei a usar o Manjaro; três ou quatro vezes em dois meses. A propósito, isso resolve tudo.

Obtenha uma lista de seus arquivos.

Quando a atualização falha na janela do seu terminal, você obtém o seguinte:

error: failed to commit transaction (conflicting files)
evilfile: /usr/bin/evilfile exists in filesystem
libx000: /usr/lib/libx000.so.f.u.loser exists in filesystem
accountsservice: /usr/share/locale/ru/LC_MESSAGES/accounts-service.mo.yu.dnt.evn.spk.russian exists in filesystem

... e muito mais.

  • Copie a saída do terminal e coloque-a em um arquivo. eu useinanoe nomeei meus "arquivos", como em~/trabalho/arquivos.

  • Remova informações estranhas:

    cat files | awk '{print $2}' >> ~/work/files2

    Isso pega a segunda "palavra" de cada linha e a imprime em arquivos2.

Lidar com os arquivos

  • Você pode excluí-los, movê-los ou renomeá-los.

  • Se algo quebrar, é mais fácil consertar se quebrarmos movendo-o em vez de excluí-lo ou renomeá-lo:
    mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • Se você realmente deseja excluí-los, o que não há razão para fazer (PERIGO PERIGO):enquanto lê o arquivo -r; faça sudo rm -- "$arquivo"; concluído <arquivos2

Atualizando

  • Para que --overwrite funcione, o que precisamos fazer para que o pacman perceba que o pacote não está quebrado, você precisa da seguinte sintaxe:

    sudo pacman -S package_name --overwrite /location/of/thing

    • No meu caso:sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
    • Seguindo o exemplo:sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
  • Eu tive um problema fofo em que, se eu excluísse o link simbólico libidn2.so.0, nada funcionava e, quando o coloquei de volta, recebi o erro "existe no sistema de arquivos". O acima, com --overwrite, é tudo o que funcionou para mim.

  • Finalmente:

    sudo pacman -Syu

informação relacionada