Làm cách nào để loại trừ các gói cụ thể khỏi cài đặt với apt-get?


12

Tôi muốn loại trừ các gói cụ thể khỏi cài đặt với apt-get, nghĩa là cài đặt một gói siêu dữ liệu mà không có danh sách các gói cụ thể, tốt nhất là với một lệnh gọi apt-get.

Ví dụ, trong dòng lệnh Ubuntu 14.04 LTS, tôi đang cài đặt môi trường máy tính để bàn MATE. Trong 14.04 LTS MATE không phải là hương vị chính thức, vì vậy tôi đang thêm PPA:

sudo apt-get install software-properties-common # need them for 'apt-add-repository'
sudo apt-add-repository ppa:ubuntu-mate-dev/ppa
sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate
sudo apt-get update

sau đó cài đặt:

sudo apt-get install xorg mate-core --no-install-recommends

Mặc dù không có tính năng bổ sung khuyến cáo, mate-corecài đặt 3 giả lập thiết bị đầu cuối: xterm, uxtermmate-terminal , sau này thiếu phông chữ thích hợp trong khi cài đặt trong cấu hình tối thiểu này.

Giả sử tôi quyết định rằng 3 chương trình thiết bị đầu cuối sẽ là quá nhiều và tôi muốn cài đặt xorgmate-core không có xtermmate-terminal. tôi có thể làm

sudo apt-get install xorg mate-core --no-install-recommends
sudo apt-get purge xterm mate-terminal

Nhưng nó có thể làm điều này trong một lần? Có một số cú pháp như

sudo apt-get install xorg mate-core --without xterm mate-terminal

Bạn có chắc chắn bạn có thể loại bỏ xtermmate-terminal? Trong 15.04, mate-terminallà một phụ thuộc cứng mate-desktop-environment-core, là một phụ thuộc cứng mate-corevà tôi cho rằng PPA mate-terminalkhông cung cấp x-terminal-emulator(mà gói trong 15.04 không có).
muru

Có lẽ bạn đúng , trừ khi một dấu sao bên cạnh tên gói có nghĩa là một cái gì đó đặc biệt ở đây. Ngoài ra, không gian nhỏ đáng ngạc nhiên sẽ được giải phóng. Dù sao, câu hỏi của tôi là về việc loại bỏ bất cứ thứ gì có thể được gỡ bỏ, XTermvà có thể UXTerm(tôi không chắc tên gói cho cái sau là gì)
Nickolai Leschov

1
Đây có phải là những gì bạn đang tìm kiếm? Askubfox.com/questions/75895/ trên
Seth

@Seth Không hoàn toàn: Tôi muốn nếu có một số cú pháp nhưsudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov

Nếu bạn sử dụng aptitude(hoặc một số trình quản lý gói đồ họa), bạn có thể (bỏ) chọn gói nào sẽ cài đặt và nếu một gói dẫn đến sự phụ thuộc bị hỏng, một lời giải thích sẽ (thường) sẽ được đưa ra.
saiarcot895

Câu trả lời:


7

Vì vậy, mate-core phụ thuộc vào mate-desktop-environment-corelần lượt phụ thuộc vào mate-terminal. Một phụ thuộc không thể bị phá vỡ dễ dàng. Cũng apt-getkhông aptitudehỗ trợ một --withouthoặc --excludetùy chọn và "giữ" các gói sẽ không giúp đỡ:

$ echo "mate-terminal giữ" | sudo dpkg - bộ lựa chọn
$ sudo apt-get cài đặt mate-core
[...]
Một số gói không thể được cài đặt ...
Các gói sau đây có các thuộc tính không được đáp ứng:

Chắc chắn, người ta có thể sử dụng dpkg --force-dependsđể cài đặt một gói, nhưng đó có thể không phải là những gì bạn muốn.

Một khả năng sẽ là lấp đầy Depends:cờ với gói giả:

$ sudo apt-get cài đặt đẳng
$ Equivs-control mate-terminal
$ vi mate-terminal
Mục: linh tinh
Ưu tiên: tùy chọn
Phiên bản tiêu chuẩn: 3.9.2
Gói: giao phối
Phiên bản: 1.8.0
Mô tả: Gói giả cho thiết bị đầu cuối mate
: x

