Làm cách nào để cài đặt tệp deb, bởi dpkg -i hoặc bởi apt?


601

Tôi có một gói deb để cài đặt.

Tôi sẽ cài đặt bởi dpkg -i my.deb, hoặc bởi apt?

Cả hai sẽ xử lý tốt vấn đề phụ thuộc phần mềm?

Nếu bằng apt, làm thế nào tôi có thể cài đặt từ deb bằng apt?


Bạn có thể sử dụng aptitudeloại bỏ các gói không cần thiết là tốt.
Ramesh

2
Tôi khuyên bạn không nên trực tiếp sử dụng dpkg. Trong trường hợp có một lần gỡ lỗi, hãy đi với gdebi và trong trường hợp có nhiều cuộc tranh luận, hãy đến kho lưu trữ cục bộ APT .
Pandya

5
tại sao ......... @Pandya
Tim

2
@Tim vì dpkgkhông giải quyết được phụ thuộc.
Pandya

1
@Tim gdebi xác định các phụ thuộc bị thiếu, có thể tải xuống và cài đặt (sử dụng apt), có thể cài đặt và định cấu hình (sử dụng dpkg).
Pandya

Câu trả lời:


772

Khi bạn sử dụng aptđể cài đặt một gói, dưới mui xe nó sử dụng dpkg. Khi bạn cài đặt một gói bằng apt, đầu tiên nó sẽ tạo một danh sách tất cả các phụ thuộc và tải xuống từ kho lưu trữ.

Sau khi tải xuống xong, nó gọi dpkgđể cài đặt tất cả các tệp đó, đáp ứng tất cả các phụ thuộc.

Vì vậy, nếu bạn có một .debtập tin:

  • Bạn có thể cài đặt nó bằng cách sử dụng:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • Bạn có thể cài đặt nó bằng cách sử dụng sudo apt install ./name.deb(hoặc sudo apt install /path/to/package/name.deb).

    Với apt-getcác phiên bản cũ, trước tiên bạn phải di chuyển tệp deb của bạn vào /var/cache/apt/archives/thư mục. Đối với cả hai, sau khi thực hiện lệnh này, nó sẽ tự động tải xuống các phụ thuộc của nó.

  • Cài đặt gdebivà mở tệp .deb của bạn bằng cách sử dụng nó ( Nhấp chuột phải -> Mở bằng ). Nó sẽ cài đặt gói .deb của bạn với tất cả các phụ thuộc của nó.

    ( Lưu ý : APT duy trì chỉ mục gói là cơ sở dữ liệu của các gói có sẵn trong repo được xác định trong /etc/apt/sources.listtệp và trong /etc/apt/sources.list.dthư mục. Tất cả các phương thức này sẽ không đáp ứng phụ thuộc phần mềm nếu phụ thuộc theo yêu cầu của deb không có trong chỉ mục gói .)


Tại sao sử dụng sudo apt-get install -fsausudo dpkg -i /path/to/deb/file (được đề cập trong phương pháp đầu tiên)?

Từ man apt-get:

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

Khi dpkgcài đặt một gói và một phụ thuộc gói không được thỏa mãn, nó sẽ để gói ở trạng thái "không được định cấu hình" và gói đó được coi là bị hỏng.

sudo apt-get install -f lệnh cố gắng sửa gói bị hỏng này bằng cách cài đặt phần phụ thuộc bị thiếu.


2
@Tim, apt-get được thiết kế để cài đặt các gói từ kho lưu trữ. Nó duy trì danh sách các gói cũng như địa chỉ kho lưu trữ tương ứng của chúng. Vì vậy, chỉ cần di chuyển một tệp .dev, không có trong danh sách gói apt, thư mục trong / var / cache / apt / archives sẽ không hoạt động. Bởi vì bất cứ khi nào bạn cố gắng cài đặt gói này bằng apt-get, nó sẽ tìm kiếm kho lưu trữ của nó, không có sẵn. Đối với điều này, bạn phải tạo kho lưu trữ cục bộ mà tôi nghĩ là vô dụng.
g_p

