Làm cách nào để xóa tất cả các gói khỏi kho lưu trữ nhất định?


30

Để nâng cấp suôn sẻ từ 10.04 lên 10.10, tôi muốn xóa tất cả các gói không có trong kho mặc định (ví dụ: kho chứa crom PPA và kho của bên thứ ba). Cách dễ nhất (tốt nhất là CLI) để tìm và loại bỏ các gói này là gì?

Chỉnh sửa: câu hỏi này không bị hạn chế đối với PPA, tôi cũng có kho lưu trữ x2go, vì vậy tôi đang tìm một lệnh chung để loại bỏ các gói thuộc về một kho lưu trữ nhất định. Đối với PPA, câu hỏi Làm thế nào để loại bỏ PPA có câu trả lời tuyệt vời.


Đối với những người muốn xóa tất cả các gói bên ngoài, hãy vô hiệu hóa tất cả các PPA và sử dụng code.google.com/p/apt-downgrade
Lekensteyn

Câu trả lời:


12

Tập lệnh này có thể liệt kê tất cả các gói từ một máy chủ / chi nhánh cụ thể (sửa đổi hai biến được khai báo):

#!/bin/bash

server="http://it.archive.ubuntu.com/ubuntu/"
branch="maverick-updates/main"

apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk -v server="$server" -v branch="$branch" \
    '/^[^ ]/      { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; if ($2 == server && $3 == branch) print pkg }
    /\*\*\*/      { nextline = 1 }'

nếu bạn cần liệt kê tất cả các gói không đến từ một máy chủ cụ thể, độc lập với chi nhánh, hãy thay thế dòng tiếp theo đến cuối cùng bằng:

nextline == 1 { nextline = 0; if ($2 != server) print pkg }

1
Không phải những gì tôi đang tìm kiếm chính xác, tập lệnh này chỉ hiển thị tất cả các gói từ một mục lưu trữ cụ thể. Bằng cách thay thế $2 == server && $3 == branchbằng $2 != server, câu hỏi của tôi được trả lời. Vui lòng đặt nó trong câu trả lời của bạn :) ( branch=dòng có thể được loại bỏ) Lưu ý: giả định rằng tất cả các gói đến từ một máy chủ kho lưu trữ duy nhất.
Lekensteyn

1
Kịch bản này (được sửa đổi một chút theo nhận xét cuối cùng của tôi) hoạt động như mong đợi. Các libvpx0gói tồn tại trong cả repo chính như trong PPA crôm mỗi ngày. Sau khi xóa các kho lưu trữ khỏi /etc/apt/sources.list.d, tôi vẫn còn một gói còn lại : libvpx0. Tôi "sửa chữa" điều này như sau: xóa thư viện với dpkg, bỏ qua các phụ thuộc : sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. Tiếp theo, cài đặt lại từ repo chính : sudo apt-get install libvpx0.
Lekensteyn

1
@Lekensteyn: có lẽ bạn có thể rút ngắn công việc của mình sudo apt-get install libvpx0=$version_string, giả sử hai gói có sẵn có các chuỗi phiên bản khác nhau.
enzotib

thật vậy, điều đó cũng có thể và cũng có thể tốt hơn.
Lekensteyn

Tôi chỉ cần kiểm tra những gói nào không được cài đặt từ repos mặc định. Lệnh apt-cache policy $(dpkg -l | awk '/^ii/{print $2}') > policy.txt; awk '!/^ /{pkg=$1}check{print pkg, $2;check=0}/\*\*\*/{check=1} ' policy.txt | grep -v archive.ubuntulà một khởi đầu tốt (thêm nhiều hơn grep -vđể loại trừ một số PPA nhất định). Các phiên bản gói không được biết đến trong bất kỳ repo nào xuất hiện dưới dạng /var/lib/dpkg/status.
Lekensteyn

22

Kiểm tra ppa-purgeCài đặt ppa-purge .

Sử dụng:

ppa-purge -purge <nameofppa> [-s hostserver]

Máy chủ lưu trữ mặc định ppa.launchpad.net.

Dưới đây là liên kết đến trang chủ cho ppa-purgelệnhBiểu tượng trang để tham khảo.


Hoặc bạn có thể sử dụng nhánh ppa-purge của tôi có nhiều sửa lỗi và cải tiến so với ppa-purge trong kho vũ trụ. Xem ở đây để biết thêm thông tin.
jarno

18

Khắc phục aptitudelỗi Multiarch choppa-purge

Thông thường, như Vadim RutkovskyTakkat đã giải thích , chạy ppa-purgevới cú pháp mặc định là một cách hiệu quả để loại bỏ tất cả các gói được cung cấp bởi PPA, hạ cấp chính xác chúng thành các phiên bản được cung cấp trong các nguồn phần mềm được định cấu hình khác bất cứ khi nào có thể.

