Apt-get ile belirli bir paket için tüm bağımlılıkları yoksay


16

Bu, Google'ın yanıtlamaya yardımcı olmadığı çok özel bir sorudur.

Ubuntu 13.04 ile çalışıyorum apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56.

Erlang'ı bir .deb paketinden yüklemek istiyorum, ancak tüm bağımlılıklarını çekmek istemiyorum. Paketin kendisi Java ve wx kitaplıklarına bağlı olduğunu belirtir, ancak gerçekte Java veya wxWidgets ile arabirim oluşturmak istemiyorsanız bunlara gerek yoktur.

Erlang'ı böyle yükleyebilirim

sudo dpkg -i --force-depends erlang.deb

Ancak apt-getkarşılanmayan bağımlılıklar nedeniyle daha sonra başka bir şey yüklemek başarısız olur. Eğer Erlang'dan sonra git'i kurmak istiyorsam, aşağıdakileri alıyorum

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

esl-erlangPaketi çalıştırmadan kapatmanın bir yolu var mı apt-get install -f?

Böyle bir şey istiyorum:

sudo apt-get install --ignore-deps-for-package=esl-erlang git

ya da bunun gibi:

sudo apt-cache shut-package-up esl-erlang

veya bu:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb

Benzer bir soru buldum: /server/250224/how-do-i-get-apt-get-to-ignore-some-dependencies . Birkaç yanıt, belirli paketlerin bağımlılıklarını değiştirmek için kullanışlı manuel adımlar sağlar.

Hala sağlam bir otomatik yöntem arıyorum.


Denediniz mi --nodeps( apt-get) veya --ignore-dependsile dpkgmi?
Mike Koch

Yanıtlar:


27

Bjanssen'in amacını anlıyorum, ancak bir paket yöneticisinin --force-dependstek bir paket yüklemesine izin vermesi gülünç görünüyor, ancak bu bağımlılığa zorla-sonsuza dek-ve-dur-uyarı-beni-uyarmaya izin vermiyor.

Debian'da mevcut olandan biraz daha yüksek bir libcairo sürümüne bağlı olan bir pakette de benzer bir sorun yaşadım. Benim amacım için hala iyi çalışıyor. Libcairo güncellemesi uygun şekilde görünene kadar kullanmaya devam etmekten mutluluk duyuyorum. Kaynaktan derlemek veya kendi paketimi oluşturmak istemiyorum.

Bulduğum çözüm:

  • düzenleme /var/lib/dpkg/status,
  • bağımlılıkları olmayan paketi bul
  • Depends:paket şikayetini durdurmak için satırı düzenleyin .

Paketin bir sonraki güncellendiğinde bunun üzerine yazılacağını varsayıyorum, ama tam olarak istediğim şey bu.


2
Bu mükemmel, yanlış bir PPA bağımlılığını geçici olarak geçici olarak çözmek için ihtiyacım olan şey!
Cas

2

Yapmaya çalıştığınız şey, aklı başında bir ortam tutmaya çalışan bir paket yöneticisinin amacına aykırıdır, iş için yanlış aracı kullanıyorsunuz. Apt-get'i kırmaya çalışmayın.

Sorununuzu çözmenin doğru yolu, size uygun bağımlılıklarla kendi paketinizi oluşturmaktır. Resmi yol (oldukça ilgili: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) ve apt-builddağıtım kaynağında olmayan veya paketleri kullanmanın hızlı ve kirli yolu , checkinstall. Tüm üretmek paketleri apt-get mutlulukla kuracak.

Son bir notta, esl-erlang koruyucusunun bilgeliğini belirli bağımlılıkları içerecek şekilde sorgulayabilirsiniz, ancak paket yöneticisini amaçlanan davranış için hatalandıramazsınız. Bu bağımlılıkların yanlış olduğunu düşünüyorsanız, paketle ilgili bir hata vermelisiniz.


"Bir paket yöneticisinin amacı" hakkında söyledikleriniz temel olarak doğrudur, ancak siz de genellememelisiniz. Bir örnek vermek istiyorum: bir uygulama gerekli libmng1. Ama libmng2yükledim VE bir symlink ayarlanmış libmng1.so. Tehdit etti, hiç problem yaşamadım. Ama apt-gether zaman "karşılanmamış bağımlılıklar" şikayet etti. Bu nedenle, bu açıdan yetenekleri susturmanın bir yolunu bulmaya çalışmak için kesinlikle iyi bir neden var. Şeyler beri yapmak işi, sadece basit şeyler için şikayet tutar olan sorun yok. Sadece olmadığı yerde problem görür. Ve bu sinir bozucu.
syntaxerror

Bu ilginç bir durum. Sanırım dağıtım dışı bir depodan bir paket yüklediniz mi? Böyle bir durumda equivs"susturmak" apt-get kırılmadan bak.
bjanssen

Peki, böyle olabilirdi. Ama aslında değildi ... Eski paketi aynı dağıtımdan yükledim , bu yüzden Ubuntu açısından 15.x'teydim, ama libmng1'i 12.04 LTS'den kurdum.
syntaxerror

0

İçindeki "proxy" apt.confnin uygun olup olmadığını kontrol edin (örn. Ağınıza uygun olarak). URL'lere erişilemeyeceği için bu da bu tür sorunlara neden olur.

Genellikle, proxy kullanıyorsanız, /etc/apt/apt.confşöyle görünür:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
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.