Làm cách nào để cho `dpkg -i` cài đặt phụ thuộc cho tôi?


324

Nói, tôi có foo-1.2.3.debmà phụ thuộc vào perlpython, tuy nhiên, chạy lệnh:

dpkg -i ./foo-1.2.3.deb

sẽ không cài đặt các phụ thuộc này. Vì vậy tôi phải apt-get install perl pythonbằng tay.

Làm thế nào để thực hiện dpkg -icài đặt các phụ thuộc này cho tôi tự động?



5
@ pd12: Hoan hô tham khảo thông tư! :-D
David Foerster

heh, tôi quyết định liên kết cả hai và xem cái mod nào sẽ chọn.
pd12

Câu trả lời:


416

Sau khi sử dụng dpkg, việc chạy lệnh sau đã giúp tôi cài đặt các phụ thuộc cần thiết:

sudo apt-get -f install

Trong tất cả, thiết bị đầu cuối của bạn sẽ trông như thế này:

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

Chú ý dòng về Setting up package_with_unsatisfied_dependencies. Điều này sửa chữa (và hoàn thành) việc cài đặt package_with_unsatisfied_dependencies.deb.


8
Có nên chạy sudo dpkg -i mypackage.deblại không?
Muhammad Gelbana

23
Sau khi chạy sudo apt-get -f installgói của tôi và tất cả các phụ thuộc đã được cài đặt. Chạy sudo dpkg -i my_package.deblà không cần thiết và sẽ chỉ cài đặt lại gói.
Gus E

5
Các công việc sau đây trên Ubuntu 14.04 : sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. Lần dpkg -ichạy đầu tiên đánh dấu các phụ thuộc, apt-get -f installcài đặt các phụ thuộc cần thiết và lần thứ hai dpkg -icài đặt thành công gói. Lưu ý rằng đó apt-get install -flà lệnh hoàn toàn khác nhau.
Mikko Rantalainen

1
@ysth không, đừng làm dpkg -i --force; Điều đó sẽ buộc cài đặt một gói bị hỏng! Chạy dpkg/ không / --forcesẽ thực hiện các mục cần thiết trong cơ sở dữ liệu gói để apt-get -f installthực hiện đúng.
Brian A. Henning

@Lotharyx: Tôi không thể thử ngay bây giờ, nhưng tôi không nghĩ rằng dpkg mà không có lực (không thành công do thiếu phụ thuộc) sẽ tạo một mục trong cơ sở dữ liệu gói
ysth

111

Bạn có thể cài đặt gdebi-core, đây là phiên bản dòng lệnh của trình cài đặt gói GDebi từ 10.04 trở về trước. Trong các phiên bản mới hơn của Ubuntu, Trung tâm phần mềm được sử dụng để cài đặt các bản sửa lỗi, không có dòng lệnh tương đương.

Để cài đặt gói gỡ lỗi bằng gdebi, chỉ cần chạy:

sudo gdebi my_package_1.0.deb

64

bắt đầu với apt 1.1 (có sẵn trong Xenial (16.04), kéo dài) apt installcũng cho phép các tệp cục bộ:

sudo apt install ./foo-1.2.3.deb

Vì vậy, đơn giản và sạch sẽ hơn nhiều.

Xem thông báo phát hành


4
Đó là khoảng thời gian này có sẵn
Mike

Giải pháp này không hiệu quả. Tất cả những gì đã xảy ra là một danh sách các lỗi.
Billy S

@BillyS rất tiếc khi biết rằng nó không hoạt động với bạn, nhưng không có phiên bản phân phối bạn đang sử dụng và những lỗi bạn gặp phải là không thể xử lý được.
texthell

Lệnh không làm việc cho tôi nhưng apt ./install foo-1.2.3.deblàm việc.
Cenk Alti

1
Đã sửa lệnh, các nhận xét ở trên đã đề cập đến phiên bản trả lời trước đó đã bỏ lỡ phần cần thiết ./hoặc đường dẫn
Zanna

38

Gbebi

gdebicài đặt một gói deb và các phụ thuộc của nó. Để sử dụng nó chạy:

sudo gdebi package.deb

Trong các phiên bản mới hơn của Ubuntu, điều này không được cài đặt theo mặc định, vì vậy bạn sẽ cần cài đặt nó từ kho lưu trữ.

Xem man gdebicho một danh sách đầy đủ các tùy chọn.

gdebilà dòng lệnh tương đương với công cụ đồ họa cùng tên được sử dụng theo mặc định trong Ubuntu. Lệnh cho công cụ đồ họa là gdebi-gtkvà có chức năng tương tự:

gdebi-gtk


