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

206

Допустим, у вас запущен сервер, и вы не хотите переходить на Testing (Squeeze) из Stable (Lenny), чтобы просто установить необходимый пакет или два.

Каков наилучший способ установки только определенных пакетов из Testing?

Gareth
источник
2
Вот что говорит последняя официальная документация: пакеты из смешанного источника архивов .
Алексей

Ответы:

183

Многие люди, похоже, боятся смешивать стабильное с тестированием, но, честно говоря, тестирование само по себе довольно стабильно, и с правильными настройками и проверкой решений вы можете избежать «дрейфа стабильности», который ставит ваши основные пакеты на нестабильный путь.

"Тестирование довольно стабильно ??" , ты спрашиваешь. Да. Для того чтобы пакет мог перейти от нестабильного к тестируемому, он должен иметь ноль открытых ошибок в течение 10 дней подряд. Скорее всего, что, особенно для более популярных пакетов, кто-то собирается представить отчет об ошибке для нестабильной версии, если что-то не так.

Даже если вы не хотите смешивать окружения, все равно хорошо иметь такую ​​возможность на случай, если вы столкнетесь с чем-то, что требует более новой версии, чем в стабильной.

Вот что я рекомендую для настройки:

Сначала создайте следующие файлы в /etc/apt/preferences.d:

stable.pref:

# 500 <= P < 990: causes a version to be installed unless there is a
# version available belonging to the target release or the installed
# version is more recent

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

testing.pref:

# 100 <= P < 500: causes a version to be installed unless there is a
# version available belonging to some other distribution or the installed
# version is more recent

Package: *
Pin: release a=testing
Pin-Priority: 400

unstable.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=unstable
Pin-Priority: 50

experimental.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=experimental
Pin-Priority: 1

(Не бойтесь нестабильных / экспериментальных вещей здесь. Приоритеты достаточно низкие, чтобы никогда не устанавливать автоматические компоненты. Даже ветвь тестирования будет вести себя так, как она будет устанавливать только те пакеты, которыми вы хотите быть. в тестировании.)

Теперь создаем соответствующий набор для /etc/apt/sources.list.d:

stable.listКопирование из оригинала /etc/apt/sources.list. Переименуйте старый файл в нечто подобное sources.list.orig.

testing.listТо же, что stable.listи с testing.

unstable.list: То же, что stable.list, кроме как unstable, и удалить списки безопасности.

experimental.listТо же, что unstable.listи с experimental.

Вы также можете добавить oldstablein sources.lists.dи preferences.d(используйте приоритет 1), хотя этот моникер будет иметь тенденцию истекать и исчезать до следующего стабильного цикла. В таких случаях вы можете использовать http://archive.debian.org/debian/и «жестко закодировать» версию Debian (etch, lenny и т. Д.).

Чтобы установить тестовую версию пакета, просто используйте aptitude install lib-foobar-package/testingили просто перейдите в графический интерфейс aptitude и выберите версию в деталях пакета (нажмите enter в пакете, который вы просматриваете).

Если вы получаете жалобы на конфликты пакетов, сначала посмотрите на решения. В большинстве случаев первым будет «не устанавливать эту версию». Научитесь использовать варианты разрешения и разрешения для каждого пакета. Например, если вы устанавливаете foobar-package / testing, а первое решение - «не устанавливать foobar-package / testing», то пометьте этот выбор как отклоненный, и другие решения больше никогда не повернут по этому пути. В таких случаях вам, вероятно, придется установить несколько других пакетов тестирования.

Если он становится слишком проблематичным (например, пытается обновить libc или ядро ​​или какую-то другую огромную базовую систему), то вы можете либо отклонить эти пути обновления, либо просто полностью отказаться от первоначального обновления. Помните, что обновление будет происходить только до тестирования / нестабильности, если вы разрешите это.

РЕДАКТИРОВАТЬ: Исправлены некоторые приоритетные булавки и обновлен список.

Брендан Берд
источник
4
Вы запускали apt-get updateпосле того, как создали файлы конфигурации?
Поток
3
Я получаю (что мне кажется) противоречивое поведение, используя этот метод. «apt-get install -t testing appX» не дает то же самое, что «apt-get install appX / testing» (см. serverfault.com/q/646934/132528 ) - я предполагаю, что этот метод примерно такой же вызывает решение приоритетов, хотя это не интуитивно для меня?
Евгений
7
ВАЖНО: автор выбрал значение предпочтения закрепления для стабильного / безопасности, которое выше значения выпуска по умолчанию ... см. Serverfault.com/a/653552/120130 для получения дополнительной информации
Алекс Райан
7
Этот ответ просто сломал мою систему. После попытки сделать sudo apt-get update, я получил ошибку обновления. Затем перезапустил, который дал мне Xsession error, перезапустил снова, и теперь у меня нет графического интерфейса. /dev/sda1/теперь полон. Отлично.
Лучоначо
3
Я собираюсь рекомендовать людям прислушаться к негативным комментариям к этому сообщению. Я получил немного информации о недавнем обновлении Debian 9, которое было исправлено путем отмены этих изменений. Прислушайтесь к совету в статье Debian по этому вопросу: wiki.debian.org/DontBreakDebian (выделите пункт «Не делайте FrankenDebian»)
Брэндон Арнольд
98

