Як видалити всі пакунки з певного сховища?


30

Для плавного оновлення з 10.04 до 10.10 я хотів би видалити всі пакунки, які не знаходяться у сховищах за замовчуванням (наприклад, хром PPA та сторонні сховища). Який найпростіший спосіб (бажано CLI) знайти та видалити ці пакунки?

Редагувати: це питання не обмежується умовами PPA, у мене також є сховище x2go, тому я шукаю загальну команду для видалення пакетів, що належать до певного сховища. Для учасників УПА чудово відповіді на питання, як можна видалити PPA .


Для тих, хто хоче видалити всі зовнішні пакети, вимкніть усі PPA та використовуйте code.google.com/p/apt-downgrade
Lekensteyn

Відповіді:


12

Цей скрипт може перелічити всі пакети з певного сервера / гілки (модифікуючи дві оголошені змінні):

#!/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 }'

якщо вам потрібно перелічити всі пакунки, що не надходять з певного сервера, незалежно від гілки, замініть наступний рядок на:

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

1
Не те, що я саме шукаю, цей скрипт просто відображає всі пакети з конкретної записи сховища. Замінивши $2 == server && $3 == branchна $2 != serverмоє запитання, я відповів. Будь ласка, поставте це у своїй відповіді :) ( branch=рядок можна видалити) Примітка: передбачається, що всі пакунки надходять з одного сервера репозиторію.
Лекенштейн

1
Цей сценарій (трохи змінений за моїм останнім коментарем) працює як очікувалося. libvpx0Пакет існує і в основному репозиторії , як і в хромом щодня PPA. Після видалення репозиторіїв з /etc/apt/sources.list.d, у мене був ще пакет лівого над: libvpx0. Я «відремонтували» це наступним чином : видалити бібліотеку з DPKG, ігноруючи залежності: sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. Потім встановіть його знову з основного сховища: sudo apt-get install libvpx0.
Лекенштейн

1
@Lekensteyn: напевно, ви могли б скоротити свою роботу sudo apt-get install libvpx0=$version_string, припустивши, що два доступні пакети мають різні рядки версії.
enzotib

Дійсно, це теж було можливо, а може бути і краще.
Лекенштейн

Мені просто потрібно було перевірити, які пакунки не встановлені з репост за замовчуванням. Команда 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.ubuntuє гарним початком (додайте більше, grep -vщоб виключити певні PPA). Версії пакета, які не відомі в жодному репо, відображаються як /var/lib/dpkg/status.
Лекенштейн

22

Перевірте ppa-чисткуВстановіть ppa-очищення .

Використання:

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

Хостсервер за замовчуванням до ppa.launchpad.net.

Ось посилання на manpage для ppa-purgeкомандиПіктограма manpage для довідок.


Або ви можете використовувати мою гілку ppa-purge, яка має багато виправлень помилок та покращень щодо ppa-purge у світовому сховищі. Дивіться тут для отримання додаткової інформації.
jarno

18

Подолання aptitudeбагатоцілої помилки для Windowsppa-purge

Зазвичай, як Вадим Рутковський і Takkat вже пояснив , працює ppa-purgeз синтаксисом по замовчуванням є ефективним способом , щоб видалити всі пакети , що надаються PPA, належним чином знижуючи їх версій , представлених в інших сконфигурированних джерел програмного забезпечення , коли це можливо.

Однак, як зазначав Таккат, помилка 831768 заважає ppa-purgeпрацювати належним чином для видалення багатошарових пакетів (як 32-бітні пакети, встановлені в 64-бітних системах). Це пояснюється тим, що aptitudeне можна впоратись із конфліктуючими залежностями в мультиархових пакетах (саме в цьому і полягає помилка), а поведінка за замовчуванням ppa-purge- використовувати aptitudeдля зменшення кількості пакетів.

На щастя, він ppa-purgeприймає -iпрапор, завдяки якому він вважає apt-getза краще aptitudeвважати його резервним. Як зафіксовано у звіті про помилку, використання apt-getє ефективною альтернативою для виклику вручну aptitude, тому біг ppa-purgeіз -iпрапором повинен бути ефективним рішенням для видалення / зменшення рівня зменшення всіх пакетів, що надаються PPA, включаючи мультиархівні пакети .

Як це зробити

Ось синтаксис:

sudo ppa-purge -i ppa:ppaowner/ppaname

Як завжди (те саме, коли -iпрапор не використовується):

  • ppaowner замінюється власником АПП.
  • /ppanameнеобов’язково. Якщо він присутній, ppanameзамінюється назвою PPA. Якщо ні, то він за замовчуванням ppa.

Наприклад , припустимо, у мене був встановлений PPA для нестабільних збірок qBittorrent , і я хотів його повністю видалити, автоматично знижуючи qBittorrent до будь-якої версії, доступної через інші мої джерела програмного забезпечення, використовуючи apt-getза кадром замістьaptitude . Тоді я бігав би:

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

Де це документально

