Как установить один пакет из тестирования Debian или нестабильно в стабильный?

41

Я хочу установить один пакет (и его зависимости, но только в той степени, в которой они не могут быть реализованы в 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не делает. Однако, несмотря на все поиски, которые я проводил несколько раз и не смог найти простое руководство, как это сделать, универсальное решение (которое работает и для двоичных, и для скомпилированных пакетов) было бы замечательно. ,

CVn
источник
4
Обычный способ справиться с этим - сделать бэкпорт - перекомпилировать пакет из исходников Debian на Wheezy. Пакет, который вы используете, выглядит как perl (или, по крайней мере, зависит от него), поэтому, вероятно, нетрудно создать бэкпорт. Если вы хотите больше подробностей, пожалуйста, так и скажите. Я мог бы предоставить пошаговое руководство, если вам это действительно нужно.
Фахим Митха

Ответы:

15

Для каждой записи (стабильная, тестируемая, нестабильная) у вас есть пин-приоритет 500. Вы не должны использовать пин> 1000. Я использую 1001 только тогда, когда я хочу понизить рейтинг. У меня есть тестирование + sid + экспериментальные записи, указанные в /etc/apt/sources.listследующем /etc/apt/preferencesфайле:

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

Значение 500 по умолчанию для нестабильного. Итак, давайте попробуем проверить iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

Итак, если бы я попытался установить iceweasel, он был бы загружен из ветви тестирования, потому что он имеет самый высокий приоритет.

Попробуйте изменить приоритеты на:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Михаил Морфиков
источник
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 не выбирает приоритеты ...
CVN
ОК, я кое-что получил Похоже, хитрость заключалась в том, чтобы использовать Package: kpcli*(а не Package: kpcli), а затем Package: * Pin: release o=Debian Pin-Priority: -10в конце. Тогда, конечно, существуют жесткие зависимости, приводящие к версиям Perl, доступным только в Jessie, который, в свою очередь, нуждается в более новой libc6! Честно говоря, я не собираюсь идти по этому пути, но это, по крайней мере, принесло мне результат, которого я добился. Спасибо!
CVn
25

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

Я покажу это для установки пакетов из Stretch в Jessie, так как это текущие стабильные версии / тестирование, но он работает так же, как и для установки пакетов Jessie в Wheezy, как это было задано изначально.

Сначала добавьте растяжку в качестве хранилища, например, в /etc/apt/sources.list.d/stretch.list:

deb http://ftp.debian.org/debian stretch main

Затем, чтобы установить выпуск по умолчанию, создайте файл, /etc/apt/apt.conf.d/default-releaseсодержащий:

APT::Default-Release "jessie";

(В Wheezy я думаю, apt.conf.dчто не существует, и вам нужно вставить этот фрагмент /etc/apt/apt.conf).

Затем установка пакета из тестирования так же проста, что aptitude -t stretch install kpcliвам не нужно беспокоиться о назначении приоритетов.

Примечание: @amc отметил в комментариях , что если вы используете aptвместо aptitude, вы должны использовать в "stable"качестве Default-Releaseвместо "jessie". Спасибо! (Конечно, вы также можете использовать aptitudeэту настройку.)

Флориан Джейкоб
источник
... это выглядит как очень приятный способ сделать это. Почему это официально не принято?
JamesTheAwesomeDude
1
Я получаюThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Стивен Пенни
1
вам нужно использовать "stable" / "testing" / etc вместо "jessie" / "stretch" для выпуска по умолчанию и при использовании apt
amc
6

Pin: release a=wheezyдолжно быть Pin: release n=wheezy, может быть.

Со страницы руководства :

Следующая запись присваивает высокий приоритет всем версиям пакета, принадлежащим любому дистрибутиву, кодовое имя которого - «jessie».

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

Так что это правильно!

user65646
источник
3
Разве это не установит ВСЕ пакеты от jessy?
rubo77