LINUX.ORG.RU

Вопрос по выставление приоритетов в APT (pinning)

 ,


1

1

Такая вот история: вздумал я обновить Оперу (которая браузер) на jessie. Ан нет: пакет libdbus-1-3 ей уже стар. Подходящих сторонних реп не сыскал, решил подключить репы от stretch для аккуратного выборочного использования. Что такое pinning - в курсе.

Естественно, прописал соответствующий файл в /etc/apt/sources.list.d.

А потом сделал файлик в /etc/apt/preferences.d и начал его заполнять.
Сначала написал в нем вот такую штуку:

Package: *
Pin: release a=stretch
Pin-Priority: -10

Package: dbus
Pin: release a=stretch
Pin-Priority: 1010

Package: libdbus-1-3
Pin: release a=stretch
Pin-Priority: 1010


И никакого толку: по команде apt-get dist-upgrade пара-другая совершенно «левых» пакетов попыталась обновиться из stretch - естественно (а может, и по счастью), с сообщениями о конфликтах зависимостей.

В итоге придумал обходной маневр: задействовал для реп stretch другое зеркало, нежели для jessie (взял норвежское, в отличие от российского для jessie) и написал такое:

Package: *
Pin: origin ftp.no.debian.org
Pin-Priority: -10

Package: dbus
Pin: origin ftp.no.debian.org
Pin-Priority: 1010

Package: libdbus-1-3
Pin: origin ftp.no.debian.org
Pin-Priority: 1010


Стало работать как надо. Вопрос: почему так, с костылем, работает, вроде бы правильный 1-й вариант - нет?

Ответ на: комментарий от das_tier

А... Тогда понял. Но вообще-то проблема-то всплыла явно не опера-специфичная. Как бы, проблемные пакеты-то куда более универсальные, а сам APT - тем более.

PVOzerski ★★★
() автор топика
Ответ на: комментарий от das_tier

Был бы признателен за более тоное указание места, откуда читать. Нет, поштудировать целую главу с комментариями по теории настройки APT - оно, конечно, поучительно и полезно (опять же, и с точки зрения повторения английского) - но вот времени жалко :(

PVOzerski ★★★
() автор топика
Ответ на: комментарий от PVOzerski

статья на 2 минуты чтения. Вот отсюда начинай:

Installing from unstable Let's assume that we're running testing and we want to try enlightenment from unstable. There are basically two methods for installing:

# apt-get install enlightenment/unstable
# apt-get -t unstable install enlightenment

The first will not attempt to upgrade any packages on your system, so if specific dependencies are not met, the install will fail. The second method will attempt to install/upgrade any dependencies. Of course, given the above example, 'apt-get' will ask you before proceeding.

А вообще оно того не стоит, я б забил.

das_tier ★★★★★
()
Ответ на: комментарий от das_tier

Хорошо, но что, собственно говоря, у меня было не так сделано?

Package: *
Pin: release a=stretch
Pin-Priority: -10

По умолчанию я запретил установку пакетов из stretch на свою jessie. Смотрим дальше:

Package: dbus
Pin: release a=stretch
Pin-Priority: 1010

Package: libdbus-1-3
Pin: release a=stretch
Pin-Priority: 1010


Для двух пакетов из stretch я прописал исключение, сделал их приоритетными.
Что вышло на практике: три каких-то «левых» пакета из stretch, вроде бы никак не связанных с этими двумя исключениями по зависимостям (а иначе бы у меня потом не прокатил трюк с разными зеркалами Debian) воспринимаются системой как подлежащие установке взамен нативных (т.е. как будто бы я им принудительно тоже прописал особый приоритет - а этого ведь не было!).

Ну интересно же понять-то, в чем тут дело :). Кстати, откуда APT узнает, из какой ветки пакет - только по путям в репозитории или что-то читает из каких-то файлов? А то вдруг он почему-то не может получить информацию о том, что эти три загадочных пакета принадлежат stretch?

PVOzerski ★★★
() автор топика
Ответ на: комментарий от PVOzerski

По умолчанию я запретил установку пакетов из stretch на свою jessie.

это ненужно

Pin-Priority: 1010

не надо ставить приоритеты больше 1000. 500 по умолчанию, выставляй 600 например

apt-get dist-upgrade … три каких-то «левых» пакета из stretch

dist-upgrade ненужно тут использовать
apt-cache policy пакет

Package: dbus libdbus-1-3
Pin: release a=stretch
Pin-Priority: 600

apt-get upgrade
bass ★★★★★
()
Последнее исправление: bass (всего исправлений: 2)

В APT < 1.1 pinning работал не вполне так, как описано в документации. В jessie как раз такая версия, отсюда и ваши проблемы. См. https://debconf16.debconf.org/talks/6/ (начиная с 16:45).

Но вообще говоря, то, что вы хотите сделать, обычно делают иначе:

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

Package: *
Pin: release n=jessie-updates
Pin-Priority: 990

Т.е. повышают приоритет основного дистрибутива, а у остальных оставляют по умолчанию - 500. В результате apt install foo будет устанавливать из jessie, apt install foo/stretch - из stretch.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.