1
@g_p cảm ơn bạn! tôi hơi bối rối trong câu trả lời của bạn ở trên. bạn viết: "(nó sẽ hoạt động nếu gói .deb có trong danh sách gói apt)" - Tôi không hiểu ý nghĩa của nó ở đây là gì. Làm thế nào người ta có thể đảm bảo rằng gói .deb có trong danh sách gói apt?
BKSpurgeon

1
@BKSpurgeon, tôi đã thêm thông tin bit vào câu trả lời của mình. Để tìm hiểu xem một gói có trong chỉ mục hay không chạy apt-cache search <package name>. Bạn cũng có thể sử dụng apt-cache policy <package name>, nó cũng sẽ cung cấp một số thông tin bổ sung.
g_p

1
Các phương thức này vẫn sẽ thực hiện kiểm tra chữ ký thường được thực hiện bởi apt? Hoặc có thể cài đặt tệp .deb bị giả mạo theo cách này không?
Boann

8
Apt-get hiện đại có thể được sử dụng để cài đặt một gói đơn giản với apt-get install /path/to/package/name.deb. Sẽ thật gọn gàng nếu tác giả của câu trả lời này quyết định tích hợp nó. Nếu không, tôi sẽ thêm câu trả lời đó vào lúc nào đó khi tôi có đủ đại diện ở đây
Sam Hartman

91

Cài đặt foo.debtập tin của bạn với dpkg -i foo.deb. Nếu có một số lỗi với các phụ thuộc chưa được giải quyết, hãy chạy apt-get install -fsau đó.


Tôi đã Unable to locate packagethử cách này và bối rối. Tôi đã sử dụng như trong Windows chỉ tên của gói sau khi chuyển sang thư mục lưu trữ. Nên ./<file name>dành cho Unix nếu trong thư mục hiện tại hoặc đường dẫn đầy đủ. Đó là nếu debkhông có trong thư mục hiện diện PATH.
Alexei Martianov

60

Đây là cách tốt nhất để cài đặt .debtệp trên Ubuntu trên dòng lệnh:

sudo gdebi skype.deb

Nếu bạn chưa gdebicài đặt, hãy cài đặt nó bằng sudo apt install gdebi-core.

Tại sao gdebi?

gdebisẽ tìm kiếm tất cả các phụ thuộc của .debtệp và sẽ cài đặt chúng trước khi thử cài đặt .debtệp. Tôi thấy điều này thích hơn nhiều sudo dpkg -i skype.deb && sudo apt install -f. Điều thứ hai là quá háo hức để loại bỏ sự phụ thuộc trong các tình huống nhất định. Chẳng hạn, khi tôi cố cài đặt Skype, nó đã cố xóa các gói 96 (!), Bao gồm các gói như compizunity! gdebiđưa ra một thông báo lỗi rõ ràng hơn nhiều:

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

(Nhân tiện, đây là giải pháp cho vấn đề cụ thể đó.)


đã làm việc rất tốt btw, có thể là nỗ lực để loại bỏ là về các gói chuyển tiếp / tạm thời? hoặc bạn nghĩ rằng nó sẽ thực sự phá vỡ hệ thống?
Sức mạnh Bảo Bình

Anh bạn tôi gặp vấn đề với giải pháp của bạn. Tôi đã cố gắng cài đặt Rstudio. Nó tự động tìm thấy một phiên bản R cũ cho tôi. Trong khi sử dụng giải pháp của @g_p, tôi chỉ có thể cài đặt Rstudio.
Dr_ITH

39

Bạn có thể cài đặt gói .deb cục bộ bằng cách:

sudo apt install ./foo.deb

Đảm bảo chỉ định một đường dẫn tương đối hoặc tuyệt đối cục bộ ( ./nếu trong thư mục hiện tại), nếu không nó sẽ tìm kiếm foo.debtrong các repos từ xa và thất bại.


