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

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

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

6 ответов

Решение

Этот скрипт может перечислить все пакеты с определенного сервера / ветви (изменяя две объявленные переменные):

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

Проверьте ppa-продувку Установите ppa-purge,

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

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

По умолчанию хост-сервер ppa.launchpad.net,

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

Преодоление aptitudeMultiarch Bug для ppa-purge

Обычно, как объяснили Vadim Rutkovsky и 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 флаг отменяет это предпочтение.

Вот GUI способы сделать это. Надеюсь, это поможет тем, кто не предпочитает CLI. Шаги просты и легко следовать.

  1. Откройте менеджер синаптических пакетов. Если он не установлен, установите его:

    sudo apt-get install synaptic
    
  2. При открытии нажмите на кнопку происхождения внизу слева. В нем будут перечислены все хранилища в верхней левой части. Выберите конкретный репозиторий, для которого нужно удалить пакеты. В нем будут перечислены все пакеты в этом хранилище. Щелкните первое поле i, e S или поле " Установленная версия", чтобы сначала показать установленные пакеты.

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

    Советы, чтобы отметить для удаления:

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

    2. или выберите любые пакеты и нажмите Ctrl+A, чтобы выбрать все. Затем щелкните правой кнопкой мыши на квадратной рамке и выберите метку для удаления или метку для полного удаления.

Вот и все. Удалит без проблем. Я также приложил изображение, чтобы сделать его более четким. Надеюсь, это поможет.:)

образ

Чтобы хотя бы найти их, начните с отключения 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 и удалите их один за другим. В зависимости от того, что он находит, это может привести к удалению чего-то непреднамеренного из-за зависимостей, поэтому сначала проверьте это.

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

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

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

Готово!

Другие вопросы по тегам