Чомусь кілька корисних варіантів ppa-purgeне задокументовані на його сторінці керівництва , в тому числі -i. Але ви можете отримати інформацію про них, запустивши ppa-purge -h(або просто ppa-purgeбез аргументів):

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.

"Зворотна перевага apt-get at здатності" є дещо виразною. Дивлячись на відповідну частину вихідного коду ( ppa-purgeце просто сценарій оболонки, в кінці кінців), ми можемо бачити , що це означає , що поведінка за умовчанням воліють , aptitudeщоб apt-getі -iпрапор змінює це перевагу.


Востаннє, коли я спробував ppa-purge, він не видаляв пакунки, які були видалені з PPA. Це все-таки так?
Лекенштейн

@Lekensteyn Так, я вважаю, що все-таки справа неppa-purge буде видаляти або зменшувати пакети, які вже не надаються через «PPA». Однак ви можете поставити окреме запитання з цього приводу, щоб отримати більш авторитетну або добре задокументовану відповідь.
Елія Каган

Якщо сховище буде не PPA, розміщеним у Launchpad, а іншим нестандартним сховищем, чи буде ppa-очищення працювати?
Anwar

1
@Anwar Я не впевнений, що це спрацює, але вам варто спробувати вказати повну URL-адресу сховища замість ppa:username/path. Також PPA повинен бути Включений перед спробою його очищення, хоча сценарій негайно вимикається після оновлення списку пакетів для видалення, він не "знайде" вже відключені PPA.
dragon788

1
@Lekensteyn ви можете спробувати aptitude search ~oзнайти осиротілі пакунки без джерела встановлення, якщо вам потрібно очистити щось, що було видалено з PPA (або було встановлено як одноразове використання dpkg -i).
dragon788

6

Ось GUI способи зробити це. Сподіваюсь, це допоможе тим, хто не віддає перевагу CLI. Етапи прості та прості у виконанні.

  1. Відкрити менеджер синаптичних пакетів . Якщо не встановлено, встановіть його:

    sudo apt-get install synaptic
    
  2. Після відкриття натисніть на кнопку Походження вліво зліва. Він перелічить усі сховища в лівій верхній частині. Виберіть конкретне сховище, з якого потрібно видалити пакунки. Він перелічить усі пакети в цьому сховищі. Клацніть перше поле i, e S або поле Встановлена ​​версія, щоб спочатку показати встановлені пакети.

  3. Тепер виберіть усі пакунки, які потрібно видалити.

    Поради щодо відмітки для видалення:

    1. Виберіть перший пакет, потім утримуйте Shiftклавішу і знову виберіть останній пакет, щоб вибрати всі. Потім клацніть правою кнопкою миші на квадратному полі і виберіть позначку для видалення або позначку для повного видалення .

    2. або Виберіть будь-які пакети та натисніть Ctrl+, Aщоб вибрати всі. Потім клацніть правою кнопкою миші на квадратному полі і виберіть позначку для видалення або позначку для повного видалення.

Це воно. Його видалять без проблем. Я також додав зображення, щоб зробити його більш чітким. Сподіваюся, це допоможе. :)

зображення


5

Щоб принаймні знайти їх, почніть з відключення PPA та запустіть apt-get update. Потім встановіть apt-show-versions. Після цього запуск apt-show-versions | grep 'No available'надасть вам список усіх встановлених пакунків, які не можна знайти у налаштованих сховищах. За допомогою магії командного рядка ви, ймовірно, можете лише викреслити імена пакунків та передати їх apt-get remove:

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

Зауважте, що це буде проходити через список, повернутий з нього, apt-show-versionsі видаляти їх по одному. Залежно від того, що він знаходить, це може видалити щось ненавмисне через залежності, тому спочатку перевірте це.


Звучить добре, я спробую.
Лекенштейн

3
Сам процес оновлення також автоматично відключає PPA, хоча я впевнений, що він не піде та видалить усі залишки пакетів.
Хорхе Кастро

@Jorge: Я дійсно помітив, що PPA відключені (прокоментували), але вони не видаляють пакунки. Я думаю, що краще видалити пакунки, перш ніж нова версія із сховищ Ubuntu перезапише файли.
Лекенштейн

Я щойно перевірив це, і це не робить різниці між пакетами від основних репостів та PPA. У моєму випадку це був libvpx0пакет із щоденного хрому PPA. @ enzotib відповідь показала цей пакет.
Лекенштейн

Якщо ви працюєте apt-show-versionsяк некоріозний, йому потрібно sudo apt-show-versions -iоновити кеш-пам'ять і побачити зміни з нещодавно видалених сховищ / PPA (інакше оновляється лише через роботу cron.daily)
Xen2050,

0

Я вважав, що використання ppa-очищення складно.

Відкрийте Synaptic Package Manager у розділі Система, а потім виберіть Налаштування, Репозиторії.

Видаліть ті, які вам не потрібні.

Готово!


4
При цьому видаляються лише джерела пакета, він не видаляє пакет із цих джерел.
Лекенштейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.