В /etc/apt/apt.conf.dдобавить следующий файл

99defaultrelease:

APT::Default-Release "stable";

in /etc/apt/sources.list.d- добавить URL для тестирования / нестабильных источников

stable.list:

deb     http://ftp.de.debian.org/debian/    stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/    stable main contrib non-free

deb     http://security.debian.org/         stable/updates  main contrib non-free

testing.list:

deb     http://ftp.de.debian.org/debian/    testing main contrib non-free
deb-src http://ftp.de.debian.org/debian/    testing main contrib non-free

deb     http://security.debian.org/         testing/updates  main contrib non-free

бегать

apt-get update

а затем установите то, что вам нужно с

apt-get -t testing install something

Будьте очень осторожны, если вы устанавливаете вещи, которые имеют много зависимостей. Желательно не делать этого на производстве.

Вы также можете попытать счастья в бэкпорте или подобном репозитории.

PQD
источник
1
Ух ты. Это было быстро. Я публиковал, чтобы поделиться информацией, с которой я только что столкнулся! Хороший!
Гарет
Я никогда раньше не использовал метод apt.conf. Кажется, проще, чем метод файла настроек, но вы получаете менее точный контроль. - Coops
Coops
4
Ответ нуждается в обновлении; этот конфиг полностью сломает ситуацию теперь, когда сжатие стало стабильным, а lenny стал прежним.
Эль Йобо
1
Больше не используется, пожалуйста, обновите
Lothar
4
в более новых выпусках Debian нет файла apt.conf, вместо этого отредактируйте /etc/apt/apt.conf.d/70debconf
Hayden Thring
49

apt_preferences

Определите уровень по умолчанию, до которого система должна «безопасно обновиться», в файле / etc / apt / preferences:
man apt_preferences

С apt_preferences вы многое можете сделать, но ради простоты ...

Мне нужно было установить один пакет (autoMysqlBackup), который был доступен только в тестировании. Решением было добавить следующее в / etc / apt / Предпочтения:

Explanation: Uninstall or do not install any Debian-originated
Explanation: package versions other than those in the stable distro
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10

Если в /etc/apt/sources.list добавлено несколько репозиториев, aptitude теперь будет обновляться только до указанного вами релиза, даже если перечислены репозитории более поздних выпусков (в данном случае «стабильный»).

deb http://mirror.aarnet.edu.au/debian/ lenny main
deb-src http://mirror.aarnet.edu.au/debian/ lenny main
deb http://mirror.aarnet.edu.au/debian/ squeeze main
deb-src http://mirror.aarnet.edu.au/debian/ squeeze main

Итак, чтобы установить этот пакет, все, что вам нужно сделать, это:

$ aptitude install -t testing packageName 
Gareth
источник
Это также хороший метод, не такой быстрый, как apt.conf, но позволяющий вам управлять всеми различными источниками относительно.
Coops
2
Это слишком сложно для задачи ... Использование APT :: Default-Release действительно устанавливает приоритет вывода для релиза на 990 (аналогично тому, как вы устанавливаете его на 900), и отрицательный пиннинг для остальных не нужен на самом деле .. Во время dist-upgrades стабильный пакет в любом случае имеет приоритет, и как только вы явно укажете что-то в командной строке, его отрицательный приоритет закрепления будет в основном игнорироваться.
Рафаэль Герцог
Я не знаю, как ответить тебе @Raphael. Это кажется очень элегантным способом ведения дел. Я использовал точный пиннинг много лет назад, но никогда не получал его. Примеры, которые я использовал выше, взяты прямо из справочной страницы apt_preferences.
Гарет
2
Подтвердите, что это отлично работает при сжатии
tomfanning
3
@Lothar: он работает в Debian 6. Тот факт, что файл не существует, не означает, что он не работает. Просто создайте файл и добавьте настройки. Цитата со страницы руководства: «Если нет файла настроек или если в файле нет записи, относящейся к конкретной версии, то приоритет, назначенный этой версии, является приоритетом дистрибутива, которому принадлежит эта версия».
rzetterberg
13

Что бы это ни стоило, общий совет, который я всегда видел, это «Не смешивайте стабильно ни с чем». Большинство учебников по смешанным системам предназначены для смешанного тестирования и нестабильно.

