Intereting Posts
Я хочу создать задание cron, которое запускает команду в удаленном поле Linux, используя ssh, но я хочу, чтобы ssh отвечал на пароль Почему scp настолько медленный и как сделать это быстрее? Подсчитать количество вхождений строк Поиск на основе абзаца с использованием до и после условий UNIX KSH Как порядок, в котором ключи хранятся и повторно определены в awk? Получить номер строки в сценарии оболочки Bourne Почему локальная fn = $ (…) маскирует $? код состояния Как просмотреть журнал stderr только с помощью журналаctl? Файлы с подключенным файлом Systemd на подключенном диске не загружаются Устранение неполадок с высоким временем ядра (высокое сетевое использование, высокие прерывания) sysv и неизвестную таблицу разделов? Нужна помощь в выборе сетевой опции на рабочей станции VMware странное поведение команды строк Ubuntu 18.04 в Virtualbox 5.2.12 не загружается Не удается запустить приложения без подключения к Интернету – PlayOnLinux

Debian Jessie устанавливает слишком много backports

У меня есть 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" .

Однако теперь у меня теперь есть целая загрузка моей системы из backports, и один пакет не установлен, потому что он зависит от точной версии, от того, что было обновлено до back-ports.

Поэтому мой вопрос:

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

Примечание. Это получает список установленных пакетов из backports (и в формате, который может быть передан в 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 

Внимание:

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

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

    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 sid aka unstable поэтому старая версия, вероятно, больше не доступна в репозитории deb. Если вы запускаете jessie и переустанавливаете jessie-версию пакета как понижение до версии jessie-backports, она будет работать, как ожидалось.

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

    Похоже, что вы неправильно настроили /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 

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

     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 

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

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

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