Debian Jessie устанавливает слишком много бэкпортов


9

У меня есть Debian Jessie и я добавил backports (согласно этим инструкциям ):

echo "deb http://http.debian.net/debian jessie-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list

(Я сделал это, чтобы получить более новое ядро, как мне было нужно, для некоторого оборудования в моем ноутбуке.)

В инструкциях говорится, что ничего не должно произойти, если я не прошу явно портировать пакет. например apt-get -t jessie-backports install "package".

Однако теперь у меня, похоже, полная загрузка моей системы из бэкпортов, и один пакет деинсталлирован, потому что это зависит от точной версии чего-то, что было обновлено до бэк-портов.

Итак, мой вопрос:

  • Как мне сначала это остановить, чтобы больше не устанавливалось бэкпортов?
  • Как мне удалить существующие бэкпорты?

Примечание: это получает список установленных пакетов из бэкпортов (и в формате, который может быть передан apt-get install, по какой-то причине вставка sudo apt-get installвместо эха в конце конвейера не работает):

cat /var/log/dpkg.log.1 |grep -v linux | grep -v xserver | grep -v firmware | grep "status installed" | grep bpo | cut -d" " -f 5 | cut -d: -f 1 | xargs -i{} -n1 bash -c "dpkg-query -s {} >/dev/null && echo {}" | sed -r -e "s~.*~\0/jessie~" | xargs echo

Внимание:

Некоторые из пакетов устанавливаются автоматически, поэтому, если вы переустановите их все, эти автоматически установленные пакеты будут помечены как установленные вручную. Таким образом, не удаляется, когда не нужно.

У кого-нибудь есть идеи, как это решить?

Ответы:


10
  1. Попробуйте добавить следующее либо /etc/apt/apt.confв файл, либо в /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Чтобы удалить существующие бэкпорты, вам нужно получить список, какие из них были установлены, и какую версию они заменили. К счастью, эту информацию можно легко извлечь из/var/log/dpkg.log

Например grep ' upgrade ' /var/log/dpkg.log, даст вам много строк, таких как следующие:

2016-02-15 11:06:32 upgrade python-numpy:amd64 1:1.11.0~b2-1 1:1.11.0~b3-1

Это говорит о том, что в 11:06 15 февраля я обновил python-numpy с версии 1: 1.11.0 ~ b2-1 до версии 1: 1.11.0 ~ b3-1

Если бы я хотел перейти на предыдущую версию, я бы запустил:

apt-get install python-numpy=1:1.11.0~b2-1

ПРИМЕЧАНИЕ: в данном конкретном случае это, вероятно, не будет работать, потому что я запускаю debian sidaka, unstableпоэтому старая версия, вероятно, больше не доступна в репозитории deb. Если вы работаете jessieи переустанавливаете версию пакета jessie в качестве перехода на версию jessie-backports, она будет работать как положено.

Точно так же, если пакет был удален, вы можете найти его и его точную версию, указав removeв /var/log/dpkg.log.


Массовое понижение версии многих пакетов можно в значительной степени автоматизировать с помощью стандартных инструментов, таких как awkи grep. Например, если вы знаете, что все установленные вами обновления jessie-backports были выполнены в определенный день (например, 2016-02-15), вы можете перейти к предыдущим версиям с помощью чего-то вроде:

 apt-get -d -u install $(awk '/2016-02-15 ..:..:.. upgrade / {print $4 "=" $5}'
    /var/log/dpkg.log)

(перевод строки и отступ добавлены, чтобы избежать горизонтальной полосы прокрутки)

Обратите внимание на использование опции -d( --download-only). Повторите команду и удалите эту опцию после того, как вы убедились, что она apt-get installбудет делать то, что вы хотите, и ТОЛЬКО то, что вы хотите.

Я также рекомендовал бы awkсначала запускать только часть этой команды, чтобы вы могли видеть список, какие именно пакеты и версии будут переустановлены.