Кажется, что причина в том, что если вы смешиваете стабильное с тестированием, для самых базовых пакетов (таких как libc6) потребуются обновления (чтобы установить программное обеспечение из тестирования), и как только эти базовые пакеты перейдут к тестированию, вся система может дрейфовать таким образом.

Вот две альтернативы:

  1. Используйте Backports .
  2. Установите исходную строку из тестирования и попробуйте собрать более позднюю версию из исходного кода .
Телемах
источник
1
Я согласен. Я только что попытался обновить libdvdread4 из тестирования из-за ошибки в версии в wheezy / stable. Он хочет ввести последнюю версию libc. Поэтому я просто взял исходный пакет для libdvdread4 из стабильного и исправил его с изменением исходного кода в 1 строку и пересобрал его. Это намного лучше, чем вытаскивать всевозможные пакеты из тестирования. Теперь все пакеты все еще являются "стабильными", и у меня есть только одноканальное изменение, которое мне нужно.
2013 года
12

Документация по Debian обширна в этой теме, и я настоятельно советую углубиться в это, так как она действительно раскроет всю прелесть системы Debian.

Посмотрите, как сохранить смешанную систему , она объяснит все, что вам нужно знать.

tomdeb
источник
1
Кажется, это тот же метод, который использовался в ответе @pQd, поэтому он не применяется к debian> = 6.0. Также в заголовке ссылки написано «устаревшая документация». Также в основном ссылка только ответ.
dequis
Хотя @dequis прав в том, что ссылка кажется устаревшей, я просто следовал инструкциям на Debian 8 (тестирование), чтобы установить пакет из нестабильного пакета, и все, кажется, работает просто отлично. Кто-нибудь получил актуальную ссылку на документацию?
Домссон
1
Скорее всего, это то, что вы ищете: debian.org/doc/manuals/debian-reference/…
tomdeb
7

Другой способ, который может помешать установке слишком большого количества зависимостей от Testing или Sid, заключается в следующем: вы указываете apt-get получить исходный пакет из Testing или Sid и создаете пакет для вашей системы с помощью инструментов Debian (не нужно вручную тратить) с источниками).

Цитирование здесь:
https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F

Как мне перенести пакет sid на тестирование или стабильный?

Установите исходный код Debian (и инструменты разработки, особенно debhelper, devscripts и build-essential), а затем соберите пакет.

Шаг за шагом:

add a deb-src line for sid to your sources.list

apt-get update

apt-get build-dep PACKAGE_NAME

apt-get -b source PACKAGE_NAME 

Полученные в результате debs должны находиться в текущем каталоге и могут быть установлены с помощью dpkg -i the.deb.

Gerlos
источник
4

Я делал это в течение длительного периода времени, чтобы быть уверенным в том, что это достаточно безопасно и может быть удобно. При нижеуказанной настройке стабильная версия будет установлена ​​по умолчанию, однако Aptitude также позволит вам выбрать резервную версию или нестабильную версию, если это необходимо:

введите описание изображения здесь

Есть четыре вещи, которые нужно отредактировать, нужно установить релиз пиннинга по умолчанию, добавить источники обратного порта и нестабильно добавленные, понизив приоритет пиннинга пакетов backports / unstable, и настройки отображения aptitude необходимо изменить, чтобы отобразить пиннинг.

  • Создайте «/etc/apt/apt.conf.d/10defaultrelease» и сделайте его содержимое следующим образом:
Apt :: default-Release "стабильный";
  • Отредактируйте ваш /etc/apt/sources.list для добавления нестабильных и обратных источников, чтобы они выглядели примерно так:
# deb cdrom: [Debian GNU / Linux 6.0.0 _Squeeze_ - Официальная мульти-архитектура amd64 / i386 NETINST # 1 20110205-14: 45] / squeeze main

deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze / updates main
deb-src http://security.debian.org/ squeeze / updates main

# squeeze-update, ранее известный как 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# сожмите backports
# http://backports.debian.org/Instructions/
deb http://backports.debian.org/debian-backports squeeze-backports main

# нестабильный
# http://wiki.debian.org/AptPreferences
deb http://ftp.us.debian.org/debian/ unstable main
deb-src http://ftp.us.debian.org/debian/ unstable main

# не бесплатно отл. Sun Java
#deb http://ftp.us.debian.org/debian/ squeeze non free
# deb-src http://ftp.us.debian.org/debian/ squeeze non free
  • Редактировать etc/apt/preferencesфайл закрепления - если файл не существует, создайте его.
