Bagaimana membiarkan `dpkg -i` menginstal dependensi untuk saya?

325

Katakan, saya punya foo-1.2.3.debyang bergantung pada perldan python, bagaimanapun, menjalankan perintah:

dpkg -i ./foo-1.2.3.deb

tidak akan menginstal dependensi ini. Jadi saya harus apt-get install perl pythondengan tangan.

Bagaimana cara dpkg -imenginstal dependensi ini untuk saya secara otomatis?

Xiè Jìléi
sumber
5
@ pd12: Hore untuk referensi melingkar! :-D
David Foerster
heh, saya memutuskan untuk menghubungkan keduanya dan melihat mana yang akan dipilih oleh mod.
pd12

Jawaban:

417

Setelah menggunakan dpkg, menjalankan perintah berikut membantu saya untuk menginstal dependensi yang diperlukan:

sudo apt-get -f install

Secara keseluruhan, terminal Anda akan terlihat seperti ini:

$ sudo dpkg -i package_with_unsatisfied_dependencies.deb
dpkg: dependency problems prevent ... 
[additional messages]

$ sudo apt-get -f install
[apt messages]
Setting up [dependency]...
Setting up package_with_unsatisfied_dependencies...

Perhatikan baris tentang Setting up package_with_unsatisfied_dependencies. Ini memperbaiki (dan menyelesaikan) instalasi package_with_unsatisfied_dependencies.deb.

Arindom
sumber
8
Haruskah saya lari sudo dpkg -i mypackage.deblagi?
Muhammad Gelbana
23
Setelah menjalankan sudo apt-get -f installpaket saya dan semua dependensinya diinstal. Menjalankan sudo dpkg -i my_package.debtidak perlu dan hanya akan menginstal paket lagi.
Gus E
5
Berikut bekerja pada Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. dpkg -iRun pertama menandai dependensi, apt-get -f installmenginstal dependensi yang diperlukan, dan yang kedua dpkg -iberhasil menginstal paket. Perhatikan bahwa apt-get install -fini perintah yang sama sekali berbeda.
Mikko Rantalainen
1
@ysth tidak, jangan lakukan dpkg -i --force; itu akan memaksa-menginstal paket yang rusak! Menjalankan dpkg/ tanpa / --forceakan membuat entri yang diperlukan dalam paket database sehingga apt-get -f installakan melakukan hal yang benar.
Brian A. Henning
@Laryaryx: Saya tidak bisa mencobanya sekarang, tapi saya tidak berpikir dpkg tanpa kekuatan (yang gagal karena dependensi yang hilang) akan membuat entri dalam database paket
ysth
111

Anda dapat menginstal gdebi-core, yang merupakan versi baris perintah penginstal paket GDebi mulai 10,04 dan sebelumnya. Di versi Ubuntu yang lebih baru, Pusat Perangkat Lunak digunakan untuk menginstal deb, yang tidak memiliki setara baris perintah.

Untuk menginstal paket deb menggunakan gdebi, jalankan saja:

sudo gdebi my_package_1.0.deb
Andrew Gunnerson
sumber
64

dimulai dengan apt 1.1 (tersedia dalam Xenial (16.04), stretch) apt installjuga memungkinkan file lokal:

sudo apt install ./foo-1.2.3.deb

Jauh lebih sederhana dan bersih.

Lihat pengumuman rilis

textshell
sumber
4
Sudah saatnya ini tersedia
Mike
Solusi ini tidak berhasil. Yang terjadi hanyalah daftar kesalahan.
Billy S
@BillyS menyesal mendengar bahwa itu tidak bekerja untuk Anda, tetapi tanpa versi distro yang Anda gunakan dan kesalahan apa yang Anda dapatkan, ini tidak dapat ditindaklanjuti sama sekali.
textshell
Perintah itu tidak bekerja untuk saya tetapi apt ./install foo-1.2.3.debberhasil.
Cenk Alti
1
Mengoreksi perintah, komentar di atas merujuk ke versi sebelumnya dari jawaban yang tidak diperlukan ./atau jalan
Zanna
38

Gdebi

gdebimenginstal paket deb dan dependensinya. Untuk menggunakannya jalankan:

sudo gdebi package.deb

Di versi Ubuntu yang lebih baru, ini tidak diinstal secara default, jadi Anda harus menginstalnya dari repositori.

Lihat man gdebidaftar opsi lengkap.

gdebiadalah baris perintah yang setara dengan alat grafis dengan nama yang sama yang dulu disertakan secara default di Ubuntu. Perintah untuk alat grafis adalah gdebi-gtkdan memiliki fungsi serupa:

gdebi-gtk

dv3500ea
sumber
gdebi-gtk tidak akan menampilkan deps yang diperlukan (versi yang saya miliki di sini setidaknya, dan sepertinya bug), tetapi baris perintah akan! Jika kita memiliki mesin lain dengan paket-paket yang dapat kita gunakan dpkg-repackberdasarkan daftar deps seperti itu :)
Aquarius Power
21

berlari

sudo apt-get install -f

setelah menginstal paket dengan dpkg dapat menyelesaikan kerusakan yang terjadi (setidaknya man apt-get berkata demikian ...). Sakit pembaruan ketika saya akan memeriksanya.

Denwerko
sumber
Haruskah saya lari sudo dpkg -i mypackage.deblagi?
Muhammad Gelbana
3
apt-get -f installbekerja, tetapi apt-get install -ftidak sama.
200_sukses
9

dpkg tidak memiliki dukungan ketergantungan. Ada cara untuk mengatasinya tetapi itu akan mengharuskan Anda untuk membuat basis data lokal (dan dengan demikian Anda sudah tahu dependensinya) dan itu dianggap usang (...).

Apakah harus berupa baris perintah? (menginstal server?) Jika demikian, lihat juga apt-get -ftetapi hati-hati: menyelesaikan dependensi setelah instalasi dapat membuat Anda berakhir dengan sistem yang rusak.

gdebi (gui frontend) dulu bisa melakukan ini tetapi diganti dengan USC.

Bagaimana Anda mengunduh .deb. Beberapa fitur 11.04 yang baru adalah penanganan .deb yang diunduh dari sebuah situs web: ia dapat dibuka di USC sehingga ketergantungan akan diselesaikan oleh penginstal.

EDIT berdasarkan komentar dari andrew: sudo gdebi foo-1.2.3.deb akan melakukan triknya !!

Rinzwind
sumber
gdebi masih bisa digunakan untuk ini. Pusat Perangkat Lunak sekarang hanya aplikasi standar. Juga, seperti yang dicatat oleh Chen Xiao-Long, gdebi juga dapat digunakan pada baris perintah.
andrewsomething
keren! maka pertanyaannya punya jawaban karena gdebi juga bisa digunakan pada commandline.
Rinzwind
Ini harus menjadi jawaban yang diterima.
prosti
3

Sebagai alternatif, gdebi-gtkAnda dapat menggunakan Pusat Perangkat Lunak Ubuntu.

Klik dua kali pada paket dan tombol instal harus tersedia.

Henrique
sumber
3

Anda dapat membuat file dpkg-dep-instdengan konten berikut.

#!/bin/bash

DEBIAN_FILE1=$1
dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install

Saya berasumsi Anda membuat file di folder rumah Anda. Buatlah dieksekusi dengan chmod +x dpkg-dep-instdan memindahkannya ke /usr/local/bindengan sudo cp dpkg-dep-inst /usr/local/bin.

Sekarang Anda dapat menginstal paket debian dengan dependensi secara otomatis dengan:

sudo dpkg-dep-inst foo-1.2.3.deb
BuZZ-dEE
sumber
1
Gunakan apt-get --yes --fix-broken installdan buat perbaikan otomatis.
Lucas
@ysth Tidak, tidak secara umum.
BuZZ-dEE
1

Saya baru saja mengalami masalah ini. Memanggil tidakapt-get install -f akan menginstal dependensi yang disarankan ! Satu-satunya solusi untuk ini adalah kemudian membuat repositori lokal dan menambahkan , yaitu:/etc/apt/sources.list

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update
Alex Kläser
sumber
0

Sebenarnya jawabannya adalah dpkgmanajer paket tidak dapat menginstal dependensi di luar kotak. Anda cam man dpkgdan menemukan itu. Jadi, Anda perlu menggunakan alat seperti apt, apt-get, aptitude, ..., berdasarkan dpkg.

Saya akan mengatakan kasus yang sama adalah untuk rpmmanajer paket di belahan Linux lainnya. rmptidak dimaksudkan untuk melakukan instalasi berbasis ketergantungan. Hal ini dapat menginstal paket tunggal, dan untuk menginstal dependensi yang Anda gunakan yum, urpmi, up2dateini semua didasarkan pada RPM.

Seperti disebutkan ada sedikit bahaya menginstal paket dengan dpkgsecara langsung, karena penyelesaian resolusi dependensi nanti mungkin berakhir dengan sistem yang rusak seperti yang diuraikan @Rinzwind.

prosti
sumber