Как удалить все пакеты из определенного хранилища?

30

Для плавного обновления с 10.04 до 10.10 я хотел бы удалить все пакеты, которых нет в репозиториях по умолчанию (например, chromium PPA и сторонние репозитории). Какой самый простой способ (желательно CLI) найти и удалить эти пакеты?

Изменить: этот вопрос не ограничивается PPA, у меня также есть хранилище x2go, поэтому я ищу универсальную команду для удаления пакетов, принадлежащих определенному хранилищу. Для PPA, вопрос, как можно удалить PPA, имеет отличные ответы.

Lekensteyn
источник
Для тех, кто хочет удалить все внешние пакеты, отключите все 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 }
enzotib
источник
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, предположив, что два доступных пакета имеют разные строки версий.
энзотиб
действительно, это было возможно и возможно лучше.
Лекенштейн
Мне просто нужно было проверить, какие пакеты не установлены из репозиториев по умолчанию. Команда 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-purge .

Использование:

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

Hostserver по умолчанию ppa.launchpad.net.

Вот ссылка на справочную страницу для ppa-purgeкомандыЗначок Manpage для справки.

Вадим Рутковский
источник
Или вы можете использовать мою ветку ppa-purge, которая содержит множество исправлений и улучшений по сравнению с ppa-purge в репозитории юниверсов. Смотрите здесь для получения дополнительной информации.
Ярно
18

Преодоление aptitudeошибки Multiarch дляppa-purge

Обычно, как Вадим Рутковский и Takkat уже объяснили , работает ppa-purgeс синтаксисом по умолчанию является эффективным способом , чтобы удалить все пакеты , предоставляемые PPA, надлежащим образом понижая их версии , представленных в других сконфигурированных источниках программного обеспечения , когда это возможно.

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

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

Как это сделать

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

sudo ppa-purge -i ppa:ppaowner/ppaname

Как обычно (так же, как когда -iфлаг не используется):

  • ppaowner заменен владельцем PPA.
  • /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 on aptitude» немного загадочно. Глядя на соответствующую часть исходного кода ( ppa-purgeэто просто сценарий оболочки, в конце концов), мы можем видеть , что это означает , что поведение по умолчанию предпочитают , aptitudeчтобы apt-getи -iфлаг меняет это предпочтение.

Элия ​​Каган
источник
В последний раз, когда я пробовал ppa-purge, он не удалял пакеты, которые были удалены из PPA. Это все еще так?
Лекенштейн
@Lekensteyn Да, я полагаю, что это все еще тот случай, ppa-purgeкогда не удаляются и не понижаются пакеты, которые больше не предоставляются "очищаемой" системой PPA. Однако вы можете разместить отдельный вопрос по этому поводу, чтобы получить более авторитетный или хорошо документированный ответ.
Элия ​​Каган
Если репозиторий не является PPA-сервером, размещенным на Launchpad, а другим нестандартным репозиторием, сработает ли ppa-purge?
Анвар
1
@ Анвар Я не уверен, что это сработает, но вы должны попытаться, указав полный 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как пользователь без полномочий root, ему необходимо sudo apt-show-versions -iобновить свой кэш и увидеть изменения из недавно удаленных репозиториев / PPA (в противном случае он обновляется только с помощью задания cron.daily)
Xen2050
0

Я обнаружил, что использование ppa-purge затруднительно.

Откройте диспетчер пакетов Synaptic в разделе «Система», затем выберите «Настройки», «Хранилища».

Удалить те, которые вы не хотите.

Выполнено!

Джо
источник
4
Это удаляет только источники пакетов, но не удаляет пакет из этих источников.
Лекенштейн