Дебіан Джессі встановлює занадто багато спинок


9

У мене є Дебіан Джессі і додав репортери (відповідно до цих інструкцій ):

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.

Тож моє запитання:

  • Як спершу зупинити це, щоб більше не було встановлено спинок?
  • Як я можу видалити наявні спинки?

Примітка: тут отримується список встановлених пакетів, що надходять із зворотних списків (і у форматі, який можна передати 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

Це говорить про те, що 15 лютого о 11:06 ранку я оновив 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. Наприклад, якщо ви знаєте, що встановлені вами оновлення з підтримкою Джессі були виконані в певний день (наприклад, 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

Чи не повинен він закріплювати нові пакети ядра на backports @cas?
Rui F Ribeiro

Це не зашкодить, але це не потрібно, а закріплення є дещо складнішим і складніше отримати правильне, ніж просто встановити Apt :: Default-Release. apt-getне знизить версію вже встановленого пакету, якщо ви прямо не скажете це. І @richard сказав, що хоче встановити jessieпакунки за замовчуванням, якщо він прямо не вказав jessie-backports- я припускаю, що бажання стосується і пакетів ядра.
cas

він сказав, що він включає в себе backports, щоб мати нове ядро, напевно, як я, щоб мати ядро ​​4 в jessie.
Rui F Ribeiro

1
Я здогадуюсь, що людей, які використовують stable+, stable-backportsпевно, цікавить набагато більше, ніж я, і доклали зусиль, щоб дізнатися більше про це. Я схильний запускати unstableі тримати, що мої системи синхронізуються останнім сайтом досить регулярно (з випадковими додатками experimental), тому малу потребу в фіксації. Єдиний раз, коли я його активно використовував, було років тому під час переходу до gnome3, коли я не хотів, щоб мій пакет gnome2 замінювався - я пам’ятаю, що підтримка списку пакунків, що постійно змінювались, була ПДТА. З тих пір я перейшов на xfce і очистив гнома.
cas

1

Це здається, що ви неправильно налаштувались /etc/apt/preferences. Нижче перешкоджає встановленню чого-небудь із резервів jessie, які очікують його встановлення (наприклад, підтримуваного ядра). У вас все ще будуть проблеми, якщо зазначені пакети вимагають інших пакетів із спинок, які не перераховані.

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 / preferences та /etc/apt/preferences.d/

Можливо, ви, можливо, додали власну конфігурацію закріплення та забули про неї? Це єдиний спосіб, який я можу придумати, що зробив би вподобаним віддавати перевагу задньому плані, як здається, це робить з тобою. В іншому випадку це просто витягування залежностей - яких необхідних вам пакетів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.