pacman “dosya sisteminde var” hatası


38

Koştum sudo pacman -Syuve bazı ilginç hatalar okudum:

hata: işlem gerçekleştirilemedi (çakışan dosyalar)

ve ardından uzun bir dosya listesi exists in filesystem. Tam çıktı burada: http://ix.io/lLw

Bu dosyaların çoğunu bir paketle ilişkilendirdiğimde, onları kontrol pacman -Qo <path-to-file>ettiğimde görünmüyor, ancak hepsini kontrol etmedim. Koştuğumda zayıf bir bağlantım vardı pacman -Syuama daha sonra güncellediğimde aynı hataları alıyorum: http://ix.io/lLx

Ne yapmalıyım? Tüm dosyaları kontrol etmeli ve ilişkili paketi olmayanları silmeli miyim? Güncellemeyi zorlamalı mıyım sudo pacman -S --force <package-name>?

Güncelleme

Koşmayı denedim sudo pacman -S --force <package-name>ve şunu aldım:

[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

pacman -S --force <packageDosya içeren dizinlerin üzerine yazmıyor gibi görünüyor . Adamdan:

--Force kullanmak, bir dizinin dosya üzerine yazılmasına veya çakışan dosya ve dizinlere sahip paketlerin kurulmasına izin vermez.

Çakışan dizinleri silmeli miyim? (ilişkili paketler yok)


5
neden en başta çakışan dosyalarınız var? Bir paket yöneticisini kullanırken, parmak uçlarında musluk çalış (paket yöneticisi haklı düşündüğü yerlerde yazılımını yükleyerek örneğin kendilerine ait olduğunu; el işleri yüklemelisiniz eğer yüklemek /usr/local/yerine /usr/)
Umlaute

1
@ umläute Çakışan dosyaların nereden geldiğinden tam olarak emin değilim, ancak bu sayfada kullanarak kurduğum docker-compose kurulumumla ilgili olduklarından şüpheleniyorum . Belki de pacman ile çatışmalar? sudo pip install -U docker-compose==1.5.0rc3 sudo pip install
modulitos

2
@ umläute Yanlış -Sgüncellemeler almak (kısmi kurulumlar vb.) bu senaryoyu size sağlayacaktır. Benim --forcedurumum her zaman çalıştı.
erm3nda

Yanıtlar:


28

Tamam, çalışan sudo pacman -S --force <package-name>çalışır gibi görünüyor , ancak çakışan dizinleri çözmüyor. Bu gibi durumlarda, sudo rm -rfçelişenli dizinlerde çalışan , ardından sudo pacman -S --force <package-name>eserler.

Şimdi benim sorunum pacman -Syuiyi çözüldü.


6
- zorla kullanımdan kaldırıldı; bunun yerine --overwrite kullanın.
Ankit Balyan

6
--force benim için çalışıyor ama --overwrite değil
Infernion

2
sudo pacman -Syu --forcebenim için çalıştı, ancak üzerine yazma tanınmadı.
spydon

21

tl; dr: Çalıştırmadan önce çakışan uygulamayı kaldırın pacman.

pacman(ve diğer paket yöneticileri) yönetdikleri bir paket ve dosya dizinini tutarlar ( pacman --query --list). Yapılandırma gibi bazı dosyalar değiştirilebilir olarak işaretlenir ve yükseltme sırasında üzerine yazılmaz (paket yöneticisinin yeni dosyayı oluşturmadan önce eski dosyayı uzaklaştırdığı özel durumlar hariç). Diğer dosyalar değiştirilemez olarak işaretlenir. Başka bir uygulama bu dosyaları dizini güncellemeden herhangi bir şekilde değiştirirse, paket yöneticisinin yükseltme sırasında bu dosyalarla ne yapması gerektiğini bilmesi mümkün değildir.

Standart ./configure && make && sudo make installkalıp kullanılarak yüklenen birçok uygulama kullanılarak kaldırılabilir sudo make uninstall. Uygulamayı başka bir şekilde yüklediyseniz, kaldırmak için başka bir şeye ihtiyacınız olabilir. Genel olarak , kurulum dosyalarının bir kopyasını bir yerde (örneğin ~/install) bu gibi durumlarda güvenle kaldırabilmek için saklamak iyi bir fikir olabilir . Sadece çakışan dosyaları kaldırmak, muhtemelen başka dosyalara düşme tehlikesiyle karşı karşıya kalabilir ve bu da başka sorunlara yol açabilir.

Yazılımı diğer paket yöneticileri ile birlikte kurarken, bunları sistem dosyalarından izole etmenin yolları vardır. Bu, örneğin yazılım geliştirme sırasında, sürümleri gerçekten tutarlı tutmak ve diğer yazılımlarla çakışmaları önlemek istediğiniz yerleşik bir uygulamadır. Örnekler şunları içerir:


2
Yukarıdaki @umlaute yorumuma bakın. Bence çatışma bir sudo pip installemirdendi. Belki sudo ile pip kullanmaktan kaçınmalıyım?
modulitos


2

TLDR;

  1. Sorunlu dosyaların bir listesini alın (pacman'ın çıktısını kopyalayıp bir dosyaya yapıştırın).
  2. Dosya yolları dışındaki her şeyi yeni bir listeye çıkarmak için awk kullanın .
  3. Kullanım sırasında listesine dayanarak, yoldan kusurlu dosyaları taşımak için.
  4. sudo pacman -SyuTekrar koş .

    TLDR eklemek ve yazım hatalarını düzeltmek için düzenlendi

Aptalca bir şey yapmadığımdan emin olmama rağmen, Manjaro kullandığımdan beri belki de güncellemeye çalıştığım her zaman bu sorunu yaşadım; iki ay içinde üç veya dört kez. Olmak, bu onu düzeltir.

Dosyalarınızın bir listesini alın.

Güncelleme terminal pencerenizde başarısız olduğunda, şunu alırsınız:

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

... ve çok daha fazlası.

  • Çıktıyı terminalden kopyalayın ve bir dosyaya yerleştirin. Ben nano kullandım ve benim de "files" adını verdim ~ / work / files .

  • Yabancı bilgiyi soyun:

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

    Bu, her satırdan ikinci "kelimeyi" alır ve dosyalara2 yazar.

Dosyaları ele al

  • Onları silebilir, taşıyabilir veya yeniden adlandırabilirsiniz.

  • Bir şey kırılırsa, silmek veya yeniden adlandırmak yerine taşıyarak kırmamız durumunda düzeltilmesi en kolay yoldur:
    mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • Bunları gerçekten silmek istiyorsanız, bunun için hiçbir sebep yoktur ( TEHLİKE TEHLİKE ): okuma sırasında -r dosya; sudo rm - "$ dosyası"; <dosya2 yapıldı

Güncelleniyor

  • Paketin kırılmadığını anlamak için pacman'ı almak için yapmamız gereken --overwrite işlevini almak için aşağıdaki sözdizimine ihtiyacınız var:

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

    • Benim durumumda: sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
    • Örnekten sonra: sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
  • Libidn2.so.0 link bağlantısını silersem, hiçbir şey işe yaramazsa ve onu geri koyduğumda "dosya sisteminde var" hatasını aldım. Yukarıdaki, --overwrite ile, benim için işe yarayan tek şey.

  • En sonunda:

    sudo pacman -Syu


0

Benim gibi bir çok dosyanız varsa,

sudo pacman --force -Syyu  

tüm sorunları çözer.


seçenek --force kullanımdan kaldırıldı; kullanım yerine --overwrite
Mahmoud Khaled

--overwrite neyin üzerine yazılacağını belirtmelidir. şu anda kullanın - her şey
yolunda

0

Pacman nihayet kullanımdan kaldırılmış olan --forceseçenek ve vekil --overwriteseçeneğinin beklendiği gibi çalışmasını sağladıktan sonra , takip kullanım şekli not edilmelidir.

--forceÇakışan herhangi bir şeyin kör bir şekilde üzerine yazan seçeneği yeniden oluşturmak için eşdeğer bir komut olacaktır:

sudo pacman -S --overwrite \*

Veya

sudo pacman -S --overwrite "*"

Zor kısım, kabuğun önce açmasını önlemek için küreğin dışına çıkıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.