gdebi-gtk sẽ không hiển thị deps bắt buộc (phiên bản tôi có ở đây ít nhất, và nó trông giống như một lỗi), nhưng dòng lệnh sẽ! Nếu chúng ta có một máy khác với các gói chúng ta có thể sử dụng dpkg-repacktrên đó dựa trên danh sách deps như vậy :)
Aquarius Power

21

đang chạy

sudo apt-get install -f

sau khi cài đặt gói với dpkg có thể giải quyết các khoản bị hỏng (ít nhất là người đàn ông apt-get nói như vậy ...). Ill cập nhật khi tôi sẽ kiểm tra nó.


Có nên chạy sudo dpkg -i mypackage.deblại không?
Muhammad Gelbana

3
apt-get -f installhoạt động, nhưng apt-get install -fkhông giống nhau.
200_success

9

dpkg không có hỗ trợ phụ thuộc. Có một cách xung quanh nó nhưng điều đó sẽ yêu cầu bạn tạo một cơ sở dữ liệu cục bộ (và do đó bạn sẽ biết các phụ thuộc) và nó được coi là lỗi thời (...).

Nó có phải là dòng lệnh không? (cài đặt máy chủ?) Nếu vậy cũng có một cái nhìn apt-get -fnhưng hãy cẩn thận: giải quyết các phụ thuộc sau khi cài đặt có thể khiến bạn kết thúc với một hệ thống bị hỏng.

gdebi (gui frontend) đã từng có thể làm điều này nhưng đã được thay thế bằng USC.

Làm thế nào bạn tải xuống .deb. Một số tính năng mới của 11.04 là việc xử lý .deb được tải xuống từ một trang web: nó bị phản đối ở USC nên các phụ thuộc sẽ được giải quyết bởi trình cài đặt.

EDIT dựa trên nhận xét của andrew: sudo gdebi foo-1.2.3.deb sẽ thực hiện các mẹo !!


gdebi vẫn có thể được sử dụng cho việc này. Trung tâm phần mềm bây giờ chỉ là ứng dụng mặc định. Ngoài ra, như Chen Xiao-Long ghi chú, gdebi cũng có thể được sử dụng trên dòng lệnh.
andrews Something

mát mẻ! sau đó câu hỏi có câu trả lời vì có vẻ như gdebi có thể được sử dụng trên dòng lệnh.
Rinzwind

Đây phải là câu trả lời được chấp nhận.
prosti

3

Thay thế cho gdebi-gtkbạn có thể sử dụng Trung tâm phần mềm Ubuntu.

Nhấp đúp chuột vào gói và nút cài đặt nên có sẵn.


3

Bạn có thể tạo một tập tin dpkg-dep-instvới nội dung sau đây.

#!/bin/bash

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

Tôi giả sử bạn đã tạo tập tin trong thư mục nhà của bạn. Làm cho nó thực thi với chmod +x dpkg-dep-instvà di chuyển nó /usr/local/binvới sudo cp dpkg-dep-inst /usr/local/bin.

Bây giờ bạn có thể cài đặt gói debian với các phụ thuộc tự động với:

sudo dpkg-dep-inst foo-1.2.3.deb

1
Sử dụng apt-get --yes --fix-broken installvà thực hiện sửa chữa tự động.
Lucas

@ysth Không, không nói chung.
BuZZ-dEE

1

Tôi chỉ gặp vấn đề này. Gọi apt-get install -fsẽ không cài đặt phụ thuộc được đề nghị , mặc dù! Cách giải quyết duy nhất cho điều này là sau đó sẽ tạo một kho lưu trữ cục bộ và thêm vào /etc/apt/sources.list, tức là:

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

0

Trên thực tế, câu trả lời là dpkgtrình quản lý gói không thể cài đặt các phụ thuộc ngoài hộp. Bạn cam man dpkgvà thấy rằng ra. Vì vậy, bạn cần phải sử dụng các công cụ như apt, apt-get, aptitude, ..., trên cơ sở dpkg.

Tôi chỉ nói trường hợp tương tự là dành cho rpmtrình quản lý gói trên bán cầu Linux khác. rmpkhông có nghĩa là để cài đặt dựa trên phụ thuộc. Nó có thể cài đặt các gói duy nhất, và để cài đặt các phụ thuộc bạn sử dụng yum, urpmi, up2datenhững tất cả đều dựa trên RPM.

Như đã lưu ý, có một chút nguy hiểm khi cài đặt các gói với dpkgtrực tiếp, bởi vì việc giải quyết phụ thuộc sau này có thể kết thúc bằng một hệ thống bị hỏng như @Rinzwind đã vạch ra.

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.