Bagaimana cara menginstal file deb, dengan dpkg -i atau dengan apt?

600

Saya memiliki paket deb untuk instalasi.

Haruskah saya menginstal dengan dpkg -i my.deb, atau dengan apt?

Apakah keduanya menangani masalah ketergantungan perangkat lunak dengan baik?

Jika dengan apt, bagaimana saya bisa menginstal dari deb dengan apt?

Tim
sumber
Anda bisa menggunakan aptitudepaket yang tidak perlu dihapus juga.
Ramesh
2
Saya sarankan untuk tidak langsung menggunakan dpkg. Dalam hal deb tunggal, pergilah dengan gdebi dan untuk beberapa deb, pilih repositori lokal APT .
Pandya
5
why ......... @ Pandya
Tim
2
@Tim karena dpkgtidak menyelesaikan dependensi.
Pandya
1
@Tim gdebi mengidentifikasi dependensi yang hilang, dapat mengunduh & menginstal (menggunakan apt), dapat menginstal & mengonfigurasi (menggunakan dpkg).
Pandya

Jawaban:

771

Saat Anda menggunakan aptuntuk menginstal sebuah paket, di bawah kap yang digunakannya dpkg. Saat Anda menginstal sebuah paket menggunakan apt, pertama-tama ia membuat daftar semua dependensi dan mengunduhnya dari repositori.

Setelah pengunduhan selesai, panggilan dpkguntuk menginstal semua file itu memenuhi semua dependensi.

Jadi, jika Anda memiliki .debfile:

  • Anda dapat menginstalnya menggunakan:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • Anda dapat menginstalnya menggunakan sudo apt install ./name.deb(atau sudo apt install /path/to/package/name.deb).

    Dengan apt-getversi lama, Anda harus terlebih dahulu memindahkan file deb Anda ke /var/cache/apt/archives/direktori. Untuk keduanya, setelah menjalankan perintah ini, ia akan secara otomatis mengunduh dependensinya.

  • Instal gdebidan buka file .deb Anda menggunakannya ( Klik kanan -> Buka dengan ). Ini akan menginstal paket deb Anda dengan semua dependensinya.

    ( Catatan : APT mempertahankan indeks paket yang merupakan basis data dari paket yang tersedia yang tersedia di repo yang ditentukan dalam /etc/apt/sources.listfile dan dalam /etc/apt/sources.list.ddirektori. Semua metode ini akan gagal memenuhi ketergantungan perangkat lunak jika dependensi yang diperlukan oleh deb tidak ada dalam indeks paket .)


Mengapa menggunakan sudo apt-get install -fsetelahsudo dpkg -i /path/to/deb/file (disebutkan dalam metode pertama)?

Dari man apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

Ketika dpkgmenginstal paket dan ketergantungan paket tidak terpenuhi, paket itu akan meninggalkan paket dalam kondisi "tidak dikonfigurasi" dan paket itu dianggap rusak.

sudo apt-get install -f perintah mencoba untuk memperbaiki paket yang rusak ini dengan menginstal ketergantungan yang hilang.

g_p
sumber
2
@Tim, apt-get dirancang untuk menginstal paket dari repositori. Ini memelihara daftar paket serta alamat repositori masing-masing. Jadi hanya memindahkan file .dev, yang tidak ada dalam daftar paket apt, di direktori / var / cache / apt / arsip tidak akan berfungsi. Karena setiap kali Anda mencoba menginstal paket ini menggunakan apt-get, ia mencari repositori yang tidak ada. Untuk ini, Anda harus membuat repositori lokal yang saya pikir tidak berguna.
g_p
1
@ g_p terima kasih! Saya agak bingung dengan jawaban Anda di atas. Anda menulis: "(ini akan bekerja jika paket deb. Ada di daftar paket apt)" - Saya tidak mengerti apa yang dimaksud di sini. Bagaimana seseorang dapat memastikan bahwa paket deb. Hadir dalam daftar paket apt?
BKSpurgeon
1
@ BKSpurgeon, saya telah menambahkan sedikit informasi dalam jawaban saya. Untuk mengetahui apakah suatu paket ada dalam indeks atau tidak dijalankan apt-cache search <package name>. Anda juga dapat menggunakan apt-cache policy <package name>, yang akan memberikan beberapa informasi tambahan juga.
g_p
1
Apakah metode ini masih melakukan pengecekan tanda tangan yang biasanya dilakukan oleh apt? Atau mungkinkah file .deb yang dirusak dipasang dengan cara ini?
Boann
8
Apt-get modern dapat digunakan untuk menginstal paket hanya dengan apt-get install /path/to/package/name.deb. Akan rapi jika penulis jawaban ini memutuskan untuk mengintegrasikannya. Jika tidak, saya akan menambahkan jawaban itu ketika saya memiliki cukup perwakilan di sini
Sam Hartman
91

Instal foo.debfile Anda dengan dpkg -i foo.deb. Jika ada beberapa kesalahan dengan dependensi yang tidak terselesaikan, jalankan apt-get install -fsesudahnya.

ihor_dvoretskyi
sumber
Saya Unable to locate packagemencoba cara ini dan bingung. Saya menggunakan Windows hanya nama paket setelah beralih ke folder arsip. Seharusnya ./<file name>untuk Unix jika dalam folder saat ini atau path lengkap. Itu jika debtidak ada dalam folder PATH.
Alexei Martianov
60