Tuy nhiên, như Takkat đã chỉ ra, lỗi 831768 ngăn không cho ppa-purgehoạt động đúng cách để loại bỏ các gói multiarch (như các gói 32 bit được cài đặt trên các hệ thống 64 bit). Điều này là do aptitudekhông thể xử lý các phụ thuộc xung đột trong các gói multiarch (đó là lỗi xảy ra) và hành vi mặc định ppa-purgelà sử dụng aptitudeđể hạ cấp các gói.

May mắn thay, ppa-purgechấp nhận -ilá cờ đó làm cho nó thích apt-getđể aptitudelà hậu phương. Như được ghi lại trong báo cáo lỗi, sử dụng apt-getlà một giải pháp thay thế hiệu quả cho việc gọi thủ công aptitude, do đó, việc chạy ppa-purgevới -icờ phải là một cách giải quyết hiệu quả để loại bỏ / hạ cấp tất cả các gói được cung cấp bởi PPA, bao gồm các gói multiarch .

Làm thế nào để làm nó

Đây là cú pháp:

sudo ppa-purge -i ppa:ppaowner/ppaname

Như thường lệ (giống như khi -icờ không được sử dụng):

  • ppaowner được thay thế bằng chủ sở hữu của PPA.
  • /ppanameLà tùy chọn. Nếu có, ppanameđược thay thế bằng tên của PPA. Nếu không, nó mặc định là ppa.

Ví dụ: giả sử tôi đã cài đặt PPA cho các bản dựng qBittorrent không ổn định và tôi muốn xóa nó hoàn toàn, tự động hạ cấp qBittorrent thành bất kỳ phiên bản nào có sẵn thông qua các nguồn phần mềm khác của tôi bằng cách sử dụng apt-getphía sau hậu trườngaptitude . Sau đó tôi sẽ chạy:

sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable

Tài liệu ở đâu

Vì một số lý do, một vài tùy chọn hữu ích ppa-purgekhông được ghi lại trong trang hướng dẫn sử dụng , bao gồm -i. Nhưng bạn có thể lấy thông tin về chúng bằng cách chạy ppa-purge -h(hoặc chỉ ppa-purgekhông có đối số):

ek@Del:~$ ppa-purge -h
Usage: sudo ppa-purge [options] <ppa:ppaowner>[/ppaname]

ppa-purge will reset all packages from a PPA to the standard
versions released for your distribution.

Options:
    -p [ppaname]        PPA name to be disabled (default: ppa)
    -s [host]       Repository server (default: ppa.launchpad.net)
    -d [distribution]   Override the default distribution choice.
    -y          Pass -y --force-yes to apt-get or -y to aptitude
    -i          Reverse preference of apt-get upon aptitude.
    -h          Display this help text

Example usage commands:
    sudo ppa-purge xorg-edgers
    will remove https://launchpad.net/~xorg-edgers/+archive/ppa

    sudo ppa-purge -p xorg-testing sarvatt
    will remove https://launchpad.net/~sarvatt/+archive/xorg-testing

    sudo ppa-purge ppa:ubuntu-x-swat/x-updates
    will remove https://launchpad.net/~ubuntu-x-swat/+archive/x-updates

Notice: If ppa-purge fails for some reason and you wish to try again,
(For example: you left synaptic open while attempting to run it) simply
uncomment the PPA from your sources, run apt-get update and try again.

"Ưu tiên đảo ngược của apt-get dựa trên năng khiếu" là một chút khó hiểu. Bằng cách nhìn vào những mảnh có liên quan của mã nguồn ( ppa-purgechỉ là một kịch bản shell, sau khi tất cả), chúng ta có thể thấy rằng điều này có nghĩa rằng các hành vi mặc định là thích aptitudeđến apt-get, và -ilá cờ đảo ngược sở thích này.


Lần cuối cùng khi tôi thử ppa-purge, nó đã không xóa các gói đã bị xóa khỏi PPA. Vẫn còn như vậy sao?
Lekensteyn

@Lekensteyn Vâng, tôi tin rằng đây vẫn là trường hợp ppa-purgesẽ không xóa hoặc hạ cấp các gói không còn được cung cấp bởi PPA bị "thanh trừng". Tuy nhiên, bạn có thể muốn đăng một câu hỏi riêng về vấn đề này, để có được câu trả lời có thẩm quyền hơn hoặc được ghi chép đầy đủ.
Eliah Kagan

Nếu kho lưu trữ không phải là PPA được lưu trữ trong Launchpad, nhưng kho lưu trữ không chuẩn khác, ppa-purge có hoạt động không?
Anwar

1
@Anwar Tôi không tích cực nếu nó hoạt động, nhưng bạn có thể thử bằng cách chỉ định URL kho lưu trữ đầy đủ thay vì ppa:username/path. Ngoài ra, PPA phải được ĐẢM BẢO trước khi bạn cố gắng lọc nó, mặc dù tập lệnh ngay lập tức vô hiệu hóa sau khi cập nhật danh sách các gói cần xóa, nó sẽ không "tìm thấy" PPA đã bị vô hiệu hóa.
dragon788

