Я хочу установить один пакет (и его зависимости, но только в той степени, в которой они не могут быть реализованы в Wheezy) из Debian Jessie на мою систему Wheezy без обновления «все и кухонная раковина» до версий Jessie. В частности, я бы хотел установить kpcli , который доступен в Jessie, но не в Wheezy.
Все, что я обнаружил, указывает на то, что я должен добавить репозитории Jessie в свой список источников, установить пиннинг, чтобы все сохранялось в духе и взять только один пакет от jessie, и он в значительной степени просто встанет на свои места. Тем не менее, это не встает на свои места для меня. Если я создаю /etc/apt.d/sources.list.d/jessie.list со следующим содержанием:
deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main
а затем создайте /etc/apt/preferences.d/jessie с помощью:
Package: *
Pin: release a=wheezy
Pin-Priority: 1001
Package: kpcli
Pin: release a=jessie
Pin-Priority: 450
и запустить, apt-get -u update
а apt-get -u install kpcli/jessie
затем, затем я ожидаю, что apt-get извлечет kpcli и, возможно, небольшую кучку других пакетов от Джесси, и оставит оставшуюся часть моей установленной системы нетронутой. (В моей системе установлена новейшая версия Wheezy.) В противном случае, если я получу слишком низкий приоритет булавки, я буду ожидать, что он ничего не сделает. Скорее, в моей системе apt-get хочет обновить несколько сотен пакетов.
Что именно нужно для установки только этого единственного пакета версии Jessie, оставляя остальную часть моей системы Wheezy нетронутой?
Обратите внимание, что в данном конкретном случае программное обеспечение на самом деле написано на Perl, поэтому нет никакой компиляции в двоичный файл или что-либо подобное; тем не менее, существует несколько зависимостей модуля Perl. Следовательно, одной из возможных альтернатив будет установка .deb (загруженного вручную) с использованием чего-то, что только (1) позволяет указать один локальный архив .deb, который должен быть установлен, например dpkg -i
, и (2) интеллектуально обрабатывает зависимости , что равнина dpkg -i
не делает. Однако, несмотря на все поиски, которые я проводил несколько раз и не смог найти простое руководство, как это сделать, универсальное решение (которое работает и для двоичных, и для скомпилированных пакетов) было бы замечательно. ,
Ответы:
Для каждой записи (стабильная, тестируемая, нестабильная) у вас есть пин-приоритет 500. Вы не должны использовать пин> 1000. Я использую 1001 только тогда, когда я хочу понизить рейтинг. У меня есть тестирование + sid + экспериментальные записи, указанные в
/etc/apt/sources.list
следующем/etc/apt/preferences
файле:Значение 500 по умолчанию для нестабильного. Итак, давайте попробуем проверить iceweasel:
Итак, если бы я попытался установить iceweasel, он был бы загружен из ветви тестирования, потому что он имеет самый высокий приоритет.
Попробуйте изменить приоритеты на:
источник
sudo apt-get -u install kpcli/jessie
по-прежнему дает мне316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.
ваши предложенные приоритеты. Если я это сделаюapt-cache policy perl
(один из пакетов, которые он хочет обновить), он показывает 5.18.1-5 в качестве кандидата с приоритетом 500, и установил 5.14.2-21 + deb7u1 также с приоритетом 500. По какой-то причине это выглядит почти так: apt не выбирает приоритеты ...Package: kpcli*
(а неPackage: kpcli
), а затемPackage: *
Pin: release o=Debian
Pin-Priority: -10
в конце. Тогда, конечно, существуют жесткие зависимости, приводящие к версиям Perl, доступным только в Jessie, который, в свою очередь, нуждается в более новой libc6! Честно говоря, я не собираюсь идти по этому пути, но это, по крайней мере, принесло мне результат, которого я добился. Спасибо!На самом деле есть способ сделать это без использования закрепления / приоритетов вообще. Вместо этого вы можете указать, из какого выпуска по умолчанию будут устанавливаться пакеты, которые затем будут использоваться, если не указано иное с помощью параметра целевой версии. Это работает так же, если вы хотите установить только выбранные пакеты, например, из backports.
Я покажу это для установки пакетов из Stretch в Jessie, так как это текущие стабильные версии / тестирование, но он работает так же, как и для установки пакетов Jessie в Wheezy, как это было задано изначально.
Сначала добавьте растяжку в качестве хранилища, например, в
/etc/apt/sources.list.d/stretch.list
:Затем, чтобы установить выпуск по умолчанию, создайте файл,
/etc/apt/apt.conf.d/default-release
содержащий:(В Wheezy я думаю,
apt.conf.d
что не существует, и вам нужно вставить этот фрагмент/etc/apt/apt.conf
).Затем установка пакета из тестирования так же проста, что
aptitude -t stretch install kpcli
вам не нужно беспокоиться о назначении приоритетов.Примечание: @amc отметил в комментариях , что если вы используете
apt
вместоaptitude
, вы должны использовать в"stable"
качествеDefault-Release
вместо"jessie"
. Спасибо! (Конечно, вы также можете использоватьaptitude
эту настройку.)источник
The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Pin: release a=wheezy
должно бытьPin: release n=wheezy
, может быть.Со страницы руководства :
Так что это правильно!
источник