Abaikan semua dependensi untuk paket tertentu dengan apt-get


16

Ini adalah pertanyaan yang sangat spesifik dimana Google tidak membantu menjawab.

Saya menjalankan Ubuntu 13.04 dengan apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56.

Saya ingin menginstal Erlang dari paket .deb, tetapi saya tidak ingin menarik semua dependensinya. Paket itu sendiri menentukan bahwa itu tergantung pada pustaka Java dan wx, tetapi pada kenyataannya itu tidak diperlukan kecuali Anda ingin berinteraksi dengan Java atau wxWidgets.

Saya dapat menginstal Erlang seperti ini

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

Namun, menginstal apa pun dengan apt-getsetelah itu gagal karena dependensi yang tidak terpenuhi. Jadi jika saya ingin menginstal git setelah Erlang, saya mendapatkan yang berikut ini

$ 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).

Apakah ada cara untuk membuat esl-erlangpaket diam tanpa berjalan apt-get install -f?

Saya ingin sesuatu seperti ini:

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

atau seperti ini:

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

atau ini:

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

Saya telah menemukan pertanyaan serupa: /server/250224/how-do-i-get-apt-get-get-to-ignore-some-dependencies . Beberapa jawaban memberikan langkah-langkah manual yang berguna untuk memodifikasi dependensi paket-paket tertentu.

Saya masih mencari metode otomatis yang tangguh.


Sudahkah Anda mencoba --nodeps( apt-get) atau --ignore-dependsdengan dpkg?
Mike Koch

Jawaban:


27

Saya mengerti maksud bjanssen, tetapi kelihatannya konyol bagi seorang manajer paket untuk mengizinkan --force-dependssatu paket instalasi, tetapi tidak mengizinkan force-depend-forever-and-stop-warning-me-about-this-dependency.

Saya memiliki masalah serupa dengan paket yang bergantung pada versi libcairo sedikit lebih tinggi dari yang saat ini tersedia di Debian. Untuk tujuan saya masih berfungsi dengan baik. Saya senang terus menggunakannya sampai pembaruan libcairo muncul di apt. Saya tidak ingin mengkompilasi dari sumber atau membangun paket saya sendiri.

Solusi yang saya temukan:

  • edit /var/lib/dpkg/status,
  • temukan paket dengan dependensi yang rusak
  • edit Depends:baris untuk menghentikan paket yang mengeluh.

Saya berasumsi bahwa akan ditimpa saat berikutnya paket diperbarui, tetapi itulah yang saya inginkan.


2
Ini sempurna, hanya apa yang saya butuhkan untuk sementara waktu mengatasi ketergantungan PPA yang salah!
Cas

2

Apa yang Anda coba lakukan adalah bertentangan dengan tujuan manajer paket, yang mencoba untuk menjaga lingkungan yang waras, jika Anda menggunakan alat yang salah untuk pekerjaan itu. Jangan mencoba untuk mematahkan apt-get.

Cara yang tepat untuk menyelesaikan masalah Anda adalah dengan membangun paket Anda sendiri dengan dependensi yang sesuai dengan Anda. Ada cara resmi (cukup terlibat: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) dan cara cepat dan kotor menggunakan apt-build, atau untuk paket tidak dalam sumber distribusi, checkinstall. Semua paket menghasilkan apt-get akan dengan senang hati menginstal.

Pada catatan terakhir, Anda dapat mempertanyakan kebijaksanaan pengelola esl-erlang untuk menyertakan dependensi tertentu, tetapi Anda tidak dapat menyalahkan manajer paket untuk perilaku yang diinginkan. Jika Anda merasa dependensi ini salah, Anda harus mengajukan bug pada paket.


Apa yang Anda katakan tentang "tujuan manajer paket" pada dasarnya benar, tetapi Anda tidak boleh menyamaratakan juga. Saya ingin memberi contoh: satu aplikasi diperlukan libmng1. Tapi saya telah libmng2menginstal DAN set symlink ke libmng1.so. Bekerja sebagai ancaman, tidak pernah punya masalah. Tetapi apt-getselalu mengeluh tentang "dependensi yang tidak terpenuhi". Jadi pasti ada alasan bagus untuk mencoba menemukan cara untuk membungkam bakat dalam hal ini. Sejak hal melakukan pekerjaan, itu hanya terus mengeluh untuk hal-hal yang hanya yang tidak ada masalah. Itu hanya melihat masalah di mana mereka tidak ada. Dan itu menyebalkan.
syntaxerror

Ini adalah situasi yang aneh. Saya kira Anda menginstal paket dari repositori non-distribusi? Dalam kasus seperti itu, lihatlah equivsuntuk "membungkam" apt-get tanpa merusaknya.
bjanssen

Yah, bisa saja seperti itu. Tapi sebenarnya itu bukan ... Saya hanya menginstal paket yang lebih tua dari distro yang sama, jadi dalam istilah Ubuntu saya di 15.x, tapi saya menginstal libmng1 dari 12,04 LTS.
sintaksis

0

Periksa, apakah "proxy yang digunakan" di apt.confsudah benar (yaitu sesuai dengan jaringan Anda). Ini juga menyebabkan masalah seperti itu, karena url tidak dapat dijangkau.

Biasanya, jika Anda menggunakan proxy, maka Anda /etc/apt/apt.confakan terlihat seperti:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.