Inilah cara terbaik untuk menginstal .debfile di Ubuntu pada command-line:

sudo gdebi skype.deb

Jika Anda belum gdebimenginstal, instal menggunakan sudo apt install gdebi-core.

Kenapa gdebi?

gdebiakan mencari semua dependensi .debfile, dan akan menginstalnya sebelum mencoba menginstal .debfile. Saya menemukan ini jauh lebih disukai daripada sudo dpkg -i skype.deb && sudo apt install -f. Yang terakhir ini terlalu bersemangat untuk menghapus dependensi dalam situasi tertentu. Misalnya, ketika saya mencoba menginstal Skype, ia berusaha menghapus 96 paket (!), Termasuk paket-paket seperti compizdan unity! gdebimemberikan pesan kesalahan yang jauh lebih jelas:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(Omong -omong, ini adalah solusi untuk masalah khusus itu .)

Flimm
sumber
bekerja dengan baik thx! btw, mungkinkah upaya untuk menghapus itu tentang paket transisi / sementara? atau Anda pikir itu akan merusak sistem?
Aquarius Power
Bung saya mengalami masalah dengan solusi Anda. Saya mencoba menginstal Rstudio. Secara otomatis menemukan versi lama R untuk saya. Saat menggunakan solusi oleh @g_p saya dapat menginstal Rstudio saja.
Dr_Hope
39

Anda dapat menginstal paket .deb lokal dengan:

sudo apt install ./foo.deb

Pastikan untuk menentukan path relatif atau absolut lokal ( ./jika dalam dir saat ini), jika tidak maka akan mencari foo.debdi repo jarak jauh dan gagal.

wisbucky
sumber
2
Ini harus ditandai sebagai jawaban yang benar.
Rael Gugelmin Cunha
@RaelGugelminCunha tidak 100% benar. sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt: error saat memuat pustaka bersama: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: header ELF tidak valid
mvladk
2
@ mvladk Tolong, perhatikan sintaks: Anda kehilangan ./sebelum debfile.
Rael Gugelmin Cunha
Benar-benar jawaban terbaik / paling sederhana.
gerardw
15

Periksa dependensi dengan dpkg -I my.debdan apt-get installdependensi sebelumnya dpkg -i my.deb.

Mungkin Anda dapat menyalin my.debdi /var/cache/apt/archivesdan menginstalnya langsung dengan apt-gettapi aku tidak pernah mencoba. Tidak berfungsi, apt-getdan dpkgsedang mencari paket yang terdaftar di arsip.

Alex
sumber
Terima kasih. di sentenct pertama Anda, maksud Anda apt-get install my.debdengan apt-get install? Apakah akan menginstal dari file deb? Mengapa kita perlu dpkg -i my.debsetelah itu?
Tim
Saya selalu dipasang lokal .debs dengan dpkg -i, pemahaman saya adalah bahwa apttidak memiliki pilihan untuk menginstal mereka, selain direktori di /var/cache/...mana-download (saya mungkin salah)
Alex
Tampaknya apt-get install ./my.debakan melakukan sesuatu, karena menghasilkan banyak hal. Apa fungsinya?
Tim
Terlalu banyak :-) tidak berfungsi, lihat jawaban @Igor_Dvoretskyi sempurna, saya lupa-f
Alex
5

Jawaban paling sederhana adalah menggunakan dpkg dengan menjalankan dpkg -i packagename.deb. Anda kemudian dapat menghapusnya dengan menjalankan dpkg -r packagename.deb.
apt-getadalah penginstal tingkat yang lebih tinggi berdasarkan dari dpkg, dan dengan demikian Anda bisa apt-get install packagename.deb.
Akan bermanfaat untuk menambahkannya ke direktori arsip apt-get Anda ( /var/cache/apt/archives) sehingga Anda bisa merujuknya sebagai paket dengan dependensi dan bukan arsip .deb mandiri.
Juga, dengan menambahkannya ke direktori arsip apt-get Anda, Anda memiliki kesempatan untuk menggunakan dependensi apt-get install packagename. Ini akan memungkinkan Anda menginstalnya dengan dependensi yang ditambahkan secara manual alih-alih sistem berbasis arsip mandiri dpkg.

Menarik...
sumber
5

Apt-get modern dapat digunakan untuk menginstal paket hanya dengan apt-get install /path/to/package/name.deb.

(harus dilakukan sebagai edit pada jawaban teratas tetapi ditolak - lihat https://unix.stackexchange.com/posts/159114/edit )

Mateusz Konieczny
sumber
Ini tidak berhasilapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Bruno Bronosky
-3

Sangat sederhana jika saya ingin menginstal Chrome.

Instal file Chrome Anda sebagai:

dpkg -i googlechrome.deb.

Terkadang ada peluang untuk mendapatkan beberapa kesalahan ketergantungan seperti berikut ini:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

Jadi untuk mengatasi masalah di atas, Anda perlu menambahkan dependensi; berikan perintah berikut:

apt-get install -f

Setelah memberikan perintah di atas, dependensi akan ditambahkan ke mesin Anda dan .debfile paket Debian Anda ( ) akan diinstal.

Pavan vadrevu
sumber