2
Điều này nên được đánh dấu là câu trả lời chính xác.
Rael Gugelmin Cunha

@RaelGugelminCunha không đúng 100%. sudo apt cài đặt libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt: Lỗi trong khi tải các thư viện chia sẻ: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: tiêu đề ELF không hợp lệ
mvladk

2
@mvladk Xin vui lòng, chú ý đến cú pháp: bạn đang thiếu ./trước debtập tin.
Rael Gugelmin Cunha

Hoàn toàn là câu trả lời tốt nhất / đơn giản nhất.
gerardw

15

Kiểm tra các phụ thuộc với dpkg -I my.debapt-get installcác phụ thuộc trước dpkg -i my.deb.

Có thể là bạn có thể sao chép my.debvào /var/cache/apt/archivesvà cài đặt nó trực tiếp với apt-getnhưng tôi chưa bao giờ thử. Không hoạt động apt-getdpkgđang tìm kiếm các gói được liệt kê trong tài liệu lưu trữ.


Cảm ơn. trong sentenct đầu tiên của bạn, bạn có nghĩa là apt-get install my.debbởi apt-get install? Có phải để cài đặt từ tệp deb? Tại sao chúng ta cần dpkg -i my.debsau đó?
Tim

Tôi luôn luôn được cài đặt cục bộ .debs với dpkg -i, sự hiểu biết của tôi là aptkhông có một tùy chọn để cài đặt chúng, ngoài các thư mục trong /var/cache/...nơi được tải xuống (Tôi có thể sai)
Alex

Có vẻ như apt-get install ./my.debsẽ làm một cái gì đó, bởi vì nó đầu ra rất nhiều thứ. Nó làm gì?
Tim

Nó làm quá nhiều :-) không hoạt động, hãy xem câu trả lời @Igor_Dvoretskyi là hoàn hảo, tôi đã quên mất-f
Alex

5

Câu trả lời đơn giản nhất là sử dụng dpkg bằng cách chạy dpkg -i packagename.deb. Sau đó bạn có thể gỡ cài đặt nó bằng cách chạy dpkg -r packagename.deb.
apt-getlà một trình cài đặt cấp cao hơn dựa trên dpkg, và như vậy bạn có thể apt-get install packagename.deb.
Sẽ có ích khi thêm nó vào thư mục lưu trữ apt-get của bạn ( /var/cache/apt/archives) để bạn có thể tham chiếu nó như một gói với các phụ thuộc và không phải là một kho lưu trữ .deb độc lập.
Ngoài ra, bằng cách thêm nó vào thư mục lưu trữ apt-get của bạn, bạn có cơ hội sử dụng các phụ thuộc với apt-get install packagename. Điều này sẽ cho phép bạn cài đặt nó với bất kỳ phụ thuộc được thêm thủ công thay vì hệ thống dựa trên kho lưu trữ độc lập của dpkg.


5

Apt-get hiện đại có thể được sử dụng để cài đặt một gói đơn giản với apt-get install /path/to/package/name.deb.

(nên được thực hiện dưới dạng chỉnh sửa cho câu trả lời hàng đầu nhưng nó đã bị từ chối - xem https://unix.stackexchange.com/posts/159114/edit )


Điều này không hoạt động vớiapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Bruno Bronosky

-3

Nó rất đơn giản nếu tôi muốn cài đặt Chrome.

Cài đặt tệp Chrome của bạn dưới dạng:

dpkg -i googlechrome.deb.

Đôi khi có một số lỗi phụ thuộc như sau:

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

Vì vậy, để giải quyết các vấn đề trên, bạn cần thêm các phụ thuộc; đưa ra lệnh sau:

apt-get install -f

Sau khi đưa ra lệnh trên, phần phụ thuộc sẽ được thêm vào máy của bạn và .debtệp gói Debian ( ) của bạn sẽ được cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.