# Прикрепление пакетов приоритетов
# См. Http://wiki.debian.org/AptPreferences и http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
# В скорлупе гайки устанавливается самый высокий PIN-код
#
# Пайнинг по умолчанию, как в дополнение к нашим настройкам:
# 990 - для версии, которая не установлена, но ДОЛЖНА принадлежать нашему параметру `APT :: Default-Relase" stable "`.
# 500 - для версий, которые не установлены и не относятся к целевому выпуску
# 100 - для пакетов, которые уже установлены, это также означает, что другие версии того же пакета
№ 1 - для экспериментальных пакетов; пакеты с "NotAutomatic: да"
#
# Наши пиннинги
# 400 - бэкпорты, которые можно безопасно устанавливать без необходимости обновления других пакетов
# 50 - нестабильные пакеты, принудительная установка на экране сведений, может привести к конфликтам

Пакет: *
Pin: релиз n = squeeze-backports
Приоритет булавки: 400

Пакет: *
Пин: выпуск а = нестабильный
  • Создайте /etc/apt/apt.conf.d/100guiconf и настройте Aptitude, чтобы он отображал информацию о закреплении.
Aptitude :: UI :: Package-Display-Format "% c% a% M% p% Z% v% V% i";
Даниэль Соколовский
источник
1
Просто обновление, в дополнение к вышесказанному, я остановился на запуске всех своих системных пакетов из репозиториев разработки «test». Поэтому в source.listнем должно быть указано кодовое имя jessieвместо squeeze. Политика Debian testingблизка к стабильной, и пакеты были почти такими же новыми, как и из unstableрепозитория. У меня заканчивается свободное место, поэтому, пожалуйста, посмотрите на: wiki.debian.org/DebianReleases , wiki.debian.org/StableUpdates и wiki.debian.org/StableProposedUpdates ; последние два являются дополнительными источниками репозитория.
Даниэль Соколовский
2

Если ваш выбор пакетов более сложен или установка будет повторяться на нескольких машинах, вы можете рассмотреть возможность создания частного репозитория, который отражает подмножество официальных репозиториев. Это требует небольшой работы по настройке репозитория, но вознаграждение легко поддерживать с минимальным количеством настроек на каждом клиенте и повторяемыми результатами при выполнении десятков установок. Я считаю это полезным, даже когда устанавливаются только один или два пакета, и использую этот метод для автоматизации и поддержки облачных установок. Один сервер на дешевом VPS может обрабатывать десятки частных репозиториев.

Чтобы настроить свой сервер частного репозитория:

# Install aptly.
apt-get install aptly

# Create local mirror (choose a source mirror near you).
aptly mirror create -filter="mirror-contains-no-packages" stretch-roundcube http://httpredir.debian.org/debian stretch main

# Configure filters for local mirror.
aptly mirror edit -filter="Name (% roundcube*)" stretch-roundcube

# Update local mirror.
aptly mirror update stretch-roundcube

# Drop previously published repositories and mirrors, if running these commands in a script.
aptly publish drop stretch

# Drop snapshot, if running these commands in a script.
aptly snapshot drop stretch-roundcube

# Create new snapshot.
aptly snapshot create stretch-roundcube from mirror stretch-roundcube

# Publish snapshot.
aptly publish snapshot -architectures=i386,amd64 -distribution=stretch -component=roundcube -label="Your Name" -origin="Your Name" stretch-roundcube

Затем настройте выбранный вами веб-сервер для обслуживания статических файлов репозитория. Возможно защитить хранилище сертификатом безопасности и базовой аутентификацией.

Чтобы автоматически поддерживать ваш личный репозиторий и получать обновления из апстрима, поместите вышеперечисленное в скрипт и запустите из задания cron.

Чтобы настроить клиентский компьютер, на своем клиентском компьютере:

# Configure private repository without authentication.
echo 'deb http://private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list

# Configure private repository with authentication.
echo 'deb https://hostname:password@private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list
apt-get install apt-transport-https

# Update.
apt-get update

# Install package.
apt-get install roundcube

Чтобы поддерживать клиентский компьютер и получать все обновления частного хранилища на своем клиентском компьютере:

# Update.
apt-get update

# Upgrade.
apt-get upgrade
Дэниел Кауфман
источник
1

Другой вариант - загрузить исходный пакет из тестирования. APT может автоматически собрать исходный пакет после его загрузки. Таким образом, ваши стабильные пакеты не будут затронуты тестированием обновлений. Единственный компромисс в том, что это займет больше времени, чем просто загрузка и установка бинарного пакета.

Чтобы настроить APT для загрузки исходных пакетов из тестирования, просто добавьте:

deb-src http://<your debian mirror here> testing main

Если вы просто хотите следовать текущему тестированию, а не будущему, замените «тестирование» текущим кодовым именем (на момент написания статьи это «бастер»)

temy
источник