1
@Lekensteyn bạn có thể thử sử dụng aptitude search ~ođể tìm các gói mồ côi không có nguồn cài đặt nếu bạn cần thanh lọc thứ gì đó đã bị xóa khỏi PPA (hoặc được cài đặt dưới dạng thông qua dpkg -i).
dragon788

6

Đây là cách GUI để làm như vậy. Hy vọng nó sẽ giúp ích cho những người không thích CLI. Các bước rất đơn giản và dễ làm theo.

  1. Mở trình quản lý gói synap . Nếu không cài đặt thì cài đặt nó bằng cách:

    sudo apt-get install synaptic
    
  2. Khi mở, nhấp vào nút Origin ở phía dưới bên trái. Nó sẽ liệt kê tất cả các kho lưu trữ ở phía trên bên trái. Chọn kho lưu trữ cụ thể cho các gói sẽ được gỡ bỏ. Nó sẽ liệt kê tất cả các gói trong kho lưu trữ đó. Nhấp vào trường đầu tiên i, e S hoặc trường Phiên bản đã cài đặt để hiển thị các gói đã cài đặt trước.

  3. Bây giờ chọn tất cả các gói để loại bỏ.

    Mẹo để đánh dấu để loại bỏ:

    1. Chọn gói đầu tiên, sau đó giữ Shiftphím và chọn lại gói cuối cùng để chọn tất cả. Sau đó nhấp chuột phải vào ô vuông và chọn đánh dấu để loại bỏ hoặc đánh dấu để loại bỏ hoàn toàn .

    2. hoặc Chọn bất kỳ gói nào và nhấn Ctrl+ Ađể chọn tất cả. Sau đó nhấp chuột phải vào ô vuông và chọn đánh dấu để loại bỏ hoặc đánh dấu để loại bỏ hoàn toàn.

Đó là nó. Nó sẽ loại bỏ mà không có bất kỳ vấn đề. Tôi cũng đã đính kèm hình ảnh để làm cho nó rõ ràng hơn. Hy vọng nó sẽ giúp. :)

hình ảnh


5

Để ít nhất tìm thấy chúng, hãy bắt đầu bằng cách vô hiệu hóa PPA và chạy apt-get update. Sau đó cài đặt apt-show-versions. Chạy apt-show-versions | grep 'No available'sau đó sẽ cung cấp cho bạn một danh sách tất cả các gói đã cài đặt không thể tìm thấy trong kho được cấu hình của bạn. Với một số phép thuật dòng lệnh, có lẽ bạn chỉ có thể loại bỏ tên gói và chuyển chúng tới apt-get remove:

 for i in `apt-show-versions | grep 'No available' | cut -d' ' -f 1` ; do  sudo apt-get remove -y $i ; done

Lưu ý rằng điều này sẽ đi qua danh sách được trả về apt-show-versionsvà loại bỏ từng cái một. Tùy thuộc vào những gì nó tìm thấy, điều này có thể gỡ cài đặt một cái gì đó ngoài ý muốn do phụ thuộc, vì vậy hãy kiểm tra nó trước.


Âm thanh tốt, tôi sẽ thử.
Lekensteyn

3
Bản thân quá trình nâng cấp cũng sẽ tự động hóa các PPA, mặc dù tôi khá chắc chắn rằng nó sẽ không đi và loại bỏ tất cả các gói còn lại.
Jorge Castro

@Jorge: Tôi thực sự nhận thấy rằng PPA bị vô hiệu hóa (đã nhận xét), nhưng nó không xóa các gói. Tôi nghĩ sẽ tốt hơn nếu xóa các gói trước khi một phiên bản mới từ kho Ubuntu ghi đè lên các tệp.
Lekensteyn

Tôi vừa thử nghiệm điều này và nó không tạo ra sự khác biệt giữa các gói từ repos chính và PPA. Trong trường hợp của tôi, đó là libvpx0gói từ PPA hàng ngày. Câu trả lời của @ enzotib đã cho thấy gói này.
Lekensteyn

Nếu bạn chạy apt-show-versionsdưới dạng không root, nó cần sudo apt-show-versions -icập nhật bộ đệm và xem các thay đổi từ kho / PPA mới bị xóa (nếu không, nó chỉ được cập nhật qua công việc
cron.d Daily

0

Tôi thấy việc sử dụng ppa-purge là khó khăn.

Mở Trình quản lý gói Synaptic trong Hệ thống, sau đó chọn Cài đặt, Kho lưu trữ.

Xóa những cái bạn không muốn.

Làm xong!


4
Điều này chỉ loại bỏ các nguồn gói, nó không loại bỏ các gói từ các nguồn đó.
Lekensteyn
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.