Corri sudo pacman -Syu
e 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 eu os verifiquei pacman -Qo <path-to-file>
, mas não os verifiquei todos. Eu tive uma conexão fraca quando executei pacman -Syu
, mas recebo os mesmos erros quando atualizei mais tarde: http://ix.io/lLx
O que devo fazer? Devo verificar todos os arquivos e excluir os que não possuem um pacote associado? Devo forçar a atualização (com sudo pacman -S --force <package-name>
?)
Atualizar
Eu 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 pacman -S --force <package
que não substitui diretórios que contêm arquivos. Do homem:
Usar --force não permitirá substituir 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 têm pacotes associados)
fonte
/usr/local/
vez de/usr/
)sudo pip install -U docker-compose==1.5.0rc3
nesta página . Talvezsudo pip install
conflitos com pacman?-S
atualizações incorretas (instalações parciais, etc) permitirá esse cenário. Caso de mim--force
trabalhou o tempo todo.Respostas:
Ok, parece que
sudo pacman -S --force <package-name>
funciona, mas não resolve diretórios conflitantes. Nesses casos, executandosudo rm -rf
nos diretórios conflitantes, seguidos desudo pacman -S --force <package-name>
obras.Agora meu
pacman -Syu
resolve bem.fonte
sudo pacman -Syu --force
funcionou para mim, mas a substituição não foi reconhecida.tl; dr: Desinstale o aplicativo conflitante antes de executar
pacman
.pacman
(e outros gerenciadores de pacotes) mantêm um índice de pacotes e arquivos que eles gerenciam (pacman --query --list
). Alguns arquivos, como configuração, serão marcados como modificáveis e não serão substituídos durante a atualização (exceto em circunstâncias especiais, em que o gerenciador de pacotes normalmente afasta o arquivo antigo antes de criar o novo). Outros arquivos serão marcados como inalteráveis. Se outro aplicativo alterar esses arquivos de qualquer maneira sem atualizar o índice de acordo, não há como o gerenciador de pacotes saber o que fazer com esses arquivos durante uma atualização.Muitos aplicativos instalados usando o padrão
./configure && make && sudo make install
padrão podem ser desinstalados usandosudo make uninstall
. Se você instalou o aplicativo de alguma outra maneira, talvez seja necessário fazer outra coisa para desinstalá-lo. Em geral, pode ser uma boa idéia manter uma cópia dos arquivos de instalação em algum lugar (por exemplo~/install
) para poder desinstalá-los com segurança nesses casos. Apenas remover os arquivos conflitantes provavelmente deixará outros arquivos por aí, o que pode causar outros problemas.Ao instalar o software com outros gerenciadores de pacotes, há maneiras de isolá-los dos arquivos do sistema. Essa é uma prática recomendada estabelecida, por exemplo, durante o desenvolvimento de software, em que você realmente deseja manter as versões consistentes e evitar conflitos com outros softwares. Exemplos incluem:
fonte
sudo pip install
comando. Talvez eu deva evitar usar pip com sudo?Eu estava instalando pacotes que eu costumo instalar com o pip via pacman por causa disso. Mas alguns pacotes não são encontrados nos repositórios pacman. Acho que devemos evitar instalar o pip com privilégios de sudo e istead:
O sinalizador --user cria pacotes de instalação do pip no seu diretório pessoal, o que não requer privilégios especiais. https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user
fonte
TLDR;
sudo pacman -Syu
novamente.editado para adicionar TLDR e corrigir erros de digitação
Embora eu tenha certeza de que não fiz nada estúpido, tive esse problema talvez em todas as vezes que tentei atualizar desde que usei o Manjaro; três ou quatro vezes dentro de dois meses. Aponte ser, isso corrige.
Obtenha uma lista dos seus arquivos.
Quando a atualização falha na janela do terminal, você obtém o seguinte:
... e muito mais.
Copie a saída do terminal e coloque-a em um arquivo. Eu usei nano e nomeei meus "arquivos", como em ~ / work / files .
Tira 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 de corrigir se o movermos, 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 - "$ file"; done <arquivos2
Atualizando
Para que o --overwrite funcione, o que precisamos fazer para que o pacman perceba que o pacote não está quebrado, é necessário a seguinte sintaxe:
sudo pacman -S package_name --overwrite /location/of/thing
sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
Eu tive um problema fofo, onde se eu excluísse o link simbólico libidn2.so.0, nada funcionasse 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
fonte
Após o pacman finalmente descontinuar a
--force
opção e fazer com que a--overwrite
opção substituta funcione conforme o esperado, o padrão de uso a seguir deve ser observado.Um comando equivalente para reproduzir a
--force
opção que sobrescreve cegamente qualquer conflito que seja:Ou
A parte complicada é escapar do globo para evitar que a casca o expanda primeiro.
fonte
Se você tem muitos arquivos como eu,
resolve todos os problemas.
fonte