1
Под «в значительной степени автоматизированным» я подразумеваю, что, хотя он будет работать в основном без проблем, он не всегда работает / не всегда работает идеально (в зависимости от конкретных пакетов и их строк зависимости / рекомендует / конфликтов / и т.д.). Там может быть один или два пакета, которые вы должны вручную установить или удалить с помощью apt-getили dpkg. Пока вы не паникуете, вам не о чем беспокоиться. Большинство проблем с упаковочными системами вызвано тем, что люди паникуют и реагируют, не задумываясь ... принимайте это медленно и подумайте, прежде чем действовать.
Cas

Не должен ли он прикрепить новые пакеты ядра к бэкпортам @cas?
Руи Ф. Рибейро,

Это не повредит, но в этом нет необходимости, и закрепление является немного более сложным и трудным для понимания, чем просто установка Apt :: Default-Release. apt-getне будет понижать версию уже установленного пакета, если вы явно не укажете его. И @richard сказал, что он хотел бы установить jessieпакеты по умолчанию, если он явно не указал jessie-backports- я предполагаю, что желание относится и к пакетам ядра.
Cas

он сказал, что включил backports, чтобы иметь новое ядро, вероятно, как у меня, чтобы иметь ядро ​​4 в jessie.
Руи Ф. Рибейро,

1
Я думаю, что люди, которые используют stable+, stable-backportsвероятно, больше заботятся о пиннинге, чем я, и приложили усилия, чтобы узнать больше об этом. Я имею тенденцию запускать unstableи регулярно синхронизировать мои системы с последним sid (со случайными дополнениями из experimental), поэтому мне не нужно прикалывать. Единственный раз, когда я интенсивно использовал его, были годы назад во время перехода на gnome3, когда я не хотел заменять свои пакеты gnome2 - я помню, что поддержание постоянно меняющегося списка пакетов для закрепления было PITA. С тех пор я переключился на xfce и очистил гнома.
Cas

1

Похоже, вы не правильно настроили /etc/apt/preferences. Следующее будет препятствовать тому, чтобы что-либо устанавливалось из jessie-backports, ожидайте того, что говорят ему установить (например, ядро ​​с портированием) У вас по-прежнему будут проблемы, если для указанных пакетов требуются другие пакеты из бэкпортов, которых нет в списке.

Package: *
Pin: release n=jessie-backports
Pin-Priority: -1

Package: *
Pin: release n=jessie
Pin-Priority: 1000

# this will allow you to not have to use '-t jessie-backports install'
Package: linux-doc linux-headers-amd64 linux-image-amd64 linux-source
Pin: release n=jessie-backports
Pin-Priority: 1000

Если вы хотите получить список установленных пакетов с обратным портированием, вы можете использовать следующий скрипт (или его части):

chmod a+x name_of_script ./name_of_script > name_of_output_file

#!/bin/bash
RELEASES="jessie-backports"

echo  "Searching for installed packages from" >&2
echo $RELEASES | sed s/^/" * "/ | sed s/\|/"\n * "/g >&2

for package in $(dpkg -l | grep -i ^ii | awk '{print $2}')
do
check=$( apt-cache policy $package 2>&1 | grep -i -A 1 "[*]" | egrep $RELEASES )
if [ "$check" == "" ] ; then
 echo -ne "." >&2
else
 echo -ne "#" >&2
 echo
 apt-cache policy $package
fi
done
echo >&2
echo

Если вы хотите понизить версию любого пакета, перечисленного вышеупомянутым сценарием, добавьте следующее к /etc/apt/preferences:

Package: package1 package2 package3
Pin: release n=jessie
Pin-Priority: 1000

Затем запустите:

sudo apt-get upgrade

1

Проверьте свою конфигурацию закрепления для apt в / etc / apt / Предпочтения и /etc/apt/preferences.d/

Возможно ли, что вы добавили пользовательскую конфигурацию закрепления и забыли об этом? Это единственный способ, который я могу придумать, - это сделать предпочтение бэкпортам, как это кажется вам. В противном случае, это просто получение зависимостей - которые требуют указанные вами пакеты.

Официальные бэкпорты уже закреплены ниже (100), чем у Джесси в бэкпортированных пакетах. Файл релиза в репо бэкпортов. Вам не нужно делать какие-либо подходящие настройки, чтобы apt предпочел jessie, а не jessie-backports.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.