Как удалить все пакеты из определенного хранилища?
Для плавного обновления с 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 -purge <nameofppa> [-s hostserver]
По умолчанию хост-сервер ppa.launchpad.net
,
Вот ссылка на справочную страницу для ppa-purge
команда для справки.
Преодоление aptitude
Multiarch 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. Шаги просты и легко следовать.
Откройте менеджер синаптических пакетов. Если он не установлен, установите его:
sudo apt-get install synaptic
При открытии нажмите на кнопку происхождения внизу слева. В нем будут перечислены все хранилища в верхней левой части. Выберите конкретный репозиторий, для которого нужно удалить пакеты. В нем будут перечислены все пакеты в этом хранилище. Щелкните первое поле i, e S или поле " Установленная версия", чтобы сначала показать установленные пакеты.
Теперь выберите все пакеты для удаления.
Советы, чтобы отметить для удаления:
Выберите первый пакет, затем удерживайте клавишу Shift и снова выберите последний пакет, чтобы выбрать все. Затем щелкните правой кнопкой мыши на квадратной рамке и выберите метку для удаления или метку для полного удаления.
или выберите любые пакеты и нажмите 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 в разделе "Система", затем выберите "Настройки", "Хранилища".
Удалить те, которые вы не хотите.
Готово!