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


30

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

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

действительно, это было возможно и возможно лучше.
Лекенштейн

Мне просто нужно было проверить, какие пакеты не установлены из репозиториев по умолчанию. Команда 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
Это удаляет только источники пакетов, но не удаляет пакет из этих источников.
Лекенштейн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.