Làm cách nào để xóa một nhóm các gói Debian không còn cần thiết?


7

Khi xây dựng phần mềm, đôi khi tôi cần cài đặt thư viện, tệp nhị phân, v.v ... vốn chỉ được yêu cầu để xây dựng gói nhưng sau đó tôi quên mất việc gỡ bỏ chúng, vì vậy tôi kết thúc việc phải dọn dẹp nhiều gói cùng một lúc; ngay cả những cái mà tôi không muốn loại bỏ.

Phân tích tệp nhật ký để tìm các gói chính xác là không tối ưu và là nỗi đau của hoàng gia nếu các gói đó đủ tuổi. Có cách nào để tạo điều kiện cho nhiệm vụ này?


Tôi giả sử bạn đang nói về các gói được cài đặt khi thực hiện (ví dụ) apt-get build-dep ..., phải không? Tôi nghĩ rằng apt không đánh dấu chúng là tự động cài đặt theo mặc định, mặc dù một tùy chọn để làm như vậy có thể hữu ích, bởi vì chúng chỉ được yêu cầu trong một thời gian ngắn. apt dường như có một tùy chọn để nói "xem xét tất cả các gói tôi đang cài đặt bây giờ sẽ được cài đặt tự động", nhưng nếu làm như vậy, điều đó có thể hữu ích ở đây.
Faheem Mitha


Trong bình luận đầu tiên, tôi muốn viết "apt không có vẻ ..."
Faheem Mitha

@FaheemMitha không chỉ cho build-dep(thông qua ví dụ chủ yếu tập trung vào nó), bởi vì tôi làm việc với một số dự án không có trong kho lưu trữ.
Braiam

Câu trả lời:


6

Tôi sẽ đề nghị sử dụng thẻ người dùng, một đặc tính của aptitude (apt binary không có cái này) sẽ giúp ích cho điều đó. Khi cài đặt gói, thêm --add-user-tagtùy chọn khi cài đặt gói, ví dụ:

sudo aptitude --add-user-tag build-dep-package build-dep package

và để loại bỏ chúng, chỉ cần sử dụng:

sudo aptitude remove '?user-tag(build-dep-package)'

Bạn cũng có thể xóa thẻ trên đường đi với --remove-user-tag build-dep-package.

Nhưng điều này đặt ra một vấn đề, còn nếu một gói có cả hai thẻ thì sao? Chà, bạn chỉ cần sử dụng và / không có điều kiện để ngăn điều đó xảy ra:

sudo aptitude remove '?and(?user-tag(build-dep-package),?not(?user-tag(wanted-packages))'

Để thao tác một số gói với các thẻ khác nhau, hãy sử dụng hoặc:

sudo aptitude remove '?or(?user-tag(build-dep-package),?user-tag(wanted-packages)'

Thông qua việc này rất hữu ích trong thời gian dài, tôi chưa tìm được cách liệt kê tất cả các thẻ hoạt động hiện tại.


3

Tôi đã tìm thấy một bài đăng của David Kalnischkies trong bài đăng trên blog của UNDO APT-GET BUILD-DEP (XÓA BÊN PHỤ THUỘC XÂY DỰNG)

Đối với những người không biết, David là người duy trì apt chính, và đã như vậy kể từ năm 2009 hoặc sau đó, vì vậy đây là một vụ cá cược an toàn mà anh ta biết mình đang nói về điều gì.

DonKult • 3 năm trước

Trước khi bạn thử dòng lệnh điên rồ này, hãy thử tùy chọn này: APT :: Get :: Build-Dep-Automatic

như trong apt-get build-dep -o APT :: Get :: Build-Dep-Automatic = true srcpkg1 srcpkg2

Nếu điều đó phù hợp với bạn và bạn muốn có nó vĩnh viễn: echo APT :: Get :: Build-Dep-Automatic "true"; > /etc/apt/apt.conf.d/99markbuilddepauto

Tôi không nhớ phiên bản APT nào đã được thêm vào, nhưng nó phải đủ tuổi cho ít nhất một vài phiên bản ub Ubuntu phát hành btw: Giá trị mặc định đã được chuyển thành "false" vào 2009 / 02-09 trong ub Ubuntu.

Ồ, và chỉ dành cho bản ghi: Insane, bởi vì nó cài đặt khả năng sử dụng cùng chức năng đã được cung cấp bởi một ứng dụng đã cài đặt được cung cấp với APT: apt-mark.

Nhưng như mọi khi, với 6 giờ mã hóa, bạn có thể tránh đọc các trang trong 5 phút.

Vì thế,

apt-get build-dep -o APT::Get::Build-Dep-Automatic=true srcpkg1 srcpkg2...

có lẽ là một cách hợp lý để đi Tôi không có ý tưởng tùy chọn này tồn tại. Cho đến bây giờ tôi đã không thể tìm thấy nó trong tài liệu apt. Tôi sẽ cập nhật nếu tôi làm.

Tuy nhiên, cũng lưu ý rằng khả năng báo cáo lỗi Debian : APT :: Get :: Build-Dep-Automatic không được vinh danh . Tiêu đề nói lên tất cả.

CẬP NHẬT: Đã thử nghiệm điều này, nó dường như không hoạt động. tôi đã làm

# apt-get build-dep -o APT::Get::Build-Dep-Automatic=true g++

và sau đó

# apt-get autoremove

nhưng nó không trả lại gì cả. Có lẽ tôi đang thiếu một cái gì đó. Tôi sẽ để câu trả lời này một mình trong lúc này.

CẬP NHẬT 2: Tôi thấy trong /var/lib/apt/extended_statesđó các gói được đánh dấu chính xác là Auto-Installed: 1. Vì vậy, tôi phải sử dụng autoremovesai.

CẬP NHẬT 3: Đã thử

# apt-get build-dep -o APT::Get::Build-Dep-Automatic=true coreutils

và lần này

# apt-get autoremove

gỡ cài đặt dh-buildinfo gperf libacl1-dev libattr1-devchính xác.

Vì vậy, tại sao các nỗ lực trước đó không hoạt động? Tôi không chắc, nhưng giả thuyết - các gói cấp cao nhất cung cấp các gói ảo được yêu cầu bởi các gói được cài đặt thủ công. Vì thế

gcj-jre-headless

Provides: java-gcj-compat-headless, java-runtime-headless, java-virtual-machine, java1-runtime-headless, java2-runtime-headless, java5-runtime-headless

ant

Depends: default-jre-headless | java5-runtime-headless | java6-runtime-headless | java7-runtime-headless, libxerces2-java

Vì vậy, có một sự chồng chéo ở đây - cụ thể là java5-runtime-headless. Dòng dưới cùng - đây có thể là một ví dụ không may được chọn.


3

Điều này sẽ không giúp với các gói dev hiện tại của bạn, nhưng để sử dụng trong tương lai, hãy xem xét sử dụng mk-build-deps(trong devscriptsgói) để tạo gói meta cho các phụ thuộc.

mk-build-depschỉ cần tên của một gói có sẵn, hoặc tập tin điều khiển của nó. Cái sau hữu ích nếu gói của bạn không (chưa) có sẵn hoặc nếu bạn đang thêm phụ thuộc mới.

Nó có thể cài đặt gói meta được tạo (cộng với phụ thuộc) cho bạn nếu bạn muốn.

Như thường lệ, chi tiết đầy đủ trong trang hướng dẫn sau khi bạn đã cài đặt nó.

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.