$ Equivs-build mate-terminal
$ sudo dpkg -i mate-terminal_1.8.0_all.deb

Bây giờ mate-coresẽ có thể cài đặt w / o mate-terminal. Lặp lại tương tự cho các gói khác được loại trừ.

Phải thừa nhận rằng đây là một nỗ lực khá tốt và một --withoutlựa chọn sẽ tốt đẹp. Có thể một lỗi danh sách mong muốn có thể được mở để cung cấp chức năng như vậy trong tương lai, nhưng tôi bằng cách nào đó nghi ngờ rằng điều này sẽ được thực hiện.

Tuy nhiên, một lựa chọn thực tế hơn sẽ là kiến ​​nghị chủ sở hữu PPA cung cấp gói meta khác cho MATE với Dependscác gói nhỏ hơn được đặt.


4

Nếu bạn sử dụng aptitudehoặc trình quản lý gói đồ họa (Synaptic, v.v.), thì bạn có thể bỏ chọn gói nào sẽ được cài đặt miễn là nó không gây ra vấn đề phụ thuộc.

Trong trường hợp aptitude, trước khi cài đặt một gói (trong chế độ xem đồ họa), nó sẽ cho bạn thấy lý do tại sao một gói phụ thuộc đang được cài đặt. Trong trường hợp của tôi, tôi sử dụng KDE và do đó không có gói MATE nào. Nếu tôi bảo nó cài đặt mate-core, tôi nhận được như sau:

nhập mô tả hình ảnh ở đây

Lưu ý rằng mate-coređược đánh dấu là đang được cài đặt thủ công và nhiều gói khác đang được cài đặt. Đối với mate-terminalgói, ở phía dưới, nó nói, " mate-desktop-environment-core[vũ trụ] phụ thuộc vào mate-terminal(> = 1.0.0)". Đi qua lối vào cho mate-desktop-environment-core,

nhập mô tả hình ảnh ở đây

" mate-core[vũ trụ] phụ thuộc vào mate-desktop-environment-core(> = 1.8.0 + 9)". Đây là lý do tại sao mate-terminalđang được cài đặt.

Thay vào đó, nếu một gói được đề xuất đang được cài đặt (chứ không phải là một gói phụ thuộc vào gói khác), aptitudesẽ cho bạn biết như vậy và bạn có thể bảo nó không cài đặt gói đó mà không bị phụ thuộc. Ví dụ:

nhập mô tả hình ảnh ở đây


2

Một phương pháp khác

Tải về gói chính phụ thuộc vào gói khác. Giải nén gói, loại bỏ các phụ thuộc không mong muốn, đóng gói lại. Bây giờ hãy mở gói mới với trình cài đặt gói gdebi . Nó sẽ cài đặt các phụ thuộc mới cho bạn.

  • Danh sách các chi nhánh có thể được tìm thấy tại DEBIAN / control -> phụ thuộc
  • Để được trợ giúp về việc lặp lại deb, hãy xem câu trả lời của tôi về cách tạo PPA

0

Có một đặc biệt aptcú pháp cho các kịch bản như thế này: phụ thêm một dấu gạch ngang (dấu trừ) vào một gói phần mềm sẽ xóa / không cài đặt nó, vì vậy gần nhất với bạn sudo apt-get install xorg mate-core --without xterm mate-terminalsudo apt-get install xorg mate-core xterm- mate-terminal- (phát hiện trên /ubuntu//a/1011439/182923 )

Nó sẽ không giúp ích gì trong trường hợp này, vì bạn sẽ gặp phải

The following packages have unmet dependencies:
 mate-desktop-environment-core : Depends: mate-terminal (>= 1.20) but it is not going to be installed                                                                        
E: Unable to correct problems, you have held broken packages.

nhưng nó dường như là câu trả lời cho câu hỏi cụ thể của bạn Vì vậy, để tham khảo, bài chéo này.

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.